タグ

ブックマーク / mametter.hatenablog.com (10)

  • パイプライン演算子の歴史 - まめめも

    (You can read this article in English.) Ruby の開発版にパイプライン演算子(pipeline operator)が試験的に導入されましたが、いろいろあってプチ炎上になっています(チケット)。 せっかくの機会なので、パイプライン演算子の歴史を調べてみました。付け焼き刃の調査なので、間違ってたら教えてください。 パイプライン演算子とは こんな感じのものです。 x |> f |> g |> h # h(g(f(x))) と同じ意味 h(g(f(x))) という関数適用の式は、関数が呼ばれる順序(f→g→h)と、プログラムの字面上の順序(h→g→f)が逆でわかりにくいとされます。この問題は、特に、関数が大きくなったときに顕著になります。 wonderful_process_h( marvelous_process_g( fantastic_process

    パイプライン演算子の歴史 - まめめも
  • emruby: emscripten でブラウザで動く MRI - まめめも

    (この記事は Ruby 25th anniversary のための寄稿です) Ruby をブラウザで動かすというと Opal ですが、他の選択肢として、C で書かれた Ruby 処理系を emscripten で JS に変換するという選択肢もあります。 しかし調べてみたところ、mrubyWebAssembly に変換した記録は見つかりましたが、MRI でやった例が見つけられなかったので、やってみました。 デモ https://mame.github.io/emruby/ 手順 https://github.com/mame/emruby/ に書いてあるとおりです。 ビルドコマンドは次の通り。 $ emconfigure ./configure CFLAGS="-m32 -s EMULATE_FUNCTION_POINTER_CASTS=1" $ emmake make V=1 mi

    emruby: emscripten でブラウザで動く MRI - まめめも
    dowhile
    dowhile 2018/02/17
  • Quine Tweet: 自分自身へのリンクを持つ再帰的ツイート - まめめも

    This tweet is recursive. https://t.co/bZISaPd3Ts— Quine Tweet (@quine_tweet) 2016年9月19日 「このツイートはありません」となっていますが、URL をクリックすれば自分自身に飛べます。 以下、このツイートが生まれるまでの経緯を長々と書きます。 問題設定 そのツイート自身の URL を埋め込んだツイートを作ります。ツイートの URL はツイートをした後でないと決まらないし、ツイート文面を後から更新する手段はない(と思う)ので、単純ですが意外に難しい問題です。 調査 ご存知のように、現在のツイートの URL は次のような形式です。 https://twitter.com/<username>/status/<id>username はそのままなので、id を事前に予測できれば解決です。*1 調べてみるとこの id

    Quine Tweet: 自分自身へのリンクを持つ再帰的ツイート - まめめも
    dowhile
    dowhile 2016/09/21
    〉 実際、成功時の処理に typo があって例外になってました。ツイ消しには至らなかったものの、これだから Ruby は……(逆恨み)
  • Optcarrot: Ruby で書かれたファミコンエミュレータ - まめめも

    ウソみたいな当の話。Ruby でファミコンエミュレータを書いてみました。 気になる速度ですが、自分の環境では 20 fps ちょっと出ます。ファミコンは 60 fps なので、実速の 1/3 です。Ruby3x3 (Ruby 3 は Ruby 2 の 3 倍速い)という matz の宣言が実現すれば、実速が達成されることになりますね! 試してみたい人はこんなふうに実行してください。 $ gem install ffi $ git clone http://github.com/mame/optcarrot.git $ cd optcarrot $ bin/optcarrot examples/Lan_Master.nesSDL2 か SFML が適切にインストールされている必要があります。Debian/Ubuntu なら apt-get install libsdl2-dev で。 Ru

    Optcarrot: Ruby で書かれたファミコンエミュレータ - まめめも
    dowhile
    dowhile 2016/04/02
  • Writing Qlock - まめめも

    俺の卒業制作 書き時計 pic.twitter.com/NSBi45Lj77— K / $uzuki (@BellTreeNursing) 2016, 2月 7 うわーすごいなーと思ったので、パクリ インスパイアされてみました。Ruby プログラムで書き時計。 eval(T=%(eval(%(E=27.chr;Z=32.chr;$ ><<E+"[2J";K=->q{(q-q*(1-3844.0/q.abs2)**0.5) /2};I=->f,a,b,z,t=p{(a-b).abs>(f<1?1:1-(K[a]-c=K[b]). abs)?I[f,c= (a+b)/2,b,I [f,a,c,z,t],t :''''''''''''''''''''''''''''''': ]:f<1?(x,y=b. rect;d="'."[y%2 : : ];c=z[y/2+5];c[ x+=58]=t||(

    Writing Qlock - まめめも
    dowhile
    dowhile 2016/02/10
    すげーな
  • [Ruby] Ruby 3.0 の特大の非互換について - まめめも

    タイトルは釣りです。すみません。Ruby 3.0 はかなり先の将来の話なので、最終的にどうなるかはわかりません。でも Ruby 3.0 に重大な変更が予定されているのは事実なので、一緒に考えて欲しいと思います。 immutable string literal Ruby 3.0 では文字列リテラルをデフォルトで immutable (破壊的変更不可) にする、という方針が『決定』しました。(Feature #11473: Immutable String literal in Ruby 3) つまり、次のようなプログラムが動かなくなります。(当チケットから少し改変して引用) sql = "SELECT #{sec_id}, pt.path, st.doc_count " sql << "FROM #{stats_tablename} AS st " #### ←ここで例外: can't m

    [Ruby] Ruby 3.0 の特大の非互換について - まめめも
    dowhile
    dowhile 2015/10/04
    うーむ。インフラの高速性と言語の柔軟性の両天秤か
  • The 22nd IOCCC の結果が公開されました - まめめも

    C 言語のプログラムの汚さで競い合うプログラミングコンテスト、The 22nd International Obfuscated C Code Contest の今年の結果が公開されました。 http://www.ioccc.org/years.html#2013 相変わらずの変態ぞろいですのでぜひご覧ください。既報の通り、ぼくは以下の 4 つの賞を貰いました。 Most lazy SKIer Most recyclable Most tweetable 1-liner Most solid それぞれ順次紹介していきたいと思います。

    The 22nd IOCCC の結果が公開されました - まめめも
    dowhile
    dowhile 2014/01/08
  • Quine リレー - まめめも

    ref: https://github.com/mame/quine-relay/ 以下は、自分自身を出力する REXX プログラムを出力する Python プログラムを出力する R プログラムを出力する (...略...) を出力する Scala プログラムを出力する Ruby プログラムです。合計 50 言語を使います。 eval$s=%q(eval(%w(B=92.chr;N=10.chr;n=0;e=->(s){s.gsub(/[#{B+B+N}"]/){B+(N==$&??n:$&)}};E=->(s){'("'+e[s]+'")'} ;d=->(s,t=?"){s.gsub(t){t+t}};D=->(s,t=?@){s.gsub(B){t}};Q=->(s,t=?$){s.gsub(t){B+$&}};puts(eval(%q("objectXQRX extendsXApp{

    Quine リレー - まめめも
    dowhile
    dowhile 2013/07/19
  • TRICK 2013 (第一回 超絶技巧 Ruby 意味不明コンテスト in rubyKaigi) をやります - まめめも

    TAPL が無事出版されたので、そろそろ通常モードに。さっそくですが、@shinh さんに煽られて、Ruby で変態プログラミングのコンテストをやることになりました。 ref: https://sites.google.com/site/trickcontest2013/home/ja 一言で言えば IOCCCRuby 版という感じで、役に立たんけどなんか面白い Ruby プログラム作って競おう、という大会です。「変態 (褒め言葉) だー!」と言われそうな作品ほど強い。 応募がないと悲しいので、ぜひぜひご応募ください。5 月 18 日が締め切り、6 月 1 日に RubyKaigi 2013 で結果発表をする予定です。 最近の IOCCC は (ネタ枯渇気味なのか) 手の込んだ大作が多いですが、初期の IOCCC は単純だけどはっとさせるアイデア一発勝負が結構あって、ああいう感じのが

    TRICK 2013 (第一回 超絶技巧 Ruby 意味不明コンテスト in rubyKaigi) をやります - まめめも
  • SAT ソルバで数独を解く方法 - まめめも

    数独は非常に SAT に変換しやすい問題です。全部参考文献 *1 に載っている内容ですが、なるべくわかりやすく説明してみます。ちょっと長いです。 SAT とは まず SAT をごく簡単に説明します。すでに SAT を知っている人はここは読み飛ばしてください。 命題論理式の形の一つに乗法標準形のというのがあります。変数か変数の否定 (リテラルと言います) を or だけでつないだ式 (節と言います) を and だけでつないだ論理式のことを言います。つまり以下みたいな形です。 ( a1 or !a2 or ... or an) and ( b1 or !b2 or ... or !bn) and ... and (!z1 or z2 or ... or !zn)SAT は「a1 や zn などの変数にうまく true か false を代入して、上の式全体を true にできるか」という問題

    SAT ソルバで数独を解く方法 - まめめも
  • 1