typo5.1-is-out

Typo 5.1 is out, download now !

Before upgrading, read our Upgrade Typo From Sources or Upgrade Typo with Typo installer HOWTO

Typo is a blogging engine developped with the Ruby on Rails framework.

Rails脳BlogのTypo 5.1がリリースしたみたいです。なんかロゴっぽいものが出来てますね・・・。それより一刻も早くRedmineをトップページにするのをやめるんだっ!

なんか弄りたくなる部分いっぱいあるんですが、セッションすぐ切れたり、gettext使ってなかったり、テーマ切り替えが単なるファイルコピーだったり・・・。

少なくともGoogle Analyticsは入れたいので最悪なかったらそのプラグイン作って終わりかなあ。ChangLog見ると、en_US入れ忘れたりとか、何処の国の人がメインなんですかね?

nginx

出来立てっぽいんすけどダウンロードできないッスねー。・・・とRubyForge、サーバーによってはnginxなんですねえ。Apacheとnginxどっちのエラーも出たりするんだけどnginxを振り分けに使ってるってことかなあ?

typoの作者の方ではrailsアプリのインストーラーを作るgemが公開されてますね。使railsのアプリ名のコマンドを作って、「コマンド名 install ディレクトリ名」ってやるのをデフォルトにしようよって感じらしいです。

いいのは、ホントにコマンド1発になるのと、WordPressの時に話出てたけどバージョンアップに対応できることっすね。

MovableTypeは4.1でさらに高機能になり、テンプレートが高度に構造化されたため、徹底的にDRYにテンプレートを書けるようになっています。さらにCMS的にブログ記事以外のページも自由に作れるようになり、そちらにも構造化されたテンプレートが利用できます。

僕は大東亜戦争従軍記というブログを次のようにしたいと考えました。

  1. デフォルトじゃないデザインにしたい
  2. 老人にも読めるように文言はなるべく平易に(カテゴリ → 目次とか)、文字は大きくしたい
  3. 完結している手記なので古い方から順番に表示したい
  4. 漢数字のカテゴリーを正しくソートしたい(第三章、第四章とか)
  5. タグとかいろんな老人にはわからない文言を削除したい
  6. 携帯にも対応したい

手持ちのMovableType4.1で実現しようと思いました。別のブログを4.1にバージョンアップした経験から、「これは容易ならざる事になった」と思い、4.1対応の書籍を買ってきました。

1時間後、その書籍はゴミ箱の中に納まっていた。

この構造化されたテンプレート、CSSクラス、MTテンプレート記法を覚えた上で、おそらく本体かプラグインのあの懐かしい(しかし昔とは違って進化したモダンな)Perlの海に潜らなければならないだろう。

MTには元StyleCatcherと呼ばれた、他人の作ったテンプレートとスタイルを簡単に自分のブログに当てはめる機能がある。CMS化した4.1に対応したテーマを血眼で捜したが、無かった。

やはりデザイナーにとってもあの高度化したテンプレートに対応したテーマを作るのは容易ならざることに違いない。

次の日、デザイナーの人に相談すると、WordPressをすすめられ、簡単な使い方を習った。

次の日、1人月はかかると思っていたブログのリニューアルが完成した。(趣味なのでかかってもいいんだけど)

特にテンプレートのsql文字列と思われるところに”order by xxx_id”“を追加しただけで記事が古い順に並んだのは痛快だった。

またK-tai styleというプラグインを入れただけで僕のE-Mobileも含めた全キャリア対応になったのにはびっくりした。

sideber.php, footer.php, category.php、実に分かりやすい。

WordPressが大好きになってしまった。

フリーになるとオープンソースをちょっとカスタマイズとか出来ると楽できていいですよね。

そうなるとPHPは外せないわけで、ちょこちょこPHPで出来たオープンソースソフトウェアを弄るわけですが、大規模開発とかSIer向けとかとは違った、OSSのWebアプリに向いた設計があることに気が付きました。

具体的にはWordPressの作者の人(?)がもっと設計を洗練させて作ったというbbPressというフォーラムのソフトがあるんですが、これのソースを見たとき、

「うは、なるほど。やられた。この人はわかっちょる。」

とちょっとショックを受けました。

とりあえずタイトルに対する結論から列挙しますと、(bbPressですが)

  1. 言語はPHPしかありえない
  2. インストールに黒い画面(ターミナル)を使う必要があってはいけない
  3. FrontControllerを使わない。(URL見たまんまのファイルがあること)
  4. クラスを使わない。functions.phpとかにbb_xxxxとかいう関数を列挙する。
  5. テンプレート言語はPHP。theme/default/以下とかに置いて、前述のURL見たまんまファイルと同名にする。(register.phpとか)
  6. ディレクトリ構造はフラットに近くする
  7. gettextを使っておくと自然と翻訳してくれる人が現れる

