rastam on rails

東京在住のマレーシア人 Rubyist

Ruby Weekly #489: 日本語サマリー

rubyweekly.com

Highlights

Ferrum: A High Level Ruby API to Control Chrome

Chrome ブラウザー操作用 gem。headless も non-headless も対応してる。

How I MITM'd RubyGems.org... Kinda

rubygems.orgtypo で打ってしまいそう rubgems.org ドメインを買ったエンジニアが、中間車攻撃してみた話。

  • gem install--source オプションを typo してても攻撃できなかったのでセーフ。
  • Gemfile の sourcetypo したら攻撃できちゃった。
  • 3 ヶ月で 101 人も rubgems.org 叩いちゃった。
  • rubygems、bundler などのメンテナーには報告済み。

The Top Ruby HTTP Clients for 2020

HTTP クライアントまとめ。

HTTP クライアント 備考
Ruby コアの net/http 使いづらい
Faraday gem ドキュメンテーション最高
http.rb gem 速い
rest-client gem 直感的なインタフェース
httparty gem 人気者
excon gem
Typhoeus gem 1 年以上更新されてない
curb gem

date-formatter: Format Dates by Example

January 02, 2006 などの文字列を渡したら、strftime フォーマットを返してくれる gem。

Articles & Tutorials

Linking a Webcam Directly to Rails' ActiveStorage

ウェブカメラで撮った写真を直接 ActiveStorage にアップロードした話。HTMLCanvasElement.toDataURL()base64 データを hidden_field に設定することで。

Ruby 2.7 Adds Enumerable#tally

配列の要素をグループ化したカウントは、Ruby 2.7 の Enumerable#tally で集計できるようになった。

Decoupling Ruby: Delegation vs Dependency Injection

prawn gem で PDF を複数生成してる Honeybadger 社が、各 PDF の要素をまとめた概要 PDF を生成することになった。

  • DRY にするために、Prawn::Document オブジェクトを依存性注入方式で注入することを検討したが、注入したオブジェクト経由で prawnDSL を呼ぶというオーバーヘッドが発生した。
  • 最終的に SimpleDelegatorPrawn::Document の擬似継承することにした。

How to Build a WhatsApp Chatbot with Ruby, Sinatra and Twilio

Sinatra + Twilio で WhatsApp チャットボットを作るチュートリアル

Migrating User Passwords From Django to Ruby

Django アプリのパスワードを Ruby 用に移行した話。Django の PBKDF2 アルゴリズム + SHA256 ハッシュの代替案として、pbkdf2 gem があったため、既存パスワードはそのまま使えた。

Putting All Your Mailer Views in One Place

ActionMailer 用ビューが ActinController 用ビューと一緒に紛れ込んでるのが辛くて、prepend_view_path で ActionMailer 用ビューを分けた話。

Code and Tools

Oga: An XML/HTML Parser Written in Pure Ruby

XML・HTML パース用 gem。libxml に依存していないため、nokogiri よりインストールしやすい。

Fake API: A Faster Way to Prototype an API in Your Rails App

API プロトタイプ用 gem。

Groupdate 5.0: A Simple Way to Group Temporal Data

DATETIME などのカラムで GROUP BY できるようにしてくれる gem。