f

アーカイブ

2016-04-29

Configuration of editing binary file for Vim

バイナリーファイルを処理する必要が出てきて,ファイルを16進数表記で表示したくなったので,Vimでどうすればいいか調べた。

以下の記事やVimのヘルプがとても参考になった。

hex表示するための基本的な手順は以下となる。

  1. バイナリモードでファイルを開く(-bオプション。ex: vim -b a.dat)。
  2. %!xxdコマンドで現在開いているバッファをバイナリ表示。
  3. 任意の箇所を変更。
  4. %!xxd -rコマンドでテキストに戻す。

xxdというテキストをhex表記に変換したり,逆にhex表記をテキストに変換する(xxd -r)コマンドを利用している。xxdコマンドはVimに標準で付属しているので,LinuxだけでなくWindows環境でも問題なく使える。

ただ,バイナリ表記したいときと保存するときに,いちいちコマンドを打たないといけないのは面倒だし,変換を忘れる危険性がある。そこで,バイナリーモードで開いたら自動的にhex表記するように以下のとおりに設定する。

"" Binary
"バイナリ編集(xxd)モード(vim -b での起動、または *.bin ファイルを開くと発動)
augroup BinaryXXD
  autocmd!
  autocmd BufReadPre   *.bin let &binary=1
  autocmd BufReadPost  *     if  &binary   | silent   %!xxd -g 1
  autocmd BufReadPost  *     set ft=xxd    | endif
  autocmd BufWritePre  *     if  &binary   | execute '%!xxd -r' | endif
  autocmd BufWritePost *     if  &binary   | silent   %!xxd -g 1
  autocmd BufWritePost *     set nomod     | endif
augroup END

ただし,この設定のままだとうまくいかないときがある。それは,ファイルが変更不可(set nomodifiable)のときだ。

例えば,:help xxdなどでhelpファイルを開こうとすると,4行目のif &binary | silentの行で以下のエラーが出た。

Error detected while proessIng BufRead auto commands for "*":
E21: Cannot make changes, 'modifiable' is off

実際に上記の設定とset nocompatibleだけを記入したvimrcファイルを用意して,以下のコマンドで設定ファイルを指定してvimを起動してヘルプを閲覧して確認した。

vim -u ~/vimrc
:help xxd

Windows10のMSYS2のVim 7.4.872とUbuntu 14.04のVim 7.4.52ではこのエラーは出なかったが,Fedora19のVim 7.4.417とCentOS 7のVim 7.4.160ではエラーが出た。

おそらくVimのコンパイル時に有効になっている機能の違いによるものと想定する。そこで,ファイルが変更可能であるかという条件も設定で考慮する。

"" Binary
"バイナリ編集(xxd)モード(vim -b での起動、または *.bin ファイルを開くと発動)
augroup BinaryXXD
  autocmd!
  autocmd BufReadPre   *.bin let &binary=1
  autocmd BufReadPost  *     if  &binary && &modifiable | silent %!xxd -g 1
  autocmd BufReadPost  *     set filetype=xxd | endif
  autocmd BufWritePre  *     if  &binary      | execute '%!xxd -r' | endif
  autocmd BufWritePost *     if  &binary      | silent   %!xxd -g 1
  autocmd BufWritePost *     set nomod        | endif
augroup END

上記の6行目のsilent %!xxd -g 1において,if &binary && &modifiableのように,modifiableがオンのときにだけ,hex表記するようにした。

これで,Vimで快適にバイナリーファイルを編集することができるだろう。

Windows版Vimインストール時の付属コマンド

OSによって異なるが,テキストエディターのVimはインストール時にいくつかのコマンドが付属している。気になったので,Windowsで付属しているコマンドを調べた。

Vimのインストーラーの入手方法はいくつかあるが,ここではどの環境でも付属していることを考えて,公式が配布しているVimを対象とした。

公式が配布しているWindows版Vimは以下のサイトからダウンロードできる。

download : vim online

これはインストーラーになっており,特に変更しなければ以下の場所にインストールされる。

C:\Program Files (x86)\vim

したがって,上記ディレクトリ以下で拡張子.exeのファイルを検索すれば,vimに付属のコマンドを見つけることができる。

なお,Vimのヘルプに付属コマンドについて書かれていないか調べてみたが,まとまった記載は見当たらなかった。

