設定情報をエレガントに管理する方法(解決なし)

アプリケーションにはいろいろ設定があるものです。一般的な例では、production / development のようなモードや、ログレベルなど。プログラムを書くとき、こういうデータをどのように管理しますか? 大きく 2 種類の書き方があると思います。 グローバル変…

rubygems を 1.5 倍に高速化した方法(stackprof --d3-flamegraph の使い方)

タイトルは釣りです。明日 ISUCON 10の予選があると小耳に挟んだので、Ruby で参加する人が絶対に抑えておくべき? Ruby 高速化の tips をひとつ。stackprof --d3-flamegraph のご紹介です。 例題 ちょうど今日、gem install aws-sdk にかかる時間を 37 秒か…

カロリーメイトリキッドのQuineを書きました

縁あって、カロリーメイトリキッドのプロモーション用にちょっとした Ruby プログラムを書かせてもらいました。 www.otsuka.co.jp ↑のリンクを開いて、cd .Quine したところにある CML_quine.rb がそれです。 cat CML_quine.rb とすると中身が見えます。ruby…

CPU律速なRuby/Pythonコードはデフォルト設定のdocker上で遅くなる

English version 要約 dockerはデフォルトでセキュリティ機構(Spectre脆弱性の対策)を有効にします。この影響で、RubyやPythonのようなインタプリタは速度が劣化します。特にCPU律速なプログラムで顕著に遅くなります(実行時間が倍くらいになることがあり…

Rubyのテストのややこしい失敗を直した話

Ruby の CI 維持業というのはこんな感じという事例紹介。 CIを観察する RubyのCIがときどき次のように失敗していました。 1) Error: TestM17N#test_object_inspect_external: Encoding::CompatibilityError: incompatible character encodings: UTF-8 and UT…

山手Quineが高輪ゲートウェイをサポートしました

2009年に、実行するたびに東京→神田→秋葉原→...と進んでいき、一周したら元に戻る『山手Quine』というのを作りました。 mametter.hatenablog.com あれから11年経ち、駅の方が増えるという理由で、まさかのバージョンアップをしました。 github.com 当時のソ…

パイプライン演算子の歴史

(You can read this article in English.) Ruby の開発版にパイプライン演算子(pipeline operator)が試験的に導入されましたが、いろいろあってプチ炎上になっています(チケット)。 せっかくの機会なので、パイプライン演算子の歴史を調べてみました。付…

新雑誌「n月刊ラムダノート」の『「コルーチン」とは何だったのか?』の草稿を公開します

『Ruby でつくる Ruby』などでお世話になっているラムダノートが、新しい雑誌「n月刊ラムダノート」を創刊しました。 www.lambdanote.com コンピュータ関係の技術情報の記事だけが載るそうです。創刊号は、『TCPの再送制御機構』、『「コルーチン」とは何だ…

ruby 0.62 のソースコードを復活させた

RubyKaigi の後夜祭で、akr さんが「327 種類の Ruby をビルドする方法 〜0.49 から 2.6.0-preview2 まで〜」という発表をされていました。RubyKaigi 2018 After Party で話したスライドです: 「327 種類の Ruby をビルドする方法 ~0.49 から 2.6.0-preview2…

emruby: emscripten でブラウザで動く MRI

(この記事は Ruby 25th anniversary のための寄稿です)Ruby をブラウザで動かすというと Opal ですが、他の選択肢として、C で書かれた Ruby 処理系を emscripten で JS に変換するという選択肢もあります。 しかし調べてみたところ、mruby を WebAssembly…

SA-IS 法のメモ

suffix array を線形時間で構築する SA-IS 法についてのメモです。SA-IS 法の解説はわりと世の中にいっぱいありますが、実際のプログラムにする方法がよくわからなったり、どうしてそれでうまく行くのか書かれてなくて気持ち悪かったりするものが多くて、自…

『テスト駆動開発』を読んで

テスト駆動開発posted with amazlet at 17.10.12Kent Beck オーム社 売り上げランキング: 563Amazon.co.jpで詳細を見るオーム社さまから電子書籍を贈本いただきました。ありがとうございます。本書はテスト駆動開発(TDD)の原典で、たいへん有名な本です。…

RubyKaigi 2017 の予稿:An introduction and future of Ruby coverage library

RubyKaigi 2017 の 2 日目に "An introduction and future of Ruby coverage library" というタイトルで発表します。事前資料の公開が推奨されていたので、簡単ですがどんな内容かを書いておきます。 要約 カバレッジ(テストカバレッジ、コードカバレッジ)…

『Ruby でつくる Ruby』の購入方法

書籍『Ruby でつくる Ruby』が発売されて 2 月ほど経ちました(当時の告知)。いろいろなところでわりと好意的な感想が聞こえてくるので、うれしい限りです。 本書はラムダノートにとっての最初の出版ということで、発売当初は直販サイトでしか入手できませ…

"Purely Functional Data Structures" の邦訳『純粋関数型データ構造』が発売されます

純粋関数型データ構造posted with amazlet at 17.03.16Chris Okasaki KADOKAWA (2017-04-28)売り上げランキング: 266Amazon.co.jpで詳細を見る伝説の名著、"Purely Functional Data Structures"(通常 PFDS)を翻訳しました。4 月末にアスキードワンゴから発…

書籍『Ruby でつくる Ruby』が発売されます

