YARV ベリファイアを試作してみました。製作時間一晩、リファクタリング一晩なので適当です。不正なバイトコードを食わせると例外を投げます。 # encoding: utf-8 # bad_example.rb require "verifier" # ヘッダ header = [ "YARVInstructionSequence/SimpleDataFormat", 1, 1, 1, { :arg_size=>0, :local_size=>1, :stack_max=>3 }, "<dummy>", "foo.rb", :top, [], 0, [] ] # バイトコード本体 (スタックマシン) body = [ [:getlocal, 10000], # 10000 番目のローカル変数を読む [:leave] # 終わり ] bytecode = header + [body] # バ
YARV では、バイトコードを直接書いて実行する方法が提供されています。バイトコードといってもバイトとかは出てこなくて、配列やシンボルを使って命令列を表現します。こんな感じ。 # encoding: utf-8 # good_example.rb # ヘッダ header = [ "YARVInstructionSequence/SimpleDataFormat", 1, 1, 1, { :arg_size=>0, :local_size=>1, :stack_max=>3 }, "<dummy>", "foo.rb", :top, [], 0, [] ] # バイトコード本体 (スタックマシン) body = [ [:putnil], # レシーバを積む # (関数呼び出しのときは nil) [:putobject, 1], # 1 を積む [:send, :p, 1, nil, 8,
世田谷の某所から原宿まで自転車通勤しているのですが、そろそろ寒くなってきたので電車に切り替えようかと悩み中のmikioです。今回はTokyo Cabinetのスクリプト言語バインディングについて述べます。 スクリプト言語バインディングとは TCはC言語で実装されたライブラリで、C言語(C89、C99)およびC++言語のプログラムから利用することができます。CやC++は各種の計算処理やシステムコールの呼び出しを直接的に記述できるので高速に動作するプログラムを作ることができる反面、ポインタ演算やメモリ管理などで致命的なバグを潜ませやすいので非常に注意深くコーディングを進めなければいけません。つまり、プログラムの実行速度は速いが、開発速度は遅いということです。 それに対して、PerlやRubyをはじめとするいわゆるスクリプト言語は、実行速度はCやC++に劣るものの、高水準かつ直感的な文法と強力な
上を行くかどうかは知りませんが :-p Ajaxはクライアントの都合でサーバーに通信を仕掛けるpull型の通信ができ、Cometはサーバーが好きなタイミングでクライアントへデータを送りつけるpush型の通信ができるわけですが、新たに双方向の通信ができる技術を開発しました。 具体的には、JavaScriptとサーバーの間で双方向のRPCができます。すなわち、サーバーからクライアント側のJavaScriptのメソッドが呼べるし、逆にクライアント側からサーバー側のメソッドを呼ぶこともできます。 サーバー側で call("addMessage", "Hello!") とやると、JavaScript側の function addMessage(msg) { ... } という関数が呼ばれたりします。 この技術を使って、試しにチャットシステムを作ってみました > デモ (ソースコード)*1 リアルタイ
Improving the Ruby GC overview This page details some changes to the ruby garbage collector which seem to afford a 25% reduction in maximum heap memory usage, and nearly double the amount of heap space ruby's is able to reclaim. This comes at the cost of a 2% performance hit. More to come, stay tuned. patch The latest patch to ruby 1.8.6 is available here. summary of changes Fixed 2k heaps Hea
Ruby, GCplanSweepをLazySweepにして、最大停止時間を改善するHeap内のオブジェクト数がある一定を超えてからLazySweepに切り替わる 通常のプログラムのスループットを落としたくないので今は一応100万にしているLazySweepフェイズではHeapの配列の数本を、オブジェクト数が一定になるように選んでSweepする 配列一本ずつのオブジェクト数が異なるため、Sweepの時間がばらつかないように調整したHeapの配列が1.8倍づつ増えるのがメモリ効率的にあんまりよくないので、LazySweepが始まってからは少し抑えるようにした。1.1倍くらい。 理想は「オブジェクトを何百万も作ってプログラムをぶんまわす時の最大停止を改善する。」です。その場合当然スループット性能が低下してしまうのはいかしかたなし。 patchgc_lazy_sweep_r15749_patch
現在の Unix システムでの最大時刻は、協定世界時の2038年1月19日午前3時14分7秒です。 http://www.ruby-lang.org/ja/man/?cmd=view;name=Time Timeは2038/1/19以降がエラーになる。 >> Time.gm(2038,1,19).strftime("%Y-%m-%d %a") => "2038-01-19 Tue" >> Time.gm(2038,1,20).strftime("%Y-%m-%d %a") ArgumentError: time out of range from (irb):7:in `gm' from (irb):7 from :0DateTimeはもっとずっと先まで大丈夫。 >> require 'date' => true >> DateTime.civil(2038,1,19).strftime(
はじめに 本文書は、Rubyによりコーディングを行う際の規約について述べる。 実際のプロジェクトに適用する際には、このコーディング規約をカスタ マイズして用いることを推奨する。 ソースコードの整形 インデント プログラムを読みやすくするため、インデントを適宜行う。インデント 幅は2とする。また、インデントにはスペースのみを使用し、タブは使用 しない。(環境によりタブ幅が異なるため。) 例: if x > 0 if y > 0 puts "x > 0 && y > 0" end end 一行の桁数 一行の桁数は最大80桁までとする。 空行 複数のクラスの区切には空行を挿入する。 例: class Foo ... end class Bar ... end 誤った例: class Foo ... end class Bar ... end また、クラス内の各構成要素の区切にも空行を挿入する。
回文になっている quine です。以下のように動けば正解です。 $ ruby pquine.rb > pquine2.rb $ diff pquine.rb pquine2.rb $ ruby -e 's = File.read("pquine.rb"); p(s == s.reverse)' true 以下は僕の考えた解答。 どれも改行コードは LF で、ファイル末尾に改行をつけないで実行してください。 まずはインチキ。 DATA.rewind $> << DATA.read __END__ __DNE__ daer.ATAD << >$ dniwer.ATAD 一行コメントを使うとわりと簡単。 eval s="$><<\"eval s=\#{t=s.inspect}#\"+(s[5,7]+t).reverse"#"esrever.)t+]7,5[s(+"\#}tcepsni.s=t{
数独は非常に 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 にできるか」という問題
minisat という SAT ソルバの ruby バインディングを作ってみました。1.8.5 と 1.9.0 で動作確認してます。 http://dame.dyndns.org/misc/misc/ruby-minisat-1.14.0.tar.bz2 例えば という SAT 問題を解くときはこんな風にします。 require "minisat" solver = MiniSat::Solver.new # 問題定義 a = solver.new_var b = solver.new_var solver << [a, b] << [-a, b] << [a, -b] # 解の探索 p solver.solve #=> true (satisfiable) # 解の表示 p solver[a] #=> true p solver[b] #=> true リテラルの配列で表現した clau
■ [ruby][event] Ruby/Rails勉強会@関西-21 行ってきた。 久しぶりの神戸で、まつもとさんが来られるということもあって、 初めての方がいつもより多かった模様。また京都や大阪会場にもいらしてくださいね。 最初のセッションのロガーをしたので、ログを以下に貼っておきます。編集中 編集終わりました。長文警報発令中。 ■ [ruby] Rubyでtwitterの新着を読み上げさせてみる 編集中につき小ネタでもひとつ。 Mac の say コマンドがうらやましかったので調べてみた - ema log (2007-12-16) Macにはsayという音声合成で喋ってくれるコマンドがあるのだが、gem install win32-sapi でWindowsでも似たようなことが できるとのこと。ema++ で、ついでなので声を変えられるようにしてみた。 手元では-n 0 はデフォル
■ [event][prog] LiveCoding#5に出演しました 土曜日に大阪で行われたイベントLiveCoding#5に、 LiveCoderとして出演してきました。 事前に、LivePromoter(※主催者のことらしい)であるujihisaさんから できるだけマニアックな方がいいというオーダーを受けていたので、 Ruby + Javascript + Scheme + Zu という無茶な構成にしてみました(笑)。 *1 BiwaSchemeで 「ず」のインタプリタを作るというテーマだったのですが、 予想外に手間取ってしまい、パース結果をRubyのCGI経由で取ってくるとこまでしか行きませんでした。 解説のnaoya_tさん、Abeさんごめんなさい(><) 敗因 Ajaxのクロスドメイン制約を忘れていた CGIはサーバに、htmlはローカルに置くつもりだったんですが、どちらかに統
大規模分散処理向けの国産“ウェブOS”をRubyで開発中 http://www.atmarkit.co.jp/news/200711/26/rakuten.html GoogleFileSystemライクなシステムを作るっていう試みはもちろんがんばれ!なんだけど. 「現在、楽天社内と協力会社を含めて1100人規模の技術者がいるが、3年後には3倍といったスケール感で数を伸ばしていきたい。当然、東京の開発者だけでは足りない。すでに全国主要都市に開発拠点を立ち上げつつあるが、海外拠点を作ることもありうる」(杉原氏) 2000人のエンジニアを新たに雇う予算があるなら3倍の給料払って300人の優秀な人間を集めた方が効率いいと思う.それなら予算は半分ほどで,得られる結果もいいはず. (おしまい)
scRUBYt! - Hpricot and Mechanize on steroids A simple to learn and use, yet very powerful web extraction framework written in Ruby. Navigate through the Web, Extract, query, transform and save relevant data from the Web page of your interest by the concise and easy to use DSL. Do you think that Mechanize and Hpricot are powerful libraries? You‘re right, they are, indeed - hats off to their authors
RubyによるWeb Scrapingライブラリの情報をまとめるためのWikiです。 HpricotHTMLを「Rubyらしく」扱うライブラリ MechanizeWebサイトへ自動でアクセスするためのライブラリ scRUBYt!DSLを使って簡単にスクレイピングを行うライブラリ feedalizerhtmlからRSSフィードを作るのに役立つライブラリ scrAPIパーサを定義することでHTMLを解析するライブラリ ウェブサイトから必要なデータを抽出すること。(Scrape = 削り取る) ライブラリによっては、受信したデータの解析だけでなくデータの送信にも対応している。 例: RSSを配信していないウェブサイトのHTMLをスクレイピングして野良RSSを作る Googleの検索結果をスクレイピングして自動でGoogle検索するスクリプトを書く ブログの投稿ページを解析して、コマンドラインから
Programming Collective Intelligence: Building Smart Web 2.0 Applications 作者: Toby Segaran出版社/メーカー: O'Reilly Media発売日: 2007/08/26メディア: ペーパーバック購入: 3人 クリック: 117回この商品を含むブログ (31件) を見る「集合知」を解説するこの本にはいろんな実例とサンプルが出てくる。サンプルは python なので ruby に書き換えてみた。書き換えたのは第二章の "Making Recommendations" の一部です。なんらかのアイテム(本とか映画とか)とその評価(Amazonレビューの★とか)を複数の人間が行った場合に,その情報を元に「似た傾向の評価者」を探し,似た傾向の評価者のリストから自分が未評価のアイテム(つまり未読の本とか未見の映画とか
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く