こんにちは、hachi8833です。今週は公式サイト以外からの情報も少し多めにしようかと思いましたが、4.2.8リリース記事を優先しました。
臨時ニュース: SHA-1のコリジョンアタック手法が見つかったとGoogleから発表
Slackでbabaさんの書き込みから第一報を知りました。早くも日本語ニュースが出ていますので、詳しくはそちらをどうぞ。
HackerNewsのスレ「Announcing the first SHA-1 collision (googleblog.com)」では、PDFをドロップするだけでSHA-1コリジョン問題を手軽にチェックできるhttps://shattered.it/サイトが大賑わいになっています。問題の要点がよくまとまっていて助かります。
同サイトにはお試し用のPDFも2つ置かれています。「アップロードしたファイルを保存したりなんかしませんのでご安心を(Rest assured that we do not store uploaded files.)」とあります。なお、https://shattered.it/の証明書はLet's Encryptでした。
同サイトによると、署名/ファイル整合性チェック/ファイル識別にSHA-1を使っている以下のようなアプリケーションにはこの問題の影響を受ける可能性が潜んでいるかもしれないとのことです。
- 電子証明書の署名Digital Certificate signatures
- メールのPGP/GPG署名
- ソフトウェアベンダーの署名
- ソフトウェア更新
- ISOチェックサム
- バックアップシステム
- 重複除外(deduplication)システム ←この言葉を初めて知りました
- Git
- などなど
⭐ emn178.github.io/online-tools: SHA/MD5/Base64などをリアルタイム変換できるWebツール ⭐
上述のSHA-1問題に関連してBPSアプリチームのu-ichiさんが見つけました。今週の⭐を進呈いたしましたので先にご紹介します。
これすごく便利です。思いつく限りのハッシュ/CRCチェックサム/HTMLエンコードをブラウザ上で変換できます。
おまけにその場で結果を確認できるシンタックスハイライトまであります。
何も足さない・何も引かないを体現したような、徹底的に素朴なデザインです。強いて言うならツール名が「Online Tools」とあまりにそっけなさすぎるのでググりにくいぐらいでしょうか。
これに私が普段から愛用している万能変換Webツールhttp://r12a.github.io/apps/conversion/と合わせれば、たいていの文字コード変換処理はこなせそうです(海外ツールなのでShift_JISやEUC関連などはご勘弁を)。
Rails 4.2.8リリース
先週rc2だったのが正式にリリースされました。Ruby 2.4で修正されたDateTime#to_time
(#12189)に伴う修正が中心です。なお私のRails 4.2.7アプリにはすとんとインストールできました。
Readme記載の変更点のみ以下にまとめます。Railsウォッチでも既出のものがちらほら見当たりますね。普段から追い続けているとだんだん見えてくるのがうれしいです。
Rails 4.2.8のRailtiesの修正
- #24617
to_time
を呼んだときにレシーバのタイムゾーンを変更しないようになった- #22742
ActionDispatch::IntegrationTest#open_session
作成後にセッションを直接リセットするようになった- #19880
- Rails::Applicationからアプリケーション定数が継承された後、なる早で
before_configuration
を実行するようになった
追伸: before_configuration
とfigaro gem
「before_configuration
なんてフックがあったんだ!」「before_initialize
ってのもあるけどどう違うんだ?」と一同の間で驚きがありました。起動時に環境変数などのチェックをしたい場合にはこのような起動のごく初期段階で呼ばれるフックが必要になりそうですね。
このあたりの初期化フックについてはRailsガイドの初期化プロセスに詳しく載っています(日本語版が追いついていないので英語版にリンクしました)。
上のフックに関連して、Railsの起動時の環境変数周りを制御できるfigaroというgemも見つけました。development/test/productionごとに切り替えたい定数がある場合によさそうです。主にHerokuでの利用が想定されていますが、他でも使えます。
Rails 4.2.8のActiveSupportの修正
- 修正
ActiveSupport::TimeWithZone
とDateTime
の#getlocal
と#getutc
が常にTime
のインスタンスを返すようになった
ActiveSupport::TimeWithZone
がDateTime
を返していたためにto_time
で呼び出しスタックが深くなりすぎてエラーになる可能性があった問題が修正されました。
- 新メソッド:
DateTime#subsec
- 秒の分数を
Rational
で返す - 追加
ActiveSupport::TimeWithZone
とTime
にもDateTime#utc
のエイリアスを追加- 新メソッド:
DateTime#localtime
(とそのエイリアスgetlocal
) - システムのローカルタイムゾーンを
Time
のインスタンスで返す - 新メソッド:
Time#sec_fraction
- 秒の分数を
Rational
で返す - #24617
to_time
でのタイムゾーンの扱いを設定するオプションActiveSupport.to_time_preserves_timezone
を追加
Ruby 2.4以降では、to_time
レシーバのタイムゾーンを変更しないようにするためにローカルシステムのタイムゾーンに変換するようになりました。この設定オプションはデフォルトではfalse
に設定されるので、従来のRailsアプリを4.2.8にアップグレードしても設定を変更するまでは直接の影響はありません。
>> ENV['TZ'] = 'US/Eastern'
>> "2016-04-23T10:23:12.000Z".to_time
=> "2016-04-23T06:23:12.000-04:00"
>> ActiveSupport.to_time_preserves_timezone = true
>> "2016-04-23T10:23:12.000Z".to_time
=> "2016-04-23T10:23:12.000Z"
- #26296 新メソッド:
#init_with
ActiveSupport::TimeWithZone and ActiveSupport::TimeZone
に追加
3aa26cfで行われたタイムゾーン関連の修正によってシリアライズのYAMLフォーマットの日付文字列がUTCに変更されます。これを一時的に取り消したい場合のためのinit_with
が導入されました。
- #26580
ActiveSupport::TimeWithZone#in
のサマータイム(DST)前後の動作を修正
従来の#in
はmethod_missing
経由でTime#since
に渡されていましたが、Time#since
がサマータイムに対応していなかったので、サマータイムに対応できるActiveSupport::TimeWithZone#since
をエイリアスしました。
Time.zone = "US/Eastern"
t = Time.zone.local(2016,11,6,1)
# => Sun, 06 Nov 2016 01:00:00 EDT -05:00
t.in(1.hour)
# => Sun, 06 Nov 2016 01:00:00 EST -05:00
Rails 4.2.8のActiveRecordの修正
- 修正
- mysql2が接続に失敗した後に「connection is closed」エラーメッセージを出力するようになった(従来はundefined methodエラー)
- 修正
- カラム情報をリセットしたときに
Model.attribute_names
キャッシュを破棄するようになった - 修正
- 型情報がリセットされた時のクエリのキャッシュの動作が修正された(Rails 5.0の修正をついでにバックポート反映)
- #13775
joins
を正常にunscoped
できるようになった- #25978
- マッピング関連メソッドがすべてHashに実装されていれば
composed_of
のセッターにハッシュを再度渡せるようになった
追伸: composed_of
について
一同でリリースノートをチェックしていて、このActiveRecordのcomposed_of
というメソッドにkazzさんが熱い視線を注いでいました。composed_of
についてはいつか別記事で追ってみたいと思います。
instrument nameのキャッシュをfreezeして高速化(Rails公式ニュースより)
ここからはいつもどおり、今後のRailsでの更新情報です。
ActionMailer::Base#instrument_name
はActionController::Base#instrument_name
はキャッシュ後に頻繁に使われることが多いので、呼ばれるたびにStringを#new
するのをやめてfreezeしたそうです。修正はピンポイントです。
primary_keys()
をシンプルにしてPostgreSQL向けに最適化(Rails公式ニュースより)
@kamipoさんの#27997の続きです。unnest
から返される値の順序が一定していないので、PostgreSQL 8.4から利用できるようになったgenerate_subscriptsを使って最大64%まで高速化されたそうです。
続: ネストしたRailsエンジンでのrails generateの動作を修正(Rails公式ニュースより)
週刊Railsウォッチ(20170120)でも取り上げた#27550 Fix generator command for nested (namespaced) rails engineに再度修正が行われました。
b6ffb5eで行われた別の修正でnamespaced_path
がStringの一部として扱われるようになったので、#27550ではnamespaced_path
がArrayを返していたのをStringで返すように変更しました。
expression indexもremove_index
で削除できるようになった(Rails公式ニュースより)
これも@kamipoさんのお仕事です。expression indexって何かと思ったらPostgreSQL固有の機能だったんですね。テーブルの他のカラムから算出したスカラー値をインデックスで使えるというものです。
Difference between MySQL and PostgreSQL ( MySQL Vs PostgreSQL )によるとMySQLではexpression indexをサポートしていないそうです。
データベースをRAMディスク化してCIビルドを高速化(OpenRubyより)
MySQLにRAMディスクを導入してみたところCIのビルドが32%速くなったそうです。短いのですぐ読めます。
AWSのRuby SDKとDynamoDBでテスト駆動開発してみる
RSpecを使ってテスト駆動開発という記事です。前書きは飛ばしてよいと思います。
むしろこの記事をきっかけに以下を見つけました。
k1LoW/awspecは数少ないAWS向けのRSpecテストgemです。
Azure App Web Service on Linux上でRubyを使うには(OpenRubyより)
Microsoftの公式記事です。RubyをApp Web Service on Linuxサービス上で動かす方法の解説です。Railsとは書いてありませんが、Rubyが動くならRailsも動きそうです。
使ったことはありませんが、Microsoft Azure自身はかなり以前からRuby on Railsに対応しています: Windows AzureがRuby on Railsに対応。次々とオープンソースを取り込むWindows Azure(2009年の記事)
DHHの2017セッションのまとめ
他でも読める内容ですが、韓国語のRails記事が珍しかったので目に止まりました。Google翻訳は便利ですね。
おまけ: Google翻訳の日本語<=>韓国語翻訳はかなりすごい
Google翻訳の日本語<=>韓国語翻訳は、日<=>英翻訳が話題になるよりずっと前からかなり質の高い訳文を生成できます。
それより前は日<=>韓機械翻訳は内部で英語を経由していたようなふしがありましたが、7、8年ほど前から中間言語を経由しないネイティブになったように思えました。
マジで、マニュアルレベルだったら日<=>韓機械翻訳は下訳として使えてしまうほどです。両言語は語順が同じで、敬語の概念もかなり似ているので、機械翻訳が効きやすいのかもしれません。
Google SpreadsheetにPythonでアクセス
Googleオフィススイートのスクリプティングは、従来ならGoogle Apps Scriptという名称のJavaScriptでやるのが定番でしたが、Pythonでもできるんですね。
Excel VBAで書いたスクリプトはOfficeがアップグレードするたびに動かなくなってさみしい気持ちになったのを思い出します(´・ω・`)。
KahnAcademyでアルゴリズムを学ぶ(HackerNewsより)
この種の他サイト同様、デザインも見せ方も秀逸ですね。動画や文章による解説のほかにクイズや練習問題もあり、質疑応答も受け付けています。
Dartmouth大学と提携して作成された本格的な内容です。
引用回数の多い機械学習系論文(HackerNewsより)
Awesome系の中ではかなり頑張ってる感じです。機械学習系の研究は新しいアルゴリズムがたった1年で陳腐化したりするぐらい異常に足が速いらしいので、こういうメモ書きでもありがたいのだと思います。
外野から見ていると、機械学習系の研究者はスプリントレースの速度でマラソンしながら宝探ししているようなデスレースっぽい世界でしのぎを削っているような塩梅ですね。知力の他に頑健な基礎体力もないとやっていけないかもです。ご自愛ください。
GitHub Trendingなどでちょくちょく見かける「Awesome」で始まるタイトルは日本で言うまとめサイト的な情報ですが、思ったほどいい情報でもなかったり、あっという間に古びてしまうことが多いので、Railsウォッチの情報収集ではたいていスルーしていました。Awesomeは英語圏だと割りとバズらせやすい安易な言葉になりつつあるような気がします。
おまけ
WebチームのtazuさんがGitHubで上のAwesomeタグを表示する方法を見つけました↓。
JavaScriptはどのぐらい人気か
Look at #JavaScript go! Oh, and #PHP, #Python, #Ruby, #Java, and #csharp #github @StackOverflow @github pic.twitter.com/IkZu0ctkWh
— Nanobox (@nanobox_io) 2017年2月22日
StackOverflowとGitHubでの人気をそれぞれ縦横に配置しています。JavaScript以外にもRubyやPythonやC#やObjective-Cがトップ群にいます。
Opal: Ruby->JavaScriptコンパイラ
- サイト: opalrb.org
昨日・2月23日に渋谷で開催されたRuby Business Users Conferenceでの@matzの基調講演でも取り上げられていたそうです。
玉虫色のルビーがシンボルマークになっていて、このソフトウェアの性質と位置づけをうまく表していると思います。
番外1: 40光年離れた恒星で7つの地球型惑星が見つかる
既に日本語でも報じられていますのでご存じの方も多いと思います。
最近のNASAの発表は「今夜重大な発表があります」という前フリがつくことがやけに多いのですが、予算削減と戦うための手段なのかなと思ってしまいました。
番外2: 手書きの画像をそれっぽい写真にフェイクする
BPS社内でもたちまち流行しました。手書きのネコ画像がみるみるグロい謎のリアル画像に変化しました。
番外3: www.w3c.orgにW3Cバリデータかけてみたお
BPS WebチームのebiさんがふとW3CのCSSバリデータにwww.w3c.orgをかけてみたところ、以下の結果が得られました。
自サイトの正規化が間に合わないほどCSSの仕様改定が激しいという一面もありそうですね。文句を言うのは簡単ですが、これほどの規模の仕様のメンテがどれだけハードかを想像してしまいます。カスケード(継承)をやめるかうんと減らしてdelegate的に欲しい機能だけをブラウザのデフォルトスタイルシートで持つようにしたらだめなのかな(´・ω・`)。
W3Cのバリデータサービスを激しく使うと数時間ほど外部IPアドレス単位でアクセスできなくなることがあるので、みなさんもそおっと使ってあげてください。面白半分のアクセスを増やさないため、この項ではあえてW3Cとバリデータにリンクを張っていません。
今週は以上です。
関連記事
- 週刊Railsウォッチ(20170217)Rails 4.2.8.rc2リリース、Ruby 2.4正規表現とActiveSupportのnormalizeほか
- 週刊Railsウォッチ(20170210)JRubyやRubiniusの配列への追加はスレッドセーフではないほか
- 週刊Railsウォッチ(20170203)AnyLogin gemで開発中に楽々再ログイン、イベント数ベース課金の監視サービスRollbarほか
- 週刊Railsウォッチ(20170127)わかりやすいAWSサービス名、Rails DBは便利、TruffleRubyの驚異的速度ほか
- 週刊Railsウォッチ(20170120)Ruby 2.5.0 devリリース、古いMySQLのサポート終了、uniqメソッドが削除ほか
- 週刊Railsウォッチ(20170116)Ruby 2.4の詳細、範囲指定したsumメソッドは速い、rescueの挙動を動的に変更ほか
- 週刊Railsウォッチ(20170110)ReactをRailsに置き換える、Ruby 2.4の新機能ほか
- 週刊Railsウォッチ(20161224)Float#roundの動作変更を取り消し、Rails 5.0.1/Ruby 2.4.0-rc1リリースほか
- 週刊Railsウォッチ(20161218)Ruby 2.4ではFloat#roundの動作が変わる、デフォルトのプライマリキーをBIGINTに変更ほか
- 週刊Railsウォッチ(20161209)Active Supportの非推奨メソッド廃止、RailsのjQueryへの依存を廃止ほか
- 週刊Railsウォッチ(20161125)Railsのデータベース・ベストプラクティス、SQLインジェクション解説ほか
- 週刊Railsウォッチ(20161117)DockerホスティングのHyper.sh、accepts_nested_attributes_for殺すほか
- 週刊Railsウォッチ(20161109)bundler audit gemは超おすすめ、CIAのFactbook gemほか
- 週刊Railsウォッチ(20161102)HTML 5.1正式勧告、CSS中央揃えに便利なサイトほか
- 週刊Railsウォッチ(20161027)LinuxカーネルのDirty COW脆弱性、DeviseはWikiを読めほか
- 週刊Railsウォッチ(20161019)ObjectSpaceモジュール活用法、Capybara統合、コミッターを撮影するソフト
- 週刊Railsウォッチ(20161012)RubyのHashの詳細、RethinkDBの会社が終業ほか
- 週刊Railsウォッチ(20161005)Mac OS SierraとRubyの問題、Learning Gitほか
- 週刊Railsウォッチ(20160928)constantizeの注意点、GoのGUI “gallium”登場ほか
- 週刊Railsウォッチ(20160921)クールなHTMLエディタ「Mozilla Thimble」他
- 週刊Railsウォッチ(20160913)MySQLの脆弱性ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやRSSなど)です。