Vimのインストールディレクトリを調べたところ,Windows版のvim 7.4には以下の実行ファイルが付属していた。

  • uninstall.exe:Vimのアンインストーラー。
  • vim.exe:コマンドプロンプトなどのターミナルでの実行ファイル。
  • gvim.exe:GUIでの実行ファイル。
  • vimrun.exe:WindowsでVimから外部コマンドを実行するときに内部で使用している。
  • xxd.exe:バイナリファイルの編集で使用。
  • diff.exe:GNU diffutilsのdiff。差分の処理で使用。

vim.exegvim.exeはvimの本体であり,またアンインストーラーuninstall.exeが存在することは想定内だった。vimrun.exeというVimから外部コマンドを実行するコマンドがあったのは初めて知った。しかし,これもvim本体機能と考えて良いだろう。

実質的に,Windowsで付属している外部コマンドと呼べるのはxxd.exediff.exeの2個だろう。xxd.exeはバイナリーファイルをVimで扱うために使うコマンドだ。diff.exeはVimで差分を処理するのに使うのだろう。

なお,Windows向けへのビルドについては以下で説明されており,Windowsでインストールされるコマンドについての情報もここに記載されている。

vim/nsis at master · vim/vim

Nullsoft Installation System (NSIS)というWindowsインストーラーを作成する自由ソフトを使っているようだ。

Vimは多機能なテキストエディターなのでもっと外部コマンドも一緒にインストールされるのかと思ったら,2個しかなくてちょっと予想外だった。おそらく,dllなどライブラリとして含めていて,Vim内部からより密接に使えるようになっているのだと思う。

あまりこのような情報はなかったので,ひとまずWindows版のVimをインストールするとxxd.exediff.exeが使えるようになることがわかったので参考になった。

2016-04-23

Cloudsferを使いCopyからMEGAにデータを移行

2014-04頃からオンラインストレージのCopyを使っていた。2016-05-01にサービス停止になったので,MEGAに移行することにした。データの移行手順などをまとめる。

Copyのサービス停止

オンラインストレージのCopyは以下2点の理由から重宝していた。

  • WindowsやMacだけでなく,Linuxにも対応していて公式アプリも配布していた
  • 利用可能な容量が15 GBと大容量。

しかし,2016-02-02に2016-05-01にサービスを停止するとアナウンスがされた。

Barracuda Copy - Copy End-of-Life

Linuxにも公式対応した大容量のオンラインストレージは少ないので,サービス停止はとても残念だった。

Copyのデータ移行手順

Copyの代わりに使うオンラインストレージを検討したところ,MEGAというオンラインストレージがCopyと同じ利点を持っていたのでこれにデータを移行することにした。

Copyではサービス停止にあたって,データの以下のページに移行手順を用意してくれているので,これを利用したい。

Barracuda Copy - Moving Your Data from Copy

データサイズが増えてくるとデータのアップロードの時間もバカにならない。可能なら転送サービスを使えたほうがいいだろう。上記手順で使われている移行サービスのMoverは以下に対応可能なストレージサービスの一覧がある。


Connectors • Mover

残念なことに,MoverはMEGAに未対応のようだ。そこで,Cloudsferを使うことにした。Cloudferを使って,CopyからMEGAに引っ越しする方法は以下に記載されている。

Migrate from Copy to Mega – Cloudsfer Support Portal

なお,Clordsferは無料プランだと10GBまでしかデータを転送できないので注意する。Moverは転送容量が無制限なので,できるだけMoverを使ったほうがいい。10GBを越えるデータをMEGAに転送したければ,素直にローカルPCで移動させるしかないだろう。

MoverやCloudsferはデータ転送サービスと呼ばれる模様。主に,オンラインストレージ同士の定期的なバックアップなどが主な用途のようだ。

The Top Five Services for Cloud Based Data Transfer

以下ではCloudsferでの操作手順を記載する。

  1. アカウントを作成してログインする。
  2. [Start a New micration]。

  3. [New Migration Plan wizard]の[1. From]画面でCopyを選択>移動させるディレクトリの選択画面で一番上位の[Cop]を選択>[Submit]。

  4. [2. To]画面で[Mega]を選択>一番上位の[Mega]を選択>[Submit]。

  5. タイトルを記入する。なんでもいい。ここでは,[Title:]を[New Migration Plan]から[Transfer Copy to Mega]へ変更。[Start migration now]を押下。

  6. [Migration Dashboard]画面に移動するので,さっき作ったPlanにチェックを入れて[Start]を押下。5分くらいしたら転送が始まった。

  7. 進捗を知りたければ,[Activity]からチェックできる。

この方法でデータを転送できるだろう。ただ,自分のCopyの容量は約17 GBであり,Cloudsferの転送を初めてから容量が足りないことに気づいてしまった。結局ローカルPCでやることになり,二度手間となり失敗だった。今後は気をつけたい。

