最近 config/initializers/rails_ext.rb に追加したもの。

module ApplicationHelper
  def web_root
    request.protocol+request.host_with_port
  end

  def free_dial?(str)
    /^0120/ =~ str ? true : false
  end

  def notice
    content_tag(:div, image_tag("notice.gif", :class => "icon")+flash[:notice], :id => "notice") if flash[:notice]
  end

  def warn
    content_tag(:div, image_tag("warn.gif", :class => "icon")+flash[:warn], :id => "warn") if flash[:warn]
  end

  def focus(element)
    content_tag(:script, "$('#{element}').focus()", :type => "text/javascript")
  end

  def options_by_prefectures
#     Prefecture.all.collect {|p| [p.name, p.id] }.unshift ["-- 選択してください --", nil]
  end
end

~/.rails/default/config/initializers/rails_ext.rb とかに置いといて、railsプロジェクト作成後にdefaultディレクトリ毎上書きする。

説明しようもないもんばっかり。free_dial? がお気に入りです。何に使うかというとおなじみのフリーダイアルアイコンを出すかどうか?とかだけです・・・。

options_by_prefecturesは都道府県プルダウン。どうせ毎回使うんだけどさすがに無いとエラーなので一応コメントアウトを。

何か、こういうライブラリとかにするまでもない小粒なコード辺が好きだ。ライフハックとか生活の裏技のプログラマー版みたいなもんか。

コード辺は実際に動いてくれる。それでいて主張は小さく、押しは弱い。常に「何とか志向」や「何とかドリブン開発」のような次々出てくる新しい思考法やメソッドに自分を合わせていかねばならない我々を一瞬ほっこりさせてくれるある種の清涼剤です。

参照:

RailsでGrave(お墓)というクラスを作った。

そしたらところどころで”“grafe”“が無いとか言われる。

おれの得意技typoだと思ってgrepしまくるも見つからず。

先ずirbより始めよ

の格言に従って調べると・・・

% irb -r activesupport
>> "grave".pluralize
=> "graves" 
>> "grave".pluralize.singularize
=> "grafe"

!?

graveの複数形はgravesだけどgravesの単数形はgrafe!?

あー!

knife => knivesのルールが適応されてるのか。

config/initializers/inflections.rbに例外を書いて治た。

Inflector.inflections do |inflect|
  inflect.irregular 'grave', 'graves'
end

leaf => leaves や wolf => wolves のルールより優先されてる?

もう英語力がね・・・アレなんですわ。

Railsのlayoutで基本、一緒なんだけど

「ココとココのページだけは特定のjavascript読み込みたい」

とか

「SEOのためにtitle, meta description, meta keywordsをページ毎に細かく分けたい」

とかいう場合にControllerで@titleに文字を入れておくとかいうのは非っ常に気持ち悪い。

そういう時、layoutには

<html>
  <head>
    <%= yield :header %>
  </head>
(略)

と書いておいて、それぞれのページでは

<% content_for :header do %>
  <%= content_tag :title, "タイトル" %>
<% end %>

とやると、

<html>
  <head>
    <title>タイトル</title>
  </head>
(略)

となる。Controllerが綺麗になってうれしい。やっぱりHTMLはViewに書きたい。

javascriptはlayoutの最後の行に同じく yield :footer_js とか作って最後に読んだ方がいいかも。

Railsレシピブックに載ってました。どーってことないアレだけど、183個のレシピのなかでこれが一番うれしかった。

Railsレシピブック 183の技
  • Railsレシピブック 183の技
  • ソフトバンククリエイティブ(2008-05-31)
  • ソフトバンククリエイティブ
  • 定価:¥ 2,940
  • 新品価格:¥ 2,940
  • 中古価格:¥ 2,540
  • ASIN:4797336625

halcyon

Rackの動画の中で気になっていたHalcyon(ハルシオン)。気になったつっても技術的にじゃないけど一応調べときました。(ハルシオンはカワセミのことらしいです。ちなみにパルレオンは無いw)

Halcyonは軽くて速いJSONのフレームワークだそうです。コード見たほうが早い。

class Message < Sequel::Model; end
class Messages < Application
  def new
    # respond with fields acceptable
    ok Message.columns
  end
  def create
    msg = Message.create(params)
    msg.save
    ok msg.id
  end
  def read
    ok Message[params[:id]]
  end
  def update
    Message.filter(:id => params[:id]).update(params)
    ok
  end
  def delete
    Message.filter(:id => params[:id]).delete
    ok
  end
end

SequelベースにしてAPIが簡単に作れて、

{"status"=>200, "body"=>"Tue May 27 19:53:15 -0500 2008"}

