Vimでバイナリ編集が出来るプラグインvinarise
Vimでバイナリ編集をする際にはxxdコマンドを使ってバイナリ表示をさせることになると思いますが、それは単体ではとても使いにくいもので、決して常用出来るものではないと思います。
しかし、現在のVimには直接バイナリが編集出来るプラグイン、vinariseがあります。
vinariseは現在最低限のバイナリ編集機能しかありませんが、xxdコマンドを使うよりも非常に使い勝手が良いです。
今回最先端のVim上で使用出来るバイナリエディタとしてvinariseを紹介したいと思います。
使用時の最低要件
vinariseを使用するには、vinariseのプラグイン自体は当然必要ですが、Pythonインタフェースが必要になります。
Pythonインタフェースについては以下を参考にしてください。
Hack #132: Pythonインタフェースを使う(1)
あとはvinariseをgithubなりからダウンロードして、配置すれば使用準備はOKです。
基本操作方法
基本的にVimの操作方法がそのまま使用出来ます。
バイナリ値をいじりたい場合は、指定アドレスの値上で"r"を入力します。
現在の値がVimのコマンドライン上に表示されるので、変更したい値を入力するとバイナリ値を編集出来ます。
その他のキーについては以下の表を参考に。
キーマップ | 機能 |
---|---|
V | Vimでバイナリファイルを開き直す |
q | 開いているバイナリファイルを隠す |
Q | 開いているバイナリファイルを閉じる |
l | 次の列へ移動 |
h | 次の列へ移動 |
j | 次の行へ移動 |
k | 前の行へ移動 |
gh | 行頭アドレスへ移動 |
0 | 行頭アドレスへ移動 |
^ | 行頭アドレスへ移動 |
gl | 行末アドレスへ移動 |
$ | 行末アドレスへ移動 |
C-f | 一画面先へ移動 |
C-b | 一画面前へ移動 |
C-d | 半画面先へ移動 |
C-u | 半画面前へ移動 |
C-g | 現在位置アドレスの値を表示 |
r | 現在位置アドレスの値を変更 |
G | 入力したアドレス位置へ移動 |
go | 現在位置アドレスからのオフセットアドレスへ移動 |
gg | 先頭アドレスへ移動 |
gG | 末尾アドレスへ移動 |
/ | バイナリ値を検索 |
? | バイナリ値を逆向き検索 |
g/ | 文字列として検索 |
g? | 文字列として逆向き検索 |
e/ | Python正規表現検索 |
n | 最後の検索パターンを実行 |
N | 最後の検索パターンを逆向き実行 |
またvimfilerを使用している場合は、vimfilerで選択しているファイルを"B"と押すことでvinariseを使ってバイナリファイルを開く事が出来ます。
objdump表示機能
objdumpコマンドが使用出来る場合はオブジェクトファイル情報を表示することが出来ます。
:VinariseDump object.obj
vinariseが非常にみやすい形式に変換してくれるので、逆アセンブルやファイル情報解析にとても役立ちます。
まさしくバイナリアン向けな特徴的機能と言えるでしょう。
バイナリアンのためのバイナリエディタvinarise
vinariseはまだまだ発展途上でこれからといった感じのプラグインですが、基本的なバイナリ解析や、編集機能はあるので十分実用出来ます。
作者のShougoさんも現在精力的に開発中ですので、どんどん意見をフィードバックさせていきましょう!
2012/02/22追記
vinariseに新しいキーマップが追加されたので追記
Boost.勉強会 #8 大阪で発表してきた
Boost.勉強会 #8 大阪へいってきました。
そして闇の軍団に囲まれながら喋ってきました。
内容はメモリを管理しつつ様々な恩恵を受けられるカスタムメモリマネージャの話と非常に高速に動作するメモリアロケータの話です。
ゲームでは割りと一般的な話ですが、あまり他の業界のプログラマには知られていないのかなと思い、今回の発表内容にしました。
更に今回の発表中にVimを使ったライブコーディング的な実演も挟みました。
その時に使ったコードもGitHubで公開しています。
実はまだこのメモリマネージャとメモリプールは問題が多いので実用は出来ないです。
具体的に言うと、
- 例外を使っていない
- スレッドセーフじゃない
- MakeMemoryPoolはコンストラクタに引数が渡せない
- メモリプールを使っているとどこで確保したかの情報が記録出来ない
等々…
ちなみに発表した内容の機能はほとんど実装されていません。
もう少し機能拡張はしたいなと思っています。
とりあえずエラーチェック辺りは。
あとは単にmallocを使うのではなく、その内部も高速なものにしてみたいですね。
アジャイルな開発とかいうもの
新年初エントリ。
今年に入ってから会社でもアジャイルな開発を実践し始めています。
そのためにアジャイルサムライを読んだり。
- 作者: Jonathan Rasmusson,西村直人,角谷信太郎,近藤修平,角掛拓未
- 出版社/メーカー: オーム社
- 発売日: 2011/07/16
- メディア: 単行本(ソフトカバー)
- 購入: 42人 クリック: 1,991回
- この商品を含むブログ (257件) を見る
アジャイルは魔法じゃなくて普通のこと
アジャイルとか言うと魔法の呪文のような開発をしてるのかと思われますが、全然そんなこともなくむしろ普通だろって思うような内容ばっかりです。
アジャイルにおいて最も大切な要素は柔軟な体制作りです。
どのくらい重要かと言うとまずは誰もが対等。
上下関係もなく、言いたいことを全部言う。
まずは空気の通りを良くすることがアジャイルにおいて最も重要な要素です。
たとえそれがクライアント(顧客)であろうとも、です。
アジャイルはとにかく変化を求めるスタイルなので、よりよくソフトウェアを改善していくベストプラクティスです。
しかし、ゲーム業界ではパブリッシャがクライアントとなり、デベロッパがクライアントの要望に沿って開発するというスタイルが今でもずっと続いています。
もちろんそれが悪いことではないのですが、私はクライアントの言葉が絶対であり、そこに意見は許されないという状況が過去に何度もありました。
本当に理解のあるクライアントは「ゲームを良くするためだったらなんでも意見を聞きますのでどんどん突っ込んでください!」と言ってくれたりします。
そういう開発体制はアジャイルにおいても最も有効な運用が出来るでしょう。
そして日々の問題を全体で意識することにより、素早い軌道修正や、イテレーションスピードの上昇に繋るのです。
一番大事なのは顧客とか開発とかそういうのが関係なくみんなで作る!という意識を持つことなのです。
質を上げるためになんでもやる
アジャイルは素早い開発体制をとるため、質が下がりがちと思われたりもしますが、それは間違いで徹底的にクオリティ追求をするためにはなんでもやります。
具体的にプログラミングレベルで言えばコードレビュー、ペアプログラミング、ユニットテスト、リファクタリングと様々なものを導入していきます。
もちろん全てが有効なわけではありません。
が、これらは確実に質を上げるため便利なツールであり、良いものを作る体制作りにも必要なものなのです。
「ゲームプログラムにユニットテストとかありえねー」とか言う人もいると思いますが、私はそう思いません。
バグの酷いゲームというのはとにかくテストすら全く行われず、自分の想定外のことも確認出来ません。
そういったものをユニットテストでどんどん排除することも可能なのです。
それで全てが解決するわけではありませんが、後々に必ずそれは響いてくるところなのです。
みんなが見えるように
常にみんなが見えているような状況にすることはとても大事です。
そして何をみんながやっているのかをオープンにすることにより、御互いに問題を指摘することが出来る。
問題点の共有意識を持つためにも日々の作業をどんどんオープンにしましょう。
こういうときにSkypeなどのチャットツールやホワイトボードは非常に有効です。
ただし、ノイズとなるような情報はいりません。
要は明らかに見る必要がないものを全員が確認する必要はありませんし、強制するべきではありません。
大事なのは自然と見えるようにしておくことです。
見る手間もタダではないのです。
無駄な時間はなるべくとられないように。
常に改善する
なにか問題があれば常に改善する意識を持ちましょう。
やり方はいくらでも変えられます。
例えばPCの性能が悪いなんていう不満があった時は真っ先に改善すべきです。
それにより今迄の2倍ビルドが速くなったというのなら安い買い物をしたと言えるでしょう。
みんなが納得すればどんどん開発効率も上がり、結果的に素晴しいものを作るきっかけとなります。
アジャイルにも正解はないのです。
ゲームプログラマのためのC++を読んだ
- 作者: マイケル・ディックハイザー,三宅陽一郎,田中幸,ホジソンますみ,松浦悦子
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2011/12/21
- メディア: 単行本
- 購入: 10人 クリック: 232回
- この商品を含むブログ (12件) を見る
一部の人にとっては待望のその名も「ゲームプログラマのためのC++」です。
どういう本だったか紹介していきたいと思います。
入門書とEffective C++の間くらいの立ち位置の本
本書は所謂C++の入門書ではないことは間違いありません。
C++の構文を教えてくれるみたいなところは一切なく、様々なノウハウやテクニックを教えてくれる本です。
継承の使い方、const、参照、キャスト、テンプレート、例外、RTTI、デザインパターン、STLなど扱う分野はとても広いです。
そのどれもゲームを作る前提の話で書かれているため、例となっているコードもゲームの話がほとんど。
しかし、ゲームにおいて例外やRTTIの話はほとんど見かけないためそういう意味では貴重な資料だと思います。
Effective C++ほど濃くはないものの、そこそこに深い話も多いです。
メモリ周りは特に詳しい
ゲーム開発において一番気になるところはやはりメモリ周りの情報です。
本書はそこに関してかなりの情報量を割いており、ことあるごとにメモリの話が出てくるので安心?出来る内容です。
特にメモリ割り当てとカスタムメモリマネージャ、メモリプールの話はゲームにおいてほぼ必須な内容なので知らない人は知る必要があります。
もちろん知らなくてもゲームを作ることは出来ますが、これを知っているだけで限界をどこまで引き伸ばせるか差が出るでしょう。
パフォーマンス戦略
多くの章ではパフォーマンス戦略やコスト分析の話が載っており、何が重くて何が軽いかの情報があります。
当然便利なものは多くのコストがかかりますが、それを踏まえてもC++のこの機能は使用すべきだろうという指針を与えてくれます。
何よりもまずは計測重視で、重いか軽いかは実際に使用してみて計測してから検討すべきだろうと教えてくれます。
ここらへんは当たり前の話ですが、私が知る限りでは「とりあえず遅いみたいだから使わない」という人は沢山いました。
例外やRTTIは特にその最たるものですが、まずは使わないという選択肢ではなくて使ってみてから考えよう。
何気に詳しいSTL
ゲーム開発においてよく避けられるSTLことStandard Template Libraryですが、この本では積極的に活用しようという事でかなりページを割いて解説してくれます。
もちろんメリットデメリットをしっかりと理解した上で使用するということになっていますが、デメリットよりもメリットが勝るくらいの魅力があるという事を有名なゲーム開発者が教えてくれるというのは素晴しい事です。
この本ではSTLの初級解説から応用方法までしっかりと解説してくれてSTLを知らない開発者を助けてくれる内容になっています。
STLを知らない開発者はこのためにこの本を読む価値があると言ってもいいくらい分かりやすい解説だと思います。
本当に少しだけですが、Boost Libraryの紹介もあったりとこの手の本にしては珍しい内容だと思いました。
最後に
この本を読んでも残念ながらゲームを作れるようにはなりません。
なぜならゲームの作り方は一切解説してくれないからです。
C++を使用していて当然の事を出来るようにしてくれる本です。
そして出来あがるものの品質を何段階か引き上げてくれる事は間違いないでしょう。
大型プロジェクトでの対処法、クラッシュしないゲームの作り方、とても大切な事です。
ですが、それが出来ていない開発者はとても沢山います。
そういった人達に向けてぜひ本書は読んでもらいたい内容だと思います。
PS Vitaを買ってみた
久しぶりに技術的な内容以外の話題。
12/17に発売されたばかりのPS Vitaですが、私も実は始めてゲーム機を発売日に買いました。
最初に持ったイメージは意外と大きいという印象。
実際にPSPと比べると結構大きさの違いがあります。
以下はPSP-3000とPS Vita 3G/Wi-Fiモデルを比べたもの。
PSP-1000と比べると軽い、PSP-3000と比べるとちょっと重い。
スマフォのようにはいかないものの、ゲームをプレイする時にはちょうどいい大きさ。
有機ELの映像は言うまでもなく鮮明で、視野角の影響とかあるの?くらいクッキリとみえます。
Vitaを起動するとまずはメインメニューみたいなものが出てくるわけですが、メニューは全てタッチパネル操作。
方向キー操作が一切効かないのはマイナスだと思います。
ここらへんはたぶん要望が出ると思うのでアップデートで対応されるでしょう。
操作感自体は非常に良好で、タッチパネルがとても指で滑らせやすくなっていて気持ちいい。
個人的にiPhone 4Sのタッチパネルよりも操作しやすいと感じました。
試しにニコニコアプリ、Twitterアプリなど無料で使用出来るものをいれてみた。
ニコニコアプリはどうやらプレミアムアカウント相当のものを使っていても画質はエコノミークラス。
これも現状ではそうなっているだけできっとアップデートで対処されるでしょう。
Twitterアプリはこれがなかなか使いやすい。
普段から非常に濃い使い方をするような人でなければ十分実用になるクライアントでしょう。
ただし、Vitaの文字入力は強制的にローマ字入力しかないので、フリックみたいな感じで入力出来ません。
これもフリック入力みたいなものをあとでサポートしてくれるんでしょうか…
面白いのはゲームをプレイ中、PSボタン+STARTボタンでスクリーンショットを撮影し、そのままTwitterアプリで撮影した画像をTweetする事が出来ます。
いいプレイや面白いシーンがでてきたらスクリーンショット撮影、そのままTweetしてみんなと共有という事が簡単に出来ます。
他にも様々なアプリケーションがありますが、それだけでも結構遊べます。
無料で遊べる「みんなといっしょ」はなかなか楽しめるアプリ。
これだけでフレンドを増やしながら淡々と遊んで庭を広げるだけでも結構楽しいです。
と言った感じで実はまだゲームは何も買っておらずですが、それでもかなり楽しんでいます。
一応買いたいゲームはありますが、すぐに買うかは財布と相談しながらで。
とりあえず簡単なファーストインプレッション。