Sooey

2011-05-20 01:41:37 +0900

ChromeのブックマークバーにPinboardのpopupブックマークレットを置いてあって、Bookmarks Bar Keyboard Shortcutsを利用してCtrl+2でブックマークレットが起動するようにして使っていたんだけど、Chrome 12になったあたりからCtrl+2を押しても何も起こらなくなってしまった。

Pinboardのブックマークレットはこんなの。

Bookmarks Bar Keyboard Shortcutsでちゃんと起動するブックマークレットもあるので、ブックマークレット自体のコードに原因があるんじゃないかとあたりをつけて調べたところ、open()の引数に不要な%20が混ざっているのが直接の原因みたい。

上のように%20を取り除いたコードに書き換えたところ、Pinboardのブックマークレットもちゃんとキーボード操作で起動することができるようになった。

Google Readerの以下のブックマークレットも同様で、

%20を半角スペースに置換したら、キーボードから呼び出せるようになった。

2011-05-19 06:17:00 +0900

Herokuでこの間発生したHTTPおよびGit接続ができない障害について詳細報告が出た。

Root domains are aesthetically pleasing, but the nature of DNS prevents them from being a robust solution for web apps. Root domains don't allow CNAMEs, which requires hardcoding IP addresses, which in turn prevents flexibility on updates to IPs which may need to change over time to handle new load or divert denial-of-service attacks.

We strongly recommend against using root domains. Use a subdomain that can be CNAME aliased to proxy.heroku.com, and avoid ever manually entering IPs into your DNS configuration. We also recommend a low TTL value, which will allow Heroku network engineers to quickly make changes to DNS mapping when necessary.

今回のようなケースで、迅速にconnectivityが復活するようにするには、example.comのようなルートドメインをHerokuのIPアドレスに向けるような設定・運用は避けて、サブドメインがproxy.heroku.comを指すようCNAMEを設定するほうがいいみたい。

2011-05-18 14:06:57 +0900

Erlangも面白そうで本も買ってあるんだけど、LLで育ってきたヌルいプログラマーにはなかなかハードルが高い。

そんななか、コペンハーゲンで開催されたソフトウェア開発のカンファレンス GOTO Copenhagen 2011にて、デンマークのデベロッパ Trifork社のCTOであるKresten Krab Thorup氏がオブジェクト指向とアクターモデルを対比させてErlangの魅力について紹介したスライドがありました。なかなか面白い。

2011-05-16 07:05:50 +0900

Rails 3.1ではjQueryが標準になるそうなので、すぐに要らない知識になるかもしれませんが、Rails 3.0でのjquery-railsの使い方を残しておきます(このエントリの対象はjquery-rails 1.0.2)。

まず、Gemfileに以下のような記述を追加して、bundleします。

gem 'jquery-rails''

ジェネレータを実行して、不要なファイルの削除と必要なファイルの生成を行います。

$ rails g jquery:install

このジェネレータによって、prototype.js関連の以下のファイルが削除され、

  • public/javascripts/prototype.js
  • public/javascripts/effects.js
  • public/javascripts/dragdrop.js
  • public/javascripts/controls.js

jQuery関連の以下のファイルが生成されます(jquery-rails 1.0.2の場合はjQuery 1.6がインストールされます)。

  • public/javascripts/jquery.js
  • public/javascripts/jquery.min.js
  • public/javascripts/jquery_ujs.js(各種ヘルパーで生成した要素にイベントハンドラを設定したりするもの。かつてのrails.js

jQuery UIのファイルもあわせて生成する場合はジェネレータに--uiオプションを指定します。

$ rails g jquery:install --ui

この場合、以下の2つのファイルも生成されます。

  • public/javascripts/jquery-ui.js
  • public/javascripts/jquery-ui.min.js

あとは、config/application.rbで以下のようにデフォルト(:defaults)で読み込むJavaScriptファイルを指定して、

# JavaScript files you want as :defaults (application.js is always included).
config.action_view.javascript_expansions[:defaults] = %w(jquery.min jquery_ujs)

レイアウトファイルなどからjavascript_include_tagヘルパーを使い:defaultsをインクルードさせます(当然、個別にSCRIPT要素で指定しても問題ない)。

<%= javascript_include_tag :defaults %>

jquery-railsがアップデートした場合は(バンドルされるjQueryのバージョンアップ時など)、ジェネレータを再度実行して*.jsファイルを上書きしたものをリポジトリにコミットすればOK。

なお、ヘルプによると--versionオプションを指定することで、インストールされるjQueryのバージョンを明示できるようですが、今の実装だと1.6が固定でインストールされるような気がします。

2011-05-09 17:29:48 +0900

Webアプリケーションへのエントリポイントは1つだけとは限らない。たとえば、一般的なRailsアプリケーションなら、Webサーバープロセスへのリクエスト経由で動き出す場合と、delayed_jobやResqueといったジョブキューのワーカープロセス経由で動き出す場合があったりします。

普段、開発環境なんかではrails serverしつつ別ターミナルでrake jobs:workしておいたりしますが、HerokuのDavid Dollarさん(He also maintains heroku.gem!)がリリースしたForemanというgemを使うと、こういった複数の種類のプロセスを一括して管理できるようになるみたいなので、試してみました。

まず、foremanをインストール。

$ gem install foreman

例えば、delayed_jobを使ったRailsアプリケーションの場合、Procfileというファイルにこんな感じでプロセスタイプを定義する。

web:    bundle exec rails server
worker: bundle exec rake jobs:work

foreman startすると、それぞれのプロセスタイプ毎にプロセスが立ち上がって、それぞれのプロセスの出力がHerokuのログっぽく統合して出力される(実際はちゃんとカラフルに色分けされます)。

$ foreman start
02:18:23 web.1     | started with pid 51353
02:18:23 worker.1  | started with pid 51356
02:18:28 worker.1  | (in /Users/juno/src/my-awesome-app)
02:18:45 web.1     | => Booting WEBrick
02:18:45 web.1     | => Rails 3.0.7 application starting in development on http://0.0.0.0:3000
02:18:45 web.1     | => Call with -d to detach
02:18:45 web.1     | => Ctrl-C to shutdown server
02:18:55 worker.1  | [Worker(host:galois.local pid:51358)] Starting job worker
02:18:57 web.1     | [2011-05-10 02:18:57] INFO  WEBrick 1.3.1
02:18:57 web.1     | [2011-05-10 02:18:57] INFO  ruby 1.9.2 (2011-02-18) [x86_64-darwin10.7.0]
02:18:57 web.1     | [2011-05-10 02:18:57] INFO  WEBrick::HTTPServer#start: pid=51355 port=3000

終了するにはCtrl-C

とても簡単で良くできています。

もっと掘り下げた話は、Introducing ForemanApplying the Unix Process Model to Web Appsをどうぞ。