2010年12月31日金曜日

年賀状のかわり

もう直ぐ明けましておめでとうございます。
めちゃくちゃ適当に描いたので年が明ける前にはっつけておきます。
字が汚ないのは御愛嬌、

ふりかえりふりかえる、あるいは過去方向へのラブレタ

2010年もあと一日で終りです。今年も忘年会でまとめをするつもりが眠けに負けてスライドが無駄になりました。
賞味期限が切れる前にエントリとしてまとめておきます。


(1/3 スライド追加)

今年の抱負は「触媒」でした。人と人、物事と物事、科学反応を起す触媒となることでした。
触媒になれたのかは分らないけれど、いろんな変化はあったんじゃないかなと思います。

2010年はどっちへ向ったのか


正直わからない。でも今年は方向性の年でした。

退学方向


大学院を退学しました。
今ふりかえると正直錯乱していました。
自分が何をしたら良いのか、このままで良いのか。
そんな事を考えてどんどん気分が沈んで、気が付いたらうっかり退学していました。
まぁ、そんなにうっかりって訳ではないですが。

停滞方向


止めたは良いけれど何をするべきか良くわからなくなりました。
レールから外れてみて気付いたのは、自分は何も出来無いことでした。
それに自分がしたいことも霧の様に霧散していました。
結局そんなものだったのかと。
それでどんどん自信を無くして、さらに方向性を見失いました。

ひと方向


そんな時に気付いたのは、自分が自分しか見ていないことでした。
ひとのしあわせとか言いながら、大事なのは自分でした。
嫌われたくないし、知りたいのは自分のことだけ。
方向は内側へ内側へ。

方向性


10月くらいだったと思うのですが、いきなり方向性が見えた気がしました。
いまだに自分

2011年


すごいです。馬鹿がついに25才です。そんな2011年何をしようか。

前進


そう前進だ。私は前進する。
今年は方向性をみつけました。
来年は前進します。

人を知って、人と会って、人をしあわせにする。
来年こそは「人」を克服します。

来年はよろしくお願いします。


あるいは


病気を克服しました。
前を向くことを知りました。
問題を解決することを知りました。
なんだかんだで尊敬しています。

2010年12月25日土曜日

rvm-prompt

rvm-prompt っていうのを知ったので、早速プロンプトを可愛くしてみた。
.zshrc とか下みたいに書く

PROMPR='$(rvm-prompt u) $'

処理系の種類に応じたかわいいユニコード文字が一文字表示される。

2010年12月22日水曜日

箱文.co


箱文庫というイベントをやっています。
持ち寄った文庫本をスワップして読もうという読書企画です。

次回は、12月25日(土) に開催予定です。
みなさん暇ですよね?

で、hacobun.co が空いていたので購入してしまいました。
買った瞬間に hac.obun.co というのを思いついて、del.icio.us への追悼も兼ねて
こっちのが良かったと思って、大変残念だなというエントリでした。
(でも以外とコロンビアドメイン高いので無駄買いは出来ない...。)

HTML5でスマーフォンアプリを作ろう に参加させて頂きました。

12月18日に神戸で開催された HTML5でスマーフォンアプリを作ろう 【HTML5-WEST x 日本Androidの会 神戸支部】に参加させて頂きました。

http://atnd.org/events/11027

15時開催にも関わらず、寝坊するというミラクルで遅刻してしまいました。村岡さんの発表を聞きそびれる大失敗。

内容は以下のような感じでした。

  • HTML5とは(仮)- 村岡さん
  • HTML5でAndroidアプリ開発 - 高木さん
  • HTML5でモバイルアプリ開発 - 門脇さん

HTML5 とは(仮)- 村岡さん


遅刻したので後半しか聞けてないのですが、村岡さんによる HTML5 の概観。HTML5 ではこんな凄いことが簡単に。という部分に目がいきがちだが、今回の発表では、セマンティクスの重要性が肝だったのではないかと思います。スマートフォン向けの Web アプリケーションを書くことで、それはアプリケーションであると同時に意味を持つドキュメントとして、そのまま電子書籍として閲覧できたり、泥臭いスクレイピングをしなくても必要な情報を入手出来る未来について垣間見ることが出来ました。
セマンティクスの部分は大変面倒なのですが、面倒だからこそ今からやっておけばちょっと人に先んじれる部分なのではないかと思いますので狙い目です。それでなくとも、今後は必ず意味を理解したうえでのマークアップが重要になると思いますので、いずれ必ず押さえる必要が出てくる部分でしょう。

HTML5でAndroidアプリ開発 - 高木さん