作者はとにかく「サードパーティー開発者」と「ユーザー」に奉仕して、DRYに反していても誰にでもわかりやすいまま頑張ってスパゲッティにならないようにします。

より多くの「サードパーティー開発者」に気に入ってもらえるようにすることがひいてはプラグインの増加、ソフト自身の価値向上につながるんですね。

この構造の明快さだけでこのアプリのファンになってしまいました。

ただ、裾野が広すぎると、実際に何度も起こっているようにプラグインでSQL Injectionを作りこんでしまう可能性が高いのは何とかしないとまずいですね。プラグインの中でプレースフォルダ使ってない部分があったら警告表示するとか、できないかな?

ActiveRecord拡張とかRails系の

「プラグインにする程でもないけどいつも使う奴」

を2.xからはconfig/initializers/に置いとけば良くなって、みんな多分、rails_ext.rbとか名前付けてんじゃないかな?

何か、すげー便利なrails_ext.rbを隠し持ってる人が全国に沢山いるような気がしてならない!

みなさん自分のrails_ext.rb(に類する奴)を公開してくれませんかー! もしよければトラックバックかコメントください。

おれのはまだヘボイんですが参考までに置いておきます。

module ActiveRecord::ConnectionAdapters::SchemaStatements
  def foreign_key(from_table, from_column, to_table)
    constraint_name = "fk_#{from_table}_#{to_table}" 
    execute "alter table #{from_table} add constraint \
      #{constraint_name} foreign key (#{from_column}) references #{to_table}(id)" 
  end

  def set_autoincrement_number(table_name, number)
    execute "ALTER TABLE #{quote_table_name(table_name)} AUTO_INCREMENT=#{number}" 
  end

  def load_fixture(fixture, dir = "test/fixtures")
    require "active_record/fixtures" 
    Fixtures.create_fixtures(dir, fixture)
  end
end

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(
  :short_jp => "%m月%d日",
  :long_jp => "%Y年%m月%d日" 
)
ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(
  :short_jp => "%m月%d日 %H時%M分",
  :long_jp => "%Y年%m月%d日 %H時%M分" 
)

ちょっとRailsのオープンソース系の漁ってきます。

MTOS4.1にバージョンアップした。

それにに伴って、こんな感じの.htaccessを書いて安心していた。

Redirect permanent /mt/archives/2008/05/post-702.html http://p0t.jp/archives/2008/05/post-702.html

ところが、リダイレクトできない。よく見ると・・・

(略)/post-702.html

ハイフンが

(略)/post_702.html

アンスコに変わっている。

word replace

ちょっと意味がわからないんだが、Word特有の文字を置き換える対応するASCII文字 (””、’、…、-、—)の「-」がいけないのか?

そして、置き換えるフィールドの中に無いが、暗黙的に出力ファイル名も含まれるということなのか?

ジーザス!

Redirectでアンスコの方に変えてやるという方法もあるが、負けた気がするので下記のSQLをマイシーコーで実行して事なきを得た。(既に遅いが)

UPDATE mt_entry SET entry_basename = REPLACE(entry_basename, 'post_', 'post-' )

ついでに、ころころ引っ越すために画像はFlickrに置くことに統一した。(ついでだが、flickr and WEBIMAGERは便利なツールだ)

ソフト毎の流儀やバッドノウハウを覚えるのは嫌いな方じゃないが、最近のWordPressの好印象とMovableTypeの悪印象が鮮明過ぎる。SEO的なプラグインもWordPressにそろっている。ぼちぼち変え時かもしれない・・・

大東亜戦争従軍記こっちに移行完了しました。

リアルタイムウォー世代(高齢の方)向けに文字大きくしてあります。

怪しいプラグインとかも多いけど、WordPress使い易っ!って感じです。

で、この糞ブログ(p0t)なんぞよりよっぽどあっちの方が多くの方に見ていただきたいんですけが、基本的にもう更新が無い訳ですよね。そういうサイトをSEO的にどう上げていったらいいのか悩みます。

まあ主目的が保存なので、変わらず、長く置いておくことで多くの目に留まれば良いなあと思います。

Railsを1.2.3から2.02にして最初から作ってみた。1.2.3で作ったアプリの機能縮小版を作る必要があったんですが、丸コピで済んだのにいちいちチャレンジしてちょっと後悔しつつも間に合ったので良しとした。

