タグ

rubyに関するjaguaのブックマーク (26)

  • PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記

    PHPPythonRubyの連想配列のデータ構造がそれぞれ4〜5年ほど前に見直され、ベンチマークテストによっては倍以上速くなったということがありました。具体的には以下のバージョンで実装の大変更がありました。 PHP 7.0.0 HashTable高速化 (2015/11) Python 3.6.0 dictobject高速化 (2016/12) Ruby 2.4.0 st_table高速化 (2016/12) これらのデータ構造はユーザーの利用する連想配列だけでなく言語のコアでも利用されているので、言語全体の性能改善に貢献しています1。 スクリプト言語3つが同時期に同じデータ構造の改善に取り組んだだけでも面白い現象ですが、さらに面白いことに各実装の方針は非常に似ています。独立に改善に取り組んだのに同じ結論に至ったとすれば興味深い偶然と言えるでしょう2。 稿では3言語の連想配列の従来実

    PHPとPythonとRubyの連想配列のデータ構造が同時期に同じ方針で性能改善されてた話 - hnwの日記
  • bundle install時に--path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう - Qiita

    bundle install時に--path vendor/bundleを付ける必要性は当にあるのか、もう一度よく考えてみようRubyRailsBundler TL; DR(最初に結論) bundle installをする場合は--path vendor/bundleを付けてプロジェクトごとにgemを管理しろ、という意見をよく見かける。 しかし、pathを指定しないと問題が起きる可能性があるのは、かなり特殊な条件下に限られる(100人いたら100人全員が遭遇するような問題ではない)。 よって、--path vendor/bundleのオプションは、付けたい人が付ければよいだけで、開発者全員に強制するようなルールではない、と筆者は考える。 はじめに bundle installコマンドを実行するとき、Ruby界に大きく分けて2つの流派があります。それは「--path vendor/bund

    bundle install時に--path vendor/bundleを付ける必要性は本当にあるのか、もう一度よく考えてみよう - Qiita
    jagua
    jagua 2019/06/09
  • Ruby 2.6.0とtest-unitとデータ駆動テスト - 2018-12-26 - ククログ

    Rubybundled gemのtest-unitをメンテナンスしている須藤です。 歴史 test-unitはxUnitスタイルのテスティングフレームワークです。Rubyのテスティングフレームワークの歴史(2014年版)にまとめてある通り、Ruby体に標準添付されています。 Rubyに標準添付されているライブラリーには実は次の3種類あります。 ただの標準添付ライブラリー(例:URI) requireするだけで使えるライブラリー default gem(例:csv) requireするだけで使えるライブラリー RubyGemsで更新できる Gemfileでgemを指定しなくても使える bundled gem(例:test-unit) requireするだけで使えるライブラリー RubyGemsで更新できる どれも標準添付ライブラリーなのでrequireするだけで使えます。違いはRubyG

    Ruby 2.6.0とtest-unitとデータ駆動テスト - 2018-12-26 - ククログ
    jagua
    jagua 2018/12/30
  • Ruby 2.6 の改善を自慢したい - クックパッド開発者ブログ

    技術部で Ruby インタプリタの開発をしている笹田です。娘のために、今年はじめて大きなクリスマスツリー(1.8 m)を買いました。 稿では、私が Ruby 2.6 で取り組んだ中から、次の新しい機能と性能改善について紹介します。どちらのトピックも、普通に Ruby を使っているだけなら気にならない、玄人向きの記事になっていると思います。興味がある人にお読み頂ければ幸いです(居ればいいのですが)。 TracePoint の拡張 新しいイベント script_compiled の導入 フックを有効にする場所を制限する機能の導入 デバッガの実装が、10~100倍くらい速くなる、かもしれない ブレイクポイントの実装を例に解説 Transient Heap の導入 短寿命メモリオブジェクトの高速化 世代別コピーGCのアイディアを利用 Rails とかには効かないかも...。 そういえば、両方とも

    Ruby 2.6 の改善を自慢したい - クックパッド開発者ブログ
    jagua
    jagua 2018/12/28
  • Ruby 2.6 新機能:本番環境での利用を目指したコードカバレッジ計測機能 - クックパッド開発者ブログ

    技術部の遠藤(mame)です。1 ヶ月くらい風邪が直らず、苦しみながらこれを書いています。 昨日は Ruby 2.6 の NEWS を裏話付きで解説する記事を書きました(プロと読み解く Ruby 2.6 NEWS ファイル)。今日と明日は、その中でクックパッドのフルタイムRubyコミッタが主に担当したところを少し詳しく紹介します。 今日は、遠藤が作った "oneshot coverage" と言う 2.6 の新機能を紹介します。 背景:Ruby では不要コードの発見・削除が難しい クックパッドのサービスの多くは、cookpad_all という 1 リポジトリからなる、巨大な Rails アプリケーションとして実現されていました。しかし、このやり方ではメンテナンスが限界になってきたので、「お台場プロジェクト」という大整理プロジェクトが行われてきました。この辺の詳細は次の 2 つの記事が詳しい

    Ruby 2.6 新機能:本番環境での利用を目指したコードカバレッジ計測機能 - クックパッド開発者ブログ
    jagua
    jagua 2018/12/28
  • プロと読み解く Ruby 2.6 NEWS ファイル - クックパッド開発者ブログ

    技術部の笹田(ko1)と遠藤(mame)です。クックパッドRuby (MRI: Matz Ruby Interpreter、いわゆる ruby コマンド) の開発をしています。お金をもらって Ruby を開発しているのでプロの Ruby コミッタです。 もうすぐ Ruby 2.6 がリリースされますね! Ruby 2.6 の新機能は何だろう、と調べるためには、ソースコードの diff を見ればいいのですが、膨大な変更があるので、一つ一つ見ていくのは大変です。 $ git diff --compact-summary origin/ruby_2_5 ... 6404 files changed, 228441 insertions(+), 97984 deletions(-) そこで、NEWS ファイルという、主要な変更点をまとめたファイルが用意されています。これを見るだけで、Ruby

    プロと読み解く Ruby 2.6 NEWS ファイル - クックパッド開発者ブログ
    jagua
    jagua 2018/12/28
  • Ruby 2.6.0とより高速なcsv - 2018-12-25 - ククログ

    Rubyの標準添付ライブラリーのcsvをメンテナンスしている須藤です。 歴史 csvは名前の通りCSVを読み書きするための便利ライブラリーです。 もともとRuby体とは別に開発されていたのですが、Ruby 1.8.0のときにRuby体にバンドルするようになりました。dRubyやREXMLがRuby体にバンドルされたのも同じタイミングです。Ruby 1.8.0のときにバンドルするライブラリーをすごく増やしたのです。(その頃の様子がわかるURLをここに置いておきたかったけど見つけられなかった。。。) Rubyではcsvのようにrequireするだけで使えるライブラリーを「標準添付ライブラリー」と呼んでいます。Stringのようにrequireしなくても使えるライブラリーは。。。なんだろう。組み込みクラスかしら。 その後、Ruby 1.9.0のタイミングで実装をFasterCSVに置き換え

    Ruby 2.6.0とより高速なcsv - 2018-12-25 - ククログ
    jagua
    jagua 2018/12/28
  • 公開した gem を削除する方法 - ヽ( ・∀・)ノくまくまー - s21g

    gem push によって、 gem の公開が大変簡単になりました。 しかし、敷居の低さは油断に繋がるもので、 近い将来、誰もが一度は秘匿性のあるファイルを誤って公開してしまい、 パニックになることでしょう。 今回、皆さんを出し抜く形になってしまい甚だ恐縮ではございますが、 一足先に体験させて頂きましたので、 その対処法を報告致します。 手順 gem yank support staff への報告 1. gem yank gem の新機能である yank コマンドを利用すると、 指定したバージョンの gem の公開を停止することができます。 例えば、foo-0.0.1 gem の場合、以下を実行します。

    jagua
    jagua 2018/07/17
  • Ruby inside: トリプルイコール === の黒魔術(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Triple Equals Black Magic – Ruby Inside – Medium 原文公開日: 2017/10/16 著者: Brandon Weaver トリプルイコール演算子===は、ほとんどの場合無視されるかcase文の背後でひっそりと使われているだけにとどまっています。===について深掘りしている記事はいろいろありますが、これには一体どんな使いみちがあるのでしょうか? トリプルイコール演算子===とは何か デフォルトでは、ダブルイコール演算子==の単なるエイリアスでしかありません。トリプルイコールは、他のクラスが独自の振る舞いのためにオーバーライドしている部分で輝きを放ちます。いくつか例をご紹介しましょう。 範囲の比較 (1..10) === 1 範囲におけるトリプルイコールは、includes?のエイリア

    Ruby inside: トリプルイコール === の黒魔術(翻訳)|TechRacho by BPS株式会社
    jagua
    jagua 2018/07/04
  • Ruby: 自分のクラスに`#to_a`を実装すべきじゃない(翻訳)|TechRacho by BPS株式会社

    概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: You should not implement #to_a for your classes 原文公開日: 2018/02/02 著者: zverok -- 名サイト「rubyreferences.github.io」の作者でもあります。 Ruby: 自分のクラスに#to_aを実装すべきじゃない(翻訳) えっと、このブログをときどき読んでる人なら言葉のキツさをご存知と思います。また書いてしまった。 挨拶代わりに、Rubyの便利なイディオムのひとつであるKernel#Arrayメソッドについて軽くおさらいしておきましょう。またの名を「知らんけど、んなもんArrayに決まってんだろ!」というやつです。 あるデータを用いて作業しているときに、1個の値か値の配列のどちらをも受け取るまたは返す可能性のあるメソッドが使えるとしましょう。その

    Ruby: 自分のクラスに`#to_a`を実装すべきじゃない(翻訳)|TechRacho by BPS株式会社
    jagua
    jagua 2018/05/16
  • Ruby 2.6にJITコンパイラをマージしました - k0kubun's blog

    The English version of this article is available here: medium.com 2/4(日)に、去年のRubyKaigiが終わった直後の新幹線で開発を始め10月に公開したJITコンパイラをRubyのtrunk (2.6.0-dev) にマージし、昨日TD Tech Talk 2018で以下のような内容の発表をしました。 speakerdeck.com まだそれほど速くできていないということもあり、私はTwitterでのみ共有して満足していたのですが、海外の方がいくつか記事を書いてくださいました。 Playing with ruby's new JIT: MJIT - John Hawthorn Ruby’s New JIT – Square Corner Blog – Medium とても丁寧に書かれているので、私の記事がわかりにくければ

    Ruby 2.6にJITコンパイラをマージしました - k0kubun's blog
    jagua
    jagua 2018/02/16
  • サンプルコードでわかる!Ruby 2.5の主な新機能と変更点 Part 1 - Qiita

    はじめに Rubyは毎年12月25日にアップデートされます。 今年はまだpreview版がリリースされていませんが(2017年10月10日時点)、今年もそろそろリリースの日が近づいてきました。 Ruby 2.5については2017年10月10日にpreview1がリリースされました。 Ruby 2.5.0-preview1 Released そこでこの記事ではこの2.5.0-preview1を参考にして、おそらくこんな感じでリリースされるであろうRuby 2.5の新機能や変更点をまとめてみました。 2017.12.25追記: Part 2もあります! この記事を公開したあとにも多数新機能が追加されました。この記事に追記すると長くなってしまうので、Part 2として公開しています。こちらもあわせてご覧ください。 サンプルコードでわかる!Ruby 2.5の主な新機能と変更点 Part 2 - Q

    サンプルコードでわかる!Ruby 2.5の主な新機能と変更点 Part 1 - Qiita
    jagua
    jagua 2017/12/26
  • present? と blank? が嫌い - eagletmt's blog

    params の中身のように入っているオブジェクトのクラスが事前に分からないものに対して空っぽい文字列の場合と存在しない場合を区別したくないときに限って blank? を使うのは分かるけど、 nil チェックをするために blank? を使ったり、配列が空かどうかをチェックしたいだけなのに blank? を使ったりすると、 blank? の挙動を正確に理解して nil と空配列を区別したくないから使っているのか、それとも nil がくるかどうか分からないので適当に防御的に blank? を使っているのか、 あるいは blank? しか知らないのかが読みとれずにめんどくさいと思うことがよくある。 かわりに empty? を使っていれば empty? を持っているオブジェクトは blank? を持っているオブジェクトより少ないので読み手に伝わる情報量が大きくなるし、 かわりに nil? を使っ

    present? と blank? が嫌い - eagletmt's blog
    jagua
    jagua 2017/10/04
  • ホーム - CloneTracker

    当社はCookieを使用して、お客様が当社のWebサイトでより良い体験を得られるようにしています。引き続き閲覧する場合は、プライバシーポリシーに同意したことになります。

    ホーム - CloneTracker
  • Big Sky :: Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか

    以前からずっと疑問に思っていた事があった。 ruby の後置 if/unless で条件が偽になった場合でも代入構文が実行されるのはどうしてだろう 例えば以下のコードを irb や pry で実行してみて欲しい。 a = 1 if false 続けて a をタイプする。すると nil が表示される。 僕のこれまでの理解だと後置if/unlessは、ステートメントに作用するのでそのステートメント自体が無効になる、つまり代入自体されなかった事になるという理解だった。ruby のパーサのソースコードを見ても後置ifはステートメントに作用している様だった。 | stmt modifier_if expr_value { /*%%%*/ $$ = new_if($3, remove_begin($1), 0); fixpos($$, $3); /*% $$ = dispatch2(if_mod, $

    Big Sky :: Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか
    jagua
    jagua 2017/02/01
  • ワンライナーWebサーバを集めてみた - Qiita

    クライアントサイドのJavaScriptをいじっていて,不意にローカルファイルでは実行できない領域に踏み込んでしまうことがあると思います.最近では,HTTPSが必須であったり,HTTP2を使ってみたくなることもあります.とりあえず私が踏み込んでしまったのはWebWorkersですが,他にもWebRTCや・・・(思い出し中)・・・(見つからなかった)・・・などが該当します. そんな時にいちいちApacheやnginxを立ち上げるのも面倒なので,ちょっと検索した結果を残しておきます. [2018/4/18追記] 最近ではHTTPSを使用する必要が高まっています.これを受け,HTTPSに対応する方法が増えてきたので,全て網羅できませんが,可能な限り追記・変更を行いました. PythonSimpleHTTPServer)編 Pythonでは(バージョン2.4以降限定らしいですが)モジュールをスク

    ワンライナーWebサーバを集めてみた - Qiita
  • どう書くで見る ruby の便利機能 - Qiita

    この記事は Ruby Advent Calendar 2016の20日目の記事のつもりで書いている。 Advent Calendar というものに参加するのは初めてなので緊張している。 実務ではあまり ruby を使っていないので、私は自分が主催しているどう書く( https://yhpg.doorkeeper.jp/ )での ruby の使われ方を書こうと思う。 思いついた順なので、ごちゃごちゃするけど気にしない方向で。 Array#transpose 行列ではないものをtransposeできる言語が他にあるかどうか知らないんだけど、transposeは便利。 x方向で処理するプログラムだけを用意しておいて、y方向の処理は、データを transpose したものを渡すことで済ますとか。 あるいは、平面的なものを回転するときに役に立つ。 2次元配列をreverseしてからtranspose

    どう書くで見る ruby の便利機能 - Qiita
    jagua
    jagua 2016/12/27
  • rubicureのこれまでとこれから - くりにっき

    これは プリキュア Advent Calendar 2016 - Adventar の16日目です。 www.adventar.org 12/16はキュアピースの中の人の金元寿子さんのお誕生日です。おめでとうございます!!!! 今回はこれまでのrubicureとこれからのrubicureについて書くポエムです rubicureとは これまでのrubicure リリースノート rubicureのバージョニングポリシー moongiftにとりあげられた 周辺ツールとかができた これからのrubicure rubicure v1.0.0 最後に rubicureとは プリキュアRuby実装です github.com 最新情報は先日Qiitaに書いたのでこちらを御覧ください。 qiita.com これまでのrubicure リリースノート この辺 https://github.com/sue44

    rubicureのこれまでとこれから - くりにっき
  • Rubyでcase文を卒業してダックタイピングに入門する - Qiita

    この記事はRuby Advent Calendar 2016の19日目の記事です。 今回は、リファクタリング系のわりと初歩的な内容かなと思います。 常にこうした方がいいというわけではなく「こういう道もあるんだよ」という選択肢を持っていると、いつか役に立つかも。ぐらいのトピックです。 発想がHash 例えば以下のようなコードがあったとします。 def 料理する(foods) foods.each do |food| case food["type"] when "フルーツ" 皮をむく(food["name"]) 切る(food["name"]) when "野菜" 切る(food["name"]) 煮る(food["name"]) end end end foods = [ { type: "フルーツ", name: "みかん" }, { type: "野菜", name: "キャベツ" }

    Rubyでcase文を卒業してダックタイピングに入門する - Qiita
    jagua
    jagua 2016/12/26
  • RubyistがGroovyを始めてみた - Qiita

    これは G*(Groovy, Grails ..) Advent Calendar 2013 の18日目になります。 皆さんためになる記事を書かれている中、一人レベルが低くて申し訳ないのですが、カレンダーが空いていたので自分がGroovyをRubyと比較しながら勉強したまとめを書いてみます。 既に語り尽くされた内容のような気もしますがご容赦頂ければと思います。 Contents 基的なところ とりあえずHello World / メソッドの定義 / classの定義 / 変数の定義 / メソッドのカッコを省略する RubyのあれはGroovyだとなんなの times / each / map / flat_map / reduce / ||= / try / ArrayとHash / getter・setter / [ ]メソッド 外部ライブラリを使いたい 基的なところ では基的なと

    RubyistがGroovyを始めてみた - Qiita