やっぱりvimが使いたい
これまでschemeを書くときはEdwin(MIT Scheme のエディタ)を使っていたけど、Emacsと同じキー操作なのでvim使いの自分としてはちと辛かった。
使ったもの
したこと
- Windows環境だったからCygwin上でGaucheをビルド
- scheme用のシンタックスscheme.vimをインストール ($HOME/vimfiles/plugin)
- 別ウィンドウに実行結果を出力してくれるquickrunをインストール ($HOME/vimfiles/plugin)
- Cygwin上でvimを起動。
- ソースを書いたら "\r" で式を評価。
すると実行結果が左のウィンドウに表示されます!
これなら「ソース修正 -> "\r" で式評価」のサイクルでコードが書けるのでとても便利!!
"\ + r"でgoshが起動されるのはschemeコードの場合、goshを起動するのがデフォルトの動作として設定されているからです。
他の処理系を使いたい場合には.vimrcでこんな感じのことを書けばいける筈。詳しくはquickrun.vimのdefault_configの箇所を確認してください。
let g:quickrun_config = { 'scheme': { 'command': '好きな処理系'}}
画面分割を横にしたかったら.vimrcに以下を追加しておけばOK
let g:quickrun_config = { '*': { 'split': ''}}
デフォルトのストレージエンジン&文字セット
/etc/my.cnf
[client] default-character-set=utf8
[mysqld] default-character-set=utf8 default-storage-engine=InnoDB
ez_whereのrails 2.3.5対応
railsのセキュリティホールが2.3.4で塞がれたというので、とりあえずrailsを最新の2.3.5アップグレードしてみた。
しかし、ActiveRecord::Associations::AssociationProxy#sanitize_sqlの仕様が2.3.3で変更された為、それをサポートしていないez_whereが問題を起こしエラーになる。
ArgumentError: wrong number of arguments (2 for 1) from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:173:in `sanitize_sql' from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:173:in `send' from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:173:in `sanitize_sql' from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:41:in `find' from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:400:in `find_target' from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:354:in `load_target' from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:139:in `inspect' from /usr/local/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/wirble-0.1.3/lib/wirble.rb:432:in `output_value' from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:151:in `eval_input' from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:263:in `signal_status' from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:147:in `eval_input' from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:146:in `eval_input' from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:70:in `start' from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:69:in `catch' from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:69:in `start' from /usr/local/ruby/bin/irb:13
そこで同じ問題を抱えていたar-extentionsの対処法をそのままマネしてez_whereを2.3.5対応にしてみた。
--- lib/ez/where.rb.back +++ lib/ez/where.rb @@ -1,9 +1,9 @@ class ActiveRecord::Base class << self alias :original_sanitize_sql :sanitize_sql - def sanitize_sql(condition) + def sanitize_sql(condition, table_name = quoted_table_name) condition = condition.to_sql if EZ::Where::Condition === condition - original_sanitize_sql condition + original_sanitize_sql condition, table_name end end end
とりあえず動いた!!
- 参考URL
http://github.com/zdennis/ar-extensions/commit/870bd3588a86e1f8ae36ab0e497f407ac2afa4c5
てかパッチってどこに送れば良いんだろ??
GRUBの再インストール
Windows XP, Debian5.0のデュアルブート環境でGRUBが壊れたので復旧させました。
またいつか壊すかもしれないのでメモ。
症状としてはPCの起動後にOSの選択画面が現れず、
GRUBの文字が黒画面上に表示されたまま
処理が進みまなくなりました。
復旧作業
- DebianのインストールCDを使ってレスキューモードを起動。
- Debianがインストールされている論理ボリューム上でシェルを起動。
- GRUBのインストールされているデバイスを指定してgrub-installを実行
grub-install /dev/sda
以上で無事復旧。
ThinkpadのユーティリティであるRescue and Recoveryを試したりしてたから直すのに3夜かかった orz
そういえばググってみつけた/bootマウント後のGRUB再インストールも効果なしでした。
私の環境では以下で/bootが正しくマウントできたのに何か設定が足らなかったのだろうか…。
mount /dev/sda3 /boot ※当然、環境によってボリュームは異なります。
ちなみにGRUBが壊れた原因は、Thinkpadに付属しているユーティリティ群(ThinkVantage)の一括アップデート実行にあります。
以前もThinkVantageのアップデートをしてアプリが動かなくなった経験があるので正直、このアップデート機能には懲りました。
もう2度とアップデートしません。
路線・駅データのyml生成
駅、路線データを無償提供しているサイト「駅データ.jp」さんがあったのでrubyでデータを変換してymlに出力してみた。
出力データに合致するDBスキーマがあれば「rake db:fixtures:load」でDBに一発でロードできます。
「駅データ.jp」さん最高です!
- やり方
データを上記サイトの「ダウンロード」からファイルをダウンロードして解凍します。
解凍されたデータm_stations.csv(EUC)をnkfでutf8に変換しstation.csvという名前で保存する。
nkf -w m_staions.csv > station.csv
fastercsvを使っているのでインストールしていなければ
gem install fastercsv
後は後述のコードをUTF8にしたCSVと同じディレクトリで実行するだけ。
- 入力データ station.csv
- 出力データ stations.yml(駅), railroad_lines.yml(路線)
#!/usr/bin/env ruby require "rubygems" require "fastercsv" COLLECT_LIST = [ "JR山手線", "東急目黒線", "東京メトロ南北線", "都営三田線" ] station_list = Array.new station_id = 0 railroad_list = Array.new railroad_id = 0 FasterCSV.foreach("station.csv") do |row| railroad = row[8] if COLLECT_LIST.include? railroad station = row[9] railroad_item = { :label => railroad_id, :id => railroad_id, :name => railroad} unless railroad_list.include? railroad_item railroad_id = railroad_id + 1 railroad_item[:label] = railroad_id railroad_item[:id] = railroad_id railroad_list.push railroad_item end station_id = station_id + 1 station_list.push({ :label => station_id, :id => station_id, :name => station, :railroad_id => railroad_id}) end end File.open("stations.yml", "w") do |file| station_list.each do |item| file.puts item[:label].to_s + ":" file.puts " id: " + item[:id].to_s file.puts " name: " + item[:name] file.puts " railroad_line_id: " + item[:railroad_id].to_s end end File.open("railroad_lines.yml", "w") do |file| railroad_list.each do |item| file.puts item[:label].to_s + ":" file.puts " id: " + item[:id].to_s file.puts " name: " + item[:name] end end
出力結果
stations.yml
1: id: 1 name: JR山手線 2: id: 2 name: 東急目黒線 3: id: 3 name: 東京メトロ南北線 4: id: 4 name: 都営三田線
railroad_lines.yml
1: id: 1 name: 大崎 railroad_line_id: 1 2: id: 2 name: 五反田 railroad_line_id: 1 3: id: 3 name: 目黒 railroad_line_id: 1 4: id: 4 name: 恵比寿 railroad_line_id: 1 5: id: 5 name: 渋谷 railroad_line_id: 1 以下省略
出力する路線を増やしたい場合はCOLLECT_LISTの項目を足せばOK!!
そのうち関連する駅のグループも変換したいな…。
InnoDBの有効化
ビルド時に --with-plugins=innobase が必要
http://d.hatena.ne.jp/end0tknr/20090130/1233288533
./configure --prefix=/usr/local/mysql-5.1.30/ --with-charset=utf8 --with-plugins=innobase --with-mysqld-user=mysql