ブログトップ 記事一覧 ログイン 無料ブログ開設

愛と勇気と缶ビール RSSフィード Twitter

2013-04-14

まあBlocksKitは黙って使っとけや、という話

Objective-Cにはdelegateという面妖な仕組みがあって、いや実は面妖でも何でもなくそれなりに由緒も由縁もある機能なのだが、結局「コールバック関数を必ず何らかのオブジェクトメソッドとして実装しなければならない」というのは面倒なので、それをいわゆる無名関数(これをObjective-CではBlocksという)で書けるといいよね、という発想のライブラリとしてBlocksKitというものがある。

pandamonia/BlocksKit ? GitHub

各所で紹介されているので何を今更、という話でもあるのだが、このライブラリはどちらかといえば「UIKit周りのdelegateで書かなきゃいけない所をBlocksで書けるようになります!」という紹介のされ方が多い。

それ自体は間違いではないのだが、実際にBlocksKitのコード周りを眺めてみるとUIGestureRecognizer周りのハンドリングやKVCによるオブジェクトの監視(要は特定のオブジェクトの特定のフィールドの値が変化したらコールバックを発火される、とか)もBlocksで記述できるような拡張がなされていることが分かる。

つまり、いわゆる標準ライブラリ周りについて「ここBlocksで書けるとうれしいですよね」という部分は大体拡張がされている、痒い所に手の届くライブラリなのだ。Objective-Cを書くのにこれを使わないのは勿体無い、という位である。


余談だが、「CSSiOSアプリのスタイルが定義できる!」という触れ込みで紹介されることの多いNimbusKit(おそらく今はNimbusという名が正しい)だが、個人的にはCSSでウンタラはあまり役に立たない機能だと思っている。Nimbusの記事をTwitterでシェアしたりはてなブックマークしたりした人は多数居れど、実際のアプリへの適用を試みた人は殆ど居ないのであろう。

2013-03-17

アンサイクロペディア・ブラウザ2というアプリをScalaで作ってGoogle Playに出した

https://play.google.com/store/apps/details?id=com.nilsoft.Unreader2

以前にも作っていた、アンサイクロペディア専用ブラウザ的なものです。

しばらく前に家のマシンをArch Linux/半自作PC からOS X/Mac miniに移行した際にそれまで作っていたAndroidアプリのsign key (~/.keystoreに作ってたもの) を全消滅させました。

二度とアプリアップデート出来なくなって悲しかったので、2と銘打って同じようなものを作った次第です。

アプリ的には特筆すべき点も何もないのですが、今回の自分への課題設定として

  1. Android4.x系の新しいfeature(特にAction Barとか)に慣れる。
  2. Scala on Androidな開発にInteliJ IDEAを使ってみる。
  3. Scaloid (pocorall/scaloid ? GitHub) を使ってみる。

というものがありました。メインはやっぱり「作り方がもう分かってるアプリで、4.x系への肩慣らし」ですね。

1.については、こないだ「Android4.0以上が搭載されている端末が日本全体で50%を超えた」とのニュースを見て、「50%超えたなら、もうそれ以下のは見捨てていいや。どうせ今後もっと増えるし」と決めたからです。企業だとあり得ない選択ですが僕は趣味で作っているので、今後何らかのアプリを作る際は全部4.0以上対応にして新し目の機能もガッツリ使って可能ならそれをウリにしていきたい次第。

2.については、元々Java/Eclipseめんどい、という比較的消極的な理由でScala/Vimで開発していたのですが、最近はXcodeを触ったことで「IDEもよくね?」という拘りなきマイルドな気分になってきており、特にiOS/Android開発みたいな「コアライブラリががっつり存在していて、それに乗っかって作るもの」についてはIDEによる支援があった方がありがたいので、InteliJ IDEAデビューしてみました。Android開発では「これこれのクラスのこれこれのメソッドオーバライドする」みたいなケースが多いのですが、InteliJ IDEAは元々のJavaシグネチャをよしなにScalaのそれに置き換えた上でオーバライドするコードを生成してくれます。中々賢いです。今のところCommunity Edition(無料)の機能で問題なく開発できており、Saleがあれば有料版のライセンス買ってもいいかな…?ぐらい。個人的には、Scala on Androidな開発はこれをもって大分こなれてきた感じ。SBT ConsoleもlogcatもIDEAから使って、ストレスなく開発できる環境が整いました。

