こんにちは、hachi8833です。今年もあとわずか、Railsウォッチ今週もいってみましょう。BPSアドベントカレンダー2016ラストを兼ねました。
今回より、記事の構成をニュースソース単位からトピック単位に変更しました。
Ruby 2.4で予定されていたFloat#roundの動作変更を取り消し
お喜びください。先週のRailsウォッチでお伝えしたFloat#round
のデフォルト動作変更は取り消されました。Railsウォッチつっつき会でも安堵の声が続々あがっておりました。今日の時点で11日前なのでお知らせがワンテンポ遅れてしまいました。
#16では、今回の動作変更はあんまりだ、なんでわざわざ他の言語と違う動作にするんだと不満たらたらです。
しめくくりはmatzの一声でした。
Rais 5.0.1リリース
なぜか公式よりも先にニュースが出てます。詳しくはリリースノートを。
早速5.0.1でrails new
してみました。
Ruby 2.4.0-rc1リリース
- ソース: Ruby 2.4.0-rc1 Released(via Ruby 公式)
ご紹介が少々遅れましたが、2.4.0-rc1がリリースされました。いくつかの新機能はRailsウォッチで既にご紹介しているので、未紹介のものだけ。
Array#max
とArray#min
の導入
a = [*1..10000]; 100000.times { a.max }
上のコードは、Array#max
とArray#min
では#each
を呼ばないのでEnumerable#max
と比べて10倍以上速くなるとのことです。
- パッチなし
- 22.424s
- Array#maxを定義した場合
- 1.740s
Array#max
が定義されれば、opt_newarray_max
のようなメソッドを作って最適化することでさらに高速化が期待できます。
x, y = 1, 2; 10000000.times { [x, y].max }
- パッチなし
- 2.799s
- Array#maxを定義した場合
- 1.224s
- opt_newarray_max
- 0.555s
Regexp#match?の改良
Ruby 2.3.1で導入されたRegexp#match?
の結果を$~
に反映しないようになりました。
その他にも2.3.1以降で行われた以下のような変更も含まれます。
Railsのセキュリティ関連の話題10選
2013年の記事の更新版だそうです。英語圏はこの手の記事がやたら多いですね。
- マスアサインメント(Mass assignment)
- XSS攻撃(XSS attacks)
- 任意のコード実行(Executing arbitrary code)
- SQLインジェクション(SQL injections)
- フォームハイジャック(Form hijacking)
- 機密データをログに吐く(Logging private data)
- プライベートトークンの露出(Revealing private tokens)
- IFrameを使った邪悪なサイトの埋め込み(Embedding a site via IFrame)
- 実行ファイルのアップロード(Uploading executable files)
- Brakemanでの問題検出(Using Brakeman to detect possible problems)
Brakemanは言わずと知れたRailsのセキュリティ問題検出用gemですね。brakemanscanner.orgにはBrakemanの更新情報のほか、主要なセキュリティ情報も掲載されているので便利です。
有料のBrakeman Proも使ってみたいものです。
つっつきながら、プライベートトークンに関して「昨今は秘密鍵のようなクリティカルな情報はファイルに保存せず、起動オプションや環境変数で与えるのが基本」という話にもなりました。
WindowsでRubyコードを動かすには
そんなに難しくないと言ってます。morimorihogeさんは「今ならBash on Ubuntu on Windowsでいいんじゃないの?」と。
私の思い出ですが、Rubyでツールを作った後、社内ユーザーなどに配布するときに意外と困るのがRubyそのもののインストールだったりしました。デフォルトでインストールされていない環境はエンドユーザーに嫌がられやすいので。
ActiveRecord::UpdatedAtでデータを常に同期するには
active_record-updated_at gemをインストールすると、デフォルトではtouchしない以下のメソッドがupdated_at
をtouchするようになるそうです。
ActiveRecord::Base#update_column
ActiveRecord::Base#update_columns
ActiveRecord::Relation#update_all
ちなみに以下はmorimorihogeさんおすすめの記事です。
エディタで1行ずつコードをevalできるseeing_is_believing gem
- ソース: Seeing Is Believing: Displays Results of Each Code Line([Ruby Weekly](via Ruby Weekly)
ファイル中のRubyコードを1行ずつ評価して結果を記録できるgemです。ちょっと手元が狂ったらフリーズしそうだとの声も。Seeing is believingは「百聞は一見にしかず」と学校で習ったような覚えがあります
。このコードをつっついているときにmorimorihogeさんがこんなのを掘り当てました↓
Ruby 2.4の新メソッド: Comparable#clamp
引数を2つ与えると、範囲から外れた場合にレシーバーに近い方に寄せた値を返します。数値でも文字列でも同じように扱えるのがポイントです。ちょっと賢い四捨五入的なメソッドですが、果たしてどんな使い道があるでしょうか。
10.clamp(15, 20)
=> 15
"e".clamp("f", "s")
=> "f"
clampはあっちの方ではなく、ここでは「留め金をかける」みたいな意味ですね。日本語でどう表すかですが、ここでは「寄せる」がしっくりくる気がします。
Railsのschema cacheとは何か
ロシア発。Railsのschema cacheについての解説です。短いのでがんばらなくても読めます。
ポイント:
- スキーマ関連のデータ(テーブル、カラム、型)をシリアライズしてファイルに保存する
- そのファイルをアプリケーション・サーバー全体に分散する
- データをそのファイルから読み出すことでデータベース・アクセスを避ける
Ruby 2.4でFixNumとBigNumにも#infinite?と#finite?を追加
# 2.3: Float と BigDecimalのみfinite?/infinite?を実装
5.infinite?
#=> NoMethodError: undefined method `infinite?' for 5:Fixnum
# 2.4: FixNumとBigNumにもfinite?/infinite?を実装
5.infinite?
=> nil
5.finite?
=> true
これで動作が一貫しましたね。
参考
- FixNum クラス -- 整数を扱います
- BigNum クラス -- 多倍長整数を扱います
Rubyでコマンドラインプログラム: tty-prompt gem
- tty-prompt gem(via RubyFlow)
コマンドラインで対話するプログラムをRubyでさっと作れるようです。Linux環境などのdialogコマンド的に使えるのかなと思いました。
require 'tty-prompt'
prompt = TTY::Prompt.new
prompt.ask('あなたのお名前なんてえの?', default: ENV['USER'])
# => あなたのお名前なんてえの? (piotr)
prompt.yes?('Rubyはお好きで?')
# => Rubyはお好きで?? (Y/n)
prompt.mask("ア・ナ・タ・の・ひ・み・つ・は?")
# => ア・ナ・タ・の・ひ・み・つ・は? ••••
scaffold picoで、変わり映えのしないscaffoldとおさらば
- ソース: Replace the boring rails scaffold(via RubyFlow)
Railsのscaffoldの改良版です。Material Designが使えるところにちょっと惹かれました。
ちなみにRailsのscaffold部分のコードはやばいくらい入り組んでいるそうです。
マーク・ザッカーバーグ自らAIをこしらえる
- ソース: Building Jarvis([Hacker News](via Hacker News)
IronmanのJarvisみたいなのが欲しかったんだと。
太陽光発電は本当にイケるのか
- ソース: World Energy Hits a Turning Point: Solar That's Cheaper Than Wind(via Hacker News)
- ソース: Solar Now Produces a Better Energy Return on Investment Than Oil(via Hacker News)
「太陽光発電は今や風力発電並にコストが下がった」「石炭の半額」「太陽光発電は今や石油よりも投資対効果が大きい」などと景気のよさそうな話ですが、石油業界が慌てふためいているようにも見えません。
GCC-Explorer: GodBolt.org?
- ソース: GodBolt(via Hacker News)
C++で書いたコードをアセンブラで表示するWebサイトです。もちろんGitHubリポジトリもあります: mattgodbolt/gcc-explorer。
今気づきましたが、Google+のページもあります。
コンパイラをプルダウンから自由に選べるわ、リアルタイムでシンタックスハイライトはされるわ、オプションは表示されるわと盛りだくさんです。morimorihogeさんが最適化オプションを-O0
から-O9
まで変えてみると、アセンブラがみるみる短くなりました。
かっこよすぎです。今週の?を進呈いたします。おめでとうございます!
GitHubが9か月で6600万ドルの損失
直接関係ありませんが、数年前にGitHubでハラスメント騒ぎがあったのをつっつき会で初めて知りました。
JenkinsのUI見直し: Blue Ocean
CIサポートツールは最近あんまり取沙汰されてないような気がするのは思い過ごしでしょうか。今では古株に近いJenkinsにもこういうのが表示されることになりそうです。
コプロセッサ付きGameBoyカード: Wolf
コプロのおかげでGameBoyで3Dがヌルヌルサクサク動いてますね。
Goのマイクロサービスフレームワーク Goa
個人的にちょっとよさげに思えました。
「設計を元にコードを生成」って歴史上何度も登場しているようですが、このぐらいささやかならいいかなと。
GitHubのIssuesをファイルシステムにマウントする
ちょうど本日のBPSアドベントカレンダー記事「VimとGo言語でSlackすればみんなもっと輝ける」にも通じるというか、同じ病を患ってる感ありますね。
EtherCalc
Node.jsベースの表計算Webサービスです。普通に検索して見つけました。これを即使う必要はなさそうですが、表計算をベースにゴリゴリ新しいサービスを作りたい人にはよいかも。
GitHubリポジトリ: audreyt/ethercalc
LEGOアーティスト作品
私の家族からのタレコミです。冗談系LEGOや力作系LEGOなどいろいろやっていてうらやましいです。
労働拒否は、星新一のショートショートにまさにこの装置が登場したのを覚えています。タイトルは覚えていませんが傑作です。今ググったら『ひとつの装置(ネタバレ注意!)』でした。
私も小学校高学年までLEGOにはまりまくって何だかでかいのを作ったりしてましたが、真夜中にたまたま虫の居所の悪かった母親に蹴り壊されてしょんぼりしてしまったのを思い出しました。
AppleがATS化義務付けの延期を発表
morimorihogeさんからの情報です。
ATS 年内とか言ってたから必死にやってたのに延期で真顔 / “Supporting App Transport Security - News and Updates - Apple Developer” https://t.co/eeWPY7RCxD
— Yusuke MURAMATSU (@muranet) 2016年12月22日
BPSでもこの作業を急いでた矢先に出鼻をくじかれました。ずこー。
アポロ11号のソースコードが公開
apollo11号のソースコードを読みつつが話題を呼んでますね。
ダークマター不要の新しい重力理論が一次テストをパス
個人的には断然こちらに金星進呈したいところですがぐっと我慢。
ここ5年ほど科学雑誌を買ってなかったせいかこのあたりを完璧に見逃してました。Wikipedia: エントロピック重力理論に「重力は「物質の位置に関連付く情報」の結果である」なんて震えがきちゃいます。
ヴァーリンデの新理論はニュートン理論とも一般相対性理論とも整合しているので、逆に実験での検証が難しいとされていたようです。
今週は以上です。
関連記事
- 週刊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の脆弱性ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(RSSなど)です。
Ruby 公式ニュース
RubyFlow
Ruby Weekly
Hacker News
Github Trending
おまけ: アドベントカレンダーらしい何か
以下はまったく私個人の戯言です。
2000年もの間誕生日を祝ってもらい続けるって、考えてみたらすごいことですね。釈尊も花祭りとかで祝ってもらってますし。当時の開祖は、自分の作り出した体系(=システム)が2000年も使われることになるとまでは思いもよらなかったのではないでしょうか。
開発者の皆さまが日々作り出しているシステムやライブラリも、もしかしたら2000年とまでいかなくても数百年使われ続けるようなことがあるかもしれません。
1990年代前半、COBOLで社内の日付ライブラリをリンクしようとして分厚いバインダーを繰って調べていると(ええ、当時はそんな方法しかなかったんです)、有効範囲が「1999年12月31日まで」となっているのをたまたま見つけました。「これどうすんですか?」と先輩に聞いたところ「こんなのその頃には誰も使ってないから大丈夫だよ」とお茶を濁されたのでした。その後の結果は申し上げるまでもありません。
開発者にとって、目の前の問題を切り抜けるのが最優先課題には違いありませんが、たまにはそういうことに思いを馳せてみようかなと思った次第です。
クリスマスおめでとうございます。
草月流生花でございます。