JSONでレスポンスが返る、と。

API用サーバとかに良いんですかね。最近じゃRailsでも大して手間変わんないので”速い”っていうのがどのくらい速いかが気になるとこです。

No mobile me

MobileMe…

sport-captain

NO THANK YOU…

MySQLロゴ

slowlog

[mysqld]
log-slow-queries=/var/log/mysqld-slow.log
long-query-time=1

slowlogをメール

dailyでlogrotateしておいて、下記。

% crontab -l
50 3 * * * mysqldumpslow -s t /var/log/mysqld-slow.log | mail -s "mysql slowlog" foo@bar.com

CSVにエクスポート

SELECT * FROM employees INTO OUTFILE "/tmp/employees.csv" FIELDS TERMINATED BY ',' optionally enclosed by '"';

CSVからインポート

load data infile "item.csv" into table item fields terminated by ',' optionally enclosed by '"';

CSVからインポート(1行目を無視)

load data infile "item.csv" into table item fields terminated by ',' OPTIONALLY ENCLOSED BY '"' ignore 1 lines;

auto_incrementの値を設定

ALTER TABLE test AUTO_INCREMENT = 1;

ユーザー追加

grant all on dbname.* to `username`@localhost identified by 'password';

バッククォートで囲えばハイフンも使える。

rootのパスワード削除

set password for root@localhost=password('');

DBバックアップ

% crontab -e
0 5 * * * mysqldump -uproject -pxxxxxxx project_production | bzip2 > /var/www/html/project/backups/project_production.`date +\%Y\%m\%d\%H\%M\%S`.dmp.bz2

カラム追加

ALTER TABLE `foos` ADD COLUMN `foo_id` int(11) NOT NULL DEFAULT 123 AFTER `title`;

Macにインストール

% sudo port install mysql5 +server
% sudo -u mysql mysql_install_db5
% sudo cp /opt/local/share/mysql5/mysql/my-small.cnf /etc/my.cnf

Macで起動

% sudo /opt/local/share/mysql5/mysql/mysql.server start

Macでlaunchdで再起動

% sudo launchctl stop org.macports.mysql5
% sudo launchctl start org.macports.mysql5

文字化け

# my.cnf
default-character-set = utf8
skip-character-set-client-handshake

外部からの接続禁止

# my.cnf
skip-networking

クエリーのログを取る

[mysqld]
log=/var/log/mysqld-query.log
孤独のグルメ 【新装版】

個人で雑貨輸入商を営む井之頭五郎は腹が減っていた。

「”めし屋”は・・・ どこでもいい、”めし屋”はないのか」

「ええい!ここだ 入っちまえ」

「ぶた肉いためとライスください」 「あと、おしんこ」

「おしんこ何?」

「ナスください」 (こういう店のおしんこってのはきっと自家製なんだろうな)

「あと スイマセン とん汁ひとつ」

(もちかえり! そういうのもあるのか)

(うーん ぶた肉ととん汁でぶたがダブってしまった)

(このおしんこは正解だった)

ハードボイルド食マンガ。 毎回、中年男がグルメでも何でも無い普通のめし屋でめしを食う。そういう話。

ゴローちゃんが帰ってきた!10年ぶりの新作を含めた新装版が発売。手に入りやすくなってます!

新装版の最後の対談で触れている、ファンが再現したYoutubeの実写版を見つけました。

こいつらアホだwwwwwww

基本、面白かったものだけ感想書いてます。

それにしても感想よりあらすじ書く方が難しいなんて知らなかった。勉強になるな・・・。

EDEN 18―It’s an Endless World (18) (アフタヌーンKC)

体がガラスの様に硬質化してしまうクロージャー・ウィルスの大流行によって人類が危機に瀕した世界。外界と隔絶したバイオスフィアで育った、少年エノア(エンノイア)と少女ハナはウィルスに対する抗体を持っていた。

人類は人口の15%を失うも生き残った。が、時は進んで、クロージャー・ウィルスの変種ディスクロージャー・ウィルス(体が液状化して無機物・有機物関係無く取り込んでしまう)が流行し、それらの集合がコロイドという水晶状の物質になって世界中に広がっていった。コロイドは太陽光で発電し、水晶を媒体とした光記憶メディアに多くの人の意識を保存した。最終的にコロイドはバイオスフィアのあった島の上にビッグバレルと呼ばれる筒状の構造物を形成する。

全ての出来事はエノアの父クリスも創立に関わった、プロジェクト「プレーローマ」のシナリオだった。何処からか飛来した高重力バルブと呼ばれる物体がビッグバレル上空に近づく中、エノアは仲間と共にビッグバレルを目指す。

