- Ruby / Rails関連
週刊Railsウォッチ(20210407後編)エイプリルフールのRuby構文プロポーザル、AWSのVPC Reachability Analyzerほか
こんにちは、hachi8833です。
🔗Ruby
🔗 エイプリルフールのRuby構文2つ
Rubyに新しい構文が来た!「プロを目指す人のためのRuby入門」も加筆修正しないとw https://t.co/DMJgbDKYWp
— Junichi Ito (伊藤淳一) (@jnchito) April 1, 2021
つっつきボイス:「mameさんがエイプリルフールに提案したこのRuby文法は強烈」「issueのタグにjoke
と書いてあるのを見るまですっかり本気にしちゃってました😅」「downward assignmentという名前まで付けるとは」「あまりのことについ笑っちゃいました😆」
# 17768より
puts("Hello" + "World") #=> HelloWorld
^^^^^^^x ^^^^^^^y
p x #=> "Hello"
p y #=> "World"
「^^^^^^^x
で『この上がx
だよ』、^^^^^^^y
で『この上がy
だよ』という二次元的な表記」「すごい構文」「mameさんよく思いつくな〜」「下向きのvvvv
まで作ってますね↓」「irbではつらいのでは?というレスも付いてる(#17768)」
# 17768より
vvvv line
while gets
「本当にこんなふうに書けたら面白いかも」「行を超える解析になると大変そう」「パーサーの前で前処理すればやれるかも?」
その後mameさんが自らissueをrejectしていました。後で気づきましたがパッチまで作ってあったんですね。
以下はつっつき後に見つけたツイートです。
エイプリルフールではあるんだけど、思いつきもしなかった構文で普通に感心してしまった
interestingって感じのジョークhttps://t.co/zNDasYTjrC— ru5j4r0 (@ru5j4r0) April 1, 2021
同じ日にmrknさんもジョーク構文をアップしていたことに後から気づきました↓。Julia言語のように「係数を掛け算記号なしで書ける」構文だそうです。
# #17769より
irb(main):001:0> x = 3
=> 3
irb(main):002:0> 2x
=> 6
irb(main):003:0> def pi = Math::PI
=> :pi
irb(main):004:0> 2pi
=> 6.283185307179586
🔗 fast_statistics: Ruby向け高速な統計ライブラリ
Martin-Nyaga/fast_statistics: Fast computation of descriptive statistics in ruby using native code and SIMD https://t.co/FSGfzHkHJR
— Yukihiro Matsumoto (@yukihiro_matz) March 30, 2021
つっつきボイス:「統計的な処理をC++で高速化したライブラリですね」「さすがに速い」
# 同リポジトリより
require "fast_statistics"
FastStatistics::Array2D.new(data).descriptive_statistics
# Result:
#
# [{:min=>0.1477,
# :max=>0.6269,
# :mean=>0.347575,
# :median=>0.30785,
# :q1=>0.214975,
# :q3=>0.44045,
# :standard_deviation=>0.18100761551658537},
# {:min=>0.1055,
# :max=>0.8,
# :mean=>0.38217500000000004,
# :median=>0.3116,
# :q1=>0.1781,
# :q3=>0.515675,
# :standard_deviation=>0.26691825878909076},
# ...,
# {:min=>0.3918,
# :max=>0.8546,
# :mean=>0.639025,
# :median=>0.6548499999999999,
# :q1=>0.536025,
# :q3=>0.75785,
# 同リポジトリより
Comparing calculated statistics with 10 values for 8 variables...
Test passed, results are equal to 6 decimal places!
Benchmarking with 100,000 values for 12 variables...
Warming up --------------------------------------
descriptive_statistics 1.000 i/100ms
Custom ruby 1.000 i/100ms
narray 1.000 i/100ms
ruby_native_statistics 1.000 i/100ms
FastStatistics 3.000 i/100ms
Calculating -------------------------------------
descriptive_statistics 0.473 (± 0.0%) i/s - 3.000 in 6.354555s
Custom ruby 2.518 (± 0.0%) i/s - 13.000 in 5.169084s
narray 4.231 (± 0.0%) i/s - 22.000 in 5.210299s
ruby_native_statistics 5.962 (± 0.0%) i/s - 30.000 in 5.041869s
FastStatistics 28.417 (±10.6%) i/s - 141.000 in 5.012229s
Comparison:
FastStatistics: 28.4 i/s
ruby_native_statistics: 6.0 i/s - 4.77x (± 0.00) slower
narray: 4.2 i/s - 6.72x (± 0.00) slower
Custom ruby: 2.5 i/s - 11.29x (± 0.00) slower
descriptive_statistics: 0.5 i/s - 60.09x (± 0.00) slower
🔗 geminabox(Ruby Weeklyより)
つっつきボイス:「rubygems.orgでやっているようなgemのホスティングを簡単に行えるようですね」「★が1400超えてる」「プロキシも簡単に設定できるらしい↓」
RUBYGEMS_PROXY=true rackup
「そういえばRubyGemsのgem
コマンドにも似たような機能がありませんでしたっけ?」「使ったことはありませんが、そういえばあったような」
以前gem server
コマンドについて記事を書いたのを後で思い出しました↓。
「もしかするとこの間のminimagicの件↓でこうしたgemのセルフホスティングのニーズがにわかに高まったりするかも」「それありそうですね」
週刊Railsウォッチ(20210329前編)特集: Rails更新版の臨時リリースとmimemagic gemのGPL問題
🔗 その他Ruby
こちらは日本時間今夜18:00の開催です。もう始まっている頃ですね。
So honoured to have @yukihiro_matz, the creator of #ruby, presenting a keynote at #rubyday 🤩
📝 "Ruby3.0 and Beyond"
Don't miss it! Check out the program and schedule on the website, and secure a ticket: https://t.co/81ilDuoshJ
Join us online on April 7th 📅 pic.twitter.com/1xMBwJeNZZ
— rubyday (@rubydayit) March 29, 2021
🔗クラウド/コンテナ/インフラ/Serverless
🔗 AWSのVPC Reachability Analyzerは便利
"ネットワークが目的どおりに設定されているかを確認"
こちら今日はじめて使ってみました。
新機能 – VPC Reachability Analyzer https://t.co/ik2xrFvJ2c @awscloudより
— よこち(yokochi) (@akira6592) March 24, 2021
つっつきボイス:「VPC Reachability Analyzerは昨年末にリリースされているみたいですね」
参考: 新機能 – VPC Reachability Analyzer | Amazon Web Services ブログ
「へ〜、このツールは到達グループやセキュリティグループも可視化してくれるのがなかなかいいですね」「おぉ」「この図↓の上の端と下の端はインスタンスのアイコンなので、インスタンスからインスタンスへの接続の可視化もできるらしい」
「VPC接続でどこまで到達できているのかを確認するのは地味に面倒なんですが、こういうツールの存在を知っていれば便利そうですね: 今度使ってみよう👍」「いいこと知りました!」
追記(morimorihoge)
VPC Reachability Analyzerその後実際に業務で使ってみた感想です。
設定できる到達パスのsource / destination設定がAWSリソース(ENIインターフェースやEC2インスタンス、各種Gateway)であり、IPアドレスなどでの指定ができないためtracerouteなどのIPネットワーク系ツールのつもりで使おうとすると最初ややとっつきにくいところがあります。
ただ、AWSリソースベースであるが故にセキュリティグループなども参照して見てくれること、一度作った設定を再テストさせることが容易なことから、ある程度複雑な構成(複数VPCだったり、外部のAWSアカウントとVPC Peering / Transit Gateway接続する)の場合には有用なトラブルシューティングツールとして利用できそうです。知っておいて損はないツールかなと思いました。
🔗言語/ツール/OS/CPU
🔗 MacBookの物理キーボードが廃止?
つっつきボイス:「まさかこの記事もエイプリルフールじゃないかと心配になってきました」「日付は3/31だから大丈夫でしょう😆」
「MacBookのタッチバーは触ったときの手応えがなくて使いにくかったけど、あれにフォースフィードバックがあれば随分違っていただろうと思うので、Appleの新しいキーボードがそこを解決したなら見込みがあるかもしれませんね」「それたしかに!」「一方トラックパッドの場合は、随分前に物理的な押し込みスイッチがなくなってハプティック(感圧タッチ)トラックパッドに変わったときは使いにくくなるのかなと思ったけど、実際はまったく問題なく使えましたね」「あれをハプティックって言うとは知りませんでした」
参考: 次期MacBook Pro、ついにTouch Bar廃止で物理ファンクションキー復活のうわさ - Engadget 日本版
参考: 感圧タッチトラックパッドの使い方 - Apple サポート
「記事にあるAppleの新しいタッチ式のキーボードも、実際に登場して触ってみたら案外印象が変わって流行ったりするかも」「早く触って確かめたいです」「物理キーボードがなくなれば故障の可能性も減りますよね」
そういえばiPhoneの「戻るボタン」も割と前から物理ボタンではなくなっていますね。たまたまiPhoneの電源を落としたときに戻るボタンの手応えが消滅していて、初めてそれに気づきました。
参考: ASCII.jp:iPhone 7のホームボタンは“ボタン”ではない
🔗 CPUの話題2つ
つっつきボイス:「新しいモバイル向けのRyzenは、アイドル時の消費電力がかなり抑えられていたりして徐々によくなってきてるみたいですね」「モバイルRyzenの今後に期待したくなってきました」「Intel CPUが今後大きく進化するのは難しそうかなと思っています」
「ARMも新しいアーキテクチャを発表」「今さらですけど、ARMが出しているのはアーキテクチャだけということでいいんでしょうか?」「現在のARMはアーキテクチャの仕様を設計してライセンス販売しているので、そうですね」「なるほど」「そのうちQEMUでArmv9が動くようになるかも」
🔗 その他
🔗 最近のセキュリティ関連
つっつきボイス:「kramdownというmarkdown用gemで見つかった脆弱性が2.3.1で修正されたそうです」「3日前(3/31)に出ているからかなり最近なのか」「markdownでリモートコード実行はなかなかヤバいですね」「kramdown自体はそこそこメジャーなGemなので、CMSなどを運用・開発しているプロジェクトでは念のため確認した方がよいと思います」
追記(morimorihoge)
その後確認したところ、Redmineが採用しているMarkdown対応Gemはredcarpetだったので、別途プラグインとかを入れてなければ恐らく大丈夫かなと思います。
全てgithubに対し行われる。土曜に行われた悪意ある変更を日曜に開発者達が気付いた。zerodiumとは政府への販売を目的に脆弱性の売買を行う企業だ。同社のCEOは今回の件に関係が無いと声明。今回の件を受けてPHP言語の開発者は全てGitHubのアカウントを取得し2FAを利用することが義務付けられた。
— 高梨陣平 (@jingbay) March 29, 2021
「もうひとつはphp.netにバックドアが仕掛けられてgit.php.netが奪われた: これはキツい」「この件でPHPリポジトリがGitHubに引っ越したそうですね↓」「久しぶりに大きな事案かも」「今回の場合は早期に発見・対応されたのが幸いですね」「たしかに」「PHPのnightlyビルドを自動取得していたところは影響があったかもしれませんが、リリース版PHPに影響が出たという話は見かけていないので普通にPHPを使っているところは今のところ大丈夫そうかな」
「開発者のアカウントがいったん乗っ取られたらどうしようもないので、2要素認証(2FA)や多要素認証(MFA)を義務付けたのはわかる」「正直とても面倒ですが、そうするよりしょうがないですよね」
参考: 多要素認証 - Wikipedia
参考: 二要素認証と二段階認証の違いを理解していますか? | サイバーセキュリティ情報局
🔗 パブリックIPアドレスをDNS経由で知る方法(StatusCode Weeklyより)
つっつきボイス:「この記事で紹介されている方法って珍しいんでしょうか?」「どれどれ👀」
「以下↓を実行すると自分がいるネットワークのパブリックIPアドレスがわかるとある、本当かな?」(しばしやってみる)「本当に取れた!」「こっちも取れました」
# 同記事より
dig @ns1.google.com TXT o-o.myaddr.l.google.com +short
「o-o.myaddr.l.google.com
って公に公開されているのかな?」「ググってみるとAWSのドキュメントにもこの方法が載ってた↓」「ホントだ」「他にもいくつか方法が載ってますね」「知る人ぞ知る機能という感じ」「使っても大丈夫そう」
参考: Route 53 の DNS リゾルバーの IP アドレスが ECS 拡張機能をサポートしているかどうかを確認する
後で、Googleのドキュメントにもo-o.myaddr.l.google.com
について記載があったのをやっと見つけました↓。
参考: Google Maps Platform ルート認証局(CA)の移行に関するよくある質問 | Google Developers
🔗 EDNS
「AWSのドキュメントに出てくる"EDNS"という言葉をググったらこれが出てきた↓」「RFC7871で仕様が定義されているんですね」
参考: インターネット用語1分解説~EDNS Client Subnetとは~ - JPNIC
参考: RFC 7871 - Client Subnet in DNS Queries
EDNS Client Subnetとは、 DNSの拡張プロトコルであるEDNS01を用いて、 問い合わせ先のDNSサーバに対して問い合わせ元の情報を伝達する技術であり、 RFC78712で標準化されています。
www.nic.ad.jpより
「以下の記事↓にはEDNSはGoogle public DNSやCloudFrontやAkamaiが対応していると書かれているということは、どうやらCDNに関連する技術らしい」「知らなかった」「推測ですが、CDN業者がクライアントのDNSリクエストを最寄りのエッジに振り向けるのにEDNSのような技術が必要なのかもしれませんね」
参考: JANOG38 :: EDNS-client-subnetってどうよ? 改めRFC7871ってどうよ
増加するコンテンツトラフィックに対応するため送信側は複数個所から送信を行っている。適切な送信箇所を選択するための技術としてEDNS-client-subnetが提案され、Google public DNS(8.8.8.8)やAmazon CloudFront, Akamaiが対応している。
www.janog.gr.jpより
参考: コンテンツデリバリネットワーク - Wikipedia
「ついでにcurlコマンドでIPを取る方法も見つけた↓」「こんなのまであるんですね」「ifconfig.ioやifconfig.me、myip.opendns.comとかいろんなのが使えるらしい」「lvh.meのような感じで誰かが考えそうなサービスかも」
参考: 【Linux】curlでグローバルIPを確認 (まとめ) | Startialab Dev Blog
# dev.startialab.blogより
curl ifconfig.io
lvh.me ドメインを使って、サブドメイン形式の WordPress マルチサイトの Docker 開発環境構築をしよう
後編は以上です。
バックナンバー(2021年度第1四半期)
週刊Railsウォッチ(20210406前編)GitHubが修正したRailsセッションハンドリングの競合、erb/haml/slimの速度比較ほか
- 20210330後編 Active Recordモデル属性暗号化が標準で入る可能性、Flipper Cloud、awesome_printほか
- 20210329前編 特集: Rails更新版の臨時リリースとmimemagic gemのGPL問題
- 20210323後編 GitHub Actionsで使えるruby/setup-ruby、中高生国際Rubyプログラミングコンテスト2020ほか
- 20210322前編 Active Recordのstrict loadingの修正、セキュリティリリースのポリシー追加、N+1チェッカーprosopite gemほか
- 20210316後編 testdouble/standard gem、DockerfileベストプラクティスとDockerfileのlintツールhadolintほか
- 20210315前編 Active Recordのenum関連改修、Active SupportのEnumerableでpluckが使えるほか
- 20210309後編 RubyのIRBに隠れているイースターエッグ、Power Automate Desktop、SQLクエリのありがちなミス6つほか
- 20210303後編 Bundlerのセキュリティ修正、Rubyのガベージコレクション記事、Rubyが2/24に誕生日ほか
- 20210222 ActiveRecord::Relationの新メソッドload_asyncとexcluding、Active Jobのperform_laterの改善ほか
- 20210209後編 Rubyでミニ言語処理系を作る、Kernel#getsの意外な機能、CSSのcontent-visibilityほか
- 20210208前編 Rails次期リリースがバージョン7に決定、thoughtbotのアプリケーションセキュリティガイドほか](/hachi8833/2021_02_08/103801)
- 20210202後編 Ruby 3 irbのmeasureコマンド、テストを関数型言語のマインドセットで考えるほか
- 20210201前編 Webpackerのガイドがマージ、RailsはRuby 3でどのぐらい速くなったかほか
- 20210126後編 Google Cloud FunctionsがRubyをサポート、Ruby 3のパターンマッチングでポーカーゲームほか
- 20210125前編 Railsリポジトリのデフォルトブランチがmainに変更、Rails 6.1はMySQLのENUM型に対応済みほか
- 20210120後編 Ruby 3.0の新機能で遊ぶ、RubyスニペットをJSに変換するRuby2JS、rspec-parameterized gemほか
- 20210113後編 Ruby 3.0 Ractor解説記事、Vercelホスティングサービス、教育用OS xv6ほか
- 20210112前編 Active Recordの範囲指定バリデーション改善、soleとfind_sole_byメソッド、AlgoliaとRailsほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)