タグ

Rubyに関するzomyのブックマーク (61)

  • Rubyが今のPythonの地位にいない理由

    _ Rubyが今のPythonの地位にいない理由 歴史のことなんぞなんも知らんけど、「技術的には今のPythonの地位はRubyでもよかったのに、そうならなかった」のが何故か、その理由を書いてみよう。僕はRuby歴史なんて知らないし、以下の文章は全部、まるで見てきたかのように書いてますが、適当に書いたくせに何故か断言口調になっている怪文書の類いです。 https://twitter.com/mametter/status/741950239662170112 まめさんの書いた理由リストはどれも関係ない。いやカスってるけど。難しいというのも関係ない。 僕がRubyを知ったころ…最初に書いた通りRuby歴史なんて知らないので、別に早くもないわけだけど…Rubyというのは全く使われていない言語だった。どっかの好き者がPerlの替わりに単純な処理に使って、「ウフ、美しくかけた、グフッ」とかつぶ

    zomy
    zomy 2016/06/16
    怪文書おもろい
  • 第19章 スレッド

    rubyスレッド スレッドは「みんな一斉に動く」というのが建前だが、実際には少しの時間ず つ順番に動いているわけだ。厳密に言えばマルチCPUのマシンでそれなりに工 夫すれば同時に二つ動いたりもできるが、それでもCPUの数以上のスレッドが あればやはり順番に動かなければならない。 つまりスレッドを作り出すためにはどこかで誰かがスレッドを切り替えてやら ないといけないわけだが、その手法には大きく分けて二種類ある。 カーネルレベルスレッドと ユーザレベルスレッドだ。これはどちらも読んで字の如く、ス レッドというものをカーネルで作るかユーザレベルで作るかという違いである。 カーネルレベルならマルチCPUを生かして複数のスレッドを同時に動かしたり もできる。 ではrubyのスレッドはどうなのかと言えば、これはユーザレベルスレッドで ある。 そして(それゆえ)同時に動けるスレッドは厳密にただ一つと制限

  • 文章中から韻を踏んでいるフレーズの組み合わせを検出する gem を作りました - Qiita

    依存関係 natto が利用できる必要があります。 使い方 Rhymer::Parser.newの引数に文章を渡すと、検査結果が含まれたインスタンスが生成されます。インスタンスのrhymesメソッドを実行すると、韻を踏んでいるフレーズの組み合わせの配列が返されます。 require "rhymer" rhymer = Rhymer::Parser.new("今日はとても良い天気ですね。こんな日は自然に元気になります。") rhymer.rhymes.each do |rhyme| puts [rhyme[0], rhyme[1]].join(" ") end require "rhymer" lyric = <<"LYRIC" 1853年(嘉永6年)、長崎の出島への折衝のみを前提としてきた幕府のこれまでの方針に反して、江戸湾の目と鼻の先である浦賀に黒船で強行上陸したアメリカ合衆国のマシュー

    文章中から韻を踏んでいるフレーズの組み合わせを検出する gem を作りました - Qiita
    zomy
    zomy 2016/05/24
    お仕事のために…φ(..)メモメモ(嘘
  • APIデザインケーススタディ —— Rubyライブラリを移植する前に読む本 - 世界線航跡蔵

    APIデザインケーススタディ 』というを頂戴したので読んでみた。 ライブラリ作者に向けて このRuby標準ライブラリを題材にして、分かりやすく、多様な機能をサポートして、互換性を保つAPIの設計をするにはどのように考えるべきかを教えてくれる。 ここでAPIと言っているのは、一般的なRubyのクラスとオブジェクトとメソッドから成るライブラリをどうデザインするか、という話である。 別にChef RecipeやRSpec DSLのようなちょっと変わったDSLを設計するとかそういう話ではない。確かにその種の言語内DSLのデザインには固有のセンスが必要とされるし、 Ruby DSL Handbook なんてが書かれているように実装にあたってもある種のテクニックが必要なのも確かだ。でも、それ以外の「ふつう」のライブラリのデザインは果たして簡単だろうか。 適切な粒度のクラスを定義する。必要な

    APIデザインケーススタディ —— Rubyライブラリを移植する前に読む本 - 世界線航跡蔵
  • ハッシュは頻繁に参照する値を最後に入れると高速 - まめめも

    明日から RubyKaigi なので、ちょっとした小ネタを一つ。 例えば、0 から 9999 までをハッシュに順に入れます。 h = {} 10000.times do |n| h[n] = true end このとき、h[9998] や h[9999] は、h[0] や h[1] より高速です。 どのくらい高速かというと、 1_000_000_000.times { h } # 40.8 sec (ループ自体の速度) 1_000_000_000.times { h[9999] } # 57.2 sec 1_000_000_000.times { h[0] } # 89.1 sech[0] は 89.1 - 40.8 = 48.3 nsec 、h[9999] は 57.2 - 40.8 = 16.4 nsec ということになります。なんと 3 倍も速い。*1 なぜこんなことが起きるのか ハ

    ハッシュは頻繁に参照する値を最後に入れると高速 - まめめも
  • マルチスレッド/プロセスまとめ(Ruby編) - Qiita

    プログラムの実行単位 固有のメモリ空間を持つ(リソースを共有しない) マルチプロセスの場合、物理/仮想メモリ領域間のアドレス解決のオーバーヘッドが高い。 プロセスの実行単位 共通のメモリ空間を持つ(リソースを共有する) マルチスレッドの場合、物理/仮想メモリ領域間のアドレス解決は発生しない。 ユーザースレッド ユーザー空間(アプリケーションが利用するメモリ空間)を利用 1つのプロセスに複数のスレッドがあっても、1つのスレッドしか実行されない。 OSカーネルを介さないスレッド切り替えのため、スレッド切り替えに伴うオーバーヘッドが少ない。 仮想VM上で実行されるスレッドをグリーンスレッドと呼ぶ。 カーネルスレッド カーネル空間(カーネルが利用するメモリ空間)を利用 1つのプロセスに複数のスレッドがある場合、同時に複数(CPUコア数分)のスレッドを実行できる。 OSカーネルを介するスレッド切り替

    マルチスレッド/プロセスまとめ(Ruby編) - Qiita
  • RubyでBoolClassではなくTrueClass/FalseClassな理由を理解する - Qiita

    @mattn_jp BoolClassを入れるとkind_of?でチェックしたくなってduck typingを阻害するから。 — Yukihiro Matsumoto (@yukihiro_matz) 2015, 12月 4 30回くらい読みなおしたけど何のことを言っているのか分からなかったので、周りのRubyistに質問して理解を深めたメモ。 まずDuck Typingというのは、Wikipediaによると ダック・タイピング(duck typing)とは、Smalltalk、PythonRubyなどのいくつかの動的型付けオブジェクト指向プログラミング言語に特徴的な型付けの作法のことである。それらの言語ではオブジェクト(変数の値)に何ができるかはオブジェクトそのものが決定する。つまり、オブジェクトがあるインタフェースのすべてのメソッドを持っているならば、たとえそのクラスがそのインタフェ

    RubyでBoolClassではなくTrueClass/FalseClassな理由を理解する - Qiita
  • Ruby文字列のUnicodeエスケープシーケンスをデコードする|TechRacho by BPS株式会社

    JSON APIで取得した文字列は、普通日語部分がUnicodeコードポイントにエスケープされています。 たとえばTwitterAPIで取得したJSONは、単純に文字列として見ると以下のようになります。 # wget http://api.twitter.com/1/users/lookup.json?screen_name=TwitterJP [{"name":"TwitterJP","time_zone":"Tokyo","follow_request_sent":null,"location":"\u6771\u4eac\u8d64\u5742","profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/3407356865\/62f0d53222361fbd2c1fe9889f4cc559_normal.png","p

    Ruby文字列のUnicodeエスケープシーケンスをデコードする|TechRacho by BPS株式会社
  • http://kwatch.houkagoteatime.net/blog/2015/10/28/keight_rb_released/

    http://kwatch.houkagoteatime.net/blog/2015/10/28/keight_rb_released/
  • [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 の特大の非互換について - まめめも
  • まつもとゆきひろ氏が「生涯プログラマー」でやっていきたい若手に贈る3つの言葉 - エンジニアtype | 転職type

    2015.06.03 スキル 社会人になったばかりの若いエンジニアの中には、一度この道に足を踏み入れたからには、自らの技術で身を立てていけたらという、強い思いを胸に秘めている人も少なくないのではないか。 そう考えて今回、Rubyの父として知られるまつもとゆきひろ氏に、あえて「これからの時代に技術だけで生き残るには?」という偏ったテーマで取材を依頼した。返ってきたメールの冒頭にあったのが、次の一文である。 「技術だけで生きるというのは幻想である」 まずはその真意を聞くところから、取材は始まった。 まつもとゆきひろさん(@yukihiro_matz) 1965年生まれ。筑波大学第三学群情報学類卒業。プログラミング言語Rubyの生みの親。株式会社ネットワーク応用通信研究所フェロー、一般財団法人Rubyアソシエーション理事長、Speeeをはじめとした複数社の技術顧問、Herokuチーフアーキテ

    まつもとゆきひろ氏が「生涯プログラマー」でやっていきたい若手に贈る3つの言葉 - エンジニアtype | 転職type
  • Ruby 3.0の未来へ―、言語設計者のまつもと氏が示す3つの方向性とRuby哲学 | HRナビ by リクルート

    Ruby 2が一般化した今、そろそろ新しいことを始めよう。これはRuby 3.0への扉を開く宣言です。未来へ備えよう。コミュニティとして死なないように、ワクワクする未来を妄想しよう。新しいことを始めよう」 こんな風に開発コミュニティに呼びかけたのは、世界的に人気の高いプログラミング言語「Ruby」(ルビー)の生みの親で言語設計者のまつもとゆきひろ氏だ。この「宣言」とも言える発言は、2014年9月に開催された「RubyKaigi 2014」で出てきたものだ。基調講演をしたまつもと氏は、講演の中で初めてRuby 3.0というメジャーバージョンへ言及して、次なるマイルストーンとして設定することを公の場で宣言した。 まつもと氏によれば、Rubyのコア開発者はこの何年かはRuby 2で忙しかったという。目の前にある現行バージョンのRuby 2をどうするかということや、機能の安定化、メモリ周辺の改善

    Ruby 3.0の未来へ―、言語設計者のまつもと氏が示す3つの方向性とRuby哲学 | HRナビ by リクルート
    zomy
    zomy 2015/05/12
  • アプリサーバー対決 パート1:主なRubyアプリケーションサーバーの機能比較 - Engine Yard Blog

    記事は英語版ブログで公開された記事の翻訳版です。 2013年7月に、米国テキサス州オースティンで開催されたLonestar Ruby Conferenceで、Rubyによるアプリケーションサーバーについてお話させていただきました。その中でいくつかのRubyアプリケーションサーバーのパフォーマンスや、さまざまな状況における挙動の違いを比較しました。この記事では、講演準備として行ったリサーチの中で分かったことをかいつまんでご紹介します。 実際のカンファレンスの録画をご覧になりたい方は、Confreaksで公開されていますのでそちらをご参照ください。テストに使用した簡単な自作アプリケーションはGitHubに、講演スライドはSlideshareにそれぞれ公開しています。 このリサーチは、Passenger 4のパフォーマンス評価以外すべて2013年7月に行ったものなので、情報が多少古くなっている

    アプリサーバー対決 パート1:主なRubyアプリケーションサーバーの機能比較 - Engine Yard Blog
  • Rubyプログラミングが快適になるVim環境を0から構築する - Qiita

    より快適なVim × Ruby環境を目指して構築したvim環境について。 0からでも構築できるように整理した。 やること 最初にRubyVim、その他必要なパッケージをガシガシインストールする。 その後、設定した下記機能について実際の操作例を見ていく。 自動コード補完ができるようにする(Rsense/neocomplete) Vim上で静的解析ができるようにする(Rubocop/syntastic) Vimからリファレンスを閲覧できるようにする(vim-ref/vim-ref-ri) メソッド定義元へのジャンプができるようにする(ctags/vim-tags) 構文終わりのキーワードを自動入力できるようにする(vim-endwise) OSはLinux(CentOS6.5)を想定。検証環境は以下のとおり。 $ uname -a Linux vagrant-centos65.vagrant

    Rubyプログラミングが快適になるVim環境を0から構築する - Qiita
  • 日本語が使えるirbにしておく - ザリガニが見ていた...。

    OSXに標準インストールされているirbは、残念ながら日語が文字化けする。Rubyの方は標準で日語が使えるようになったのに、何故なんだ? 調べてみると、Ruby自体の日語処理には問題ないのだけど、irbがコマンド入力を受け取る際に使っているライブラリ(libedit)が日語に対応していないのが原因らしい。解決策は、日語対応のライブラリ(readline)に切り替えること。 日語が使えない環境 irbは、"readline"をrequireして、コマンド入力ライブラリを利用している。 requireした"readline"はどこにあるのか? irbを起動して、以下のコマンドを入力してみる。 $ irb irb(main):001:0> puts $LOADED_FEATURES.grep /readline/ /System/Library/Frameworks/Ruby.fra

    日本語が使えるirbにしておく - ザリガニが見ていた...。
    zomy
    zomy 2015/03/05
    macのOSアップデートしたら元の状態に戻っちゃったのでもう一回これやった
  • Proc#call vs. yield - ruby trunk changes

    ご存知の通り Ruby では仮引数の最後に '&' を前置した「ブロック引数」を宣言することで、メソッドに渡されるブロックをProcオブジェクトとして受け取ることができます。つまりメソッドに渡されたブロックを呼ぶ方法には2通りあります。 def m1 yield :m1 end def m2(&block) block.call(:m2) end m1{|a| p a } # => :m1 m2{|a| p a } # => :m2 この2通りのブロック呼び出しの違いについて触れた記事もいくらかあります。*1 *2 主にブロックが渡されていない時のエラーメッセージが違うなどの挙動の違いについて触れられていますが、この文章では両者のYARVでの実装上の差異とパフォーマンスの違いについて書きます。 最初に結論を "可能なら Proc#call ではなく yield を使おう" 「可能なら」とい

    Proc#call vs. yield - ruby trunk changes
  • Queueを使ったワーカースレッド - うなの日記

    Queueを使うとワーカースレッドが簡単に作れます。 ワーカースレッド(=仕事をするスレッド)は、キューから順番に仕事を取り出して実行するスレッドです。 これとは別に定期的に仕事を積むスレッドがいて、 ワーカースレッドは↑から仕事が積まれた場合にそれを取り出して実行します。 仕事がなければ、積まれるまで待つという動作をします。 ここで、キューへの仕事の追加と、キューからの仕事の取得は、別のスレッドで行われるため、同期制御が必要になります。 Queueを使うと、仕事を積む人とワーカースレッドの同期制御が内部で隠蔽されるため、外側での同期化なしにワーカースレッドを作ることができます。 QueueのAPIはpopとpushがあります。(他にもあるけど) Queue#popで要素を取り出します。このとき、queueが空の時、呼出元のスレッドは停止(ブロック)されます。 Queue#pushで要素を

    Queueを使ったワーカースレッド - うなの日記
  • rbenv + ruby-build を system-wide にインストールする - @kyanny's blog

    rbenv と ruby-build 便利ですね。しかし ~/.rbenv 以下にもろもろ入ってしまうと都合が悪いこともあるので system-wide に、 /usr/local 以下とかにインストールしたい (そして複数ユーザーで同じ rbenv 環境を共有したい) のでやり方を調べた。 だいたい Shared install of rbenv のとおりでいける。たぶん /usr/local/rbenv/shims と /usr/local/rbenv/versions を自分で掘るのがポイント。これで rbenv install 1.9.3-p0 とすればうまいことインストールされる。 というわけで手順をコピペするのが面倒くさいのでインストーラのシェルスクリプトを書いた。 root で実行してください。 https://gist.github.com/1727338 Wiki ページ

    rbenv + ruby-build を system-wide にインストールする - @kyanny's blog
  • rbenv + ruby-build + rbenv-gemset の環境構築をしてみた

    いままでrvmを使っていたけど、rbenvに移行したのでそのときの環境設定のメモを残しておこうと思います。 rbenv + ruby-build + rbenv-gemset 環境を構築したいと思います。 まず、rubyのバージョン管理をrvmからrbenvに移行しました。 まずはrvmを削除。 [shell] rvm implode [/shell] .bash_profileとかにある設定も同じく削除しました。 でrbenvのインストール。 Homebrewをつかってるので、 [shell] brew install rbenv [/shell] githubからcloneするなら [shell] git clone git://github.com/sstephenson/rbenv.git .rbenv [/shell] つづいてパスを通します。 [shell] echo ‘exp

  • RubyGems のインストール

    ここでは, プラットホーム別の RubyGems のインストール方法を解説する. Gfdnavi 2.2.1 の動作は,Ruby on Rails (以後 Rails) 2.3.14 を用いて確認されている.おそらく 2.3.5 以降であれば動作す ると推定されるが,2.3.14 またはそれに近いバージョンを用いるのがよいであ ろう.Ruby on Rails 2.3.14 を入れる場合は, RubyGems のバージョンは 1.3.2 以上 1.7 未満でなくてはならない. 一般に Railsrubygems の新しいバージョンを要求することが多いようだ. 今後の Gfdnavi の開発に追随する場合,Rails のバージョンアップが必要にな る可能性があるが,Rails をアップデートすると rubygems のアップデートを 迫られることがある.rubygems をソースから入