2009-07-02
■ [misc] chumbyを買ってみようかと思ったのだが
こんな但し書きが……。
「chumbyの日本語版ください」
「色はどれがよろしいですか?」
「じゃあ、青で」
「在庫の関係上インターナショナル版が届く場合があります。予めご了承下さい。」
「えっ」
「えっ」
「日本語版じゃないんですか?」
「日本語対応版chumbyが購入できます。」
「でもインターナショナル版かもしれないんですよね」
「在庫の関係によっては、そうなりますね」
「なにそれこわい」
「えっ」
「えっ」
あとブルーの拡大画像が青くないのもこわい。
(※上記の会話は妄想です)
何より「日本語対応版」と「インターナショナル版」の違いがわからないのがこわい。 インターナショナル版が届いても、手作業でアップデートすれば日本語対応版と同等になるっていう認識でいいのかな? そこを明示してくれないと上のような会話を妄想してしまう。
2009-07-03
■ [misc] 6月のサブブログ
- Unicodeを活用したTODO管理方法
- いろんなソフトウェアがUnicodeに対応している昨今なので、もっとUnicodeの絵記号が広く使われてもいいんじゃないかなと思って書いてみたらOpera(9.62)でうまく表示できなくて悲しい気分になるなどした。
- 家に帰ってから「あの人だったのか!」と言われないための勉強会用名刺
- 名刺の裏をどう使うかについて書いた。
- 「600万人の女性に支持されるクックパッドというビジネス 」
- という本の書評を書こうと思ったのだが、書評とか書いたことないことに気づいて単に覚え書きみたいになった。
だいたいこれくらいのペース(週1弱)で書いていこうかなと思っています。飽きたらやめます。
■ [haskell][sinatra] SinatraのHaskell移植版があるらしいんだが
その名前はどうなのw
まあ文字列処理最強と言われるHaskellだし(Haskellのリスト処理は最強→Haskellでは文字列はリスト→Haskellの文字列処理は最強、という論理だったような)、 手軽にWebアプリを書いて遊べるとなると良い練習になるかも知れないですね。
experimentalと書いてますが、同じ作者によるRackのHaskell移植もある模様。
■ [ruby] Ruby1.9のM17Nを理解するための英語連載記事
というものを見つけた。
1から3が概要編、4から7が1.8編、8から11が1.9編ですね。
- 文字エンコーディングって何?
- Unicodeの文字集合とそのエンコーディング
- エンコーディングを扱う基本戦略
- Ruby 1.8における文字とバイト列の扱い
- $KCODEとjcode
- iconvによるエンコーディング変換
- Ruby 1.8の文字処理の問題点
- Ruby 1.9の文字列オブジェクト
- Ruby 1.9の3つの「デフォルトエンコーディング」
- Ruby 1.9のM17Nについてのあれこれ (Encodingクラス、エスケープ、バイナリデータ、正規表現、BOM)
- Ruby 1.9のM17Nのメリット
[誰か訳して]
■ [scheme] 「継続」という概念がScheme発祥だと思ってた人の数→
→(1)
継続 (continuation) の概念は、元々は goto 文をもつ命令型言語の表示的意味論を定義するために発見された[18]。
[例外処理機構を備えた命令型言語のCPS変換とその定式化より引用]
なんだってー。
[18]の論文を探してみたのだけど、 無料で読めるところはなさそう。
■ [mac] Time Machineはじめました
「Time Machine」と呼ばれる、Mac OS X(Leopard)標準のバックアップシステムを稼働させてみた。あのpdumpfsみたいなやつです (元ネタの「dumpfsみたいなやつです」と言うべきか)。
まずは外付けHDDを買う。気づいたら、外付けでも1TBで1万円ちょっとですよ。安いなぁ…。
んで、半分くらいはWin機のバックアップに使う(かもしれない)ので、とりあえずパーティションを二個に分けて、前半をMacの、後半をWinのフォーマットに。 このへんはMac付属の「ディスクユーティリティ」で簡単にできる。
あとはTime Machineの設定でHDDを指定すれば、初回のバックアップが始まる。これが、全容量が120GBの癖に4時間くらい?かかった。 けどそれ以降は差分だけバックアップなので、1日作業してからHDDを繋いでも5分もかからない。
とりあえずさっき2回目のバックアップが済んで、例の「タイムマシーンに入る」ができるようになった。満足です(笑)。
2009-07-05
■ [ruby] Process.spawnを使ってみた
髪を切りに行ったら「痩せましたね」って言われたyharaですこんばんわ。俺の体重、どこいってしもたんや…。 早くRubyKaigiを終えて(健康的に)太りたいです。(本当は、この程度のプレッシャーで痩せたりしないようになりたいんですけど *1)
今日の調査。
- Process.spawnがすごいことになってる
といいつつ、今回は基本的な使い方を。
loop.rb
puts "starting loop with ruby #{RUBY_VERSION}.. / #{ENV['TEST']}" sleep 2
runner.rb
puts "invoking loop.rb" pid = Process.spawn({'TEST' => "hello"}, "ruby loop.rb") Thread.new { ret = Process.waitpid2(pid) puts "process ended: #{ret.inspect}" } 5.times do |i| puts "count #{i}" sleep 1 end
んで、実行結果が
D:\proj2\ruby-station>ruby runner.rb invoking loop.rb count 0 starting loop with ruby 1.9.1.. / hello count 1 count 2 process ended: [1456, #<Process::Status: pid 1456 exit 0>] count 3 count 4
のようになりました。Windowsです。いい感じですね。
*1 院試(2005)と就活(2007)の時も痩せてた気がするので、2年ごとに痩せる周期なのかも…
2009-07-07
■ [mac] Time MachineがVMWareのイメージを毎回バックアップするので困ります
仕事行く→家帰る→外付けHDD繋ぐ→残り容量が5GB減る
これを週5回繰り返すと2週間で50GB、一月に100GB、一年もしないうちに1TBのHDDが埋まってしまう。やばい。
でかいファイルは差分バックアップだったら良かったなー、なんて…。重そうだけど。
(追記:そういや全回のバックアップが保存されるわけではなかった。 当日の分が最大24個、当月の分が最大30個、残りは1週間ごとなので、1TBに達するには146週が必要。)
■ [prog] Chrome(Chromium)の開発プロセスはGoogle社内のそれに近いらしい
という話をFSIJのイベントで聞いた。
ChromeはGoogleが開発しているブラウザで、開発初期は非公開プロジェクトだったわけだけど、 最初のリリースと同時期にオープンソースになり、「Chromium」という名前で開発が続いている。 現在のChromeのコードは、Chromiumのコードと「ほとんど違わない」そうだ(ロゴが違ったりするなど)。
そういう事情で、ChromiumはGoogle社内と似たようなプロセスで開発されているらしい。
- コミッタのコードレビューを通らないとコミットできない
- レビューが通るまで、パッチの改良を続けるらしい
- 例:http://codereview.chromium.org/146078
- build botによる、さまざまな環境上での自動ビルド
- Design Doc (参考)
- 例1:Ruby design document (Rubyって、<ruby>タグの方ね)
- 例2:HTML5 Web Socket Design Doc
- その他:http://sites.google.com/a/chromium.org/dev/developers/design-documents/
2009-07-09
■ [ramaze] ramaze-usersの最近の更新
ドメイン取ってないのでタイトルから「.jp」を外しました。
- テスト : Ramazeアプリのテスト方法について。Webratのリファレンスもあります。
- DataMapper/プラグイン : DataMapperの標準プラグインの一覧。
DataMapper/Sequel/ActiveRecordの解説あたりは、SinatraとかMerb方面の人にも役立つんじゃないかなと思います。
2009-07-13
2009-07-15
■ [ruby] RunCodeRun : githubと連動した継続テストサーバが登場
githubにコミットするごとにサーバでビルド・テストを走らせ、結果をリポートしてくれるらしい。
テスト結果の例。
OSSプロジェクトは無料。有償で、非公開プロジェクトにも使えるらしい。
2009-07-16
■ [mac] iTouchでメモの同期ができるのだけど
iPod TouchのOSバージョンいくつかから、「メモ」で書いたテキストをPCと同期できるようになった。
が、iTunesを見渡してもどこに保存されているのか分からない。
どうもMail.appのメモ欄に保存されるらしい。
…いや、Mail.app使わないし!
これならEvernote使った方が便利かなぁ。
2009-07-17
■ [ruby][event] RubyKaigi2009で発表予定の内容
について、一応書いておきます。日曜午後の1Fの部屋です。
一応、「Exerb」「RubyScript2Exe」「Ocra」「Crate」といった Rubyスクリプトをexe等の実行形式に固めるツールの紹介をするのですが、 実はそれはおまけで(なんでおまけなのかは当日話します)、 Rubyアプリをgem経由で配布するための環境「RubyStation」と、 「ブラウザをデスクトップアプリのGUIとして使う」という試みの提案が本題です。
松江Ruby会議01で話したものの実装ができましたよ、という話だと思ってもらえば良さそうです。 できましたよっていうか、まだリリースしてな……(省略されました
海外の方がけっこう多そうなので、スライド英語にした方がいいかなぁ。(喋るのは日本語です)
2009-07-19
□ Yuya [R.I.P. Exerb!ww]
2009-07-21
■ [rubystation] Re: http://www.kumaryu.net/cgi-bin/diary/?date=20090721#p01
スピーカ権限でいただいたircのログを見たら、見事にzipがバズワード化していて満足した。
- iTunesのAppStoreみたいな奴はぜひやりたいです。アプリの管理画面でアイコン画像が並んでるみたいにしたいんです。
- gemについては、特にこだわってるわけではないので、もっと良い配布インフラができたら(ripとか)、そっちに移行することはあり得ます。
- 「リンクを踏むとインストール」については、「http://localhost:2534/apps/add/someapp 」とか書いておけば今でもできそうですが(もちろん確認画面は必須)、ユーザがポート変えてたらどうするんかなぁ。
あとRubyでゲームがAwayということはつまりCHANGEであるということだから今回の趣旨にとても合致していたんではないでしょうか。
2009-07-22
■ [ruby][prog] Hello Worldの次に何を書けばいいかについて
やっぱりHello Worldじゃないですかね?
puts "Hello, world!"
Arrayを使ったHello World
ary = ["Hello", "world!"] puts ary.join(" ")
Hashを使ったHello World
hash = {:greet => "Hello", :to => "world"} puts "#{hash[:greet]}, #{hash[:to]}!"
Enumerableを使ったHello World
chars = %w(H e l l o , \ w o r l d ! \ ) chars.each{|c| print c }
こういう感じで100個くらい書くといい練習になるんじゃないかと思った。
いろんなメソッドを使ってみるのが目的なので、冗長であっても構わないルールとする。
■ [opera] Operaのウィジェットで、プレゼン時間の管理用タイマーを作った
スクリーンショット。
RubyKaigiでは「20分弱で前半を終わり」「35分で後半も終わる」という計画に忠実にスライドを進めることができたが、 その主たる理由はこのタイマーがあったからだ。
Opera Widgetとは、画面にフロートする小さなウィンドウを表示するOperaの機能である。最前面に表示したりもできるので、 現在時刻・経過時間を表示するプレゼンタイマーにはぴったりだ (もちろん、使うのにOperaが要るけど)。
作り方は、ソースを見ればわかるけど単なるHTML+CSS+JavaScriptだ。あとはconfig.xmlという設定ファイルを少し書くだけ。 一応Opera公式にも登録してみたけど(審査待ち)、 ここからzipを取ってきて、config.xmlをブラウザにD&Dすれば普通に使うことができる。
一応使い方を書いておくと、input boxにプレゼンの分数(今回は35だった)を入れて、input boxの外("min"のあたりとか)をクリックする。 すると時間がリセットされ、カウントアップが始まる。 (なんで残り時間ではなく経過時間を表示するのかというと、その方が使いやすいからだ。まあ好みかも知れんけど。)
余談だが最初はBiwaSlideを改造して同じ情報を表示してたのだけど、デモの間に時計が見えないことに気づいて、Opera Widgetを使う作戦に変更した。 すごく手軽に作れることが分かったので、何か画面上に常駐させたいものを作るにはいいんじゃないかな。
2009-07-24
2009-07-28
■ [book][lisp] Let Over Lambdaを読んでCommon Lispに興味を持った
途中まで読んだ。
4434133632
Lispマクロを使っていろいろ遊ぶぜ!という本。内容は濃いけど、章(テーマ)が7つあり、一つ一つの節は短めなので少しずつ読んでいくことができる。
Lisp方言には「Common Lisp」と「Scheme」(あとArcとかClojureとか)があるわけだけど、 本書で「Lisp」と書いてあればCommon Lispの方を指す。だからLispコンパイラの存在は当然だし、リーダーマクロもある。 第3のアンクオート「,.」とか全く知らなかったぜ。
んでまあ、マクロと関係ないんだけど、Schemeはシンプルさを取るために、Lispが持っていたいろいろなものを切り捨ててるんだなぁというのを今さら。 loopマクロとか、「Common Lisp使いの書くLispプログラム」を見てるとSchemeとは結構雰囲気が違って、昔のLispというか、伝統というか、「濃い」というか、 「"Lisp"らしい」雰囲気を感じた。
R6RSには構造体とかライブラリとか色んなものが入ったけど、CLはずっと前からそれを持っている。良いデザインをするためには時間が必要で(と最近思うようになった)、 成熟しているというのはそれだけで魅力的に見える。
Common Lispも面白そうだ。
おまけ
一応書いておくと全くもって初心者向けの本ではないので、Lisp知らないよっていう人は「On Lisp」…は読んでなくても大丈夫だけど「ANSI Common Lisp」か「実践Common Lisp」は 読んでおかないと意味不明かも。
4274066371
ボトムアップ(「リストとは何か」から始まるような)が好きな人は「ANSI」、手を動かしながら学びたい人は「実践」がいいよ。
4894714337
4274067211
■ [git] Gitのコマンド名はBitKeeper由来なのか?
LinuxカーネルはBitKeeperというVCSを長らく使っていたが、その有料化と共にGitに移行した。 という歴史を鑑みれば、Gitのコマンド名がBitKeeperの影響を受けていてもおかしくはない (そして、LinusのSubversion嫌いを考えればSubversionの影響が全くなくてもおかしくはない) のだけど、実際はどうなんでしょう。
BitKeeperのサイトのチートシートを見てみる。
リポジトリの複製が(svnのように)checkoutではなく、Gitと同じcloneになっている。 git cloneはここから取られた可能性は大きそうだ。
#ちなみにBitKeeperのコマンド名は「bk」。バッドノウハウにしか見えないw
svn/gitで意味が異なるコマンドというとあとはaddが思いつくのだけど、なんとbk addというコマンドは存在しないようだ。 ファイルの追加はbk newで行う。じゃあgit addじゃなく、git stageで良かったんじゃないかなぁ…。
2009-07-29
■ [ruby] RubyからJavaScriptのテストも行うためのライブラリあれこれ
RailsなどのWebフレームワークでは、「rake test」一発でWebアプリのテストが走ってくれて楽ちんなわけですが、 JavaScriptのテストは手作業でやってたりしませんか?
「rake test」でJavaScriptのテストもやってしまうためのライブラリがいろいろ出てきてるようなので、列挙してみました。
ブラウザを使うもの
実際にブラウザを起動し、それをRubyからコントロールすることでWebアプリのテストを行う。
Selenium
有名ですね。
調べてないんだけど、Rubyからも使えるし、JavaScriptを操作したりもできるんじゃないですかね(投げやり)。レポート求む。
Watir (RubyForge) #どっちが公式サイトなんだろう
Rubyからブラウザを起動し、操作する。
IE(Win)、Firefox(Win/Mac/Linux)、Safari(Mac)、Chrome(Win)をサポートしていると書いてある。充分ですね(Opera…)。あとFirefoxではFlashのテストもできると。
イベントの発火とかは簡単にできるみたい。 あとは、指定した要素が出現するまで1秒ずつ待ったりしてテストを行う。 (「ある座標の要素をクリック」とかになると結構大変そうだ。)
ブラウザを使わないもの
ブラウザは起動せず、spidermonkeyなどでJavaScriptをエミュレートすることでテストを行う。
Celenity
Java用のGUI-lessブラウザHtmlUnitをJRubyでラップしたもの。 JavaScriptのエミュレートにはRhinoを使用。jQueryやPrototype.jsなど、主要なライブラリは動作を確認しているそうで心強い。
WatirとのAPI互換を目指しているそうで、ブラウザを起動しない(ので速いはず)のがメリットか。
JRuby用のライブラリなので、Cの拡張を使ってるRailsアプリはテストできない…と思いきや、 JRubyでCelenityを、CRubyでRailsを動かし、その間を取り持ってくれるculerityというプロジェクトがある模様。 テストフレームワークはCucumber限定だけど、JRuby on Railsでうまく動かなかった場合には試すといいかも。
JSpec
JavaScript用のテストフレームワーク。…なのだけど、Rhinoを使ってコマンドラインからテストを実行する機能がある。
Railsから使う場合はjspec-railsを使うと簡単。
BlueRidge
JavaScriptのテストを行うためのRailsプラグイン。 JavaScriptのエミュレートにはRhinoを、ブラウザ環境のエミュレート(windowとかdocumentとか)には env.jsを使う。
JavaScriptのテストフレームワークにはScrew.Unitを、 モックライブラリにはSmokeを使う。 とりあえずサンプルアプリを動かしてみると良いです。
johnson + nokogiri + taka
NokogiriはHTMLパーサ、JohnsonはRubyで書かれたJSインタプリタ、TakaはRubyによるDOM実装。
まだ開発途上?
関係ないもの
Webrat
この日記でも一度紹介済み。Webアプリのテストを書きやすくしてくれるが、JSのテストはできない。
んで結局どれ使えばいいのさ
ってとこですかねぇ。
まあThe Ruby Toolbox: Browser Testingで 人気のやつを使えばいいんじゃないの!
■ [ruby] Rakeを使って複数Rubyな環境を作る
ためのRakefileを書いてみた。
/Users/yhara/research/rubys % rake -T (in /Users/yhara/research/rubys) rake jruby # install jruby rake rubinius # install rubinius rake ruby185 # install ruby-1.8.5 p231 rake ruby186 # install ruby-1.8.6 p369 rake ruby187 # install ruby-1.8.7 p174 rake ruby191 # install ruby-1.9.1 p129
という感じです。実行すると~/bin/rubys 以下にインストールされ、~/bin/ruby185みたいなシンボリックリンクができる。
MacRubyもRakeで入れたかったんだけどうまく行かなかった…。IronRubyはまだ試してない。
□ ujihisa [見てみた。チケットとれなかったお方なのかな]