blog.handlena.me

コード書いたりゲームしたり

  • homebrewでcanythingを入れるためのFormula書いた

    Mac OSX 10.7.3 / homebrew 0.8.1 tmux + irssi + canything で Anything 風チャンネル切り替えする http://unknownplace.org/memo/2012/03/26/1/ これを実践するためにはcanythingが必要なので、 homebrewでインストールする用のFormulaを書いた。 Makefile中のncurseswは、Macにncursesが入っているのでそちらを使うようにパッチを当てた。

  • UITableViewCellにいい感じに背景画像を適用するライブラリ書いた。

    UITableViewCellに簡単に背景画像を適用できるライブラリを作ったので紹介。 https://github.com/handlename/HNDecoratedTableView 対象のテーブルをHNDecoratedTableViewのインスタンスとして作り、 こういう背景画像を用意して、 tableView:willDisplayCell:forRowAtIndexPathをこんな感じで書くと、 <pre class="code lang-objc" data-lang="objc" data-unlink>-(void)tableView:(UITableView*)tableView willDisplayCell:(UITableViewCell*)cell forRowAtIndexPath:(NSIndexPath*)indexPath { [self.table setBackgroundImage:[UIImage imageNamed:@&#34;cell_bg.png&#34;] withInsets:UIEdgeInsetsMake(8, 8, 7, 7) forCell:cell forRowAtIndexPath:indexPath]; } こんな感じに背景画像がつく。

  • カレントディレクトリの画像をHTMLで表示するだけのアプリケーション書いた

    iPadで、画像転送なしで、PC側の画像を一覧表示させたかったので。 https://github.com/handlename/p5-gallery powered by Amon2::Lite 画像が入っているディレクトリに移動 plackup /path/to/p5-gallery/app.psgi http://localhost:5000 で画像が一覧できる 画像の整列は何も考えずに float:left しているだけ。 サイズも175px(iPadを縦にした時にいい感じに収まる)固定。 ページデザインをiPadに表示しておくといろいろ捗るのです。 Amon2::Liteは初めてで、使い方これで合ってるの?とか、 画像返すときにいちいちopenしてるのどうなの?とか、 → アドバイスいただいてPlack::Middleware::Staticを使うようにしました。 おもに力技なので、外部に公開するときに使うのはよろしくないです。

  • iOSプロジェクト用のテンプレート

    Mac OSX 10.7.2 / XCode 4.2 毎回ファイル名変えたりグループ作ったりするのが面倒だったので、テンプレートを作った。 https://github.com/handlename/ios-app-template <pre class="code lang-sh" data-lang="sh">$ cp -r __template /path/to/project $ cd /path/to/project $ /path/to/clone/init.sh ProjectName com.example でプロジェクトのベースができる。

  • iTerm2でURLをクリックで開く

    Mac OSX 10.7 / iTerm2 1.0.0 Cmd押しながらクリックでURLを開ける…! 知らなくて情弱呼ばわりされました。

  • XCodeで環境変数を元に#defineする

    Mac OSX 10.7 / XCode 4.2 Project Build Settings Preprocessor Macros から。 <pre class="code">$(ENVVAR)</pre> とすれば環境変数を呼び出せる。 NSStringとしてそのまま使用する場合は次のように書けばいい。 <pre class="code">HOME_DIR=&#34;@\&#34;$(HOME)\&#34;&#34;</pre> 実行時。 <pre class="code lang-objc" data-lang="objc">NSLog(@&#34;HOME_DIR = %@&#34;, HOME_DIR);</pre>

  • LinkedInで送信したリクエストをキャンセルするバッチ書いた

    LinkedInのリクエスト送信でうっかりやっちまったので取り消すバッチを書いた。 送ったリクエストをすべて取り消す。 後述のとおり、承認済みのリクエストは取り消せないので、全自動というわけではない。 要perl、WWW::Mechanize。 $ perl linkedin_withdraw 課題 「取り消し」リンクが見つからないことがある。 深追いはしてない。 承認済みのリクエスト 放置。 手動で消す必要がある。 自動で消すと漏れそうで怖かったので。 免責 たいしたテストもせずに書いたので、ご利用は自己責任で。

  • PathみたいなメニューをCSSのみで

    CSS3の練習を兼ねて、Pathのメニューを真似て書いてみた。 "Path" like menu - jsdo.it - share JavaScript, HTML5 and CSS あんまり似てない・・・。 transitionで「行き過ぎてから戻る」みたいな動作は出来るんだろうか?

  • dvorak配列をカスタマイズする

    Dvorak Advent Calendarの20日目です。非公式です。 技評のまとめには載っているのにATNDにはページがなかったので勝手に書いてます。 素のdvorak配列で満足していますか? dvorak配列は左側に母音が集中しているのでとても打ちやすいです。 が、 それだけで満足していますか? 打ちやすさを求めて考案された配列といえど、すべての人にとって最も効率の良い配列とは限りません。 「使いにくい」と感じたときは、使いにくい部分を自分仕様にカスタマイズしてしまいましょう。 自分が使いやすいようにキーを入れ替える ぼくはMacを使っているので、Ukeleleを使ってキーを1つずつ入れ替えています。 Ukelele Ukeleleの使い方についてはここでは割愛します。 まず結論から。現在のキー配列はこんな感じです。 通常 Shift 変更部分を列挙してみます。 k ⇔ c ローマ字入力のため。DvorakJPのようにか行を「c」で打つ方法もありますが、「cyo」なんかがいままでのローマ字打ちと違っていて気持ち悪いので、キーを入れ替えてしまっています。 数字 ⇔ 記号 1段目の数字は、それぞれShiftを押した時に入力される記号と入れ替えています。プログラムを書いていると、数字よりも記号を打つ機会が圧倒的に多いこと、数字を押しにくくしておくとマジックナンバーが減る、という理由があります(後者は微々たる効果ですが)。 $, _, ~ /, |, ` それぞれ使いやすい位置に移動しています。特に「$」については、perlやPHPをよく書く身としてはホームポジションにあるのが必須です。 更なるカスタマイズ 例えば・・・ キーマクロを登録して、ワンキーでよく使う単語を入力する 2ストローク以上のキーバインドを登録して スペースキーをShiftの代わりに使う(SandS) Shiftをstickyな挙動に変更する などなど、まだまだたくさんのカスタマイズ方法があります。 とはいえ、いまのところ単純なキーの入れ替えとSandS以外のカスタマイズには手を出していません。メインのエディタがEmacsなので、キーマクロやキーバインドの登録はEmacs上で行なっている、というのが理由です。 おわり dvorak配列にした時点で、自分以外の人がそのキーボードを使うことはほぼ皆無です。 それならば、とことん自分が使いやすいようにカスタマイズしてみてはいかがでしょうか。 余談 メインのキーボードは無刻印です。刻印がなければキーの差し替えは必要無いですし、刻印に惑わされることもありません。さらに手元を見なくなって完全なブラインドタッチが習慣付けられるのでお勧めです。

  • JSでprototypeで宣言したプロパティに値を代入するときの罠

    要点 prototypeは、そのオブジェクトに該当のプロパティが存在しない場合に参照される。 どういうこと? JSでクラスをつくる場合、デフォルト値としてprototypeに値を入れることがある。 <pre class="code lang-javascript" data-lang="javascript">var Hoge = function() {}; Hoge.prototype.huga = 0; Hoge.prototype.piyo = { x: 0, y: 10 }; var hoge = new Hoge(); // hogeにはhugaというプロパティが無いので、 // Hoge.prototype.hugaが参照される。 console.log(hoge.huga); // => 0 // こちらも同様 console.log(hoge.piyo.x); // => 0; 1段階なら問題ないが、2段階以上オブジェクトをたどる場合は要注意。 <pre class="code lang-javascript" data-lang="javascript">hoge.huga = 1; // hogeにhugaというプロパティがつくられて、そこに代入される。 hoge.piyo.x = 100; // Hoge.property.xに代入される。 つまり、こういうこと。 hogeのpiyoプロパティを探す 見つからないのでHogeのprototypeから探す prototypeにpiyoが見つかったので、そこからxを探す Hoge.prototype.piyo.xに100を代入する Hoge.prototypeの値が直接書き換えられてしまう。 <pre class="code lang-javascript" data-lang="javascript">var hoge2 = new Hoge(); // prototypeが書き変わっているので、デフォルト値が変わっている。 console.

    Read more…