タグ

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

  • アニメ「Sonny Boy」の『難解』プログラムの解説 - まめめも

    『Sonny Boy』というアニメが放送されています。学校が異次元に漂流してしまい、超能力に目覚めた生徒たちがサバイバルしながら、さまざまな奇妙な現象の裏にあるルールを解き明かし、元の世界に変える方法を探す、というストーリーです。ルールが分かったあとで何度も見直したくなります。 anime.shochiku.co.jp さて今回、『Sonny Boy』に、プログラムを寄稿しました。プログラムでおもしろいCGを作ったとかではなく、プログラムの実行の様子そのものが『Sonny Boy』の5話の中で放送されました。 こういうプログラムです。 nankai.rb このプログラムがどういうものだったかを解説します。 どんなプログラム? 実行すると、「難解」という文字がほどけてなくなるアニメーションをします。 起動したらまず、プログラム自身が画面に表示されます。 しばらくしたら「難解」が左から右へほど

    アニメ「Sonny Boy」の『難解』プログラムの解説 - まめめも
    Sixeight
    Sixeight 2021/08/13
  • rubygems を 1.5 倍に高速化した方法(stackprof --d3-flamegraph の使い方) - まめめも

    タイトルは釣りです。明日 ISUCON 10の予選があると小耳に挟んだので、Ruby で参加する人が絶対に抑えておくべき? Ruby 高速化の tips をひとつ。stackprof --d3-flamegraph のご紹介です。 例題 ちょうど今日、gem install aws-sdk にかかる時間を 37 秒から 24 秒ほどに高速化しました。 変更前: $ time ruby -I lib bin/gem install --no-doc aws-sdk Successfully installed aws-sdk-3.0.1 1 gem installed real 0m37.104s user 0m36.952s sys 0m0.333s 変更後: $ time ruby -I lib bin/gem install --no-doc aws-sdk Successfully

    rubygems を 1.5 倍に高速化した方法(stackprof --d3-flamegraph の使い方) - まめめも
  • 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 で書かれたファミコンエミュレータ - まめめも
  • Quine ruBy - まめめも

    略して QB 。 eval s||= %q(1;t= %w(s.gs ub!(/\e.* ?m/,"");[ [ 0x26e885c a844a879e27 a,519,48, 5 , 9],[20182686,600,48,5,1],[4366,611,48 , 5 ,15],[432803624050570,533,0]].map { | r,m,*d|s[m+=r%74,0],r="\e[#{d*";"}m", r /74while(r>0)};puts((z=32.chr)*5+"eval#{z *39}s||=\n#{z*5}%q(#{(1+n=s.to_i)%3}#{s[1 ..- 1]})\n\n"+z*9*n+"5YOV44GvUnVieWlzdO OBq +OB quOBo+OBpuOBj+OCjOOBo+OBpuOAgeOBjeOBo eOC k+OB qOOBi um

    Quine ruBy - まめめも
  • Merry Quine-mas 2010 - まめめも

    今夜は、年に一度の W. V. Quine の命日イブです。 %;';;X= %q(x=1; z="%c"% 32;eval %w(w=N= Merry =128;r= z*79+$/; ;p=open" / dev/dsp ","w"rescue$_;/ / ;eval"s rand(%s)"%$*[ d=0];a=[];s=(r+z+% (%;';;X=#{z* 3}%q(#{X});e val(X)) +r*=23).l ines.map{|l|l.chop+ r};t=proc{|y|s [y][x-1,w].sca n(/\S /){s[y+1][m=x -1+$` .size ,1]== z&&a< <[$&,m, y,s[y ][m]=$/]};y};t[ 23];f =(0.. 1071) .map{|i|c,x,y =a.shuffle!. pop;s [y][x]=z

    Merry Quine-mas 2010 - まめめも
    Sixeight
    Sixeight 2010/12/24
    え、なにこれ、え!?え!?って感じでした。メリークリスマス!
  • Ruby とすてきな難読化 - まめめも

    (これは Ruby Advent Calendar jp: 2009 の 16 日目の記事です。) Ruby は読みやすいプログラムを簡単に書ける言語ですが、読みにくいプログラムも簡単に書けます。 今回は、Ruby でできるかんたんな難読化のテクニックを 4 つ紹介します。 1. Integer#to_s を使う方法 Integer#to_s *1 は、何進数として文字列化するかを引数で指定できます。普通は 2 、10 、16 くらいしか使わないと思いますが、実は 36 まで指定できます。 0.to_s(36) #=> "0" 1.to_s(36) #=> "1" ... 8.to_s(36) #=> "8" 9.to_s(36) #=> "9" 10.to_s(36) #=> "a" 11.to_s(36) #=> "b" ... 34.to_s(36) #=> "y" 35.to_s(

    Ruby とすてきな難読化 - まめめも
  • 最悪な Hello, world! を書いてみた - まめめも

    ref: 最悪な Hello World | Happy My Life と言うのが流行っていたのに数ヶ月遅れて気がついたので、ぼくも書いてみた。 alias|send\ ;$stdin=GC | "%p?"%def# FALSE.gets();(8 | 64).chr+232424. to_s(25)+", "+%w|w ! | *"orlc". next<<012|| (c).Yusuke end;"oh, 2009" | "stegano-X."[0,4].reverse d,be="whydoes","crypto";:make. | %.mains..tr'eams',be.delete(d)形に意味は無い。これが読めれば Ruby 中級者を名乗っていいと思う。(なぜか偉そう) 自画自賛だけどコピーライトが好き。でも最後の行の英語で遊ぶのはいまいち。ネイティブ有利だよね。

    最悪な Hello, world! を書いてみた - まめめも
    Sixeight
    Sixeight 2009/11/27
    まだ初級者
  • map が面倒なので DelegateMap - まめめも

    簡単なことをする map を書くのが面倒です。配列の各要素に 1 足す程度のことで、いちいち .map {|x| x + 1 } などと 12 ストローク (空白除く) も必要なんですよ。しかもなんかごちゃごちゃして読みにくい。 使用頻度の低い inject とかなら許せるんですが、特に使用頻度の高い map くらいは短く書きたい。ブロック変数名を決める必要があるのも面倒くさい。"{|x|" の部分と "}" の部分が異なる箇所に分かれるのも気に入らない *1 。 そこで考えた。こんなのどうだろう。 # 各要素に 1 を足す p [1, 2, 3].dmap + 1 #=> [2, 3, 4] p [1, 2, 3].map {|x| x + 1 } # 上と等価 # 二重配列の各要素の先頭の要素を集める (map fst みたいな) p [[1, 2], [3, 4], [5, 6]].

    map が面倒なので DelegateMap - まめめも
    Sixeight
    Sixeight 2009/03/14
    なるほど
  • Ruby 1.9 の新機能もうひとめぐり (前編) - まめめも

    ref: Ruby Freak Lounge 第1回 Ruby1.9の新機能ひとめぐり(前編):YARV,Fiber,配列処理の強化 の補足など。 YARV (Yet Another Ruby VM) による高速化 いきなり編とあまり関係ないんだけど、高速化のまめ知識をひとつ。 YARV では while や if のようなプリミティブの構文が最適化されています (というか、Ruby の中で数少なく最適化の余地があったところ) 。そのため、1.9 では C メソッドやブロックを呼び出すより while を使ったほうが速いです。 # 1.8 で 13 秒、1.9 で 2.4 秒 n = 0 while n < 50000000 n += 1 end # 1.8 で 6.5 秒、1.9 で 5.0 秒 50000000.times {|n| } # 1.8 で 4.3 秒、1.9 で 4.8

    Ruby 1.9 の新機能もうひとめぐり (前編) - まめめも
  • たたみすぎる Array#flatten - まめめも

    Array#flatten は配列をたたむメソッドです。 ary = [ [1], [2, [3], 4], [5] ] p ary.flatten #=> [1, 2, 3, 4, 5] このメソッドは便利に見えて、非常にはまりやすいメソッドです。このメソッドはたたみすぎるんです。上で言うと、[1, 2, [3], 4, 5] を返してほしいのです。 例えば、「ちょっと x と y の組を作りたいけど、いちいち Point クラスを作るのは面倒」というようなときに、横着して [x, y] という配列を使います。その後、「座標の配列の配列」から「座標の配列」を作ろうと思って flatten すると、なんと「x と y が順に並んだ配列」ができてしまいます。これはたまりません。 この例だけ見れば「横着すんな」で終わりそうですが、 そうは言っても使い捨てプログラムでは横着したいし、 連想配列か

    たたみすぎる Array#flatten - まめめも
  • 記号だけで brainfuck インタプリタ - まめめも

    Ruby 1.9 の新機能のひとつに「lambda { ... } を -> { ... } と書ける」というのがあります。この表記は反対意見が根強い *1 ですが、確実にすばらしい点があって、全部記号だということです。これによって Ruby が記号だけでチューリング完全になります *2 。 デモとして、brainfuck インタプリタを記号だけで書いてみました。 $___,@_,@__,$_=(@@__="")=~//,?#=~/$/,->(_){_<(__="####"=~/$/)**__&&(@@__<< _;@__[_+@_])},[*$<]*@@__;@__[$___];$____,$_,@___,$__,@__=$_[@_+($_+?!=~/!/ )..-@_],$`,[],[],->(_){(__=$_[_];__=~/[><+\-\.,]/?$__<<$_[_]:__==?

    記号だけで brainfuck インタプリタ - まめめも
  • ruby 1.9 を日常的に使うぼくが 1.9 の新機能を寸評する - まめめも

    なんか偉そうな見出しですが、ruby 1.9 を主に使うようになって 1 年ちょっと経ったので、1.9 の新機能に思うところや注意点などを書き残そうと思うのです。さらに 1 年後に見たとき、「あのころはあんなふうに考えてたなあ」などと感慨にひたる予定です。 あらかじめ断っておくと、ぼくの ruby 1.9 経験はすべて趣味範囲なので、エンタープライズとかシステム運用の問題とかは知りません。あとぼくは ruby のコミッタなので、色眼鏡もあると思います。あしからず。 YARV VM 実行になったという話。一般的には「速い」という文脈で語られます。1.8 と比べると確かに速いです。でも、1.9 ばかり使い出すとなんとも思わなくなるはずです。速さなんて相対的な価値ですから、当然ですけどね。好意的に考えれば、「なんとも思わない程度に、遅くて困ることが減った」のかもしれない。 コンパイルフェーズを挟

    ruby 1.9 を日常的に使うぼくが 1.9 の新機能を寸評する - まめめも
    Sixeight
    Sixeight 2009/01/27
    *でも順序保持してなくてもRuby処理系としては正当だから、依存コードは書いちゃいけないんだぜhehehe」*
  • スタックトレースの賢い省略 - まめめも

    Ruby は例外終了時にスタックトレースを表示しますが、長いときは以下のように省略をします。 $ ruby19 -e ' def fib(n) n <= 1 ? n : fib(n - 1) + fib(n - 2) end fib(30000) ' -e:3:in `fib': stack level too deep (SystemStackError) from -e:3:in `fib' from -e:3:in `fib' from -e:3:in `fib' from -e:3:in `fib' from -e:3:in `fib' from -e:3:in `fib' from -e:3:in `fib' from -e:3:in `fib' ... 8174 levels... from -e:3:in `fib' from -e:3:in `fib' from -e:3:

    スタックトレースの賢い省略 - まめめも
  • 難解言語本をもらっちゃった - まめめも

    こないだ気になると言った難解言語 (isbn:4839927847) ですが、なんと著者の yhara さんから献してもらってしまいました。ありがとうございます。昨日届いて、一気に読みました。初めて読む Rubyがこれだよ! 以下の 3 部構成でした。 HQ9+ 、brainfuck 、whitespace の紹介と、Ruby での実装のしかた yhara さん自作の難解言語 Starry と Bolic の紹介と、Ruby での実装のしかた 他の難解言語 13 個の紹介 「難解言語なんて勉強しても何の役にも立たない」と考えてる人は結構いそうですが、難解言語は実は「プログラムとは何か」や「計算とは何か」という深遠なテーマにつながってます。いや、ほんとに。なので、難解言語を全然知らない人は読むといいです。そして一緒に時間を無駄にしましょう。 あと適宜練習問題もあるので、「Ruby

    難解言語本をもらっちゃった - まめめも
  • 1