wwwを取る

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.noukotsu.net$ [NC]
RewriteRule ^(.*)$ http://noukotsu.net$1 [R=301,L]

wavからmp3へ変換

ffmpeg -i input.wav -ab 128 output.mp3

一日ほど、ドリホのfijiサーバー(俺の借りてるとこ)が落ちてました。

仕事のRedmineも全部ここに入れてたので参った参った。

やっとここにコメント実装した。 シンプルなJS-Kitみたいの作るのはそんなに大変じゃないだろうと思ってたんですが、意外にかかった。

特に久しぶりに触ったJavaScriptでかなりハマった。JS-Kitみたいに殆どをJS側でやるのでDOMを構築するライブラリの簡単なものを作ってしまった。

既存のライブラリを使うほどでもないのでJQueryとMochiKit見比べてDOMの部分は何故かMochiKitに惹かれるものがあったので似たのを実装。

おかげで本体はクリーンなままだが、コメントサーバーも維持しなくてはならなくなった。

日本 Ruby 会議 2007 – The Island of Ruby

生産性

Rubyを愛する理由は他にもある。

自分をかっこよく見せてくれる。生産性を高めてくれるんだ。

そこにはどういう理屈があるか。ある研究によれば、生産性はそれぞれのプログラマでそれぞれ違う。でも、あるプログラマに着目すれば、そのプログラマが時間あたりに書けるコードの行数は、プログラミング言語によらず決まっている、たとえば一年に50,000行なのだそうだ。行数が決まっていたら、どの言語で一番多くのことを達成できる?そう、Rubyだよね。

「行数が決まっていたら、どの言語で一番多くのことを達成できる?」

「そう、プロテインだね

パスワードにはmd5、メールアドレスにはPEAR Crypt_Blowfishが使われてる。Blowfishのキーはconfig.phpに書いてある。

passengerでrailsのpaperclipプラグイン使ってて今日ひとつ失敗した。

開発環境(mongrel)では問題なかったのに本番環境(mod_passenger)上でアップした画像が見えない。

理由は、

「画像はアプリの所有者でアップされるのにapacheの権限で見に行こうとするから。」

Phusion Passenger users guide

8.1. User switching (security)

Phusion Passenger solves this problem by implementing user switching. A Rails application is started as the owner of the file config/environment.rb, and a Rack application is started as the owner of the file config.ru.

passengerではUser switchingといって、rootやapacheではなく、railsではconfig/environment.rb、rackアプリではconfig.ruファイルの所有者でプロセスを立ち上げてくれるそうです。

(嫌ならPassengerDefaultUserディレクティブで他のユーザーに指定できる。)

当然、アップするファイルはそのユーザーで保存される。

しかし、アップした画像やページキャッシュなどの静的ファイルはApacheが直接見に行くのでpaperclipのアップ時のデフォルトのパーミッション(0600)だと見れない。(開発環境では個人のユーザーでmongrelを立ち上げるで問題が出なかった。)

対処方法は色々あるけど、やはりpaperclipが0644で保存してくれるのが一番じゃないだろうか。

ファイルの作成をそもそも0644にしようと思ってみてみると、paperclipでは標準ライブラリのtempfileでアップしたファイルを保存し、それをmvしてる。tempfileが0600で作るのでそのままだ。

例によってconfig/initializers以下で上書きする。

config/initializers/paperclip.rb:

module Paperclip
  module Storage
    module Filesystem
      def flush_writes #:nodoc:
        logger.info("[paperclip] Writing files for #{name}")
        @queued_for_write.each do |style, file|
          FileUtils.mkdir_p(File.dirname(path(style)))
          logger.info("[paperclip] -> #{path(style)}")
          FileUtils.mv(file.path, path(style))
          FileUtils.chmod(0644, path(style))
          file.close
        end
        @queued_for_write = {}
      end
    end
  end
end

mvした後でchmodする。(10行目) もっと局所的に書き換えたかったけどメソッドに切り出されてないのでここを変えた。

今回、本番デプロイ時にtagもbrunchも切ってないというミスを犯していたのでこのファイルだけ手でアップするという荒業に出た。反省・・・。

第七十七景:アプリケーションはemacsに集約してシンプルな作業環境を構築 wadap – デスクトップ百景

■ VMwareで3つのOSを同時に起動

他には、各種OSの検証を行うために「VMwareFusion」をインストールし、いろいろなOSをすぐに立ち上げられる状態にしています。

そういえば3つの環境を使えるのってMacだけですな。欲しいな。

パーマリンクが”“非連続な0を含まない自然数”“と定義できるのが嬉しいなどと、生活力の無さそうな発言が続いてますが(言ってない)、一応、昼間は仕事をしています。

原理主義的な仕様やコードを書くのは癒しのためです。そうしておくと仕事では目を覆いたくなるようなアドホックな実装も楽しめます。

p0t.jp ドメインからこの docs.komagata.org(ついでにMTから自作ツール)に引っ越してしばらく経ちましたが大体ちゃんとリダイレクトできてるみたいです。

Google Analyticsで見てみると・・・

contents_summary

おおお、きもちー!

俺がやりたかったのはこれだー!

/index.csv とかからCSV形式でエクスポート(というか表示形式がCSVなだけ)できるので他の形式への変換とか引越しもいかにも楽そう。パーマリンクが複雑だとそれを移行することを想像してソワソワする(病気)んだけどそれがなくなりました。

そもそもひとつのCSVで全データを表現できるということはエントリーが構造化されてないという証なので機能追加するときは

「ひとつのCSVでエクスポートできるか?」

というのを目安にしようと思った。