長い時間がかかるテストを実行してる間に。 もはやテストがない開発なんて考えられないけれど、 テストの実行時間が昔のコンパイル時間のように感じられます。

ちょっと前にデスクトップPCがPCの主流をノートPCに譲ったように、 iPhoneのようなモバイル端末がノートPCに取って代わるのは時間の問題であるように思います。 このような世代交代は、かつて人類が何度も経験してきたことであり、 ことコンピュータに関する限り、プログラマーという人種は最先端のデバイスを使いこなしてきたのですが、今回の大波を乗りこなすのはちょっと大変なんじゃないかと思っています。

モバイル端末の小さなキーボードや、iPhoneのようなソフトウェアキーボードにしても、どうにもこうにもプログラムを書くには不便すぎるのです。 プログラムを書くための環境は、デバイスの進化の本流から零れ落ちてしまうのでしょうか。

その昔、プログラマーがパンチカードを捨てて、キーボードによるプログラミングを覚えて以来、長いことお世話になってきたキーボードが、 プログラマーを椅子に縛り付ける鎖となってしまうのかもしれません(ノートPCがあれば多少は動けるでしょうが、iPhoneの機動性とは比べるべくもないですね)

そうならないようにするためには、モバイルキーボードに特化した言語を考える事も意味があるかもしれません。例えば、10個のアルファベットからなる英語のサブセットみたいなものを考えたら良いでしょうか?(Brainf*ckよりもっとフレンドリーなものを希望) それとも記号をなるべく使わないプログラミング言語を考えたら良いでしょうか。

あるいは、キーボードではない入力方法でコーディングをする事を考えるべきでしょうか。図形を並べるようなプログラミング手法をGUIで行うようになるのでしょうか。

はたまた、プログラムを作るためのデバイスと、プログラムを使うためのデバイスは、永久に袂を分かつ事になるのでしょうか。

posted by Png genki on Mon 30 Jun 2008 at 18:39

I had moved main repository of ShootingStar from Rubyforge to GitHub, because I am difficult to develop it actively for a while, so that you can customize it independently if you want.

The page of ShootingStar is here:

I appreciate any feedbacks via twitter to @takiuchi.

posted by Png takiuchi on Sun 29 Jun 2008 at 12:18

このブログシステムは、今までmongrel_clusterで動かしていましたが、 passenger-2.0.1に移行しました。

特に不具合もなく動いているようです。 また、今までmemcache-clientの挙動が安定していなかったのですが、 なぜかpassengerにしたら解決。

posted by Png genki on Sun 29 Jun 2008 at 03:59

RubyProfを使って、Railsアプリのプロファイリングをする方法を紹介します。

まずは、ruby-profをGemでインストールします。

   1  % sudo gem install ruby-prof

インストールが完了したら、ruby-profプラグインをRailsアプリにインストールします。 ruby-profプラグインは、Gemがインストールされたディレクトリの下にあります。 環境によって場所は変わりますが、例えば/usr/local/lib/ruby/gems/1.8/gems/ruby-prof-0.6.0/rails_plugin/ruby-profなどの場所にあります。

これをvendor/plugins/ruby-profにコピーすれば設定は完了です。

あとはproduction環境でRailsアプリにアクセスすると、以下のようなログが出力されます。

   1  Thread ID: 3076980460
   2  Total: 2.030000
   3  
   4   %self   total   self   wait  child  calls  name
   5   20.20    0.80   0.41   0.00   0.39   1649  Array#each_index
   6    8.87    0.25   0.18   0.00   0.07 106376  Kernel#===
   7    3.94    0.11   0.08   0.00   0.03   3044  <Module::Marshal>#load
   8    3.94    0.08   0.08   0.00   0.00  26468  PGresult#type
   9    3.45    0.21   0.07   0.00   0.14   3044  <Class::Thread>#exclusive
  10    3.45    0.07   0.07   0.00   0.00 106761  Fixnum#==
  11  (** snip **)

See Also

posted by Png genki on Sat 28 Jun 2008 at 18:11

caches_pageとの違い

caches_actionはcaches_pageと似ていますが、依然としてすべてのリクエストがAction Packを通って処理されるようになっています。これは認証や他の制限をつけたいときに便利です。

"/lists"と"/lists.xml"は別々にキャッシュされる

また、http://blog.s21g.com/listsとhttp://blog.s21g.com/lists.xmlは異なるリクエストとして処理され、別々にキャッシュされます。つまり、:action => "lists"のキャッシュが無効になったからといって、:actioin => "list", :format => ":xml"も無効になるわけではありません。

キャッシュの無効化