・・・って17冊を強引にまとめすぎかな?

元々、第一話だけの企画だったそうで、それを連載に変更して11年もやって最後ちゃんと綺麗に終わってます。(18巻の表紙が1巻の表紙と対称になってるんですな)

最後まで見てみれば、大半を占めてたエリア(エノアの息子)が主人公の話は何の意味があったのかとか、最終回に向けてなんでああいう展開になるのかとか、一見イミフですが、ウィキペディアのグノーシス主義の項を見ればすっきりわかります。というかグノーシス主義をそのまんまSF的解釈すればこの話になるんですな。

超おおざっぱに言うと、グノーシス主義とは、

「人間が辛いのは、この宇宙が狂った神の作った悪の宇宙だからであり、真の神の住む善の宇宙を目指そう」

という反宇宙的二元論に支えられた古代宗教です。真の神というのが、プロパトールやらエンノイアやらアレーテイアであり、善の宇宙というのがプレーローマということらしいです。

エリアが延々とひたすら味わう世界の無慈悲さ、汚さ、身も蓋も無さは正に悪の宇宙論ですし、物質と対照的な単なるデータ(霊的な存在)になって新しい宇宙に打ち出されるというのもそのまんまです。

しかし、物語のラストでは新しい宇宙に行く人と、相変わらず狂った世界に残る人の両方の選択を肯定していて、二元論を否定しています。

作者は途中で何を書きたいのかわからなくなって困ったと言ってますが、第一話がすごく面白かっただけに、投げっぱなしにならず、良い題材が途中で見つかって綺麗にまとめられて良かったなあと思います。

マイナーな宗教や思想や実際の事件をテーマにするってのはネタに困ったらいいかもしれないッスね。(といったら怒られるかな)

ともかくウィキペディアは面白いということで・・・。。

久々に漫画一杯買った。

ディエンビエンフー 1 (1) (IKKI COMICS)

1973年、ベトナムから米軍が完全撤退する寸前に主人公が爆死するところから始まる。

主人公、陸軍報道部所属、星条旗新聞(スターズ・アンド・ストライプス)のカメラマン、ヒカル・ミナミはサイゴンで米兵たちによるベトナム人少女の集団レイプ現場に遭遇し、殺されかけたところをベトコンのお姫さま(プランセス)と呼ばれる少女に助けられ、一目惚れする。

その後、壊滅する隊から何度も自分だけ生還することからスパイ容疑を掛けられ、お姫さまをおびき寄せるエサとして、グリーンベレー所属のストレイ・ドッグスという危ない人達の集団に同行することになる。

かわいい絵柄と、くどくどした説明が無いこと、後半はバトル漫画の様相を呈していることもあってサラッと読めた。ディエンビエンフーというタイトルから第一次インドシナ戦争の話かと思ってたのでちょっとガッカリ。(ディエンビエンフーの戦い:1954年)

かわいいベトナム戦記と言えばCat Shit Oneが有名ですけど、(少なくともストーリーは)完全ミリタリー戦記物のあれとは大分タイプが違いますな。

冒頭で死んだ主人公の回想ってことで蛍の墓みたいにどうそこに繋がるのか気になります。(ってズリィなそれ)

CAT SHIT ONE'80 Vol.1
  • CAT SHIT ONE’80 Vol.1
  • ソフトバンククリエイティブ(2008-04-30)
  • ソフトバンククリエイティブ
  • 定価:¥ 998
  • 新品価格:¥ 998
  • 中古価格:¥ 890
  • ASIN:4797348496
mysql> select * from regions\G
*************************** 1. row ***************************
     id: 1
   name: 北海道・東北
reading: ほっかいどう・とうほく
  roman: hokkaidou-touhoku
*************************** 2. row ***************************
     id: 2
   name: 北信越
reading: ほくしんえつ
  roman: hokushinetsu
*************************** 3. row ***************************
     id: 3
   name: 関東
reading: かんとう
  roman: kantou
*************************** 4. row ***************************
     id: 4
   name: 東海
reading: とうかい
  roman: toukai
*************************** 5. row ***************************
     id: 5
   name: 関西
reading: かんさい
  roman: kansai
*************************** 6. row ***************************
     id: 6
   name: 中国・四国
reading: ちゅうごく・しこく
  roman: chuugoku-shikoku
*************************** 7. row ***************************
     id: 7
   name: 九州・沖縄
reading: きゅうしゅう・おきなわ
  roman: kyuushuu-okinawa
7 rows in set (0.00 sec)

MySQLの\G出力ってほとんどYAMLだよね。