2009 年 6 月 30 日を持ってこれまで 4 年間お世話になった会社を退職しました。色々と迷惑をかけましたが、送り出してもらい感謝しています。
今日から新しい会社で働くことになりました。前職の方々に会っても恥ずかしくないようにしていきますし、交流は続けさせてもらいたいです。チャレンジしていく気持ちを忘れないようにします。
初日ですが、緊張すると胃が小さくなってご飯が食べられなくなる体質だと分かっていました。で、案の定食べられませんでした。会社の雰囲気がとてもよいところですので、少しずつ慣れていきます。けど、これからだと夏バテと重なるような。。。
Firefox 3.5 ではロケーションバーから BrowserLoadURL 関数が呼ばれなくなったみたいで LocationbarNewTab2.uc.js | 3.14 のコードを利用させてもらっていたのですが動作しなくなってしまいました。browser.jar のそれらしきものを検索すると handleCommand 関数に置き換わっていました。 TabMix Plus で grep をかけてみても同じところだったので間違いないはずです。
先のスクリプトと同じ動きはしないと思いますが、ひとまずこれでロケーションバーから新規タブ、ブックマークレットでは同一タブで実行できているので良しとします。
var urlbar = document.getElementById("urlbar");
var _handleCommand = urlbar.handleCommand.toString();
eval("urlbar.handleCommand ="+ _handleCommand.replace(
'if (aTriggeringEvent && aTriggeringEvent.altKey) {',
'if (!((aTriggeringEvent && aTriggeringEvent.altKey) || \
urlbar.value.match(/^javascript:/) || \
gBrowser.userTypedValue == "about:blank")) {'
));
uc.js を書く前に初めての XBL ということで関数の上書きを試してみたのですが、うまくいかなかったのが事実です。それにしても Firefox のタブ機能には TabMix Plus の便利そうなものが入ってもいい気がします。
[追記]
GitHub にスクリプトを置きました。
漫画をたくさん読む人ではないのですが、友達に MONSTER が面白いと勧められてから、浦沢ワールドにはまり MONSTER, 20 世紀少年, PLUTO を読み終えました。PLUTO が終わってしまったと思ったところ、すかさず BILLY BAT が出ていたので購入。
以前雷悶に「20世紀少年」でググってもヤフっても壮大にネタバレを食らうと念を押された 20 世紀少年。見終わってからググってみたところ、たしかに壮大なネタバレでした。
浦沢さんの漫画は人間性が全面に出ていて読んでいてとても面白い。性や暴力的なものが出るけど、無いとつまらないなー。
アプリケーションが取り扱う URL の長さ、 URL の復元有無によって設計を使い分けるといった感じなんでしょうか。 URL の長さはどこまで許されるんだろうと気にしたことはあるけど、真剣に意識したことがありませんでした。
しかし今のブラウザは 100 万文字を許容するとかすごいですね。ブラクラになりそう。
コードレビューができるツールを探しているのですが、インストールを試みるも依存するものがたくさんあるとそれだけで壁を高く感じてしまい、インストールを躊躇、あきらめてしまいます。何かないかなあと探していたところ BTS として構築済みの Redmine のプラグインでありました。
r-labs - Code Review - Redmine
Redmine のホームに移動してスクリプトを叩くだけ。
$ ruby script/plugin install http://r-labs.googlecode.com/svn/trunk/ $ rake db:migrate_plugins RAILS_ENV=production
後はプロジェクトの設定で Code review を有効にする必要はありますけど、すごく簡単。メールも飛ばせてバージョン管理も限定されません。他のレビューツールを試したわけではないのですが、何より簡単なのが素晴らしかったです。ただ自分のところではまだメールサーバーの設定をしていなかったのでメールが飛びませんでしたが。。。
個人的にはレビューはコミット前の方が(変なコードがコミットされないので)いいんですけどレビューする方を考えると、コミットされたところから diff を取った方が楽ですよねえ。このあたりレビューしている人たちはどうしているのか興味があります。

