「エンジニアリング」について
僕はどんなエンジニアになりたいか聞かれた時に、よく「自分で問題を解決出来るエンジニアになりたいです!」とかほざいてた訳ですが、ある時、「そもそもエンジニアリングというのは問題を解決する事そのものなんじゃないの?」とのお言葉を頂きました。
なるほど。
つまり、僕はどんなエンジニアになりたいか聞かれた時に、エンジニアリングをするエンジニアになりたいと答えていた訳ですね。
超絶アホっぽい。
でも、自分がクールだなって思うのは、やっぱり今の自分の環境を自分で改善して行ける事なんですよね。DHHがBasecampを作る為にRailsを作った様に、不便な道具を使うくらいなら自分で作っちゃう、みたいな生き方はかっこいいと思います。
今時は多くのプロダクトがOSSで、自分が使ってるものに不満を感じればPull Req投げるとかが出来る訳で、そういうのはとても良い事だしとても良い文化だと思います。
まとめ
エンジニアリングするエンジニアになろう
ビット演算でオプション
とあるgemのソースを読んでたら、オプションを整数のビット演算で管理していました。
array
に入れてinclude?
で見る場合とどれだけ速度に違いが出るのか、気になったのでベンチとってみた。
user system total real include?: 100000 0.750000 0.000000 0.750000 ( 0.755159) bit: 100000 0.010000 0.000000 0.010000 ( 0.011721)
おお、けっこう違う...。こういった高速化が大事なんですかね。
ちなみに、ベンチとったコードは以下。
require 'benchmark' module Constants STRICT = 0 RECOVER = 1 << 0 NOENT = 1 << 1 DTDLOAD = 1 << 2 DTDATTR = 1 << 3 DTDVALID = 1 << 4 NOERROR = 1 << 5 NOWARNING = 1 << 6 PEDANTIC = 1 << 7 NOBLANKS = 1 << 8 SAX1 = 1 << 9 XINCLUDE = 1 << 10 NONET = 1 << 11 NODICT = 1 << 12 NSCLEAN = 1 << 13 NOCDATA = 1 << 14 options = STRICT | SAX1 n = 100000 Benchmark.bm(15) do |x| x.report("include?: #{n}") { n.times { Constants.constants.include? :NOENT } } x.report("bit: #{n}") { n.times { (options & STRICT) == STRICT } } end
rubyのシンボル、特に大文字と小文字について
単純に疑問に思ったんですが。
シンボル生成のリテラルである:
を使うとき、定数の先頭に二個続けるとその定数の中身が返ってくるっぽいんですが、これは仕様と思っていいんですかね?
Constant = 10 :Constant // :Constant (シンボルが返ってくる) ::Constant // 10 (定数の中身が返ってくる)
ちょろっと調べてみても分からない...
ちなみに、普通の変数の場合はエラーが出ました。
a = 10 :a // :a ::a // SyntaxError: unexpected tIDENTIFIER, expecting tCONSTANT
定数を使えって怒られてますね。
rubyのcase
この記事でも言われてるみたいにクールな訳ですが。
クラスの判定も出来るんですね。
def pattern_match(val) case val when String then p 'This is String!' when Integer then p 'This is Integer!' else p 'This is not String nor Integer!' end end pattern_match('1') // This is String! pattern_match(1) // This is Integer! pattern_match(true) // This is not String nor Integer!
case
のwhen
で===
メソッドが呼ばれる為、要は[クラス名] === [オブジェクト]
でオブジェクトのクラスの判定が出来るってだけですが、書き方がクールだなって思いました。
===
はModule
で定義されてるっぽいですね。
http://docs.ruby-lang.org/ja/2.0.0/class/Module.html
psコマンドについて
オプションでxつけると制御端末の無いプロセスの情報も表示してくれる訳ですが、この時psコマンド自体の情報も表示してくれるみたいですね。
というか、psは端末から実行してるのに、デフォルトだと自身が表示されないようにしてるのが特別扱いなのか。
まあ、psでイチイチ今実行したばかりのpsコマンドの情報出て来てもな...