2012-02-20
■今後勉強していきたいことのまとめなど
これまでの振り返りをしっかりやってなかったこともあるので、その作業をしながら、今後やりたいこについて、ちょっと考えてみた。
以下眺めるとRuby活用してのLinuxのシステム管理方法のような所について勉強することでプログラミングもだけどインフラ関連の知識も増えそうな気がする。
- TitaniumのQuickTiGame2dをつかって簡易なシューティングゲーム実装
- あすなろBLOGViewerの開発(JSONDBはひとまずローカル側のキャッシュだけ利用する形にする)
- fluentd使ってサーバのログ集中管理
- Capistranoだけだと、自分がやりたいようなサーバ構成管理するのにやっぱり限界あるのでChefかPuppet使ってしっかり管理したい
- iptablesについて書かれた本などをしっかり読んで根本を理解したい
- サーバのバックアップの仕組みしっかり考えたい。(最近読んだSoftwareDesingの記事で取り上げられていた何か+AmazonS3とかの組み合わせとかでやってみたい)
- Pixelmatorせっかくインストールしてほとんどいじってないので、写真補正くらいからまずは使い始めたい
- Sinatraベースで、Markdown記法が使えるRubyベースのCMSなNestaかLokkaの環境ひとまず整えたい
- MarkdownNoteでブログの下書きとなるものを書きためておく→ネタとなるものをピックアップして清書→ブログへアップみたいな仕組み作りたい
2012-02-16
■[ビール]CRAFT BEER MARKET
CP高いので、最高!の一言。ビール好きもだけど、「ビール普段飲まないし・・・」っていう人を連れて行って、こういうビール(というかお酒)があるっていうギャップを感じてもらうお店としてもいいんじゃないかと。詳しくは食べログを。
飲んだやつ
飲んだ感想
250mlで一杯480円であれだけ色々な種類があるのはほんと幸せで、全部美味かった。これ書いてても「あーまた飲みたい」って思い出す位うまかったw
良い意味で期待を裏切られたのは、IPA。
うちの奥さんが出産のために入院している時、病院にお見舞いにいった帰りに病院近くの酒屋でヤッホーブルーイングのインドの青鬼をたまたま見つけて、ものすごい苦かった印象があるので、
IPA=凄い苦い
という変な固定観念が植えつけられてました。でもお店の方にIPAの中で初めて飲むのにオススメなやつとして、このスカルピンのIPAを教えてもらって注文したのですが、フルーティな香りがすごく感じられて、のみごたえもあるし、こんなビールあるんだ!っていう再認識が出来ました。
「折角行くからには違う種類をなるべく飲みたい」
って最初考えてたけど、結局これをおかわりした位に美味かったです
その他感想
勉強会の後の懇親会で10名近くで訪れたのですが、
「水曜日だし、21:00に入店なら空いてるだろう」
と思って、念のため来店前に電話したら、外の席しか空いてないけど、空き次第店内通してくれるということで、伺ったのですが、ラストオーダーまで店内満席でした。。。
2月の寒空の下、2時間近く外で飲ませてしまったのはちょっと申し訳なかったとちょっと反省
人のこと言えないけど、あんだけビール好きな人が平日(しかも水曜日)にあれだけいるのはちょっとビックリだけど、接客良く料理も美味く1人2000円程度で済むならまた行きたい。
2012-02-13
■[ビール]最近飲んだクラフトビール(オレンジチョコレートスタウトとKOEDO BREWERY の 紅赤)
はてなブログの方でTitaniumや関連する技術系エントリを中心に書いて、こっちはその他興味あることを書いていこうと思います。(将来、はてダが統合されたら・・まぁその時考えよ)
で、書くエントリはっていうと、月曜日の朝から書くには全く相応しくないビールのエントリww
ここ最近、金曜日の会社帰りにRIDENTEという練馬駅前にある酒屋さんで、クラフトビールをチョイスして、じっくり味わうのが週末の愉しみの1つになってます。
最近買ったやつで、ひとまず印象に残っているのを2つほどピックアップ
オレンジチョコレートスタウト
サンクトガーレンのオレンジチョコレートスタウトを買いました。
たぶん1,2年前の自分の嗜好性考えると絶対買わないだろうタイプだけど、ものは試しに買ってみました
感想
柑橘が好き!チョコが好き!ならこれ
http://www.sanktgallenbrewery.com/beers/valentine-chocolate/
って書いてある通りでした。最近チョコレートそんなに食べなくなったけど基本好きなのと、最近はオレンジピール入りのやつとかを好んで食べるようになったので、結構”あり”かと思いました。
ただ、最後の方は飽きてきたので、最初の一杯じゃなくって、最後の締めとして軽く(150ml位)飲むには良いのかな。
小江戸ブルワリー(KOEDO BREWERY) の 紅赤
KOEDOのRuriは以前、うちの近所のスーパーで何故か定期的に入荷されてて買っていたのでそっちは飲みなれていたのですが、今回初めてこれ買ってみました。
感想
結構アルコール度数高く(7〜8%程度だったかな?)、意外と酔っ払った気がします。ビールという先入観を持って飲むとかなりギャップを感じるかもしれない、さつまいもがものすごく感じられたお酒。
こういうのはゆっくりチビチビ飲むのが良さそうだけど、どんな料理と合うのかちょっとイメージがわかなかった
2012-02-02
■[Titanium Mobile]どのようにbuildされるのか考察してみた
ここ数日睡眠リズムが良くないから本調子でないことに加えて、根本原因探るのに行き詰まっていることもあって、気分転換にブログ書くことにしました。
どのようにbuildされるのか考察したまとめ
Python&Objective-Cをそんなに理解してないですが、メソッド名頼りに流れを追ってみた結果、おそらくこんな感じでbuildされているんじゃないかと思います
- titanium.pyで実行に必要なパラメータチェックを(たぶん)実行。問題なければiphone/builder.py(もしくはandroid/builder.py)が実行される
- builder.pyが実行されて、main.mが自動生成されているはず(builder.py1500行近くあるので後日がんばって触れたい)
- main.mの情報を参照しつつ、雛形となるファイルをプロジェクト配下の/build/iphone/Classes/以下にファイルを生成していく
※以下はまとめと関係ないですが、ちょっと戯言を※
「そもそもソースコードってどうやって読み進めるんだろう?」という漠然とした疑問がありました。
2,3年位前だとファイルを1行1行くまなく読んでいこうとしていた時期もあったのですが、それだと”木を見て森を見ず”の状態で結局概要がよくわからず、結局嫌になってしまったという苦い思い出が多々ありました。(職業プログラマとしての経験があればこのあたりのコツというのは仕事を通じて得る機会があるのかもしれませんね)
「周囲の人からソースコード嫁!って言われるけど、とっかかりが掴めない」
っていう人もいるんじゃないかと何となく思ったのと、もしかしたらTitanium勉強会を今後も継続していったとして、将来こういう話題も触れても面白いかもしれないので、どのようなことを考え、実践した結果、上記まとめにつながったのか、以下時系列に書いておこうと思います
そもそもコードを読む目的を見失わないようにした
「Titanium Mobileの内部構造理解すれば、どの部分でresourcesDirectoryの設定しているのかわかるんじゃないかなぁ」
という考えに至り、ひとまずTiFileのソースコードを追っかけてみることにしました。
と最後に触れているように、どの部分でresourcesDirectoryの設定しているのかを把握することが今回コードを読む目的として設定しました
まずはTiFile ざっくりと読んでみた
TiFileに着目した理由はファイル名からして、なんか関連ありそうと思ったので、正直根拠ないですww Objective-Cを正確に理解してないですが、ひとまずTi.File.mを開いたら以下のようなメソッドがありました
- (void)dealloc
- (id)initWithPath:(NSString*)path_
- (id)initWithTempFilePath:(NSString*)path_
- (NSString*)path
- (NSInteger)size
- (id)blob
- (id)toBlob:(id)args
- (TiFile*)createTempFile:(NSString*)extension
「メソッド名とかから推測するにdeallocはメモリ管理的な何かっぽい」
「initWithで始まるやつは、引数のpathが渡されてそれに対して何か初期化してるのかな」
「blobやとBlobは読み方がよくわからないけど、バイナリファイルを扱う時の何かかな?」
という感じで眺めてみて、
「あれ、このTi.Fileの中には見る限り、resourcesDirectoryやapplicationDirectoryのパスの情報が埋め込まれているわけじゃないんだ。そうなると、どっかで設定ファイルらしきものがあって、そのファイルを読み込む処理をこのTi.Fileが担ってるのかな」
という妄想を含まらせましたw
設定ファイルらしきものはそもそも何処にあるんだろう
今まであまり考えたことがなかったのですが、きっとそれらしいファイルがあるはずに違いないと思って少し探ってみました。
「そういえば、Titanium Studioでbuild実行するとプロジェクト配下の/build/iphone以下に色々ファイルが生成されるけど、この中のどれかが関連してそう」
と思って、チェックしていき、main.mを開くと
#import <UIKit/UIKit.h> #define _QUOTEME(x) #x #define STRING(x) _QUOTEME(x) NSString * const TI_APPLICATION_DEPLOYTYPE = @"development"; NSString * const TI_APPLICATION_ID = @"jpxxxx"; NSString * const TI_APPLICATION_PUBLISHER = @"xxx"; NSString * const TI_APPLICATION_URL = @"http://"; NSString * const TI_APPLICATION_NAME = @"asunaroViewer"; NSString * const TI_APPLICATION_VERSION = @"1.0"; NSString * const TI_APPLICATION_DESCRIPTION = @"not specified"; NSString * const TI_APPLICATION_COPYRIGHT = @"2012 by xxxx"; NSString * const TI_APPLICATION_GUID = @"03....."; BOOL const TI_APPLICATION_ANALYTICS = true; #ifdef TARGET_IPHONE_SIMULATOR NSString * const TI_APPLICATION_RESOURCE_DIR = @"/Users/xxxxx/project/Resources"; #endif
という感じで、自分が求めていた情報(NSString * const TI_APPLICATION_RESOURCE_DIR = @"/Users/xxxxx/project/Resources";)が見つかりましたー
このmain.mの先頭行に
WARNING: this is a generated file and should not be modified
とあるように、自動生成されてます。
このファイルを生成するスクリプトがどっかにあるはずで、
「あー、日頃ターミナルからtitanium -run ...とやってるわけだし、~/Library/Application Support/Titanium/mobilesdk/osx/1.7.5/titanium.pyが関係あるんだ」
とすぐわかりました。
titanium.pyを開き、自分自身Pythonそんなに知らないけど、ひとまずメソッド名を頼りにまずは全体を眺めました。
「titanium -run実行された際に該当しそうな runというそのものズバリなメソッドはない。def run_project_argsというので、引数チェックして、実際のrunに相当するのはdef dyn_run(args,project_cb,module_cbが該当しそう」
というおおまかな”あたり”をつけてif分がたくさんあるのを無視しつつ眺めていたら
if atype == 'project': script = os.path.join(template_dir,platform,'builder.py') cmdline = project_cb(args,script,project_dir,platform)
という箇所がわかり、ここでbuilder.pyが実行されるというのがわかりました
次回続くかも??
builder.pyでやってることは何となくわかるのですが、ちょっと行数多いので、この部分の処理をどのようにして追っていったのか次回まとめたいと思います。
2012-02-01
■[Titanium Mobile]TiFileのソースコードを読もうと思ったきっかけについて
前置き
前回こんなことを書いてから、しばらく以下2つのことを考えてました
- クローラで収集したデータをJSON化する時に適切な形でエスケープ処理する実装方法
- Ti.Database.openにも関連ありそうなTitanium.Filesystemの内部構造ってどうなってるんだろう
こんなことをつぶやいていたように前者は思った以上に苦戦しながら、ActiveSupport::JSON.encode()を利用することで期待する結果が得られそうな目処が立った気がします。
Ti.Database.openに関連する所でちょっとうまくいってないこともあるのですが実はそれだけではなくって、JSONDBのモジュールが実機ではうまくいってないことも重なって、Titanium.Filesystemの内部構造について把握したくなってきました
ちなみにJSONDBを使ってみたというエントリを読む以前にも、その存在が気になっていたJSONDBなのですが、先日のTitanium新年会のLTの中で取り上げられていてて
「これはもう利用しとかないと!」
と思って、別のモジュールも含めて購入しました(※ちなみに初めてモジュール買いました)
この辺りで少し触れている通りMongoDBをちょっとだけいじっていたこともあり、JSONDBはかなりMongoっぽく馴染み易く、簡単なサンプル作り、エミュレータ上で動作することを確認した上で、実機転送したら、アプリが落ちる・・
念のためTitaniumStudio上で新規にプロジェクト作っても同様の症状になりました。
File I/Oに関する処理がうまくいってない気がしてきた
この段階でふと思ったのは、SQLiteのファイルやJSONDBのファイルそれぞれが存在するパスの指定がなんか怪しい気がしてきました。
Titanium Mobileの機能を使って生成されるファイルの保存先のパスってどっかで指定出来たのかなという素朴な疑問が思いつき、ひとまず、ファイルI/Oに関するTitanium.Filesystemをひとまずいじってみました
var baseDir = Titanium.Filesystem.applicationSupportDirectory; var rootDir = Titanium.Filesystem.applicationDirectory; var resoce = Titanium.Filesystem.resourcesDirectory; Ti.API.info(resoce); Ti.API.info(baseDir); Ti.API.info(rootDir);
上記結果はこうなりましたが、resourcesDirectoryの結果が@donayamaさんがまとめているWikiの情報と違う結果になりました。
/Users/xxxx/production/asunaroViewer/Resources/ /Users/xxxx/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/A196F63E-019F-4491-B10B-5B6B79DF5C10/Library/Application%20Support/ /Users/xxxx/Library/Application%20Support/iPhone%20Simulator/4.3.2/Applications/A196F63E-019F-4491-B10B-5B6B79DF5C10/Applications/
「Titanium Mobileの内部構造理解すれば、どの部分でresourcesDirectoryの設定しているのかわかるんじゃないかなぁ」
という考えに至り、ひとまずTiFileのソースコードを追っかけてみることにしました。
ObjectiveC全然わからないけど、メソッド名からなんとなくの処理を推測してコード読んでるので気が向いたら続きを書くかも

