You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
RubyはWeb界隈でよく使われてるスクリプト言語の中では比較的簡単に割と本格的なマルチスレッドプログラムを書くことができます。 うまく使うとI/O待ちで遅くなっているが、必ずしも順番に行う必要のないプログラムの実行時間を短縮したりすることができます。(たくさんのURLにアクセスしてレスポンスを取得してくるクロウラーなど) しかし現在最も広く使われているRuby1.8ではスレッドの実装はいわゆるグリーンスレッドという実装で、OSによるスレッドを使えないため、マルチコアの恩恵を受けることができないので、大量のデータをマルチコアで処理する目的などで使っても効果が薄い(どころかまったくない)可能性が高いです。 Ruby1.9ではRubyでスレッドの動きを制御しているものの、ネイティブスレッドベースでの動作となっているため、マルチコアの恩恵を受けることができます。 それではさっそく、配列の各要素を
require 'prawn' require 'open-uri' require 'sinatra' get '/' do pdf = Prawn::Document.new do font "Helvetica" text "Test PDF" stroke_horizontal_rule move_down 30 font "vendor/fonts/ipaexm.ttf" font_size 12 text "これで日本語が使えるようになる" move_down 20 image open("http://exsample.com/foo.jpg") text "画像はローカルからでもopen-uriを使ってurlからでも指定できる" end content_type "pdf" response["Content-Disposition"] = "inline" pdf.ren
今回は、RubyMotion で簡単なアプリを作ってみます。ここでは簡単な「StopWatch」アプリケーションを作成し、RubyMotion でどのように iOS アプリを作成するのか説明したいと思います。 StopWatch アプリの簡単な仕様は、 start ボタン、stop ボタンとタイマーの値を表示するラベルを持っています。 start ボタンが押されると、タイマーがスタートします。 stop ボタンが押されると、タイマーを停止します。 タイマーが動作中の値を 0.1 秒刻みでラベルに表示します。 です。 新規アプリを作成する RubyMotion をインストールしたときに、/usr/bin/motion というコマンドがインストールされます。このコマンドを使用して、新規アプリのひな形を作成します。Terminal で次のようにコマンドを実行するとひな形が用意されます。 $ mo
(追記:2013-08-16) 本記事のトリビアを含む55のトリビアを以下の記事にまとめました。 知って得する!55のRubyのトリビアな記法 半年くらい前にちょっとトリビアだけど、知っていると意外と便利なRubyの記法を21個紹介したよ。 知って得する21のRubyのトリビアな記法 ~ 21 Trivia Notations you should know in Ruby 今回はその第2弾だよ! ちょっと数が少ないけど、知らないものがあったらへーとかほーとか、得したとか言ってもらえるとうれしいよ。 1.Enumerator#with_index 任意のリストを標準出力するときに連番を同時に振るとしたら、普通はEnumerable#each_with_indexを使うよね。 names = Module.constants.take(10) names.each_with_index {
Русский анал во всей его красе можно найти на данном ресурсе! Переходите по ссылке и наслаждайтесь качественным видео без рекламы.
並列1000コネクションに耐える! Ruby のイベント駆動ライブラリ Rev と EventMachine の HTTPクライアント こんにちは、takada-at です。 Rubyのイベント駆動型ネットワークプログラミングフレームワーク Rev と EventMachine で HTTPクライアントを動かしてみました。 イベント駆動型ネットワークプログラミングフレームワークとは何か説明しだすと難しいですが、一言で言うと、以下のようになります。 # ふつうのフロー駆動型プログラム Net::HTTP.start(host, port){|http| res = http.get(path) #この処理が終わってから } puts "done" #この次の処理が実行される # イベント駆動型プログラム client = Rev::HttpClient::connect(host, port
最近、急に自分の周辺で非技術者の人から twitter の話題を聞くことが多くなりました。うーんツイッター流行ってきてるんだなー、じゃなんかネタスクリプトでも書いてみよっかな、、、と30秒ほど考えて「リアルにつぶやいた内容を音声認識してツイッターにポストするか」と思いつきました。 が、しかし、誰でも思いつくことは同じで、あちこちで似たような事をしている人がいたので、やっぱやめるかと思ったものの、クリスマスで暇だし、Mac OSX上でやってる人は見つけられないしで、勢いで音声入力システムの Julius を利用したツイッター投稿スクリプト書いてみました。ちなみに環境は、Mac OSX 10.5.8 + ruby 1.8.7 です。 音声認識システム Julius のインストール まず Julius の cvs から最新のソースをダウンロードしてコンパイル&インストールします。インストール先は
Principal Component Analysis (PCA) of a covariance or correlation matrix.. NOTE: Sign of second and later eigenvalues could be different using Ruby or GSL, so values for PCs and component matrix should differ, because extendmatrix and gsl’s methods to calculate eigenvectors are different. Using R is worse, cause first eigenvector could have negative values! For Principal Axis Analysis, use Statsam
A PDF generation tools for Ruby, with design tool for editing templates. Thinreports Thinreports is a PDF generation tool that provides Thinreports Basic Editor and Thinreports Section Editor, a design tool for editing templates, and Thinreports Generator, a Ruby library for generating PDFs. Getting Started Thinreports allows you to create PDF layouts using the Thinreports Editor, and then load th
運用面ではPassengerが群を抜いて楽だし、速度面を考えるとMongrel、Thin、Unicornが有利。 メモリ使用量でいえば、Passengerはかなりメモリを食ってしまう。他の3つに関しては同じようなもの。 Unicornは1つのプロセスの中で複数のスレッドが動くので、mongrelやthinのように1つポートで1リクエストしか同時に扱えないという問題をクリアしている。 そのため、mongrelやthinを20個起動しなくてはいけない場合でも、unicornなら1つだけ起動して20プロセス動かすように設定すれば良い。 または2つ起動して、各プロセスが10個のスレッドを持つようにするなど。 このような違いがあるため、unicornは1つのプロセスで複数のRailsを動かすからメモリを食うように見えるが、 mongrelやthinを10個起動した場合と、unicornが1つのプロセ
前編では1.9の目玉機能を、中編では文法や意味論の改善について紹介しました。 後編である今回は、知っておくとお得な機能を取り上げたいと思います。きっとあなたのRubyライフを快適にするでしょう。 鬼車による正規表現の強化 1.9では正規表現エンジンに鬼車を採用したため、鬼車による拡張機能が利用可能になりました。 名前を使った参照 マッチした部分文字列を、$1や$2のようなインデックス番号ではなく、名前で参照する機能がつきました。 コード1 正規表現のマッチ部分を名前で参照する # (?<foo>...) にマッチした部分を $~[:foo] で参照できる if "Taro Yamada" =~ /^(?<first_name>\w+) (?<last_name>\w+)$/ p $~[:first_name] #=> "Taro" p $~[:last_name] #=> "Yamada"
第1回では、YARVやFiberなど有名な機能と、配列処理の強化について紹介しました。 今回は、Ruby1.9で導入された新しい文法や意味論を中心に紹介します。 ブロックパラメータ(仮引数)に関する変更 ブロックパラメータのスコープがブロックローカルに ブロック中の変数はスコープがやや曖昧でした。初出の変数の場合はブロックローカル(ブロックの終了と共に変数も消える)で、ブロックの外ですでに宣言されていた変数の場合はその変数を指す、というルールで、ブロックの外まで見ないと変数のスコープが判断できませんでした。 この問題を軽減するため、1.9ではブロックパラメータは常にブロックローカルであると改定されました。 コード1 ブロックパラメータがブロックローカルに # ローカル変数xを定義する x = "bear" # ブロックローカル変数xを受け取るブロック(ローカル変数のxとは別!) ["dog
Ruby1.9.1リリース 2009年1月、Ruby1.9.1がリリースされました。Ruby1.9系列初の安定版とされるリリースです。Ruby1.9系列は、従来のRuby1.8系列と比べて、次のような特徴を持っています。 高速化や省メモリ化といった最適化 多言語化をはじめとするさまざまな機能拡張 文法の改良・拡張 その他、気の利いた機能 なかでも、「YARVによる高速化」と「M17N対応(多言語化)」は有名で、聞いたことのある人も多いと思います。 しかしRuby1.9には、他にも様々な改善や新機能が数多くあります。今回執筆を担当する、第1回、第3回、第5回では、あまり知られていない新機能にもスポットをあてつつ、Rubyの新機能を駆け足で紹介したいと思います。 YARV(Yet Another Ruby VM)による高速化 Ruby1.9のインタプリタは、笹田耕一氏が開発している仮想機
先日、「正規表現」の話を書きました(d:id:atzy:20080905)が、(自称)正規表現専門家の私が、ほとんど使われていないけれど、すさまじいパワーを持つ機能を紹介しましょう。 それが「田中哲スペシャル」です。私はこれを使い始めてから肩こりは治るわ、イボ痔はよくなるわ、女の子にモテモテになるわと、人生が変わりました。 田中哲スペシャルとは このような一風変わった名前がついているのは、田中哲(たなかあきら)さんが最初のアイデアを生み出したためです。 2002年4月3日に「鬼車」と呼ばれる正規表現ライブラリ関連で提案され,そして使えるようになりました。鬼車はRuby 1.9やらPHP5やらで利用することができます。 (ruby-dev:16732) sharing sub-regexp 簡単にいいますと「同じ表現を何度も書くのがウザイ」というものです。例えば「ホスト名(FQDN)にマッチ
ruby でこんなエラーが・・・rescue していたはずなのに・・・ ...ruby/1.8/timeout.rb:60:in `rbuf_fill': execution expired (Timeout::Error) 参考サイト(元ネタ&英語) http://lindsaar.net/2007/12/9/rbuf_filltimeout-error 調べた結果, http://www.ruby-lang.org/ja/man/html/_C0A9B8E6B9BDC2A4.html#rescue.bd.a4.be.fe.bb.d2 には, 捕捉する例外クラスを指定することはできません。 (つまり、StandardError 例外クラスのサブクラスだけしか捕捉できません) とある.StandardError・・・何それ?ということで http://www.ruby-lang.org/j
次のような名前のリストがあって langs = ["ruby", "python", "lisp", "haskell"] 名前の先頭を大文字にするとしたら 君ならどうする? そう普通Enumerable#mapを使って 次のようにするよね langs = ["ruby", "python", "lisp", "haskell"] langs.map { |lang| lang.capitalize } # => ["Ruby", "Python", "Lisp", "Haskell"] Enumerable#mapってほんと死ぬほど便利だよ 僕はRubyの魅力の80%は mapが占めてるんじゃないかって たまに感じることがあるよ.. :) でもただ先の例で 大文字にするだけなのにブロックって ちょっと大げさすぎると思わない? もちろんそうなんだよ そう思うRubyistが沢山いたから m
簡単なことをする 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]].
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く