結論からいって心配するほど変わってなかった。

  • 今までのプラグインほとんど使える
  • scaffoldとかがscaffold_sourceみたいにカラム指定できるようになってる(吐くコードがDRYじゃないとこまで変わらなくてよかったのに)
  • paginateがplugin(classic_paginate)になってる。ただしwill_paginate推奨とのこと。これは便利だー
  • テンプレが.html.erb(.rhtmlでもいいのでほっとした)
  • csrf対策が最初からある
  • ApplicationControllerにhelper :allって書いてある

とにかく面倒臭がりなので、保守性とかよりも「最初の一回作るのがどんだけ楽か」ってのを重要視しちゃうんですが、あんまり変わらない感じ。migrationファイルをほとんど自分で書く必要がなくなったのは楽かも。

ちょっとフィードを加工する用があったのでPRaggerを今頃使ってみることに・・・と思ったらハマッた!

何しろpragger.rbが42行しかねえ!インストールも必要無い。MTに用があったのでPublish::meta_weblogなんていうプラグインを書いてみた。普通に動いた。なんだこりゃ、こんな簡単で便利でイイノカッ!!

素敵ワードの続き。

個人Webサービスが何で気になるのかというと、エンジニアとして習得していくべきスキルに今までのレイヤーという考え方以外の見方ができるんじゃないかと思ったから。

前提として、俺はこの地上でおこなわれる、ありとあらゆるプログラミング行為が好きだし、その人間がプログラマーだというだけで足の爪をヤスリできれいに整え、ペディキュアを塗って回りたいぐらい無条件で好感を持つ。できることならばアセンブラからActionScriptまで、回路設計からネットワーク構築まで全てやりたい。しかし、どんなに頑張っても512歳まで生きられそうにないので泣く泣くある程度スキルを取捨選択しなければいけないという事情があります。(あたりまえ)

システムを作るということをレイヤーという考え方で見るとスキルのレイヤーは、上は「SI会社の電話番号を知っている」で下はバイナリよりも下がって「物理学」ということになる。要は「好きなレイヤーを勝手にやんなさい」ということなんですが、いまいち自分がどのレイヤーが好きだというのがわからず、しっくりこなかった。

しかし、個人Webサービス(2人ですが)を作ったときに、上から下まで全部自分で作る楽しさと、個人としてフィードバックをもらえる嬉しさ、レイヤーという考え方ではともすれば、”広く浅い”とか、”中途半端”などと言われそうなスキルが別の軸で新しい価値を持って結合していくのを感じました。

そして個人Webサービス作成者という視点で見ると技術の選択とか勉強すべきこととか今まで悩みがちだったことが簡単に決断できることに気付きました。そういった視点で情報共有していくために何か(仲間という意味での)コミュニティ的なものが欲しいなと思いました。

何を用意すればいいのかな。何か個人Webサービスを作ってる人が何人か集まって持ち回りでTipsとか新しい個人Webサービス情報を書いていくEngadgetとかTechCrunchみたいのを作ればいいのかな?

記事のイメージ的には「いいレンタルサーバー情報」とか「便利なRailsプラグイン」とか「簡単に良さげに見えるデザイン方法」とか「便利な死活監視ツール」とかそんな感じです。

準備万端でrake svn:commit(svn upしてmigrateして全部のテストして通ったらciしてくれるヤツ)を実行したらテストが通らない。そんなばかなこ・・・

/usr/bin/ruby1.8 -Ilib:test "/usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake/rake_test_loader.rb" "vendor/plugins/redgreen_plugin_testing/test/redgreen_plugin_testing_test.rb" "vendor/plugins/ar_fixtures/test/ar_fixtures_test.rb" 
-- create_table(:beers)
   -> 0.0800s
-- create_table(:glasses)
   -> 0.0044s
-- create_table(:drunkards)
   -> 0.0015s
-- create_table(:beers_drunkards, {:id=>false})
   -> 0.0011s
-- initialize_schema_information()
   -> 0.0016s
-- columns("schema_info")
   -> 0.0021s
Loaded suite /usr/lib/ruby/gems/1.8/gems/rake-0.7.3/lib/rake/rake_test_loader
Started
F.E...
Finished in 0.065891 seconds.

  1) Failure:
test_dump_to_file(ArFixturesTest) [./vendor/plugins/ar_fixtures/test/ar_fixtures_test.rb:22]:
<2> expected but was
<0>.

  2) Error:
test_load_from_file(ArFixturesTest):
NameError: uninitialized constant ArFixturesTest::Glass
    /usr/lib/ruby/gems/1.8/gems/activesupport-1.4.2/lib/active_support/dependencies.rb:477:in `const_missing'
    ./vendor/plugins/ar_fixtures/test/ar_fixtures_test.rb:28:in `test_load_from_file'

6 tests, 7 assertions, 1 failures, 1 errors

おまえかよ(プラグイン)