3.については、元々はPositronic Net (rst/positronic_net ? GitHub) を使ってみる予定だったのですが、あまり開発が盛んでなさそうなのでScaloid (pocorall/scaloid ? GitHub)にしました。以前はAndroid API周りをScala的に書きやすいようラップするのを意図的に避けていた(それに依存しすぎて、Javaで書けない = 一般的なAndroid開発のスキルとして意味がなくなっては困るので)のですが、以前よりAndroid周りの知識も増えたので、元々のAPIを分かった上で使うなら別にいいか、と。

同じものをJavaで書いたわけでもないので「Scalaだから短い」とは言い切れませんが、アプリ全体は400行くらい、そのうちオレオレSQLiteラッパーライブラリ(not ORM)が100行くらいです。後者はそのうち固まったら公開するかもしれません。

2013-03-03

no title

未知の領域で開発を始める時には、環境を整えすぎてはいけない - 愛と勇気と缶ビール とかなんとか書いたけども、実際は「新しいことは(可能なら)一回に一つまで」の方が適切かもしれない、と思っている今日この頃。

要は「新しい言語/環境を使って、今までに作ったことのないものを作ってみる」はしんどくて、ハマった時のシューティングもしづらいので

「新しい言語/環境を使って、作ったことがあるものを作ってみる or 何となく検討がつくものから始めてみる」

「ある程度勝手を知った上で、今までに作ったことのないものを作ってみる」

というステップを踏んだ方が結果的に挫折やハマり時間が少なくなって、アウトプットに繋がりやすいんじゃないかということ。


もっとも、これは自分で期限・難度などを勝手にスケジュール出来る場合のみ(e.g. 趣味プログラミング)の話でもあって、仕事で「新しい言語/環境を使って、今までに作ったことのないものを作らなければならない」という状況はもちろん有り得るし、そういうチャレンジングなプロジェクトによって得られるものもあるので、全ての状況に適用できるものではありません。

2013-01-31

メールのURLをクリックしたくないです

なんかこう、メールアドレスを入力させて、メールに書いてあるリンクをクリックしてユーザ登録してね!みたいなサービスがあるじゃないですか。

ああいうのを自動化したい時って、もちろんPOP3とかでメールを取りに行ってもいいんだけど、GmailならGoogle Apps Scriptでメールの内容を取れるので、それを利用して単にHTTPでGETするだけでクリッコすべきURLが取れるWebアプリもどきを作ることが出来ます。

function getRegisterURL() {
  // 特定のワードでメールを検索して、先頭のを取り出して
  var threads = GmailApp.search("[service name]");
  var thread = threads.shift();
  var mail = thread.getMessages()[0];

  // 正規表現で適当にURL抜き出して
  var body = mail.getBody();
  var matches = body.match(/http:\/\/.+(?=<br)/);
  var registerURL = matches[0];

  // 次のに備えてこのメールは消して...
  mail.moveToTrash();

  // URLを返す
  return registerURL;
}

// Google Apps Script (WebAppとして公開) では、doGetで返したものがレスポンスになる
function doGet() {
  return ContentService.createTextOutput(getRegisterURL());
}

Googleアカウントセッションなしでこれを取るためには結局誰でも見られるように設定するしかないので、色々ザルであることに注意してください。

良い子は悪いことに使っちゃだめよん。

2013-01-27

拝啓 プログラマー35年定年説について

プログラマー35歳定年説なんてゲーム脳並みに信用できない言説なのは火を見るより明らかなので今更それを否定する気も起こらないのですが、一応。

日本のITゼネコン構造とかエンジニアの待遇とか移り変わりの激しい業界だからとか諸説ございますが、僕が思うのは、そもそもプログラマーっていう職業が成立したのって何年前の話だよと。特に今僕が属しているところのWebプログラマーなんてどれだけ職業としての歴史が浅いんだと。

これだけ歴史の浅い職業について「35歳定年」みたいな一般法則を見出すことそのものがアホらしいだろうと。

お前は200年前からプログラマーという職業があったかのような気分でそれを語っているのではないかと。

こんなうら若い職業なのだから、全ての個人が、自分の前につらなる自分だけの細い道を、自分で見つけていく他、どうしようもないだろうと。他の人のキャリアプランなんて、参考にはなれど自分がその通りに歩むことなんてそもそもあり得ないだろうと。

自分で道を探さなくてはならないのに、人がかつて通った道がまだあるだろうと勘違いしてしまうのは危険だ。