expire_actionでキャッシュを無効化できます。Sweepwerを使って処理、タイミングを書く。caches.rbのサンプルを抜き出します。

   1  class ListSweeper < ActionController::Caching::Sweeper
   2      observe List, Item
   3  
   4      def after_save(record)
   5         list = record.is_a?(List) ? record : record.list
   6         expire_page(:controller => "lists", :action => %w( show public feed ), :id => list.id)
   7         expire_action(:controller => "lists", :action => "all")
   8          list.shares.each { |share| expire_page(:controller => "lists", :action => "show", :id => share.url_key) }
   9        end
  10     end
  11   
  12  class ListsController < ApplicationController
  13      caches_action :index, :show, :public, :feed
  14      cache_sweeper :list_sweeper, :only => [ :edit, :destroy, :share ]
  15  end

Refs

vendor/rails/actionpack/lib/action_controller/caching.rb
http://scottstuff.net/presentations/rails-caching/ かなり詳しい
http://www.ibm.com/developerworks/web/library/wa-rails1/
http://www.hostingrails.com/forums/rails_coding_thread/386

posted by Png satoko on Sat 28 Jun 2008 at 01:19

昨日、今日と二日続けてrepoが壊れたので解決策を探ってみました。コミットはこまめにしておくのが吉だと思います。

   1  $ git status
   2  error: bad signature
   3  fatal: index file corrupt

git-fsck --fullというコマンドも試してみたのですが、やっぱりだめ。というわけで、ダメもとで下記をやってみたらすんなり復旧できた。yay!

After trying many things, I deleted .git/index and ran git-reset which regenerated the file.
http://www.nishioka.com/blog/2008/01/source-control-with-git-and-cygwin.html

つまり下記でok!

   1  $ rm .git/index 
   2  $ git reset

Refs

http://www8.atwiki.jp/git_jp/pub/Documentation.ja/user-manual.html#recovering-from-repository-corruption

おまけ

誰かがバグを修正してコミットしてくれて、自分の手元のrepoが古くなったとき、rebaseすれば最新のをfetchしてきてくれます。

   1  $ git svn rebase

posted by Png satoko on Thu 26 Jun 2008 at 11:20

via http://groups.google.com/group/twitter-development-talk/browse_thread/thread/6f24e47cca5b68f6

We've successfully moved to the OpenFire Jabber server, and now have far more visibility into our XMPP services overall.

だから20req/hr制限なのかしら。
それにしても、早くtrackを復活させて欲しいです。
http://twitter.com/account/rate_limit_status.xml

OpenFireとは

Javaで書かれているそうです。twitterが以前使っていたejabberdはErlang。そしてあんまり情報がない...

Openfire (formerly Wildfire) is a real time collaboration (RTC) server dual-licensed under the Open Source GPL and commercially. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber). Openfire is incredibly easy to setup and administer, but offers rock-solid security and performance.
http://www.igniterealtime.org/projects/openfire/index.jsp

twitterが以前使っていたJabberServer:ejabberd

http://www.jabber.org/servers/ejabberd
http://www.atmarkit.co.jp/news/200704/27/erlang.html

Refs

http://www.jabber.org/servers
http://www.jabber.org/servers/openfire

posted by Png satoko on Wed 25 Jun 2008 at 15:39

GitHubで公開されているRailsプラグインをインストールする方法のメモです。

ここでは例としてexception_notificationプラグインをインストールしてみます。 とはいっても特に変わった事をする必要があるわけではなく、 SVNリポジトリからインストールするのと同様に、GitHub からプラグインのURIを調べてきて、以下のようにインストールします。

   1  % ./script/plugin install git://github.com/rails/exception_notification.git

これでOK。 きちんとGitHubからcloneしてきたプラグインディレクトリの.git ディレクトリを削除してくれます。

posted by Png genki on Wed 25 Jun 2008 at 00:14

さて、今回はyuguiさんの「初めてのRuby」の紹介です。

初めてのRuby
初めてのRuby
posted with amazlet at 08.06.24
Yugui
オライリージャパン
売り上げランキング: 897

本書は、プログラミング経験者向けに書かれたRubyの入門書(嬉しい1.9対応)です。 僕のようにRailsからRubyに入った人にもお勧めです。 200ページ前後と手ごろなボリュームで、浅いところから深いところまで、Rubyに関する一通りの事がわかりやすくまとまっているので、頭から最後まで通して読むのがいいと思います。

時空を超えて、3年前の自分に一冊だけRubyの本を送れるとしたら、 本書を選びたいですね。

posted by Png genki on Tue 24 Jun 2008 at 00:58

RubyKaigi会場にて、もろはしさんから、はてなスターを連打できないのはけしからんという訓示をいただきましたので、cuzicさん主催のHackathon会場からささっと対応してみました。

とはいっても、CSSで以下のようにRtoLのDirectionを指定しているだけです。

   1  .star{unicode-bidi: bidi-override}
   2  .star{direction: rtl}

追記

沢山ついたStarが数字で省略された場合に、 数字部分が左右反転されてしまうと都合が悪いので、 さらに以下のようなCSSを記述しました。

   1  .hatena-star-inner-count {unicode-bidi: bidi-override}
   2  .hatena-star-inner-count {direction: ltr}

posted by Png genki on Sun 22 Jun 2008 at 00:08