2016-04-16

2016-04-14に発売されたロジクールG900試遊の感想

ロジクールからG900という新しいゲーミングマウスが発売された。試遊してきたので感想を書いておく。

現状

僕は今G300とG300sというマウスを2015年2月頃から自宅と職場で愛用している。気に入っている理由は以下2点だ。

  • 動作の軽快さ。
  • シンメトリックなボタン配置。

マウスの重さが軽くて、ボタン配置が左右対称で使いやすいなと思って愛用している。この他には、テンキーマウスやG700s、Infernoといったマウスも試したが、重さが重かったりG300のほうが使いやすくて今に至る。

ただ、G300にも満足しきっているわけではない。できれば以下の機能が欲しかった。

  • チルトボタン。
  • ボタンの追加。

チルトボタンというのは、マウスホイールを左右に倒したときのボタンのことである。G300だとボタンの数が9個であり、物足りなくなってきた。

G900はG300と同じ以下の2点の機能を満たしている。

  • シンメトリック
  • 軽量

さらに、前述の2点の要望を満たしていたのでとても興味があった。

G900の試遊の感想

まず、G900の基本情報を以下の表に示しておく。

G900の製品情報
項目
公式HP Logicool G900 Chaos Spectrum Wired or Wireless Gaming Mouse
製品名 Logicool® G900 Chaos Spectrum Professional Grade Wired/Wireless Gaming Mouse
発売日 2016-04-14
価格 2.1130万円
プログラム可能なボタン数 11
チルト
スクロールホイール
有線
無線
マウス本体サイズ(幅x奥行x高さ) 67×130×40 mm
マウス本体重量 107 g
電池寿命 24-32時間

有線と無線のどちらでも使え、チルトボタンやスクロールホイールなど人気のG700sと同等の機能を持っている。G900はそこから、マウス感度や重量、電池のもちを改良しているようだ。G700sと比べた時の欠点はボタンの数が2個減ったことくらいだろう。

2016-04-16に秋葉原のヨドバシカメラに出向いて試遊してきた。

G900のボタンは以下の内訳になっている。

  • 左右のサイドバー:4個
  • 通常のマウスボタン(右、左、中):3個
  • チルトボタン:2個
  • 真ん中のボタン:2個

マウスホイールのすぐ下のボタンはスクロールホイールのためのボタンなので、このボタンにキーを割り当てることはできない。

自宅近くの錦糸町のヨドバシカメラにもいってみたが、置いていなかった。発売して間がなく、値段も高いため大きな家電量販店でないと試遊できないようだ。

第一印象はとてもよかった。自分が求めていた機能は全て満たしていた。40分くらい試遊台で他のマウスと比較したりしていた。その結果、G900の購入は見送ることにした。理由は以下2点だ。

  • 値段が高すぎる。
  • シンメトリックは重要ではなかった。

単純にG900は値段が約2.2万と他のゲーミングマウスの約2倍の値段であり、金額が頭ひとつ抜けていた。自宅と職場で使うので2個購入するつもりなので、これは大きい。また備えている機能としてはG700sなどと同じであり、重量や電池の持ちなどの改良にお金がかかっていることになる。コストパフォーマンスがよくなかった。

また、当初シンメトリックなボタン配置・デザインが使いやすくてよいなと思っていた。G300はマウスの表面にあるため、中指と人差し指で左右対称に押し分けることができた。しかし、G900は違った。G900ではボタンはマウスの側面に配置されている。親指のある側は押しやすいが反対側は基本的には薬指の腹と先で押し分けることになり、若干押しにくいと思った。

人間の手は人差し指、中指、薬指まではシンメトリックに近いが、親指と小指は左右対称とは決定的に異なっている。そのため、ボタンの配置がシンメトリックであることにこだわってもあまり意味がないと感じた。もちろん左利きの人や両手で使う人にはよいのだが、普段は利き手である右手でほとんど操作するためシンメトリックであることはあまり重要ではなかったと思い知らされた。

代わりに、一緒に並べてあったG700sとG600が気になった。1万円以内くらいの金額でボタンが多い。以前触った時は重量が気になったが、今回の試遊では重量が気にならなかった。それよりもボタンが多いことが利点だと感じた。

関連ツイート

G900は期待通り機能に問題はなかった。ただ、値段が高すぎることが問題だった。このマウスがG700sなどと同じくらいの1万円前後の金額なら購入していたと思う。今後の新しいマウスの発売を期待したい。