- Ruby / Rails関連
週刊Railsウォッチ:TruffleRubyでdig_fetchを実装、ruby/debug gem、AWSハンズオン教材ほか(20210901後編)
こんにちは、hachi8833です。遅ればせながら私もRubyKaigi Takeout 2021のTシャツを注文しました。
衣服を買ったのは久しぶりな気がする…… pic.twitter.com/JgCRafrFdL
— yancya (@yancya) August 25, 2021
参考: Novelties - RubyKaigi Takeout 2021
🔗Ruby
🔗 TruffleRubyでdig_fetch
を実装して高速化
Link: Diggin’ and Fetchin’ with TruffleRuby — Development (2021) https://t.co/qVfQR20BXV
— Yukihiro Matsumoto (@yukihiro_matz) August 26, 2021
# 同記事より
def self.dig_fetch(obj, idxs)
idxs_size = idxs.size
n = 0
while n < idxs_size
idx = idxs[n]
obj = obj[idx]
if obj.nil?
raise KeyError.new("key not found: #{idx.inspect}", :receiver => self, :key => idx)
end
n += 1
end
obj
end
つっつきボイス:「dig_fetch
というメソッド名がスゴい」「Rubyのdig
やfetch
はデータ構造が見えていれば高速化の余地はあるかも」「そういえばruby-jp Slackで最近Rubyのdig
やfetch
周りが話題になっていたのを見かけた気がします」「お、知りませんでした」
参考: instance method Hash#fetch (Ruby 2.3.0)
参考: Hash#dig (Ruby 3.0.0 リファレンスマニュアル)
「TruffleRubyはOracle Labsがこれだけ精力的に手を加え続けているんだから、どこかのproductionで使われていてもよさそう」「気になりますね」
後で探すと、ShopifyがTruffleRubyのproduction利用に向けて実験を重ねているという記事を見かけました。またRubyKaigi Takeout 2021でもShopifyのメンバーがTruffleRubyの正規表現について発表することになっています。
参考: Optimizing Ruby Lazy Initialization in TruffleRuby with Deoptimization — Development (2021)
参考: Just-in-Time Compiling Ruby Regexps on TruffleRuby -- Schedule - RubyKaigi Takeout 2021
🔗 ko1さんのdebug gemブログ
Now [debug.gem](https://t.co/XnnwnAeGCL) uses reline and interactive REPL. pic.twitter.com/8aNzzrL1Vf
— _ko1 (@_ko1) August 20, 2021
つっつきボイス:「ko1さんがruby/debugのブログを始めたそうです」「お〜、こういう情報が記事として記録されていくのは大事👍」「歴史大事ですね」「そうでないと端から失われていってしまうので」「relineを使ってdebugにREPL機能も追加されたのか」「記事でも紹介されているst0012さんのruby/debug紹介記事↓は近々TechRachoで翻訳を公開します」
参考: A Sneak Peek of Ruby's New Debugger! - DEV Community
参考: REPL - Wikipedia
🔗 その他Ruby
というわけで、RubyConfで登壇します!初めてなのでとても楽しみ☺️内容は「メソッドを操る」です、詳細は当日のお楽しみ😁 https://t.co/1Zvaz3nRCg
— 大倉雅史(OKURA Masafumi) (@okuramasafumi) August 26, 2021
つっつきボイス:「大倉さんがRubyConf 2021に登壇🎉」「英語で登壇つよい」「RubyConf 2021はオンラインとオフライン両方で開催とは頑張ってる」「開催地のデンバーは米国コロラド州で、州の布告に基づいてイベント開催してるようですね」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 Amazon MemoryDB for Redis
Say later to latency. ⚡️ 💻⚡ With Amazon MemoryDB for Redis, tap into flexible Redis data structures and achieve microsecond read latency and single-digit millisecond write latency—all while durably storing mission-critical data. ✔️ https://t.co/o4AcmBlDCV #AWS #CloudComputing pic.twitter.com/SWTCY67gQ0
— Amazon Web Services (@awscloud) August 20, 2021
つっつきボイス:「Amazon MemoryDB for RedisはRedisの互換実装によるサービスで、先々週ぐらいに発表されていましたね: 値段はお安くないですが、Redisを自前で立てると運用が大変なので、こういうサービスはやはり便利だと思います👍」
🔗 東大のAWSハンズオン教材
マジで世界最高レベルのAWSハンズオン教材だと思う
https://t.co/iojm48c6Pc— ktrst (@ktrst) August 22, 2021
つっつきボイス:「このAWSハンズオン教材は昨年公開されていたヤツかな」「ホントだ、2020年となってました」「東大クラスでないとなかなかこれだけの教材は用意できないでしょうね」「特に考えなくても上から順にやっていけば終わるので、東大の単位としては取りやすい方かも」「たまに考えないといけない場面で詰まるかもしれないので、TAやSAのサポートは必要かもしれませんね」
参考: 大学職員のTA・SAの仕事の違いは? | 大学職員の仕事・なり方・年収・資格を解説 | キャリアガーデン
「逆に東大のCPU実験授業はCPUつくってコンパイラつくって動作テストするところまでやるというエグさ」「そうそう、東大の名物授業」
参考: ほんとうのコンピュータ自作/CPU実験 -- 東大 理学部情報科学科/大学院情報理工学系研究科|情報科学科NAVIgation
「東大のAWSハンズオン教材は、内容の賞味期限が切れないうちにやるのがいいと思います👍」「そうそう、今年なら十分いける」「こういうハンズオン授業は教材アップデートのためにも毎年やって欲しいですね」
🔗 その他クラウド
Dockerfile now supports multi-line RUN with heredocs (<<eot) https://t.co/VipjOyuOVW
---
# syntax = docker/dockerfile-upstream:master-labs
FROM debian
RUN <<eot
apt-get update
apt-get install -y vim
eot— Akihiro Suda (@_AkihiroSuda_) June 11, 2021
つっつきボイス:「Dockerfileでヒアドキュメントが書ける機能が正式にリリースされた🎉」「これで&& \
を書かなくてよくなりますね」「変数展開もできる↓」「今までなかったのが不思議だったぐらい」
# moby/buildkit READMEより
# syntax = docker/dockerfile:1.3-labs
FROM alpine
ARG FOO=bar
COPY <<-eot /app/foo
hello ${FOO}
eot
参考: Dockerで新しくサポートされるようになったヒアドキュメントを試してみました。 | オスースBlog
🔗CSS/HTML/フロントエンド/テスト/デザイン
🔗 ブラウザのデザインモード
検証のコンソールで document.designMode = "on" と打つと...
ブラウザ上で直接テキストや要素を消したり変えたりできるのです!!今日初めて知ったけどすごくないですか?! https://t.co/q6rkh9qE0N
— Yuppy 🔛 Rails💎 (@Yuppyhappytoyou) August 25, 2021
つっつきボイス:「これ今頃知りました」「ブラウザコンソールでdocument.designMode = "on"
を入力するとブラウザが編集可能になるのね」「ずっと以前からHTMLElement.contentEditable
という属性を使うとどの要素でも編集可能にできますけど、designMode
は初めて見た」
参考: Document.designMode - Web API | MDN
参考: HTMLElement.contentEditable - Web API | MDN
「ちなみにブラウザ用WYSIWYGエディタによってはHTMLElement.contentEditable
を使って実装しているものがあります」「お〜」「しかもHTMLElement.contentEditable
を使うとHTMLのスタイルタグも自動的に付けられるのでHTML的に扱いやすいんですよ」
「HTMLElement.contentEditable
は相当昔からあった」「IE5の独自仕様だったのが取り入れられたという記事↓があったのでかなり古そう」「document.designMode
もMDNにIE6に関する記述があるので同じぐらい古そうですね」
参考: HTMLのcontenteditable属性 - 備忘帳 - オレンジ工房
参考: "contentEditable" | Can I use... Support tables for HTML5, CSS3, etc
🔗言語/ツール/OS/CPU
🔗 クラック
The response from the developer seems quite honest: https://t.co/IomoyuWgC1
— ShrugSec (@shrugsec) August 19, 2021
つっつきボイス:「朝起きたら自宅の3Dプリンタからこんなのが出力されてビビったというReddit記事だそうです」「あぁクラックされたのね」「これはビビる」「普通のネットワークプリンタなんかもクラッキングされやすいという話は昔からありますけどね」
「ところで3Dプリンタも昔よりだいぶ使いやすくなりましたよね」「自宅に置くまではまだやれてないです」「よく使うなら買いたいけど、まだそこまではいかない」「コンビニで3Dプリントできたらいいんですけどね」「専有時間が長いから難しいんじゃないかな」「専門店で3Dプリントやったことならあります」「試行錯誤やトラブルシュートとかも考えると、最初はサポートのある場所でやってみるのがいいかもですね」
後編は以上です。
バックナンバー(2021年度第3四半期)
週刊Railsウォッチ: Rails 7でのimport maps導入、Steepで型を導入、KubernetesでRailsを動かすためのガイドほか(20210830前編)
- 20210823後編 SorbetのRuby AOTコンパイラが公開、「Compiler Explorer」にRubyが追加、Ractorで非同期通信ほか
- 20210818前編 カウンタキャッシュをスレッドセーフに更新、Journey::Ast追加、GitLabをAWS Graviton2で動かすほか
- 20210810 システムテスト用headlessドライバにCupriteが追加、rails-mini-profiler、Jeremy Evansインタビューほか
- 20210804後編 Rubyの可変長アロケーションプロジェクト、サーキットブレーカーgem、EC2-Classicが終了へほか
- 20210803前編 SorbetでRailsアプリの型シグネチャを書く、activerecord-cte gemとanycable-client gem
- 20210720後編 ruby-gitでGit操作、最近のruby/debug、stdgems.org、Windows 365 Cloud PCほか
- 20210719前編 GitHubによるdisable_joins解説、MemoWise gemでメモ化、RailsのDDoS攻撃対策ほか
- 20210713後編 ruby-spacyで自然言語処理、Ruby製x86-64アセンブラ、『タイムゾーン呪いの書』ほか
- 20210712前編 AR::Relation#destroy_allがバッチ分割に変更、Active Record暗号化解説、sidekiq-unique-jobsほか
- 20210706後編 GitHub CopilotのAI補完、Pure Ruby実装のRuby JIT rhizome、PostgreSQLのPG-Strom拡張ほか
- 20210705前編 DI的な書き方が必要なとき、脆弱性学習用アプリRailsGoat、brakemanは優秀ほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)