merb-genコマンド用にZshの補完関数を作りました。

   1  _merb-gen () {
   2    compadd `merb-gen | grep '^  *' | awk '{print \$1}' | xargs`
   3  }
   4  
   5  compdef _merb-gen merb-gen

.zshrcなどに記述すれば、 以下のような感じで補完出来ます。

   1  % merb-gen [TAB]
   2  --debug      controller   part
   3  --no-color   core         plugin
   4  -d,          flat         resource
   5  -f,          helper       resource_controller
   6  -h,          layout       session_migration
   7  -p,          mailer       slice
   8  -s,          migration    very_flat
   9  app          model

posted by Png genki on Tue 18 Nov 2008 at 03:05

Merb-1.0がリリースされた事もあり、使ってみる事にしました。 Merbの使い方といえば、 優しい Merb の育て方 という素晴らしいまとめがありますが、 1.0になっていくつか新しい情報が必要になっている所があるので、 ざっくりと手順をまとめてみます。

まずはアプリを生成

アプリケーションの生成には、merb-genコマンドを使います。 これは、Railsで言えばscript/generateに相当します。

   1  % merb-gen app appname

appというのは何を作りたいかを指示するサブコマンドです。

これでひな形は出来上がったので、あとはmerbコマンドでウェブサーバを起動してブラウザでアクセス、といきたい所なのですが、 そうは問屋が卸さないとばかりに罠が待っていました。

Merb1.0 Install & Create First Application & TroubleCommentsAdd Star

と、ここまでが通常の道筋なのですが

昨日は最後のmerbコマンドを実行するとエラーになって起動しませんでした。

どうやら、タイミング悪く addressable というGemの最新バージョン(2.0.0)が、 現時点でのMerbでうまく動かないようです。

ということで、一個前のバージョンにダウングレード。

   1  % sudo gem install addressable -v 1.0.4
   2  % sudo gem uninstall addressable -v 2.0.0

あとは、merbコマンドでサーバを立ち上げて、http://localhost:4000/を見に行くだけです。

Fresh Merb App
Uploaded with plasq's Skitch!

デフォルトではMongrelが使われるようですが、例えばThinを使いたい場合は、

   1  % merb -a thin

で起動出来ます。

posted by Png genki on Tue 18 Nov 2008 at 00:30

メモメモ。
gem searchしても2.1.2しか見つからないので、どうしたらいいのかなと思ったら-vでバージョン指定すれば大丈夫でした。

   1  gem search rails -r 
   2  
   3  *** REMOTE GEMS ***
   4  (中略)
   5  rails (2.1.2)
   6  (中略)

-vオプションを指定

   1  sudo gem install rails -v 2.1.1

posted by Png satoko on Mon 17 Nov 2008 at 16:23

iPhoneアプリの開発をしていると、たまに、 Xcodeがプロビジョニングファイルを検出してくれなくて困ることがあります。 あれこれとやってるうちになんとか検出出来るようになるのですが、 これさえやれば100%大丈夫というような処方箋には未だ出会えずにいます。 とりあえず自分がよくやる事をメモしておきます。

  1. Xcodeのプロセスを全て終了して起動し直す
  2. オーガナイザを起動し、問題がありそうなプロビジョニングファイルを削除して入れ直す
  3. ~/Library/MobileDevice/Provisioning\ Profiles/の下を確認し、当該ファイルを削除してみる
  4. Macを再起動する
  5. iTunesも再起動する
  6. プロビジョニングファイルを削除してからiTunesにD&Dしてみる
  7. YourAppName.xcodeproj/project.pbxprojファイルをテキストエディタで開き、プロビジョニングファイルの指定を確認する

何かしらいろいろとやってるうちに問題は解決するのですが、 一度はまると小一時間ぐらい無駄にしてしまうので、 なんとか解決方法を確立したいですね。

posted by Png genki on Sun 16 Nov 2008 at 22:50

と、ふと思った。

命の価値と価格と

その誰か、というのは、実は明らかすぎる。 医師不足と言うけれど 医師不足の中の諦め

「今よりもっと良い周産期医療体制を望みたい」 と誰かが望んでも 「今より少し不便になっても良い」 と誰かが許容しなければ議論は進みません

高齢者たち、である。

posted by Png genki on Sun 16 Nov 2008 at 00:50

macに移行して、日本語が入っているrbファイルをemacsで編集したら、下記のようなコメント行が1行目に入るようになりました。

   1  # -*- coding: utf-8 -*-

半日くらいかかって(遅っ)やっとruby-modeで入れていることが判明。Ruby1.9対応の一環ということがわかりました。

Ruby 1.9で実行するスクリプトに日本語を書く場合、スクリプトの文字コードを表すmagic commentは事実上必須となる。
http://d.hatena.ne.jp/rubikitch/20080307/magiccomment

ただ日本語が入っていないrbファイルはそういうmagickコメントが入らないとか、rhtmlはどうなるのかとか対応が不明なのもあるので、magickコメントを入れないようにしました。