Android 開発の一般的な話と、HTML5 で書く際に有用なライブラリの紹介などをして頂きました。
Android の開発をするのに、Java を覚えなくてはいけないのは大きな障害になり、かつ HTML だったら書ける人がたくさんいるので、HTML での開発をすることによって、Android 開発の世界にたくさんの人を招き入れようという主張をされていました。さらには Android の開発でネックになるのは、ビューの部分であって、HTML で簡単に書けるようなフォームも、複雑な XML で書かなくてはいけなくて大変なので、それだったら HTML 書けば良いじゃんという話にとても納得して聞いていました。
HTML でスマートフォンアプリを開発するには、2パタンの方法があって、HTML5+CSS3+JS で書き HTML として動作させるものと、自動生成を行いネイティブのアプリに変換するものがあるそうです。
HTML として動作させるためのライブラリとしては、jQuery MobileSencha Touch が有名なようです。
自動生成のものでは、TitaniumPhoneGapjsWaffleRhodes などがあり、Titanium が人気が集まりつつあるようです。
最後に jsWaffle での開発のデモを見せて頂きました。jsWaffle は最初にプロジェクトを自動生成して、提供された枠組みの上に HTML+CSS3+JS でアプリケーションを記述していくスタイルのようです。ここでは複雑なガントチャートを表示するアプリケーションのデモをして頂きましたが、たしかにどう書けば良いのか検討もつかないような複雑な表示を意図も簡単に表示出来る HTML での開発は魅力的に感じました。

HTML5でモバイルアプリ開発 - 門脇さ


最後は門脇さんによる Sencha Touch の紹介でした。Sencha Touch は Ext.js のモバイル版で、HTML+CSS3+JS でネイティブアプリと遜色無い UI を提供出来るというものです。また、見た目の部分だけでなく、ストレージを扱う API が提供されていたりと、これだけで普通にアプリケーション開発が出来そうな感じでした。
スマートフォンアプリケーションは3種類が存在していて、ネイティブアプリ、Web アプリ、ハイブリッドアプリです。ハイブリッドは HTML+CSS3+JS で記述して、それはネイティブアプリに変換するものを指すようです。
ここでは Sencha Touch は Web アプリとして提供するためのものです。良いところとして、マルチプラットフォームな点(iPhone でも Android でもその他でも)、ネイティブアプリの知識が不要な点、(ネイティブアプリなみの)リッチな UI やアニメーションを提供出来る点、デモが豊富な点を挙げられていました。
いくつかのデモを見せて頂き、実際にどのようなものが開発可能なのかを紹介頂きました。さらに、開発中のアプリケーションをソースコードを加えて見せて頂いたことで、どのような雰囲気で開発を行うのかを知ることが出来ました。
最後に、ネイティブアプリと Web アプリの違いについて、 iPhone を例に比較して紹介頂きました。
Sencha Touch はとてもおもしろそうなので、自分でも少し触ってみたいなと思いました。


全体を通して


スマートフォンアプリと HTML5。同時に波が来ているのは偶然ではありません。HTML5 はブラウザ間の互換性を考えなくてよい、スマートフォン向けとしてとても力を発揮できるのだと言うことでした。
ネイティブアプリは書けないけれど、HTML なら書ける。そんな人が参入することによって、来年はもっとスマートフォンがおもしろくなりそうです。
どちらも必須の技術となりそうですので、頑張って(楽しんで)しがみついておきたいですね。

とても為になった勉強会でした。次回があるなら是非参加したいです。

2010年12月14日火曜日

Vim で快適デバッギング。もちろん Ruby スクリプトの。

(この記事は Ruby Advent Calendar jp:2010の 14 日目です。前日は ujihisa さんでした。)

こんにちは。時が経つのは早いもので、もう 14 日ですね。
Ruby の話題ばかりで皆さん飽きてらっしゃると思うので、今日は便利な Vim Script vim-ruby-debugger を紹介します。

vim-ruby-debugger は、名前から想像出来るように、Vim から ruby-debug を使うためのものです。

この Script をインストールして、

:Rdebugger

のように起動すると、デバッグモードに入ります。
止めたい場所で、

<leader>b

とタイプすると、ブレークポイントを設定することが出来ます。
コードを実行して、BP を設定した場所までくると、自動的に実行が一時停止して、Vim は該当にカーソルを移動します。

vim-ruby-debug では以下のコマンドが使用出来ます。

  • <Leader>b - 現在の行にブレークポイントを設定する
  • <Leader>v - 変数ウィンドをトグルする
  • <Leader>n - ステップオーバ
  • <Leader>s - ステップイン
  • <Leader>c - コンティニュ

これらを駆使して、難解な黒魔術に挑みましょう。
ハッピーデバッギング!

