Opalはどうやってmethod_missingを実装しているのか
本記事はOpal Advent Calendar 2016の17日目の記事です。
OpalはRubyからJavaScriptへのコンパイラです。今回はRubyの黒魔術の一つであるmethod_missingの実装について見ていきます。
method_missingとは
Module#method_missingは、あるオブジェクトに対して定義されていないメソッドを呼び出したときに走るフックを定義する機能です。
class A
本記事はOpal Advent Calendar 2016の17日目の記事です。
OpalはRubyからJavaScriptへのコンパイラです。今回はRubyの黒魔術の一つであるmethod_missingの実装について見ていきます。
Module#method_missingは、あるオブジェクトに対して定義されていないメソッドを呼び出したときに走るフックを定義する機能です。
class A
本記事はOpal Advent Calendar 2016の17日目の記事です。
OpalはRubyからJavaScriptへのコンパイラです。今回はRubyの黒魔術の一つであるmethod_missingの実装について見ていきます。
Module#method_missingは、あるオブジェクトに対して定義されていないメソッドを呼び出したときに走るフックを定義する機能です。
class A
本記事はOpal Advent Calendar 2016の13日目の記事です。
11日目のエントリではOpalのString以外クラスを読むと書いたのですが、実際読んでみるとあんまり解説することがない(Stringの回と似たような内容になってしまう)ことに気づいたので、今回はパーサを読むことにしました。
OpalはRubyからJavaScriptへのコンパイラです。コンパイラなのでパーサはホスト側言語(=Ruby)にあれば良い…と思いきや、Opalにはevalがあります。Kernel#evalが呼ばれた場合、Opalプログラムのパースを「実行時に」行う必要があります。このためパーサはJavaScriptかOpal自身で実装されていると予想できます。
ということを念頭に置きつつ、githubでparserで検索してみます。どうもlib/opal/parser.rbがそれのようです。あれ、lib以下ということはRuby用なのか?と一瞬思いましたが、if RUBY_ENGINE == 'opal'という行があるので、RubyでもOpalでも動かせるようにしてあるようです。
これはOpal Advent Calendar 2016の11日目の記事です。
OpalのAdvent Calendarは今年が初めてということで、Opalのソースを少し読んでみたいと思います。今回はStringクラスです。
Opalの組み込みクラスのソースはopal/corelib以下にあります。
https://github.com/opal/opal/blob/7310b27a1c6bec135610e5df5f20753eb349965e/opal/corelib/string.rb
OpalはJavaScriptで書かれたRuby処理系です。OpalではArray#findといった組み込みライブラリもJavaScriptで再実装しているので、テストが膨大な数になりそうですが、そのあたりはどうしているのでしょうか。
Rubyにはruby/specというテストスイートがあります。これは、CRubyやJRubyなど複数の処理系間で挙動を揃えるために作られたものです。READMEにあるようにもとはRubySpecという名前でしたが、現在はThe Ruby Spec Suiteというのが正式名称になっています(が、カジュアルには今でもrubyspecといえばこのruby/specを指すことが多いようです)。
Opalはこのrubyspecをテストとして使うことで、テストを0から書く手間を省きつつ、他の処理系との互換性を担保しています。
このエントリはErgoDox Advent Calendar 2016の6日目のエントリです。
今年の5月に仕事用キーボードとしてErgoDox EZ (組み立て済みErgoDox) を購入し、半年が経ちました。ErgoDoxのメリットの一つとしてキーマップのカスタマイズ性の高さがありますが、一方で「Pキーの右にたった一列しか場所がない」という特殊な形状のため、キー配置をどうカスタマイズしても慣れるまでに多少の練習が必要になるという問題もあります。
本稿ではなるべく練習が要らないキー配置について考えます。
キーボード上にはたくさんのキーが存在しますが、それぞれの使用頻度には大きな隔たりがあります。「%」や「&」など使用頻度の少ないキーは、多少変なところに配置してもそれほどストレスにはなりませんが、EnterやBackSpaceなどの基本的なキーを変わったところに置くと慣れるまで大変です。
この記事はOpal Advent Calendar 2016とThree.js Advent Calendar 2016の6日目の記事です。両方のアドベントカレンダーが空いていたので、こう、くっつけたらどうなるかなっていう…。安易な発想ですいません。
OpalはJavaScriptで書かれたRuby処理系です。ブラウザ上でRubyのコードを動かすことができます。
opalとthree.jsで検索してみるとthree.rbというリポジトリが引っかかりました。1年ほど更新がないですが、とりあえず先人はいるみたいです。
一人暮らし自炊向け情報です。
炊飯はわりと面倒くさい作業ですが、この面倒くささを軽減する方法として、「たくさん炊いて一食分ずつ冷凍する」というテクニックが存在します。具体的なやり方としては冷めるまで待ってラップで包んで冷凍という方法とかもあるのですが、実はこういった専用の容器があるので、これを使うと格段に楽ができます。
写真では分からないですが中央が少し盛り上がっていて、これにより解凍時に下段の中央だけ冷たいまま残ることがないようになっています。また、ご飯専用でないコンテナで冷凍するよりも美味しい気がします(個人の感想ですが)。
適当に作ったけどわりと美味しかった。
リゾットについてはちゃんとやる方法(生米をスープで炊く)と、スープっぽいのものに冷ご飯を投入して水分を飛ばすという雑な方法があって、今回は後者です。

12月です。今年もアドベントカレンダーの季節がやってきました。
Web上におけるアドベントカレンダーというのは12/1から12/25までの間、一つのテーマで毎日ブログなどに記事を投稿するイベントで、日本においてはPerlコミュニティから始まったような記憶があったのですが、はっきりとは覚えていなかったのでこの機会に確認してみました。
2008年12月、日本のPerl界隈でアドベントカレンダーが開催されます。以下の記事によると海外のPerlコミュニティでは2000年から同様のイベントが行われており、それを日本に輸入するという形だったようです。この年は特殊ルールとして、原稿を書いた人が翌日の担当を指名するというバトン式で行われています。