2014年11月24日

転送サービスを使って Gopher 君を買った話

個人輸入・転送サービスのスピアネットというサービスを利用して、Canada/US の Google Merchandise Store から Gopher 君のピンクとパープルを買った話。

Clip to Evernote

2014年8月14日

Go言語で画像縮小できるライブラリのベンチマーク

Go言語で画像縮小できるライブラリのベンチマークなどを取ろうと思って少し書いてみた。
https://github.com/oov/resize-test

この辺りのライブラリは画像の縮小ができるので、どれも func(src image.Image, w int, h int) (image.Image, error) で呼べるよう整理して、それを元にしたベンチマークのジェネレータとかサンプル画像出力プログラムを作った。

テスト環境は Intel Atom D510 で、物理コア数2でハイパースレッディング対応。遅い。
使用したGo言語環境は go1.3.1 の linux/amd64 版。
Clip to Evernote

2014年7月23日

Cocos2d-JS 触り始めた5

前回の作業中ホーミングミッソーを試しにたくさん飛ばしてみると、一時的にフレームレートが低下し、それに伴いゲームの進行速度が遅くなることがあった。特にフレームスキップなどの実装をしていないしこれは想定通りの動作ではあるものの、update メソッドの第一引数に渡されてくる値は前回のフレームからの経過時間(秒)なので、これを適切に扱うようにすればフレーム落ちも加味して計算できる。

Clip to Evernote

2014年7月19日

Cocos2d-JS 触り始めた4

だいぶやりたいことが見つからない感じになってきたので、cc.ParticleSystem を使って適当に何かを散らしてみようかと思った(やったほうがいいことはもちろんまだたくさんあるが面倒くさい)。

Clip to Evernote

2014年7月18日

Cocos2d-JS 触り始めた3

前回までの作業で操作することでブロックを避けられるようになり、少しゲームっぽくなってきた。
もう少し弄ってみる。

Clip to Evernote

2014年7月17日

Cocos2d-JS 触り始めた2

前回の記事ではデモプロジェクトを少し触って大体の雰囲気を掴んだ。

今回はもう少し使い込んでみるために、以前作った簡単なゲームを Cocos2d-JS 上で動くよう移植してみることにする。

Clip to Evernote

2014年7月15日

Cocos2d-JS 触り始めた

以前 NME でゲームを作ってみたりしたことなどもあったが、巷で話題なのは Unity とか Cocos2dx 辺りで、この辺は有名だしもっと色々便利なんだろうなあと思っていた。最近会社を辞めて少し時間ができたので、そんなに情報が多くなくて面白そうな Cocos2d-JS を触ってみようかと思ったので、合わせて日誌的にブログを書いてみることにする。

Clip to Evernote

2014年5月1日

Amazon Route 53 用 Dynamic DNS 更新ツールを Go で作った話

なんか記事にするほどのことでもないんだけど。じゃあ記事のするほどのことって何だよ、俺にあるのかよ、って思ったので、深く考えずに書く。

oov.ch で使うネームサーバーとして今までは VALUE-DOMAIN のものを利用してて、特に不満もなかったものの Route 53 の使い方を把握しておいた方が今後のためにもなると思ったので、試しに移行してみることにした。

レコード情報はそんなに量もないし手作業でチマチマ入力して、dig コマンドで適宜応答も確認しながらやったのでこれといったトラブルもなく比較的スムースに移行は完了した。っぽい。

ただ、遊び用の自宅サーバーには Dynamic DNS 的な奴が必要で、これは編集画面でチマチマ触ってるだけじゃ無理そうなのでちょっと調べた。すると Amazon Route 53 Authentication Tool for Curl と AWS Route 53 Dynamic DNS Updater Script を使うと比較的簡単にできるという情報がゴロゴロ転がってきた。

それらをそのまま使えば多分解決するものの、そんなに難しいことをするわけじゃないだろうし自作してみてもいいかな、と思ってGo言語で作ってみることにした。できた。

https://github.com/oov/r53ddns

AWS へのアクセスには github.com/crowdmob/goamz/aws を使った。
Route 53 周りも一応実装はあったものの、ChangeResourceRecordSet でバッチ処理が出来なかったりとか若干イケてない気配がしたので、この辺に関しては自前で用意した。

自分が触るサーバは間違いなく Go が使える状態になっているので go get すればすぐ使えて便利だし、あと、あれだ、あの、なんでもない。

--ip オプションのデフォルト値は http://checkip.dyndns.org/ になってるけど、はるか昔に自分で自分のために用意した GAE 上で動く同じようなものがあるので、自分の環境ではこっちを使うようにした。
Clip to Evernote

2014年4月22日

アルファチャンネル付き PNG の減色

最近公開した楽曲用ページを作る際に、簡単なパララックス風の効果を作るためにアルファチャンネル情報を持った画像ファイルを複数扱う必要があるケースに出くわした。

以前ゲームを作った時は画像のデコード処理自体を外部デコーダに頼らなくてもできる状況だったので画像ファイルを WebP 形式にして、PNG 形式で 3.60MB ぐらいあった画像が 207KB まで容量削減できた(※この時使った WebP 形式はロスレスではない)のだが、ブラウザで WebP 形式を使うのは時期尚早……というかまともに使える日は来るんだろうか。
JavaScript によるデコーダがあることも知ってはいるもののわりとどうでもいい理由でボイコットされても困るし、それは冗談としても、とにかく WebP 形式は今回の選択肢にはなかった。

そうなると PNG の最適化の路線が残るわけで、まずは有名どころの PNGGauntlet を試してみた。圧縮アルゴリズムの最適化だけではそう大きくは縮まないだろうとは思ってはいたものの、ほぼ容量が変わらなかったので、別のアプローチの併用も必要そうだと思った。

とはいえここまで来ると減色ぐらいしか選択肢がない気がしてきた。
昔、今よりもインターネットが好きだった頃は OPTPiX webDesigner v2.x を買って使ったりもしていたこともあったものの、今となっては開発終了してしまっていて v2.x 系では少なくともアルファチャンネル付き PNG は扱えない。WebFree 版は制限厳しそうで面倒そうだし、Padie 系列のソフト類も現状は消息がよくわからんことになってるし、COLGA も試してみたものの容易く視認できるぐらいに劣化してしまった。

などと困っていたところで PNG Color Reducer Pro を見つけた。
試しに減色してみたら見た目がほとんど変化しないまま減色後の画像が生成された。
減色後のファイルサイズが表示されなかったのでどのぐらい縮んだのかわからず若干不安ではあったものの、楓 software の人は以前からアルファチャンネル対応動画形式の実装日記なんかも書いてて半透明を含む圧縮という分野での遭遇は初めてじゃないし、少なくとも出力結果から視認できるレベルの劣化は見当たらなかったのですぐ購入して実際にファイルを書き出してみた。

左が元のファイル、右が減色後のファイル

全体で 10MB 近かったファイルが、3.12MB まで縮めることができた。この縮んだあとのファイルを改めて PNGGauntlet にかけると最終的には 2.88MB 程度まで縮んだ。全てのファイルを WebP 形式に変換した場合は非可逆圧縮によってエッジが丸くなりつつも 1.78MB ぐらいにはなったので、PNG で 2.88MB は結構頑張ってる感じがする(根拠なし)。

思わぬところで良いツールに出会えてよかった。
欲を言えば自分の用途ではブラウザがある場所で使うことが多いので、NativeClient で動く Chrome アプリ版とかがあるとどこでも簡単に使えて嬉しいなあと思った。
Clip to Evernote