vim-ruby-debugger: https://github.com/astashov/vim-ruby-debugger

2010年12月9日木曜日

シェルスクリプトで関数使わずにガードみたいなことをする

シェルスクリプト (bash/dash) を書かざるを得ない状況になっていて書いています。
しかし、不勉強が祟ってさっぱりぽんなわけです。

if [ -f $PATH ]; then
  if [ hoge condition ]; then
    prinf "really? "; read res
    if [ $res = 'n' ]; then (do_something_else に飛びたい); fi
  fi
  do_something
fi
do_something_else

上記のように、特定の条件下では確認をして、n だったら実行しないということをしたいのですが、関数にしていないのでガードみたいにして関数を抜けるということが出来ません。そこで以下のようにやって回避しています。

for APATH in "/path/to/a"
do 
  if [ -f $APATH ]; then
    if [ hoge condition ]; then
      prinf "really? "; read res
      if [ $res = 'n' ]; then break; fi
    fi
    do_something
  fi
done
do_something_else

大変無駄な感じですが、とりあえず動いているようです。

---
追記 12/09

やっぱり、関数にして以下のように書くのが良いようです。
テストもしやすいので、ぐっどです。

f() {
  if hoge; then
    if piyo; then
      if (user が no を選択); then return; fi
    fi
    do_something
  fi
}
f()
do_something_else

2010年12月8日水曜日

Ruby/Rails勉強会@関西#47 に行ってきた

12月4日に開催された勉強会に参加、発表してきました。
http://jp.rubyist.net/?KansaiWorkshop47

Rubyist のための HTML5 入門 - Content models - by 僕



なんか結局ちゃんと Ruby と絡められなくて、HTML5 のコンテンツ・モデルの話をつらつらと。
ちょっと補足すると、カテゴリと言うのは、要素につけるタグのようなもので、コンテンツ・モデルは内包出来るタグが決っているような感じにイメージすると近い感じだと思います。
Web 関連の人は確実に触れざるを得なくなるので、ぼちぼち勉強しておくと良いと思います。僕も勉強しないと。

redmineとgitを建築プロジェクトに使ってみた by wakuさん


建築のプロジェクトで、ファイルの受け渡しに Git 、プロジェクト管理に Redmine を導入して、成功させた話。話題も話術もすばらしく、とても楽しく聞けて参考になりました。
管理する人の不断の努力が成功の鍵というのは今の状況的にも刺さる言葉でした。


RailsDevCon2010の報告 by アジャイルかわばたさん


11月に開催された RailsDevCon2010 の各セッションのダイジェスト。大変熱い内容で、参加してないのに参加していたかのような「感極まる」発表でした。テスト書かないと。

フリートークセッション by むりょうい


今回から始まったフリートーク。自己紹介も良かったし、全員への質問もおもしろかったです。
次回はテーマを決めて全体で話しを進めてもおもしろそう。他にもグループごとに自己紹介して代表者がメンバを紹介していくとか。

Ruby初級者レッスン by こなみさん


メソッドの作り方と、正規表現について。以外適当にしか覚えていない部分だったので良い復習になりました。なんか、チャットでは大変ディープな会話をされていて、ついていけませんでした。

演習のをはっつけておきますね。コメントのが後で気づいた個人的な正解です。

練習 1–1 次のように,任意の数の整数データを与えるとその総和を計算するメソッドを書いて下 さい。
sum_all(1,2,3,4,5) #=> 15.0

def sum_all_1(*args) 
  args.map(&:to_f).inject(&:+) 
  # args.inject(0.0, &:+) 
end 

練習 1–2 次のように,整数データの配列を与えるとその総和を計算するメソッドを書いて下さ い。このメソッドはデフォルトでは float(浮動小数点数) で計算するものとし,オプション引数で :int というシンボルを与えると整数で計算するものとします。
sum_all([1,2,3,4,5]) #=> 15.0

def sum_all_2(type = :float, list) 
  list.map(&(type == :int ? :to_i : :to_f)).inject(&:+) 
  # list.inject(type == :int ? 0 : 0.0, &:+) 
end

sum_all(:int, [1,2,3,4,5]) #=> 15

def sum_all(t = :x, a) a.inject(:+).public_send(t == :int ? :to_i : :to_f) end 

Unite.vim のプロンプトをかわいくした

.vimrc に以下のように書いておく。

function! UniteWrapper(command, ...)
  let l:prompt = [ ':)', ':(', ':-<', ':->', ';)' ][localtime() % 5] 
  silent execute a:command . ' -prompt=' . l:prompt . '\  -buffer-name=files ' . join(a:000, ' ')
