2010年12月アーカイブ
ブラウザ上でサクサクとワイヤーフレームを作れる高機能作図ツールCacoo。前回紹介したとおり、iPhoneの画面部品もステンシルとして使うことが出来ます。
cacooで簡単にiPhoneワイヤフレームが書けるようになった - もぎゃろぐ
で、そのステンシルのなかに、グループ化されたTableView部品があるのですが。

ふしぎなことに、4列セット、真ん中二個に右矢印付きというセットで部品になっています。一列ごとの部品もあるのですが、これも、ある列は矢印付き、ある列はチェックマーク付きになっています。
この部品とぴったり同じ物を作りたい時はいいのですけど、そんなことは普通ないはずなので、Cacooさんに問い合わせたところ、対応方法を教えていただけました。
この部品、グループ化されているので、右クリックメニューから解除してあげれば自由に編集できるのだそうです。
言われてみればナルホドなのですが、気づかない時はどうにもならないポイントですね。
というわけでこれを使うと、こんなワイヤフレームを描くことが出来ました。
MacBookAir(11インチ)を買いました。iPhoneアプリのために買ってあったMacMiniが壊れて、どうしようかと思っていたら買い手を捜している人がいたのでありがたくお買い上げ。
Let'sNoteの中でも特に小さいLet'sNoteRからの乗り換えだったので、キーピッチが広すぎて巨人のパソコンを使っているような気分ですが、スペックの割に軽快に動いてくれるし、ファンの音がしないのはとても快適なので、気に入っております。
Windowsから乗り換えた人の常で、Windowsでできたあの機能はどうやるんだ、ということでいろいろググッていたのですが、とりあえず一個便利なのを再現することに成功したのでメモ。具体的には、「日付と時刻をクリップボードにコピー」。
これはWindowsの標準機能ではなくて、もうすでに開発が停止してしまったbluewindとその関連ツールの合わせ技です。自分の場合、alt+bでBlueWindを立ち上げて、dateと入力すると、その時の日付と時間がクリップボードにコピーされるようにしていました。
これがあると、日報とか作業記録を書くのが超便利なのです。
で、これをMacでやる方法。
- 日付と時刻をクリップボードにコピーするスクリプトを作る
- spotlightからアプリを起動
日付と時刻をクリップボードにコピーするスクリプトを作る
とりあえず、キーボードから起動するのは後回しにして、立ち上げたら日付と時刻をクリップボードにコピーするアプリをいっこ用意します。
現在の日付時刻をクリップボードにコピーするAppleScript - サンフラットの開発日記ありがたい事にAppleScriptを書いていただいているので、Apple Script Editorに貼りつけて

「名前を付けて保存」でApplicationとして保存してあげれば、

立ち上げるだけでその時の日付と時刻をクリップボードにコピーされるアプリケーションが出来上がる。あとで便利なので、Applicationフォルダに保存しておいてね。
spotlightからアプリを起動
これだけでも十分便利なんだけど、もとの使い勝手を考えると、キーボードから手を離さずに同じ機能を実現したい。マウスでアプリを立ち上げるとかまだるっこしいよね。
Mac的には、こういう時はSpotLightを使うらしい。Ctrl+Spaceで立ち上げるあの謎の機能に、「copy..」位まで入力してあげると、さっきのスクリプトが出てくる。

copyDateAndTimeが選ばれている状態でEnterキーを押してあげれば、クリップボードに日付と時刻文字列がコピーされるので、EverNoteでもEmacsでも、どこでも貼り付けることができる。
TitaniumMobileプログラミングの話。
Windowを生成する時、urlパラメータを使うと、そのWindowは副コンテキストに分割されて動くことになるので、親コンテキストの変数を参照することは出来ません。
Window - titanium-mobile-doc-ja - UIカタログ - Window - Project Hosting on Google blockquoteこれを乗り越えるための対策は、上記ドキュメントに書いてあるのですけど、微妙にいろいろ罠があって、実験して分かったことまとめ。
例えば、親コンテキスト(win1)の変数hogeがあって、副コンテキスト(win2)でボタンを押したらhogeをインクリメントしたい、というような場合。
まず、親コンテキストの変数を子コンテキストで参照するには、こういう風にする。
すると、子コンテキスト側からは、var hoge = 1; win2.hoge = hoge;
var win2 = Titanium.UI.currentWindow;
Ti.API.debug("hoge:"+win2.hoge);
みたいにして参照することが出来る。ただし、変数はby value渡しになるので、副コンテキストで値を変更してもメインコンテキストのhogeには反映されません。
なので、
button1.addEventListener('click',function(e){
win2.hoge = win2.hoge+1;
label.text = 'hoge:'+ win2.hoge;
});
こういうふうに書いても、main側ではhogeの変更は全く無視されてしまいます。メインコンテキストに値を反映したい時は、
function update_hoge(value){
hoge = value;
}
という具合にセッターを用意してあげて、副コンテキストの方から
という具合にして呼び出してあげると、メインコンテキストで実行されるので、値を反映することが出来ます。win2.update_hoge( Titanium.UI.currentWindow.hoge + 1);
button1.addEventListener('click',function(e){
win2.update_hoge(win.hoge+1);
label.text = 'hoge:'+ win.hoge;
});
ただしここにはさらに罠があって。update_hogeを呼んだからといって、副コンテキストが見ているwin2.hogeが勝手にアップデートされたりはしません。
なので、上記コードも、ボタンをクリックしても副コンテキストのhogeの値はちっとも増えないように見える。実際には、メインコンテキスト側のhogeが増えているので、いったんウインドウを閉じて開けば反映されるのですけど。
function update_hoge(value){
hoge = value;
win2.hoge = hoge;
}
という具合にして書き戻すようにするか、get_hoge();を作るのがよいみたい。コンテキストというのがスレッドのことなのかなんなのかによっては、意図しない順番で処理が実行されたりしそうで怖いのですけど、その辺は明日えらい人たちに聞いて勉強してこようと思います。
おまけ
というわけで明日(あ、今日になっちゃった)は はてな技術勉強会 Hackathonです。@masuidriveをはじめ、TitaniumMobile関係えらい人がいっぱい集まるのにもかかわらず、まだ席が空いています!もったいないお化けが出ますので、空いている人ははてなにGO!ウェブまわりでいま気になっていることを発表する会『俺の話を聞け!』を開催しました - 頭ん中ので、面白かったこととか、興味深かった話とか。
- @amateru「Google サイトって、なかなかイケテルかも!?」。GoogleのWEBサイト作成サービス「Googleサイト」。たんなるホームページ作成だけでなく、Wikiとかtodo管理、ファイルアップロードまで出来てしまう!
- @kamiyam「jQueryプラグイン"mukiSlide.js"とWebSocketでスライド共有」。WebSocketを使うと、JavaScriptでもサーバと双方向通信ができる。これを使うと、誰かが操作したら全員今見ているページに反映されるプレゼンページが作れる!
- @yuyak「HTML5 加速度センサー」。iOS4.2から、JavaScriptで加速度センサーにアクセスできるようになった!
- @kogetsuの開発中のサービスに関する話。「モバゲーは出会える」。「出会えない人の特徴」
- 2011/01/08 関西アンカンファレンス2011(仮)
- 日付未定だけど一月 関西TitaniumMobile勉強会
- 2011/04/02 大阪でPHPカンファレンス