Ruby Business Users Conference 2017
Ruby Business Users Conference 2017
開発部 R&D グループで研究開発をしている CRuby コミッターの村田 (mrkn) です。 2/23 に渋谷で開催された Ruby Business Users Conference 2017 *1 でキーノートスピーカーとして講演をさせていただきました。 内容は、Ruby で統計分析や機械学習ができない現状についての解説と、その状況を打破するために私が現在開発を進めている pycall.gem のデモンストレーションでした。 カンファレンス当日に使用した資料は私個人の Speaker Deck で公開していますので、そちらをご覧ください。 カンファレンスの発表後、当日カンファレンスで一緒だった YassLab の安川さんがデモ部分の動画を facebook で公開し、twitter で拡散してくださいました。 .@mrkn さんの PyCall を使ったデモがスゴい!😆 #RBU
Ruby で gem 管理に使われる Bundler. その Bundler で依存関係を解決するために使われるファイルには, gemspec Gemfile Gemfile.lock の 3 つがあります.これら 3 つのファイルの区別を意識することはあまりありませんが,それぞれ異なる役割を担っています. 3 つのファイルの役割 各ファイルの役割を簡単にまとめます. gemspec gem の依存関係を記述します. Gemfile 依存する gem の取得先を記述します. 通常は取得先は source 行一行だけでよいはず. GitHub リポジトリなどから edge バージョンを取得する場合は,その場所をここに書く. Gemfile.lock 開発環境と運用環境とで同じ gem をインストールするために使います. bundle などで自動で生成されます. 依存 gem のバージョンと取
巷の噂で Ruby の Array#<< が Array#push よりも速いと聞いたので調べてみた。まずはベンチマークを取ってみた。 require 'benchmark' Benchmark.bm 10 do |r| r.report "push" do 8000000.times do; [].push(1); end end r.report "<<" do 8000000.times do; [] <<1; end end end 結果は以下の通り。 user system total real push 1.570000 0.000000 1.570000 ( 1.579687) << 1.280000 0.000000 1.280000 ( 1.288951) 確かに Array#<< の
以前からずっと疑問に思っていた事があった。 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, $
基本的にassetsファイル系はクラウドなりCDNに上げてるはずで、dockerイメージの中にそんなものを含めたくはないわけですよ。 しかし、未だにsprocketsという世界から抜け出ることはできてないわけで、デプロイまでのどこかでassets precompileをしなければならない。 で、基本的にイメージビルド時にやるかデプロイ時にやるか、になるのですが今のところ私の環境ではデプロイ時にやってます。 イメージをビルドする時はassetの事は考えない。 そして、deployをする時にデプロイ前にフックを挟んでコンテナでrakeを動かし、assets:precompile及びassets:sync(asset_sync gemを使っている場合)を行う。 しかし、rake実行コンテナと、アプリケーションが起動するコンテナは別々のため、manifestファイルをどこかに保持しておく必要がある
■ all-ruby の docker image を雑に作った akr さんが公開している all-ruby という今 https://cache.ruby-lang.org/pub/ruby から手に入るであろうすべての Ruby を debian でコンパイルして実行可能な状態にするというやつを全てビルドして docker image として使えるようにしてみた。 https://hub.docker.com/r/hsbt/all-ruby/ 実行例はこちらです。 https://gist.github.com/hsbt/14243b639f2d2da908a2f2b1e7f1d9da さすがにすべての Ruby のバイナリを含んでいるということで、イメージサイズは 37.8 GB という docker だと信じられないようなサイズになっているけど、まともに使おうとするとビルドだけで
Rubyのコアコミッターである笹田耕一氏が、レシピ共有サービスなどを展開しているクックパッドへ入社することが、今日1月21日に都内で開催されたイベント「Cookpad TechConf 2017」で発表されました。 クックパッドのアプリケーションはおもにRubyで開発されており、これまで同社は「巨大なRailsのアプリケーションをいかに速く動かすかに取り組んできた」(成田一生 執行役CTO)。 そのなかで最近のRubyのアップデートはVMによる高速化や世代別ガベージコレクションの採用などによる性能向上が続いており、「じゃあ高速化に取り組んでいる人がクックパッドのコードを使って高速化に取り組むことができたらもっといいんじゃないか、という発想から笹田さんをお招きすることができました」(成田氏)と、成田氏は笹田氏の入社の経緯を説明します。 笹田氏は「これまでRubyに対して貢献をしてきていて、こ
Ruby 2.4.0-preview3 で Hash まわりの改善があったということで、pico_http_parser のベンチマークを取ってみた Ruby 2.4.0-preview3 リリース GitHub - kazeburo/pico_http_parser: Fast HTTP Parser using picohttpparser ベンチマークは。pico_http_parser/benchmark 以下のscript。結果としては1.5倍程度パフォーマンスが上がっていることが観測できました。リアルなアプリケーションでも速度アップが見込めるんじゃないかなと思います。素晴らしい ヘッダが0個の時だけパフォーマンスが悪くなるのは、Hashの要素数が少ないときの最適化が変わったのかなと予想
msgpack-inspectを作った話に書いたが、このツールはエントリにも書いたとおり rubygems.org に公開されていて CRuby や JRuby でインストール・実行可能である。その一方でバイナリをダウンロードするだけで使えると便利だよねってことで、mrubyでクロスコンパイルしてリリース版が置いてある。 これは実はそこまで簡単ではなくて、Rubyの機能のうちmrubyでもサポートされている文法や組込みライブラリの範囲しか使えないのはもちろん、たとえば外部のライブラリに依存する機能*1などは mruby でクロスコンパイルしようとすると地獄を見ることなどもある。 そんな事情もあって、今回クロスコンパイルしたリリースに成功するまで、けっこうな手間をかけた。ここにそのへんをざらっと書いておこうと思う。 やったこと mruby-cliを使う 基本的にmrubyでビルドするための準
インフラをチョメチョメしている佐野です。今日はRubyを現最新バージョンの2.3.1にアップデートしたのでその効果について書きます(2.0、とっくにEOLですしね...)。gemのバージョンアップはserizawaニキがやってくれました。結論から言いますと、 CPU使用率が劇的に下がり、メモリ使用率が少し上がった。 サーバ台数削減できる。 です。 CPU 9/6の昼過ぎくらいに2.3に切り替えたのですがそれ以降、CPUが下がっていることがわかります。 メモリ メモリについては使用率が上がっています。 2.3 2.0 何が使っているのかというと、Ruby2.3なプロセスのメモリ使用量が全体的に増えました。次のtopコマンドは左ペインが2.3、右ペインが2.0なのですが、rubyないしbundleとなっているものがunicorn, sidekiqになります。これら全般的に2.3の方がメモリ使用
Ruby(ルビー)は、まつもとゆきひろ(通称 Matz)により開発されたオブジェクト指向スクリプト言語であり、スクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。(Wikipediaより) なんのこっちゃかよく分かりませんよね。ぼくもわかりません。 まあ要するに、プログラミング言語の一つにRubyというのがあって、Rubyの使い手をRubyistと呼ぶそうです。 僕はパソコン少年でしたが、パソコンを玩具として使うことからはもう30年ほど遠ざかっており、BASICと機械語、後にウェブサイト構築の必要に駆られてperl、JavaScriptを少々かじった位でプログラミングとは一般のアラフィフ男性と同じくらい離れています。 全国から、いや世界中からRubyistが集まるRubyKaigi 2016というイベントが京都で開催されることを知ったのは1ヶ月程前でした。 ひょ
IIJ mio の音声 SIM が届いたので、iPhone SE のセットアップ。 13時ごろ、MNP の手続きを追えたんだけど、22時現在、まだ手続きが終了していないっぽい...。 と思って softbank 携帯で電話したら、つながらなかった(圏外になった)ので、おわったっぽいが、なぜ IIJ mio のほうは圏外のままなのか。 IIJ mio のサイトからプロファイルをダウンロードして、無署名の警告をものともせずにインストールし、再起動したら docomo 回線を拾ってくれた。 Pony で Actor の GC がどうのってのがあって、ぴんとこなかったんだけど、やっとわかった。 Elixir(多分 Erlang も)の場合、こんな感じで、誰からも参照されない Process を沢山作って、永遠に待つような例が書ける。誰も参照していないので、その Process にメッセージが届くこ
Bigqueryを使ったバッチジョブを色々と実行しているのですが、Rakeで複雑な依存関係を管理したり、並列実行させたりするのが辛くなってきたのでRukawaというワークフローエンジンを自作しました。 自作したのは、RailsプロダクトにAirflowとかLuigiとかAzkabanとか入れるにはちょっと重厚過ぎる感じだったのと、Rubyで書ける方が楽で良いやという理由からです。 RukawaとはRUby KAntan Workflow Assistantの略です(後付け) (本当はミッチーとか水戸の方が好きなんだけど良い名前が浮かばなかった) 実際は、並列実行を可能にして書き方を変えてみたRakeとそんなに大差無い。 Rukawaの機能 ジョブの定義 まず実行したい処理をジョブクラスに記述します。 module ExecuteLog def self.store @store ||= {
GR-CITRUSはRubyが気軽に使える小型ボードです。Visual Studio CodeでRubyプログラムができます。VSCode Extension「Rubic」を参照してください。また、Chrome AppのRubicも使用可能です。 初めてのRubyプログラム 1.1.Visual Studio Codeのインストール RubyだけでなくArduinoと互換性のあるスケッチをすることも可能です。また、ESP8266を搭載したボード「WA-MIKAN」と組み合わせることでWiFi通信やマイクロSDカードを使ったシステムをプロトタイプすることができます。 GR-CITRUS-FULLの主な機能 GR-CITRUS (-FULL)ルネサス32ビットマイコンRX631グループMCUを搭載Arduino Pro Miniと互換性のあるピン配置。-FULLはWA-MIKANにすぐ接続でき
長いと思うので結果だけ リポジトリはこちら。 github.com 使い方はgit cloneしてmakeするだけと大変お手軽。 make TESTS="core/nil"のように、ディレクトリ指定もファイル名指定もできる。 全国のmrubyistの皆様に於かれましては、是非お試し願いたいところです。 以下つらつらと モチベーション 数年前に始めてからというもの、mrubyという船に乗りかかったからには「mrubyには〜がない」とか「mrubyはバグが多い」とか言われたくない。と思うぐらいには愛着というか責任感を勝手に持っている。 「mrubyはCRubyと動作が違う」というのはよくある話なのだが、これを極力減らしたい。(完全には無理だけど) 仕様が同じならCRubyの知識がそのままmrubyに使えるし、ドキュメントもCRubyのものがそのまま使える。 「CRubyのライブラリをmruby
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く