#!/usr/bin/env ruby # coding: utf-8 require "nokogiri" doc = Nokogiri::XML("<RootNode>") doc.root.add_child "<AddChildByString>" doc.root.add_child Nokogiri::XML::DocumentFragment.new(doc, '<AddChildByDocumentFragment>') puts doc.to_xml # => # <?xml version="1.0"?> # <RootNode> # <addchildbystring/> # <AddChildByDocumentFragment/> # </RootNode>
Nokogiriのドキュメントを漁っていたら下記のような書き方で生成できることが分かった。こっちの方が便利そう。
#!/usr/bin/env ruby # coding: utf-8 require "nokogiri" document = Nokogiri::XML::Builder.new do |doc| doc.RootNode { doc.AddChildByString doc.AddChildByDocumentFragment } end puts document.to_xml
def hoge(a, b, c) p self.method(__callee__).parameters #=> [[:req, :a], [:req, :b], [:req, :c]] end hoge(1, 2, 3)
Kernel.#__callee__とMethod#parametersを使う。
__callee__で今いるメソッドの名前がSymbolとして取れるので、それをself.methodの引数に渡して、Method#parametersで引数の一覧を取得する、という流れ。
.bashrcとかにこんな感じで書く。
function check-shell-command { if [ $? -eq 0 ]; then face="\e[32m(^_^)" else face="\e[34m(+_+)" fi echo -e "${face}\e[m" } PS1='$(check-shell-command):\W \$'
コマンドが成功した時と失敗した時とで顔文字が変わるようにしてる。
便利!!!
自分の好きな本を挙げるのがにわかに流行っているみたいなので。順番は思いついた順です。
安村研に入って初めてのサブゼミ(輪読)の題材がこれだった。スマートフォンが出始めた当初くらいの本だからデスクトップアプリケーションに関する記述が多くてスマートフォンに関してはほぼ載っていないんだけど、インタラクティブなものを作る際の基礎的な知識はこれ一冊あれば大体カバーできるんじゃないでしょうか。
昔は割とOS寄りの方面の勉強をしていて、その際によく参考にしていた。Linuxはついこの間メジャーバージョンが3になったけど、内容自体はまだまだ古びていないと思う。
最近はdoc.ruby-lang.orgを見ることの方が多いのだけど、Rubyでプログラミングし始めた当初はよく参考にしていた。
Metaprogramming Ruby: Program Like the Ruby Pros (Facets of Ruby)
こっちは上の本とは違い、Rubyの内部的な話が多い。合わせてRHGも参考にするといいですね。
僕はデザイナーではないしどちらかというとデザインは苦手なんだけど、とりあえずそれっぽい感じで作るときにどうやればそれっぽくなるかがすごく分かりやすく書いてるので割と参考にしてる。
誰のためのデザイン?―認知科学者のデザイン原論 (新曜社認知科学選書)
使いにくいものというのはデジタルなものに限らず沢山あって、それを使いこなせないからといって諦めてはいけない、使いにくいものの方が悪いんだということを教えてくれた一冊。
フロー体験 喜びの現象学 (SEKAISHISO SEMINAR)
ちょっと前にもはてブでこの本を紹介した記事が話題になっていたアレです。エンジニアの皆様は是非読んでおくべきですね。
Javascript: The Definitive Guide (Definitive Guides)
JavaScriptの包括的なリファレンスがネット上には無いのでよく参考にしています。
エンジニアとしてどう生きるかみたいなことが書いてあった気がします。(うろ覚え)
上の『誰のためのデザイン?』と合わせて。
~/.bashrcに書いておけば多分動く。bash以外で動くかは試してない。
Mac用に書いてるのでLinuxとかは適宜コマンドを(notify-sendとかに)置き換えてください。
function notify-last-command { # 3秒以上かかったらGrowlで通知する if [ 3 -lt $MYDATETIME ]; then growlnotify -n notify-last-command -t command -m "$( history 1 | awk '{s="";for(i=2;i<=NF;i++){s=s" "$i}print s}' )" fi MYDATETIME=0 } PROMPT_COMMAND='notify-last-command' MYDATETIME=0 function time_spent () { MYDATETIME=$(expr $(date +%s) - $MYDATETIME) } trap 'time_spent' DEBUG
BashのPROMPT_COMMANDとtrapを利用している。
PROMPT_COMMANDに値を指定すると、プロンプトが表示される直前に指定した値がコマンドとして実行される。*1
trapは、本来はシグナルをトラップして色々処理するためのものらしいんだけど、上記のようにDEBUGを指定するとコマンドを入力してエンターを押した直後とPROMPT_COMMANDの直前で実行されるようなので今回はそれを利用している。*2
動作の順番としては、以下のようになっている。
MacPortsのアップデートのような時間がかかる処理を終わったかどうかいちいちチェックするの面倒だし終わったら通知してほしい、みたいな感じです。
このままだと
等にGrowlされてしまうのでその辺うまく解決出来ないかな〜と思う。