magickコメント挿入関数を無効にする

   1  ;;.emacsなどで
   2  ;; from http://d.hatena.ne.jp/akm/20080605#1212644489
   3  (require 'ruby-mode)
   4  (defun ruby-mode-set-encoding () ())
from http://d.hatena.ne.jp/akm/20080605#1212644489

また下記の方法もあったのですが、初期化のタイミング?かうまく動きませんでした。

   1  ;; from http://masao.jpn.org/etc/.emacs.el
   2  ;; codingの自動挿入をやめる
   3  ;(remove-hook 'before-save-hook 'ruby-mode-set-encoding)
from http://masao.jpn.org/etc/.emacs.el

posted by Png satoko on Fri 14 Nov 2008 at 13:47

他人のサーバ、既存環境が動いているサーバでバージョン確認したいことってありますよね。

■postgreSQL

psql --version

■httpd

httpd -vでバージョン、httpd -Vでコンパイルオプション

■mysql

mysql -D mydatabase -e "select version();"

posted by Face ysakaki on Thu 13 Nov 2008 at 13:08

Objective-CでMethodのIMPを取得して呼び出す場合に、 正しい関数プロトタイプの関数ポインタにキャストする必要がありますが、 typedefなどを使わずにその場で目的の関数ポインタ型にキャスト する方法を紹介します。

   1  SEL selector = @selector(drawRect:);
   2  Method method = class_getInstanceMethod([UISearchBar class], selector);
   3  IMP drawRect = method_getImplementation(method);
   4  ((void(*)(id, SEL, CGRect))drawRect)(self, selector, rect);

こんな感じにすればOkです。

posted by Png genki on Thu 13 Nov 2008 at 01:15

今日、11月11日はポッキー&プリッツの日!!

じゃなくて

バイナリデーですね!!!!

(参照: スラッシュドット・ジャパン|Happy Binary Day!

バイナリデーにちなんでバイナリ時計をRuby書いてみました。

ネタでチャチャチャと書いたので、超適当です。 たぶん、できてます。

左からHH:MM:SSです。

   1  #/usr/bin/env ruby
   2  
   3  require 'curses'
   4  
   5  class BinaryClock
   6  
   7    def initialize
   8      @clock = {}
   9      @clock[:hour] = Array.new(2)
  10      @clock[:min] = Array.new(2) 
  11      @clock[:sec] = Array.new(2)
  12    end
  13  
  14    def run
  15      curses_screen = Curses.init_screen
  16      
  17      loop do
  18        Curses.clear
  19        get_time
  20        curses_screen.addstr(bin_clock_str)
  21        Curses.refresh
  22        sleep(1)
  23      end
  24  
  25    end
  26  
  27    private
  28    def get_time
  29      time = Time.now
  30      hour = split_integer(time.hour, 2)
  31      min = split_integer(time.min, 2)    
  32      sec = split_integer(time.sec, 2)
  33  
  34      0.upto(1) do |i|
  35        @clock[:hour][i] = to_bin_array(hour[i])
  36        @clock[:min][i] = to_bin_array(min[i])
  37        @clock[:sec][i] = to_bin_array(sec[i])
  38      end
  39  
  40    end
  41  
  42    def split_integer(n, k=0)
  43      int_array = n.to_s.split(//).map{|i| i.to_i}.reverse
  44      int_array_size = int_array.size
  45      int_array += Array.new(k - int_array_size){0} if int_array_size < k
  46      return int_array
  47    end
  48  
  49    def to_bin_array(n)
  50      binary = []
  51  
  52      3.downto(0) do |i|
  53        if n >= 2**i
  54          binary[i] = '*'
  55          n -= 2**i
  56        else 
  57          binary[i] = '-'
  58        end
  59      end
  60  
  61      return binary
  62    end
  63  
  64    def bin_clock_str
  65      str = ""
  66  
  67      3.downto(0) do |i|
  68        str << "#{@clock[:hour][1][i]}\t" + 
  69               "#{@clock[:hour][0][i]}\t" + 
  70               "#{@clock[:min][1][i]}\t" +
  71               "#{@clock[:min][0][i]}\t" + 
  72               "#{@clock[:sec][1][i]}\t" +
  73               "#{@clock[:sec][0][i]}\n"
  74      end
  75  
  76      return str
  77    end
  78  
  79  end
  80  
  81  bin_clock = BinaryClock.new
  82  bin_clock.run

追記: 2008/11/11 17:30

今気づいたら、URLが http://blog.s21g.com/articles/1024 でした。 バイナリ的にきれいな数字ですね!

追記: 2008/11/26 00:25

Githubにおいてみました。

posted by Png y_tsuda on Tue 11 Nov 2008 at 17:07

小ねた続きですみません。マカー一週間使っての感想は「親指が攣りそう!」であったりする榊です。

MacBookでwindowsのCtl+C/Vを操作するにはスペースの左にあるCommandキー+C/Vになります。でもそこって親指をぐにーっとやらないと届かないんです。ホームポジションだと打てないですか?>先輩方 (ちなみにCommandキーは我が家では「変なマークのキー」と呼んでいる。)

一方自分はAの左がCtlなキー配列が好きなんですがMacBookではAの左はCapsLockなんですね。超無駄!いいところに一番使わないキーがあるなんてむきーっ。

今日の結論
「システム環境設定」>「キーボードとマウス」の設定の中で、CapsLockを押すとCommandキーの動作をするよう変更できる。フリーウェア不要。やったー!

posted by Face ysakaki on Tue 11 Nov 2008 at 11:32 with 4 comments