ref: https://www.lambdanote.com/collections/frontpage/products/ruby-rubyおかげさまで、ASCII.jp で連載していた『Ruby で学ぶ Ruby』が紙の本になる運びとなりました。わーい。『Ruby でつくる Ruby ― ゼロから学びなおすプログラミング言語入門』と微…

どうぶつしょうぎ名人

どうぶつしょうぎ AI を作りました。絶対に勝てません。無力感を味わってください。ref: http://mame.github.io/dobutsu-shogi-master どうぶつしょうぎとは 3 マス x 4 マスの単純化された将棋です。ライオン(王相当)、ぞう(1 マスしか進めない角行)、…

『Ruby で学ぶ Ruby』非公式あとがき

ref: http://ascii.jp/elem/000/001/230/1230449/「Ruby で Ruby を作りながら Ruby を学ぼう!」という ascii.jp の連載、おかげさまでほぼ予定通りに無事に終わりました。執筆の経緯を書いておきます。昨年の 6 月ごろ、「抽象によるソフトウェア設計」や…

ELVM を使った multiquine

言語間を自由に行き交うことができる Quine の集合のことを multiquine と言います。例えば mq.rb と mq.py が multiquine であるとは、 ruby mq.rb rb と実行すると mq.rb が出てくる(普通の Quine) python mq.py py と実行すると mq.py が出てくる(普通…

二分探索サンプルコード集(コピペ用)

二分探索は、感覚的なわかりやすさに反してバグが入りやすいことで有名なアルゴリズムです。20 の教科書のうち 15 でバグっていたという報告もあるそうです。実際、自分も書くたびにバグに苦しんできました。変な値を返すだけでなく、out of bounds アクセス…

Quine Tweet: 自分自身へのリンクを持つ再帰的ツイート

This tweet is recursive. https://t.co/bZISaPd3Ts— Quine Tweet (@quine_tweet) 2016年9月19日「このツイートはありません」となっていますが、URL をクリックすれば自分自身に飛べます。以下、このツイートが生まれるまでの経緯を長々と書きます。 問題設…

『Rubyで学ぶRuby』連載開始

「Ruby で Ruby を作りながら Ruby を学ぼう!」というトンデモ連載企画、『Ruby で学ぶ Ruby』を ascii.jp で始めました。ref: http://ascii.jp/elem/000/001/228/1228239/何を言ってるかわからないかもしれないので補足すると、「Ruby(言語)で Ruby(の…

『オブジェクト指向設計実践ガイド』を読んで

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方posted with amazlet at 16.09.01Sandi Metz 技術評論社 売り上げランキング: 20,383Amazon.co.jpで詳細を見る自著を書いたご縁で、技術評論社さまから贈本いた…

『プログラミング Elixir』を読んで

プログラミングElixirposted with amazlet at 16.08.22Dave Thomas オーム社 売り上げランキング: 1,168Amazon.co.jpで詳細を見る川崎 Ruby 会議 01 の会場で、訳者の笹田さん・鳥井さんから一冊献本いただきました!ありがとうございます!さっそく読み終え…

川崎 Ruby 会議 01 で基調講演しました

8/20 (土) に、川崎教育文化会館で川崎 Ruby 会議 01 が行われました。恐れながら、基調講演なるものをさせて頂きました。 Ruby で高速なプログラムを書く from mametter 内容は、東京 Ruby 会議 05 で話した Optcarrot の完全版でした。基調講演というと「…

[C][IOCCC] The 24th IOCCC: Best One-liner

f(y,x){int m,z;for(m=z=1;m*m<=y?z=y%m?z:m:x+1?z<2?x?f(x,0):putchar(64):f(z,x),putchar(x?10:32),y-=z:(f(z,y/z),0);)m++;}main(y){f(y-1,-1);}実行します。 $ gcc -o prog prog.c $ ./prog @ @ $ ./prog @ @ @ @ $ ./prog @ @ @ @ @ @ $ ./prog @ @ @ @…

[C][IOCCC] The 24th IOCCC: Back to the Future Award

#include /*recall-the\ /-good--old-\ /IOCCC-days!\ */<unistd.h> typedef unsigned/*int*/ short U;U(main) [32768],n,r[8]; __attribute__(( # define R(x) A(r[ 7-(n >>x& 7)], (n>> x>>3 )%8) #define C(x) (U*) ((/* |IO| -dpd */char*) main +(x) )/*| |CC| ll</unistd.h>…

[C][IOCCC] The 24th IOCCC: Most Overlooked Obfuscation

衝撃的な問題作。まずはこの動画をご覧ください。あなたの常識が崩れるはず。何の呪いでしょうか。自分で試してみたい人のコピペ用。 wget http://ioccc.org/2015/endoh2/prog.c cat prog.c gcc -w -o prog prog.c ./prog ネタバレ解説 バックスペース文字の…

[C][IOCCC] The 24th IOCCC: Most Diffused Reaction

ref: http://ioccc.org/2015/endoh1/prog.c #define/**/Alan/**/(fflush(0),j=c=0;++c

[C][IOCCC] The 24th IOCCC の結果が公開されました

C 言語のプログラムの汚さで競い合うプログラミングコンテスト、The 24th International Obfuscated C Code Contest (IOCCC 2015) のソースコードがいまごろになって公開されました。ref: http://www.ioccc.org/years.html#2015既報の通り、自分は以下の 4 …