endfunction
command! -nargs=* UniteWrapper call UniteWrapper(<f-args>) 

:UniteWrapper Unite file file_mru

みたいに使う。

2010年12月4日土曜日

名前を言ってはいけないあのXXX

大変おそろしい…。

元ネタ
http://ja.wikipedia.org/wiki/%E3%83%B4%E3%82%A9%E3%83%AB%E3%83%87%E3%83%A2%E3%83%BC%E3%83%88

v(ry
http://subtech.g.hatena.ne.jp/keyword/%E5%90%8D%E5%89%8D%E3%82%92%E8%A8%80%E3%81%A3%E3%81%A6%E3%81%AF%E3%81%84%E3%81%91%E3%81%AA%E3%81%84%E3%81%82%E3%81%AE%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

u(ry

String#[] が便利

去年の RubyAdventCalendarJP で紹介した String#[] の 正規表現のが便利。

"'12345'"[/\d+/] #=> 12345

なんてやって、シングルクオートを外せたりします。
ワンライナで CSV を弄ったりする場合なんかに重宝。

第2引数に正規表現レジスタのインデクスを渡せるため、

"123'456'"[/'(\d)'/, 1] #=> 456

みたいな書き方もOK

2010年12月3日金曜日

Unite.vim は anything.el の夢を見るか。

Unite.vim を本格的に導入してみたのではまった点などをメモ。

Unite.vim は Shougo さんのプロダクトで、Emacs の anything.el に近い哲学で開発されている Vim のプラグインです。
開発は GitHub で行われており、誰でも最新のコードに触れることが出来ます。
https://github.com/Shougo/unite.vim

最初にはまったのは、AutoComplPop との相性で、インサートモードで補完しようとして、まともに入力出来なくなったり、パスが補完されてしまい、インサートモードを抜けないと、リストの更新がされなかったりと、まともに使えるような状況じゃありませんでした。

そこで、以下のようにしてラッパコマンドを作って呼ぶことで回避しています。
function! UniteWrapper(command, sources)
  silent execute 'AutoComplPopDisable'
  silent execute a:command . ' -prompt=:)\ -buffer-name=files ' . a:sources
endfunction
command! -nargs=* UniteWrapper call UniteWrapper(<f-args>)

ついでなのでいくつかオプションを指定しています。
'-prompt=:)\ ' とすることで、プロンプトをかわいらしい顔文字に出来ます。
ただし、i_>plug<(unite_move_head) が動作しなくなるという問題があった結構致命的です。
'-buffer-name=files' では、Unite バッファ名を指定しています。
これをすると良いことがあるので、後程触れます。
以下のように使います。
nnoremap   :UniteWrapper Unite file\ file_mru  

これで、>c-n< をタイプすると、file, file_mru ソースを使用して Unite を起動出来ます。
ただ現状は、neocomplcache に乗り換えたため、これは無意味になりました。

次に嵌ったのが、~/ とか ../ と入力してもシェルみたく展開してくれない点です。
これは、実は Unite バッファ名毎に展開の設定を持っており、そこで設定する必要があったのです。
とりあえず、 '-buffer-name=files' しておくと最低限の展開をしてくれるようになります。
これひとつで使い勝手がだいぶ変りますのでマストな設定です。

僕は追加で after/ftplugin/unite.vim で以下のように設定しています。
call unite#set_substitute_pattern('files', '^@@', '\=fnamemodify(expand("#"), ":p:h")."/*"', 2)
call unite#set_substitute_pattern('files', '^@', '\=getcwd()."/*"', 1)
call unite#set_substitute_pattern('files', '^\\', '~/*')

call unite#set_substitute_pattern('files', '^v:', '~/.vim/*')
call unite#set_substitute_pattern('files', '^p:', '~/projects/*')

このあたりは thinca さんの http://d.hatena.ne.jp/thinca/20101027/1288190498 が、わかりやすくておすすめです。

さらに深く使うための情報源についてですが、これは Unite.vim のドキュメントが神クオリティなため、とりあえず、:help unite すると良いと思います。
(~/.vim/doc に unite.jax を置いて、 :helptags ~/.vim/doc)

また、プラグイン情報は https://github.com/Shougo/unite.vim/wiki/unite-plugins にまとまっていますので、こちらがお勧めです。
拙作の unite-grep も掲載していただいています。unite-neco が神なので入れるべきです。
ちなみに、プラグインは ~/.vim/autoload/unite/sources に配置すると自動的に読み込まれます。

Lingr の vim-users.jp には、SHougo さんをはじめ vim 界の神たちがたむろしているので、のぞいているといろいろ情報が入ると思います。