ATND のイベントの API が公開されたのでイベントを検索できるものをクライアントのみでつくってみました。
今はキーワードしか入力しないシンプルなものにしていて、その場ですぐに検索して探し出せることを目的としています。
IE8/Firefox3.5/Safari4 で動作確認しています。
検索条件として直近 3 ヶ月内のイベントを対象に検索するようにしています。過去のイベントはみるつもりはないので、クライアントで現時間とイベントの終了時間を比較してフィルタリングも行っています。
自分自身勉強会、イベントといったものにこれまで出かけることがあまりなかったので、これから適度に出たいなあという思いからまずは探しやすいものを自分でつくってみるところから始めてみました。あとお仕事で prototype.js を使いそうだったので丁度いい題材になりました。
これからは使っていて不便だと思ったところで少しずつ機能追加、修正をしていこうと思います。あとデザイン・・・
Firefox のスマートキーワードに対応しました。
ロケーションバーから直接検索できるようにして、ページを開くアクションをなくしました。 HTML を直接返しているだけですけど、ワンアクション減るだけで我ながら(自分だけ)便利になったと思います。
サーバーで検索を実装すればいいのに。
Array でループ全体の処理にそこそこコストがかかる場合、ループが終わるまでクライアントは固まったようになります。それでは親切でないので 1 回の処理が終わったらクライアントに一定時間操作を返してあげるコードを prototype.js 上で動くものを書いてみました。すでにありそうだけど気にしないことにします。
Object.extend(Array.prototype, {
asyncEach: function(iterator, millseconds, callback) {
var i = 0, length = this.length, self = this;
callback = Object.isFunction(millseconds) ? millseconds : callback;
millseconds = !Object.isFunction(millseconds) && millseconds || 50;
(function() {
if (i >= length) {
return;
}
iterator(self[i++])
if(i == length) {
if (Object.isFunction(callback)) {
callback(self);
}
} else {
setTimeout(arguments.callee, millseconds);
}
})();
}
});
[1, 2, 3, 4, 5, 6, 7, 8, 9].asyncEach(function(v) {
console.log(v);
}, function(v) { console.log(v);});
1 2 3 4 5 6 7 8 9 [1, 2, 3, 4, 5, 6, 7, 8, 9]
実行中に対象の Array インスタンスに対し挿入、削除が行われないことが前提になります。
うーん使えるかなあ。
ATOK 2009 for Mac が発売されたものの月額制サービス開始まで待とうと思ったのですが、開始が 9 月ということで 2 ヶ月近く待たされます。ので優待版をダウンロード版で購入してしまいました。 ATOK 2007 for Mac は購入していたのですが、ATOK ダイレクト API を使ってみたかったからです。
今回試しに指定した数値だけ文字列を繰り返す repeat プラグインというものを作成しました。セットアップからインストールして、いったんログアウトするとプラグインが有効になります。あとは変換するところで Ctrl + t を入力すると ATOK ダイレクトが実行されます。
今回作成したプラグインでは
10てすと
と入力すると
てすとてすとてすとてすとてすとてすとてすとてすとてすとてすと
になり、ニコニコ動画でも
20w
を入力して Ctrl + t で確定すると
wwwwwwwwwwwwwwwwwwww
に変換できます。これがやりたかっただけな気がします。
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
module Atok_plugin
def run_process(a_request_data)
value = a_request_data["composition_string"]
value.tr!("0-9", "0-9")
match = value.match(/^(\d+)(.*$)/)
return unless match || match[2] == ""
repeat = [match[1].to_i, 100].min
{"candidate" => [{"hyoki" => match[2] * repeat}]}
end
end
初めて作ったのですがプラグインの作成まで 1 時間半ぐらいでできました。ドキュメントやデバッグツールが充実していて、次からはもう少し早くできるのではないかなと思います。使ってみた感想ですが、これすごい便利です。 Perl/Ruby/Python のどれかさえ覚えれば IME で色々な情報を取得して入力できます。
今回作成したプラグインは下に置いてあります。
docomo に戻ってきました。 ここのところ黒いデザインばかりだったので気分を変えて白デザインです。ヨドバシで一括で 25000 円ぐらいで購入し emobile の 2 年契約解除で違約金がちょちょっと発生する感じです。月額はフルに使うことを考えると 8000 円から 9000 円ぐらいすると思うので高いです。
今現在 Google のアカウントはプライベート、パブリック用に切り分けて 2 つ持っているので、一方へメールは転送、カレンダーは共有して統合して使うようにしています。
Gmailの複数アカウントを簡単に扱う方法 - Enjoy*Study
携帯で一番面倒となる移行作業は emobile のときにメール、スケジュール、連絡帳を Google へ移行していたので、 セットアップ時に Google へログインして終わりました。 同期も Google っぽく勝手に裏でやってくれます。 Android 上で連絡帳からアドレスを追加するとサーバーにいつの間にか反映され、サーバーで連絡帳を削除するといつの間にか Android のアドレス帳から削除されています。メール、スケジュールも同じです。
まだ少ししか触っていませんが元々スマートフォンを使っていたこともあって、不満はそこまで感じていません。メールの絵文字が表示されないのと、カメラが不満でしょうか。ですけれど、そんなきゃっきゃっウフフしたメールをくれる友人がいないのでそこまで不便ではないです。電池の持ちも、ずっと触っていなければ 1 日は普通に持つ(50% ぐらいの消費でした)ので今は仕方ないで済んでしまいます。
あと赤外線通信がなくて電話帳の交換が面倒というのも QR コードスキャナーというアプリをインストールすると、電話番号や名前が入った QR コードを生成できる機能が、連絡帳のメニューに拡張されます。 QR コードを生成して後は読み取ってもらい自分のメールアドレスへ投げておいてもらうといったことができます。(これが最適な解決かは置いておいて)
インストールに責任が生じてしまいますが、こんな風に足らないものはコアなところにも拡張して解決できるのも Android のいいところだと感じました。 Firefox っぽいのが自分に合うなあと。アプリケーションもこれから増えてくると思いますので楽しみです。
ソースコードの保守性って話はよく上がるんですが、 HTML の保守性はどうなんだろうってふと思いました。
様々なサイトの HTML コードを見ると、きちんと要素に id/class が割り当てられているものもあれば、そうでないものもあります。スタイルが CSS によって直接要素に割り当られていると、 DOM で新たにノードを追加したときに予期せぬ表示が行われます。既存ページへの被害を押さえるために、 CSS への変更は行わず追加したノードに対して !important をスタイルに割り当てて回避しています。
一方 JavaScript ではセレクター、 XPath を使ってノードを特定しやすい構造が好まれると思います。 id や class 属性を変えると、スタイルが崩れるだけでなく動作もしなくなります。個人責任とはいえグリモンもあっという間に使えなくなります。
DOM による構築は当たり前になっていますが、これからより DOM を利用する機会は増えてくると思います。既存ページへの拡張を行うといったときに、誰でもスムーズに拡張が行えるようなそんなページをつくれるように意識したいところです。
現時点でページをつくるときに自分が意識していることです。
Subversion と Git の連携で困っていたことがあって、 何も考えず Git でコミットしたものを Subversion に dcommit すると Git でコミットしたものがすべて Subversion にそれぞれコミットされてしまっていました。
バージョン管理としては正しい動きなんですけど、 Git ではあくまで個人の話しだけにしたいのです。で、ようやく Git のマージのときにオプションを与えると、コミットしないでマージだけしてくれることを知りました。
$ git merge --squash branch
やりたいことを実現するための手順としては
これで他の人からは Git の中の細かいコミットが見えなくて、 Subversion を見るとひとつだけのコミットになります。
必要になることがあるのかと言えば、実際はタスクを小さくすることで Subversion だけで十分だと思います。それでも大きな修正の場合まだコミットできない(と感じてしまう)状態が発生するので、そんなときに連携できると幸せなのかなあと思います。
後はコンフリクトが発生したときに冷静に対応できるかどうかが、個人的な課題でしょうか。
Time Capsule - 2TB - Apple Store (U.S.)
Time Capsule 買った - Ussy Diary(2009-06-20)
自分が Mac 関連の製品を買うと、次の WWDC で購入した製品に何らかのアップグレードが発表されますので、 9 月あたりに 2TB が出るんじゃないのかなあと思っていますw
計画通り
いやあ・・・さすがに一月は辛いですね。
以前は無線 LAN に Corega を使っていたのですが、 MacBook の接続がプツプツ切れてダメダメでした。 Time Capsule にしてから切れることはありません。会社のルーターも別のメーカーみたいですけど、接続が切れたりするんで相性が激しいのかなあ。
家の Time Capsule は元気に稼働していますが、この時期はすごくアツアツでいつ壊れるかヒヤヒヤしています。
ATND Event Search をメディアテクノロジーラボさんに紹介してもらいました。
ATNDのイベント情報を検索できるAPIをつくりました : Media Technology Labs (MTL) : メディアテクノロジーラボ ブログ
見られている感が急に出てきて、他の公開している人のものと比較すると恥ずかしくなってきたので、放置していたデザインに手を入れました。あんまり変わっていない気もします。
機能追加もしました。 Google Map へのリンクをつけました。 ATND API からは住所とビルなどのロケーション情報が取れるのですが、ロケーションの情報を含めると表示されないことが増えるため、 Google Map には住所だけ渡すようにしています。
それから開始日付でソートするようにしました。できればサーバーで指定できたりするといいのですが、ないのでクライアントで実装しました。
不満っぽいのは個人的になくなり、これ以上重くしたくもないので機能はこれ以上入れることはないと思います。ですけど iPhone(touch) でも動くことは確認できたので、 iPhone の表示対応できたらします。
# Haru Iida [紹介していただきありがとうございます。作者です。コミットする前にレビューしたいという意見は他の人からももらってるんで..]
# Ussy [とんでもないです。リポジトリを利用したものとして便利だったので紹介させてもらいました:D こちらはレビューの経験が..]