- Ruby / Rails関連
週刊Railsウォッチ(20190225)Rails 6のあまり知られてない新機能、TWAとKotlin/NativeとFlutter、Rubyが26歳の誕生日ほか
こんにちは、hachi8833です。スクショ禁止の分科会決定でひっそりざわついてます。
つっつきボイス:「ちーっす」「お、今日は久しぶりに冒頭から参加😍」「いや〜もう疲れちゃったんで今日はこれで仕事終わりにしようと思って😅」「そういうときはウォッチつっつきで気分転換しましょ🏖」「そのつもりです☺️」「そうそう、疲れたときはRailsウォッチ😆」「今日納品とかじゃなければ全然OK🚛: ちょうど長い実装やっと終わったんですよね」(以下延々)
- 各記事冒頭には⚓でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを社内有志でつっついたときの会話の再構成です👄
- 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください
⚓週刊Railsウォッチ「公開つっつき会#8」開催のお知らせ
次回は3/7(木)開催です。皆さまのお気軽なご参加をお待ちしております🙇。
⚓Rails: 先週の改修(Rails公式ニュースより)
コミットリストから見繕いました。@tenderloveさんのテンプレート改修が目立ちます。
⚓PostgreSQLのUUIDキャストのアロケーションを削減
# activerecord/lib/active_record/connection_adapters/postgresql/oid/uuid.rb#L7
class Uuid < Type::Value # :nodoc:
ACCEPTABLE_UUID = %r{\A(\{)?([a-fA-F0-9]{4}-?){8}(?(1)\}|)\z}
alias_method :serialize, :deserialize
def type
:uuid
end
- def cast(value)
- value.to_s[ACCEPTABLE_UUID, 0]
- end
+ private
+
+ def cast_value(value)
+ casted = value.to_s
+ casted if casted.match?(ACCEPTABLE_UUID)
+ end
end
つっつきボイス:「おぉ〜UUIDをプライマリキーに?」「UUIDをstringで取れるようになったのか」
「どうなんだろうね〜、UUIDをプライマリキーにしようみたいな話はIDが溢れた経験のある人はみんな言ってますけど😆」「😆」「とはいえRailsのURLにあの長ったらしいUUIDが出てくるのもちょっとね〜」「マイクロソフトの7a98c250-6808-11cf-b73b-00aa00b677a7
みたいなUUIDとさんざんお付き合いしたことあります😅」
参考: Generating the UUID - Windows applications | Microsoft Docs
⚓ActiveSupportのZeitwerkIntegration
にunhook!
を追加
# activesupport/lib/active_support/dependencies/zeitwerk_integration.rb#L30
def verbose=(verbose)
l = verbose ? (logger || Rails.logger).method(:debug) : nil
Rails.autoloaders.each { |autoloader| autoloader.logger = l }
end
+ def unhook!
+ :no_op
+ end
zeitwerkが1.2にアップグレードされたのも07346で取り込まれていました。
つっつきボイス:「zeitwerk、発音なんだっけ」「えっと、ツァイトヴェルクだったかな」「コミットしてるfxnさんがzeitwerkやってる人ですね」
「Zeitwerkのコミット数や規模が思ったより小さくてちょっとびっくりしました」「オートローダーやってるだけだから小さいんでしょうね: Rubyの新しい機能を使っていい感じのオートローダーを作った的な」
⚓レンダラーがstringではなくレンダリング済みテンプレートオブジェクトを返すよう変更
- PR: Return rendered template objects from renderers by tenderlove · Pull Request #35265 · rails/rails
- commit: Move inline rendering content-type test to a controller test · rails/rails@d0733ba -- これも関連しそう
# actionview/lib/action_view/base.rb#L289
- def in_context(options, locals)
+ def in_rendering_context(options)
old_view_renderer = @view_renderer
old_lookup_context = @lookup_context
if !lookup_context.html_fallback_for_js && options[:formats]
formats = Array(options[:formats])
if formats == [:js]
formats << :html
end
@lookup_context = lookup_context.with_prepended_formats(formats)
@view_renderer = ActionView::Renderer.new @lookup_context
end
yield @view_renderer
ensure
@view_renderer = old_view_renderer
@lookup_context = old_lookup_context
end
ActiveSupport.run_load_hooks(:action_view, self)
end
end
つっつきボイス:「いきなりstringを返すんじゃなくてテンプレートのまま返すようにしたのね」「最近のtenderloveさんはずっとテンプレートレンダラー周りにかかりっきりですね」「Railsの表示を速くしたいからだったりして😆: 主にGitHubの」「tenderloveさんはGitHubの人ですしね」
「実際レンダリング周りって、Rails的に書き進めていくと極限に遅くなるし: 表示完了まで15秒かかったなんてこともあったし🐌」「へ〜」「要するにパーシャルに分ければ分けるほど、どんどん遅くなる」「あ〜そんな話もありますね」「パーシャル化を進めていくと、テーブルのところとかでパーシャルが入れ子になってしまったりするんですが、そういうところで横のループと縦のループが形成されると遅くなって死ねるという🐢」「あんまり遅くなるから今度はパーシャルを結合していったりとか😆」「😆」「Railsでパーシャルを増やしたときの遅さはもう少し何とかしないといけない気がする🤔」
⚓rendered_format
を非推奨化
# actionview/lib/action_view/rendering.rb#L25
module Rendering
extend ActiveSupport::Concern
include ActionView::ViewPaths
+ attr_reader :rendered_format
+
+ def initialize
+ @rendered_format = nil
+ super
+ end
...
- def rendered_format
- Template::Types[lookup_context.rendered_format]
- end
つっつきボイス:「rendered_format
を非推奨...?」「この副作用に依存しなくなったから消すと」「普段触らないところだからよくわからないけど、たま〜にこういうのが必要になったりしますね😆」「たしかに〜」「ごくまれにここのコンテキストのフォーマットを取りたいみたいなのが😆」
参考: rendered_format
-- AbstractController::Rendering
「Railsじゃないけど、以前PHPのフレームワークでどうしてもコンテキストを取りたいことがあって、フレームワークのソースをどっさり読んでまで取ったのをちょっと思い出した😭」「わかりみ」「ああいうのはツラいホント😇」
⚓delete_by
とdestroy_by
を追加
#35304でDHHが足そうと決めたようです。
# #35304より
# Before
unreads.find_by(readable: readable)&.destroy
unreads.where(readable: readable).destroy_all
unreads.where(readable: readable).delete_all
# After
unreads.destroy_by(readable: readable)
unreads.destroy_by(readable: readable)
unreads.delete_by(readable: readable)
つっつきボイス:「あ〜これが欲しいのわかる!」「たしかに」「delete_by
とかdestroy_by
、あっていい😋」
「delete_by
だとActiveRecordのオブジェクトを作らないことができそう?destroy_by
だとフックが動くからActiveRecordのオブジェクトを作らないといけないだろうけど」「どうでしょう?わかんないけど、destroy_by
の動作に寄せるんじゃないかな〜🤔: destroy
だと削除済みのActiveRecordオブジェクトが返ってきた気がするし、find_by
もオブジェクト返すから同じにするのかななんて」「persisted
がオフになったオブジェクトを返すみたいな?」「たぶんそんな感じで」
「destroy
って、うろ覚えだけどsave
みたいな他のメソッドとちょっと動きが違ってて、たしかtrue
/false
を返さずに、削除済みのオブジェクトを返してた気がする: でdestroyed?
すると削除に成功したかどうかがわかるみたいな作りだったと思うんですよね」「あーそういうのどっかで見たことある」
参考: destroyed?
-- ActiveRecord::Persistence
「だから厳密なことを言えば、削除が成功したかどうかをdestroyed?
でチェックするのが筋なんですけど、普通みんなそこまでやらないっすよね😆」「destroy
したらもう次にはリダイレクトかけたりとか😆」「true
じゃないかもしれないんだぞと😆」「まあエスケープが別の例外吐くかもしれませんが😆」「いずれにしろdestroy
ってちょっと変なAPIだった覚えがあるんですよね」
「でも削除したオブジェクトを取れれば『〜を削除しました』みたいなメッセージを作りやすいし」「あ、確かに!」「delete_by
とかdestroy_by
、たしかにあっていいヤツ👍」
⚓Rails
⚓Rails 6のあまり前面に出ていない新機能
つっつきボイス:「TechRacho読んでればだいたい知ってること多いかな」「そんな気がしますね」
「そうそう、Webpackerが6でデフォルトになるし」
「暗号化credentialで環境をサポート」「つかそれがないと使いものにならないと思うんですけど🤣」「🤣」「環境使い分けられないcredentialを誰が使うのかと🤣」「credential周りも何だかずっとやってる感」「gemがあるからそんなに不自由しないのかもしれないけど」
「ActionDispatch::HostAuthorization
ってのができたのか、へ〜」「Hostヘッダー攻撃を防ぐためのものですか」
参考: What Is a Host Header Attack? - DZone Security
「translation
メソッドと_html
、これあったな」「あったあった(ウォッチ20180723)」「i18nでこんなふうに↓_html
付けると式展開が自動でエスケープされるヤツ」
# en.yml
en:
hello_html: "Welcome <strong>%{user_name}</strong>!"
「Relation#pick
?」「あー、pluck
の単発バージョンみたいな」「LIMIT 1
がつくのね」
「update_attributes
が非推奨になる件、ちょうどこないだ社内のコードレビューでやりましたね」「ウォッチで取り上げられてたんで、そのリンク(ウォッチ20190218)をそのままレビューに貼って『非推奨になるらしいっすよ』って使いました😆」「やったね😋」「業務で役に立った😋」
「MySQLのデフォルトエンコーディングがutf8mb4になる件」「まだ対応してなかったんだっけ?」「これもウォッチで扱った覚えが(ウォッチ20180925)」「たしかこの対応のためにMySQLのミニマムバージョンが引き上げられた」「そういえばそっちの方が大きい話だったかも」
「rails db:system:change
ができるようになった話(ウォッチ20190121)😆」 「へぇ〜」「create_table: :if_not_exist
もあった(ウォッチ20181203)」
「セッションオブジェクトのナビゲーション?」「dig
というハッシュ的なメソッドでセッションオブジェクトを安全に扱えるようになったのか」
「Enumerable#index_with
ですって(ウォッチ20180608)」「当時の記事で『これは優秀なメソッド』ってありますね😋」
「Array#extract!
(ウォッチ20180827)」「Arrayでやれるのか〜」
「rails server -u puma
みたいにサーバーを指定できるようになるし」「ほぉ〜」
「サマリーとしていい記事👍: ダラダラ書いてないのも好感持てるし」「Railsウォッチを毎週読んでない人にはこういう記事もいいかも☺️」「そうですね☺️」
⚓Rails 5.2向け厳選gem 10種(Ruby Weeklyより)
「ちょっと時間が押してるので簡単に」「SidekiqにPryにDalli」「そしてexception_notificationは定番かな」
「プッシュ通知のFCMにWicked PDF」「Chartkickはグラフ生成」「こういうのいっぱいありすぎて😭」
- リポジトリ: spacialdb/fcm
Wicked PDFとChartkickは昔の翻訳記事にありました↓。
Rails tips: Railsアプリに1行書くだけでチャートを作成できるchartkick/chartable gem(翻訳)
「AWS-SDK S3も有名」
- リポジトリ: aws/aws-sdk-ruby
「おお、will_pagenateなんてなつかしい👴」「ここだけ急に古いですね」「まだ使ってる人いたんだ〜」「kaminariとwill_pagenateって同じものかと思ってた😅」「will_pagenateってこんなきれいに出ましたっけ↓😆」「さすがにBootstrapとか当ててんじゃね?😆」「最近だとPagyが速いらしいけど」
- リポジトリ: mislav/will_paginate
- リポジトリ: kaminari/kaminari
「active_model_serializersも定番」「これはある意味難しいgemだけど、ちょろいAPIとかだったらこれでいけたりしそうではある」「少なくともjbuilderで全部やろうとするよりは全然いい」「おや、active_model_serializers、長いこと更新されてないっぽいな」「ちょい悩ましい」「active_model_serializersのリポジトリってrails-apiっていうんですね」「何だか公式っぽい雰囲気?」「微妙にイラッとする😆」「あ、そうじゃなくてactive_model_serializersってRailsにマージされてるのか!」「しかしこの更新のされなさはちょっとためらいを感じる😆」「完成され尽くしてるのかも😆」「いやいや😆」「モデルに対するDecoratorみたいなgemだし」「JSONにするためのgemというか」「何となれば自分たちでメンテできそうなささやかな規模感ではあるけど」「あり方はビューっぽいけど、それをとてもモデルっぽく書けるgemですよね☺️」
- リポジトリ: rails-api/active_model_serializers
- リポジトリ: rails/jbuilder
「active_model_serializers、リポジトリにソースが見当たらない...?」「他のどっかに置いてあるとか?」「もしかしてRSpecみたいな感じだったりして: RSpecって本体にはほとんど中身がなくて、実際の中身はrspec-coreとかそういうところに置かれてたりするし」「active_model_serializersのソースの場所やっぱりよくわからん😅」「RubyMineとかだったら何も考えずにジャンプできるからソース探し回らなくていいんだけどな〜」
「active_model_serializersみたいなgemはソース読まないとわからない感じですよね」「このgemを使ってきれいに書いたサンプルコードとかないと使いにくい感じありますね」「root要素を指定できるオプションなんかもあって確かに欲しいヤツなんだけどデフォルトの挙動がよくわかんないし😅」「undocumentedとまではいかないにしても情報がちと少ない感」「触ってみないとわからない感じなんですね」「このgemは入れてすぐ使えると思わないほうがいいかも😆: 1日ぐらいああでもないこうでもないとかやってみないと(実際やったし)」「自分もやりましたよ😅」
⚓rubanok: params周りをすっきりさせるgem(Ruby Weeklyより)
- リポジトリ: palkan/rubanok
久しぶりにEvil Martiansがスポンサーのgemです。Rails以外でも使えるそうです。
# 同リポジトリより
class CourseSessionController < ApplicationController
def index
@sessions = CourseSession.
search(params[:q]).
by_course_type(params[:course_type_id]).
by_role(params[:role_id]).
paginate(page_params).
order(ordering_params)
end
end
# 上を下のように書ける
class CourseSessionController < ApplicationController
def index
@sessions = planish(
# pass input
CourseSession.all,
# pass params
params,
# provide a plane to use
with: CourseSessionsPlane
)
end
end
# 全部推測させたりも
class CourseSessionController < ApplicationController
def index
@sessions = planish(CourseSession.all)
end
end
つっつきボイス:「これは嬉しいヤツでしょうか?」「ははーん、paramsを直で渡してよしなに解釈してくれる感じかな」「Ransackみたいな?」「Query Objectに近い感じ」「このgemをいきなり使われたら意味わかんなくてびっくりしそうではある😆」「上みたいにbefore/afterで示されてればわかるけど、afterだけ見せられたらヘ(゚д゚)ノ ナニコレ?みたいな😆」「😆」「こういうのを柔軟にやるのはなかなか大変そう...」「やりたいことはわかるけど、それが他の開発者に伝わるかどうかが心配だな〜: その意味でこういうやり方はちょっと😅」
⚓VelocityとGitPrimeをチェックした
つっつきボイス:「Code Climateさんの記事です」「VelocityとGitPrimeって何だろうと思ったらプロダクトみたい」「VelocityはCode Climateの自社製品なんですね」
「Velocity、ちゃんと見てないけどNewRelicとかDatadogとかみたいな感じに見える」「アプリケーションメトリクスを収集してビジュアル表示するみたいな感じ?」「Datadogが近いのかも🤔」「ということはGitPrimeはVelocityのライバルさんかしら」
「ところで、Code Climateの自動レビューみたいなエンジニアのコミュニケーションを自動化するみたいなツールって、CIとかを除けばなぜか日本であまり定着しないんですが、その理由はもしかすると日本では結局日本語でやりとりしてるからじゃないかなという気がしてます」「あ〜」「ほら、海外だとプライマリ言語が英語じゃない同士が英語でやりとりしてたりするじゃないですか: そういう日常会話レベルでいろいろ大変な人たち同士だとコミュニケーション自動化ツールっていろいろありがたいと思うんですが」「それあるかも」「日本だと結局口頭でやりとりする方が早いみたいな感じになったりとか」
「そういえば最近Siderってツール↓使ってるんですけど、『Siderで指摘された内容は全部直してください』ってレビューで書いてあって😆、なるほどそういう使い方なんだなって思ったりしましたね」「へー、サイダー🥤」「あ、CiderじゃなくてSiderです」「もう日本語化されてる?」「Siderって元々日本発のサービスだった気がします(ウォッチ20180910)」「あ、そうなんだ!」「とにかくこういうのに任せるのもひとつの手だなと思って」
「おいくら万円?」「ユーザー単位か」「フリーもあるけどっ」「日本語で自動レビューされるならいいかな: 別に英語でもいいけどっ😆」「スタンダードが月1500円でリポジトリ数制限ないんなら、ちょっとチームで使ってみようかなという気になってきた😋」「もしGitHubでしか使えないとかだったら残念だけど」「GitHubで、と書いてあるからどうもそれっぽいし」「BPSはGitLabだからGitLabで使えたらいいんだけどな〜🥺」「GitHubとGitLabを同期するプラグインとかでできそうな気もするけど、(GitLabの)マージリクエストをプルリクエストとしてGitHubで同期してくれないとだめだし」「そっか〜」「既に方法がありそうな気もするし、1か月ぐらいやってみたいな」「Siderにしとけば『Siderの言う通り直してください』で済むから楽そうだし😆」「レビューされなくて止まっちゃうより自動レビューされる方がきっといいし😋」
⚓その他Rails
- 元記事: Rails profiling story, or how I caught Faker trying to teach my app Australian Slang - DEV Community 👩💻👨💻 -- faker入れたらロケールがどばっと増えた話(Hacklinesより)
- 元記事: The 10-minute Rails Pub/Sub - DEV Community 👩💻👨💻 -- 10分でわかるPub/Sub(Hacklinesより) --
ActiveSupport::Notifications
話 - 元記事: How to Create a Simple CRUD App with Rails and React · James Hibbard -- かなり長い記事 (Ruby Weeklyより)
- 元記事: Tips for running free dynos on Heroku in 2019(Ruby Weeklyより)
つっつきボイス:「そういえばHerokuも昔といろいろ変わって、Dockerコンテナも動くようになってるし、できることも増えてたりするし」「へ〜!」
次回の #unasukefm は、ゲストにRuby/Railsコミッターの @a_matsuda さんを招いて収録いたします。RubyKaigiやGem作者としての松田さんの話を聴けたらと思います。配信は3月上旬予定です。 #railsdm
— Railsdm (@railsdm) February 18, 2019
⚓Ruby
⚓rescue
をちょっとカッコよくリファクタリング(Ruby Weeklyより)
短い記事なので、コードは最後のだけ引用します。
class SomeAPIService
def self.call
perform_action
rescue SomeAPIAccountExpired
send_email_with_notification_about_expired_account
rescue SomeAPIInvalidAPIKey
send_email_with_notification_about_invalid_api_key
rescue SomeAPIUnauthorizedAction
Rollbar.error('log some useful info')
end
end
つっつきボイス:「あーなるほど、Rubyのトリプルイコール===
をdef self.===(exception)
みたいにオーバーライドするのか」「すると上のようにrescue
できると」「ほーほー!これは中々😋」「トリプルイコールはクラスの一致を取れたと思うので、それを例外クラスの一致チェックに使ってると」「そこに使うのね: 言われてみればたしかに〜」「PHPとかJavaScriptやってる人からすれば、===
って完全な型一致という印象だし😆」「Rubyはそこが特殊😆」
⚓RubyのTracePointを探る(Ruby Weeklyより)
# 同記事より
trace = TracePoint.new(:raise) do |tp|
p [tp.lineno, tp.event, tp.raised_exception]
end
#=> #<TracePoint:disabled>
trace.enable
#=> false
0 / 0
#=> [5, :raise, #<ZeroDivisionError: divided by 0>]
つっつきボイス:「TracePointだ」「Brandon Weaverさんはこれでしばらくシリーズ記事を書くみたいです」「TracePoint、知っておくと便利だけど使う機会が年に1度あるかないか🤣」「🤣」
⚓RubyのBEGIN/ENDがブロックを取れる
「Goby言語のst0012さんが、RubyでBEGIN
とEND
でブロック取れるって知らなかった〜と言ってたので」「おぉ、Rubyのこういう大文字定数にはときどきあまり知られてない機能がありますヨ🤓」
「たとえばRubyにDATA
ってのがあるんですけど」「えっナニソレ?」「コードの中でDATA
という定数を書いて、そのファイルの末尾に__END__
って書くと、__END__
から下にある文字列を丸ごとDATA
で読み取れる↓」「それスゴい😳」「この間ちょろっと書いたNagios用のスクリプトで少し長めのERBでNagios configを書かないといけなかったんですが、そのときにこの方法でERBコードを読み込みました😎」「ヒアドキュメントよりよさそう😋」「ファイルの末尾にまとめて書けるから散らからないし🧹」「書くときに『たしかこんな機能があったはず』と思って探して見つけたし😆」
# ruby-lang.orgより
sum = 0
DATA.each_line do |line|
sum += line.to_i
end
DATA.rewind
p DATA.gets # => "sum = 0¥n"
__END__
17
19
23
29
31
参考: constant Object::DATA
(Ruby 2.6.0)
「これはRuby Gold級の技っぽいですね」「Rubyマニアじゃないとあまり知らないかも😆」「これはもっと知られてもいい機能」「Ruby Gold持ってませんでしたっけ?」「いやその、BEGIN
とEND
がブロック取れるというのは何とな〜く思い出したけどDATA
は知らなかったマジで😅」
追記(2019/02/27)
https://t.co/yxTsCnE4bT
__END__ 以降を DATA で読めるのは Perl の流れをくむものだと思う。Perl だと今は __DATA__ を使うべきなのかな。— さく (@sakuro) February 26, 2019
DATA
と__END__
についての記事を以前翻訳していたのに忘れていました↓。
⚓その他Ruby
- 元記事: JRuby 9.2.6.0 Released — JRuby.org(Ruby Weeklyより)
- 元記事: Dustin Zeisler | The Power of Ruby Structs(Hacklinesより)
人類のYARV命令列の研究が進み、各命令において任意のメソッド呼び出しが発生しうる条件は何かという情報がわかりつつある(既に最適化に使われている)が、結構多くの命令が突然任意のメソッド呼び出しを発火してしまうという結論に至ったのであった
— k0kubun (@k0kubun) February 19, 2019
Ruby で思い出したけど ruby の LSP である solargraph、直近のバージョンで幾らか直ってるのでだいぶ補完候補出る様になった。
— mattn (@mattn_jp) February 20, 2019
つっつきボイス:「LSPはランゲージサーバー」「ランゲージサーバーは流行って欲しい🙏」
以下はつっつき後のツイートです。
ありがとう! (Ruby の代わりに) https://t.co/awemroDqke
— Yukihiro Matsumoto (@yukihiro_matz) February 24, 2019
お誕生日おめでとうございます🎊!人間ならそろそろ結婚して家庭を持ってそうな年頃ですね💒。
⚓Ruby trunkより
⚓Ruby 2.7にEnumerable#tally
が入るお(Ruby Weeklyより)
- 元記事: Ruby 2.7 — Enumerable#tally – Brandon Weaver – Medium
- commit: enum.c: Enumerable#tally · ruby/ruby@673dc51
#11076で元々count_by
という名前で提案されたのがtally
に変わったそうです。
tally: {他動-1} : 〜を勘定する、計算する、数え上げる、集計する
つっつきボイス:「タリーって?」「何でも元々count_by
って名前だったらしいんですけどtally
に変わったそうです」「はは〜、どの種類の要素がいくつあるかを数えてハッシュの形で返してくれるのか!」「こういうことたまにしますもんね😆」「するする😆」「自力で書くとそこそこ面倒なヤツ」「後はこのメソッドの存在を忘れなければ😆」「Ruby 2.7から入るそうです」「文章のアルファベットでeが一番多いみたいな、ある種の『黄金虫』的な問題を解くのが劇的にラクになりそうですね😋」「名前もcount_by
よりいいかも」「count_by
だと引数渡して数えるみたいに思えるし」
# 同記事より
%w(foo foo bar foo baz foo).tally
=> {"foo"=>4, "bar"=>1, "baz"=>1}
参考: 黄金虫 - Wikipedia
「これって先週のウォッチにあった、期待する値を渡すとそれを返せるメソッドを返すgemにちょっと通じるところがあるような(ウォッチ)」「そういえば先週あの後amatsudaさんからツッコミもらいました↓😅: MethodFinderっていうのがあるそうです」「😆」
おそらく既に古参勢から同様のツッコミが入っていることかと思いますが、suggest ってやつは、drnic の what? (a.k.a. what_methods) の初出が2006年なのでめちゃめちゃ古典的なやつですね。パクりだとまでは言わないけど、一周回って新しいみたいな感じでしょうか。 https://t.co/aqIlzcZF1y
— Akira Matsuda (@a_matsuda) February 19, 2019
⚓クラウド/コンテナ/インフラ/Linux/Serverless
⚓AWS Lambdaの最適なタイムアウト(Serverless Statusより)
つっつきボイス:「Lambdaは最近タイムアウトが伸びて長く実行できるようになってるんですよね」「知らなかった〜」「Lambdaの登場直後は30秒ぐらいしかなかった覚えあります🕢」
「なので最近のLambdaだと確か15分ぐらいまで伸びて...ん?記事を見ると最大実行時間/リクエストが5分↑?」「ちょ😆この記事昨年夏なんですけど」「ホントだ🥺」「まあAWSのこうした制限はかなり頻繁に更新されるんですよ: ↓やっぱり今は15分」「そうだったんですね😳」
参考: AWS Lambda の制限 - AWS Lambda
「Lambdaもこうした制限が何度も変わっています: Lambdaの場合、タイムアウトが30秒しかないとたとえばクローラのように時間がかかる処理を回せない」「あ〜」「当時そういうものを動かしたければLambda関数を分解しないといけなかったんですが、それが5分になり、そして最近になって15分になったおかげで、ある程度のバッチ的な処理でもLambdaで回せるようになってきた」「なるほど!」「まあLambdaでそういう処理を動かすのはどうかと思いますが😆: あくまでたとえとして」
「とにかく、AWSのこうした制限変更というか緩和は前提条件が変わるレベルと言ってもいいくらい♟」「たしかに」「30秒が15分になればユースケースがとても広がりますし💪」
「たしかAWSのELB(Elastic Load Balancing)↓なんかもそうですね: 最初の頃はやはり30秒かそこらだったんですが、それだとデカいファイルをダウンロードしたときにぶった切られるという⚔️」「でしょうね〜」「それが今のALBでは、おや、タイムアウトが制限事項に入ってないか↓: デフォルト60秒で自分で1 ~ 4000秒に調整できるらしい」「ちなみに以前のはClassic Load Balancer」
参考: Elastic Load Balancing(クラウドネットワークのロードバランサー - ELB) | AWS
参考: Application Load Balancer - Elastic Load Balancing
「EC2の課金が秒単位に変わったなんてのもそうで、前はできなかったユースケースも使えるようになったりする」「たとえばどんなユースケースでしょう?」「秒単位になれば、ささやかなバッチぐらいならEC2で動かしてもやっていけますね🧐: 昔EC2が時間単位だったときは、1秒動かそうが1時間動かそうが料金同じだったので」
参考: EC2 インスタンスと EBS ボリュームで 1 秒あたりによる請求が可能に | Amazon Web Services ブログ
「制約が変わると運用のプラクティスそのものが変わるので、押さえておかないといけないヤツ」「改定があったらRSSで更新情報取れたりするんでしょうか?」「制約の改定はだいたいAWS Summitとかre:Inventのタイミングで出ますね」「あ〜なるほど、イベントのたびに更新が入る感じですか」「そう!だからAWSのイベントのたびにこの辺を追いかけておくと改定をキャッチできたりしますね😋」
「ただ制約の緩和はそれ以外のタイミングでしれっと行われることもありますが😅」「AWSの制限事項ってその都度調べないと見落としそうですね」「まあはてブで追ってればだいたい見えてくるので、見逃さないようにしておけばだいたい大丈夫👍」
参考: AWS Summit Tokyo 2019 | 2019 年 6 月 12 (水) 〜14 (金) | 幕張メッセで開催
参考: AWS re:Invent 2018 | アマゾン ウェブ サービス
「ちなみに元の記事はタイムアウトの話してるけどもうタイムアウト変わってるから😆」「😆」「まあ5分と15分ならそんなに大きな違いじゃないかな: 30秒と5分は大違いだけど」「いずれにしろLambdaはこの記事でチェックしているようなところは見ておきたいですね: 考え方は通用する☺️」
⚓.devドメイン
つっつきボイス:「そうそう、devドメイン売り始まった🍌」「github.devとか取ってるのか」「大手の会社はとりあえす取っとかないと😆」「後でそいつから高値で売りつけられる😆」「早いもの勝ち」
「bpsで.dev取れるかな?」「bpsincなら普通取れそうだけど、3文字ドメイン取れるなら」「今取っちまおうか😆」(しばしチェック)
「やったavailable」「ほあっ初期費用40万!💰」「さすがにポケットマネーの範疇越えるわ😇」「bpsincみたいに長いと安くなったりしないかな?」「課金は安くなったけど初期費用変わらない...😇」「短いドメイン名は価値高い🗼」
「まあ初期費用が高いのにはドメインハイエナ防止の意味合いもあるんでしょうね」「ハイエナでなくても面白半分でドメイン買われるかもしれないし」
「お、twitter.devがavailableですって」「取れば?😆」「いやいやそんな😆」「まあ今どきは明らかに本人でないドメインをたとえ取れたとしてもレジストラ側で拒否されるだろうし」「悪質なのはアカンと😈」「google.devは...使用不可」「でしょうね〜」
「40万は無理だからbabaさんにbpsのdevドメインおねだりしちゃおうかな🤣」「40万あったら一番いいMacbookをフル装備で買えちゃうし」「でもたとえドメイン買っても悪質とみなされたら取り上げられちゃうんですよね🤣」「何かのはずみでそれ食らったらキツイ😇」「まあ返金ぐらいしてくれるんでしょうけど」「ドメイン購入先の規約次第だけど返金は基本ダメなんじゃないかな〜」
その後ドメイン買うかどうしようか話がSlackで進行しました。
「もし取れたらAWSのRoute 53で管理したい」「そうすっといろいろと便利そう😋」「今使ってるドメイン管理会社の画面がイケてないし反映遅いし😅」
Amazon Route 53(クラウド DNS - ドメインネームサーバー) | AWS
⚓バークレイのサーバーレスコンピューティング総括論文(Serverless Statusより)
つっつきボイス:「Serverless Statusでトップ記事だったのがこの論文でした」
- サーバーレスコンピューティングとは
- 黎明期
- 今日のサーバーレスプラットフォームの制約
- サーバーレスコンピューティングは今後どうあるべきか
- サーバーレスの落とし穴
- まとめと今後の予測
「ざっとアブストだけ読んでみるとサーベイ論文らしい: サーバーレスの歴史と現状をアットアグランスでひととおり見渡せる感じ」「この間のEnvoy(ウォッチ20190212)もあるかな〜そこまで新しくはないかな?: お、論文は今年2月だからめちゃ新しい」
「こういうカテゴライズいいわ〜↓」「サーバーレスコンピューティングでは通常のプログラミングと違うさまざまなリソース制約とかがあるみたいな話」「そのあたりを知るのにいい論文👍」「これはやる気ある人が集まって輪読とかやってもいいんじゃね?」「章単位ならそんなに大変じゃないかも」「じゃ社内の英語強い勢を巻き込みますか😆」「技術論文だけに専門用語の嵐だから英語力よりコンピュータサイエンスの基礎用語を押さえてる人が欲しい感じ😆」
⚓Docker創業者のお別れブログ記事
- 元記事: Au revoir - Docker Blog -- Docker創業者が去った
つっつきボイス:「最後はDockerの創業者がおさらばしたというブログ記事です」「割と言葉のキツイ人だったような気が😆: DockerがrunCになったときにも放言してTwitterとかからツッコまれまくったような覚えが」「runC?」「まあDockerのコアがオープンソースになってみたいなヤツ」
「今ってDockerのお株が他にどんどん奪われてる感じじゃないですか」「今のDockerはどちらかというと設計全体をDocker化するという位置付けですが、元々は単にコンテナを動かすランタイムだったんですよね: そこをrunCに取られたらもう何も残らないという😆」「Docker社自体もマネタイズの機会を逃しつつあったりするし創業者としてはツラいでしょうね」「といってrunCの流れに逆らっていたらDockerはこんなに流行らなかっただろうし」「オープンソース界隈とうまくやりとりできる人じゃなかったのかななんて😆」「Redisのマネタイズの件もざわついてましたね」「この辺はいろいろ難しいな〜」
「今Docker Hubを有料で使ってる人ってほぼいないっしょ?」「Docker SwarmもKubernetesにお株奪われてる感あるし、どこで儲けを出したらいいんだみたいな」
- サイト: Docker Hub
- リポジトリ: docker/swarm
「Docker EEはDocker社がメンテしてると思ったけど、通常のDockerとの違いよくわからない😆」「改めて見てみると↓、認定されたインフラ/プラグイン/ISVコンテナが使えるとかか」「他のソフトウェアでもできるものが多い感😆」
「ちなみに上の記事はFacebookで見かけたんですが、そこで話題になってたのが『このヨットの絵、おかしいだろ』↓の方でした」「すごくどうでもいい話😆」「私ヨットのこと全然知らなくてどこが変なのかわかりませんでした😅」「これじゃ前に進まないだろみたいな😆」
⚓その他クラウド
- 元記事: Introducing draft pull requests - The GitHub Blog
- 元記事: What’s new for WSL in Windows 10 version 1903? – Windows Command Line Tools For Developers
IoTデバイス「実は黙ってマイク内蔵してました!それこっちからOTAで有効にしたんでGoogleアシスタントとしても使えるようになったよ!」
EFFブチ切れ(当然である) https://t.co/41leR0Y3kM— 7594591200220899443 (@shyouhei) February 20, 2019
つっつきボイス:「卜部さんのツイートが目に止まったので」「黙ってマイク内蔵でしかもOTAで有効、そりゃエグすぎる😇」「OTAって?」「On The AirOver The Airなので要はネット越しに音取り放題🧐」「ひょえ〜😭」「それを隠し機能とかもう何というか」
うんと昔のSciFiにあったような「ハッカー」がリモートであちこちに侵入してリアルタイムで目的の映像や音声をモニタするやつ、今や十分リアルですね。
— Shiro Kawai (@anohana) February 20, 2019
⚓SQL
⚓PostgreSQLのfsyncバグ
- 元記事: PostgreSQLは20年間どのようにfsyncを間違って使っていたか - 聴講メモ -
- 修正リリースノート: PostgreSQL: PostgreSQL 11.2, 10.7, 9.6.12, 9.5.16, and 9.4.21 Released!
- 動画: FOSDEM 2019 - PostgreSQL vs. fsync
つっつきボイス:「あーこれ見た見た!」「ファイルシステムごとの挙動の違いを見落としてたとかそんな話」「FreeBSDとzfsなら大丈夫っぽい」「まあfsyncが失敗するようなユースケースはオンプレミスではほぼありませんけどね: その代りNFSみたいなネット越しだと普通に失敗しますが😇」
参考: Network File System - Wikipedia
⚓Rails開発者にとってSQLを学ぶのが重要な理由7つ
つっつきボイス:「Everyday Railsの記事です」「SQLが重要なのはもうあったりまえの話☺️」「そういえばこの間のSQLQL話(ウォッチ20190212)の『Railsエンジニアはもっとデータベースを大事にすべき』で、はてブで誰かが『ごめんなさい』とコメントしてました」
「実際、Railsがどれだけ進化しようとデータがRDBに入っている限りRailsとRDBの間の通信はSQLになるんだから当然大事😤」「Railsがいくら速くてもSQLが遅かったら遅くなるし😆」「開発が極まってくればいずれ生SQLを書くことになるんだし😆」「そうそう、SQLを書ける能力はいざというときにとっても必要」
⚓その他SQL
- 元記事: Why a Database is like a Dance Class - DEV Community 👩💻👨💻 -- バレエがわからない😢(DB Weeklyより)
つっつきボイス:「これは久しぶりに私には翻訳不可能と思った記事でした: データベースを無理やりバレエの用語になぞらえてみたそうですが、バレエの用語や素養が私にまったくないので面白みを理解できないという😅」「これは英語が読めてもわけわかんない🤣」「SQLの構文をバレエに絡めてるっぽい: これの次はこれみたいに順序が決まってるとか」「これはもうネタ記事☺️」
だいぶ以前ですが、教育テレビでたまたま見かけたジュリアーノ・ペパリーニという男性バレリーナ(男性だからバレリーノ?)に思わず見入ってしまったのを思い出しました。バレエもダンスもわかりませんが、彼がくるくる回りながら登場しただけで、まるで星屑を振りまいてるような錯覚すら感じました。今は舞台演出家として大成功しているらしいのですが、彼自身のバレエ動画がネットにさっぱり見当たりません😢。
GIULIANO PEPARINI - SHOWREEL from giuliano peparini on Vimeo.
参考: Giuliano Peparini - Wikipedia -- イタリア語🇮🇹ですが
⚓JavaScript
⚓Trusted Web Activities(TWA)とKotlin/NativeとFlutter
今日行われたBPS社内勉強会での「DroidKaigi 2019」報告会でFlutterやKotlinなどとともにTWAの話題もあったので。
参考: DroidKaigi 2019
参考: PWA+TWAでウェブサイトを完全アプリ化、PWAサイトのGoogle Play登録も可能に | 海外SEO情報ブログ
つっつきボイス:「今日の勉強会所要で出席できなかったけどTWAの話題とか聞きたかったんですよね😅」「勉強会ではkazzさんがとても的確な質問をしてくれてましたよ: morimorihogeさんもTWAが気になってたって: DroidKaigiに行った人はぶっちゃけTWAはあんまりマークしてなかったそうですが😆」「だ、誰か書き起こしを😆」「今回YAMAHAのいいスピーカーフォンを録画に使ったので音声クリアだと思います😋」
「うぅ、この色合い↓、Windowsノートだと目がおかしくなりそう😵」「Macだともうちょっとオレンジっぽいような?」(覗き込んで)「あ〜これはかなり目に滲みる」「一応Adobe RGBに設定してるんだけど😅」「どことなくメルカリっぽい色合い?」「あ、スポンサーにいるし」
「AndroidでJavaとか特にKotlin書いてる人たちにとっては、そこにWebエンジニアが入ってきて作業を分担できるのは結構エポックメイキングというか」「TWAやるのは主にJavaScripを書く人たちということになりますね」
「Kotlin勢としては、どちらかというとKotlin/Nativeの話題の方が気になってたようです」
参考: Kotlin/Native を Android/iOS アプリ開発に導入しよう - Qiita
「で社内のiOS勢が気にしてるのはマルチプラットフォームなGUIで、中でもFlutter」「勉強会の質疑応答では、TWAとKotlin/NativeとFlutterがさながら三すくみ的な様相を呈してました🤣」「そうそうそんな感じ🤣」「Kotlin勢はDartで書きたくない、とか🤣」「Dartは自分もちょっとね〜🤣」
参考: Dart - Wikipedia
参考: Dart 2 | Dart -- 昨年2が出てたんですね
「Kotlin/Nativeってだいぶ前からやってたはずだけど、今どのぐらい進んでるんだろう?」「勉強会の報告ではいろいろ策定中という話だったので、まだproductionで使うほどではないのかなとも思ったり」「ライブラリもまだ足りないらしいですね」
「まあWeb開発チームとしては、ガワネイティブで食えるようになったらそれはそれでデカいんじゃね?と思ったりして😆」「かもですね😆: 見た感じですが、TWAに乗るよりFlutterの方がよさそうなのかなとちょっと思ったり」「FlutterはReactとほぼ同じ感じで書けるからって強調してましたね」「Flutter勢からの勧誘😆」「でもFlutterはDartですよね😆」「Dart自体がJavaScriptの置き換えを目指してる言語だし、まあどうにかなるかななんて😆」
「この場合ガワネイティブってどう理解したらいいでしょうか?」「要するにWebViewが入ってるだけのアプリ」「ガワだけネイティブ🍩」「WebViewが立ち上がると後はWebViewの中でWebアプリケーションを動かすイメージ」「ちょっとElectron的な」「AndroidアプリなりiOSアプリの形になってないとアプリストアで配信できませんしね」
「まあガワネイティブがReact Nativeと同じなの違うの?って聞かれたら違うんだけど😆: React NativeはJavaScriptでReact書いたらそれがネイティブアプリになるというヤツだし」「でもガワネイティブの方が歴史は古いという🕋」「ですよね😆」「今日の勉強会で途中からネイティブの意味がだんだんよくわからなくなってきました😆」「アプリケーションそのものはWebなんだけど、というか」「ガワネイティブでも、たとえばカメラ機能の部分だけ自分でちょこっと書いたりとかはするけど、他の部分はすべてWebViewにお任せしちゃう」
「TWAだけど、ちょろいAndroidアプリみたいなのをささっと書けたらアプリの単価も取れたりして😆」「いいかも😆」「ほら、Webをアプリの形にできるとたとえばHomeボタンを無効にするとかできるし」「Backボタンとかもですね」「iOSアプリにもそういうモードがあって、それで業務用アプリとして使えるようにしたり」「その意味で、形だけでもネイティブアプリにできるのは大きいっすね😋」「それもあってガワネイティブには結構期待してる😘」
「TWAとPWAって同じじゃないけど割と一緒に出てくることが増えてるっぽいですね」「PWAはAndroidとかに限らない話ですが、TWAはGoogleがやってるストアで扱うための仕組みの方ですね🧐」
「PWAとかに投資するよりは...という気がちょっとしましたけど」「まあPWAに投資したいというより、RailsでもVue.jsでもいいのでちょろいアプリをささっとPWA化できたらいいよね、ぐらいの感じで」「ぶっちゃけそれ用のヘッダーをつければ基本的にPWAにできるし: それだけだとUIというかUXまでは最適化されないにしても」「あ〜なるほど、オフラインでは使えないにしても、アプリらしい体裁でホーム画面にボタン置くぐらいのことはヘッダというかマニフェストつけるだけでできると」「そうそう、それだけでやれるならうちらもアプリ作れますって言えるし😋」「そこまでラクにできるなら夢ありますね〜✨」「どってことないといえばそうなんだけど、PWAでWebアプリの単価上げるのやってみたい😍」「1.5倍ぐらいになったりして」
「ところで今回のDroidKaigi会場はBPSから近いのか」「発表者は2軒目のもうやんの隣とか言ってましたけど」「それって😆」「方向感覚がすべて食べ物屋ベース😆」
⚓その他JavaScript
つっつきボイス:「mizchiさんのインタビューです」「mizchiさんがインタビューされてるのかと思ったらインタビューする側なのか」「フリーランスになったからこういう仕事もやってるのかな」
⚓CSS/HTML/フロントエンド/テスト
⚓WebAuthnとFIDO
- 元記事: WebAuthnでパスワードレスなサイトを作る。安全なオンライン認証を導入するFIDOの基本 - エンジニアHub|若手Webエンジニアのキャリアを考える!
- サイト: FIDO Alliance - Open Authentication Standards More Secure than Passwords
つっつきボイス:「はてブからです」「生体認証をWebブラウザでやるみたいな感じだった」「そういえばこういうのあったあった: 認証機器の種類を問わずこのフレームワークでやれるとかそういうの」
参考: 生体認証 - Wikipedia
「いつも思うけど、認証は難しいというか、どこまでやるべきか感が半端ない」「たしかに〜」「もちろん、これが漏れたら会社潰れるみたいなのはちゃんと守らないといけないけど、それ以前にリスクの分散も必要になってくるし」
「ところで何でWebAuthnのnが最後に?」「ググって見つかりやすいようにとか?」「mattnさんみたい😆」
追記(2019/02/27)
> 「ところで何でWebAuthnのnが最後に?」
AutheNtication と AuthoriZation を区別するために AuthN, AuthZ と表記することがあるんだけどそのことを言ってるのかな?— pinzolo (@pinzolo) February 25, 2019
情報ありがとうございます🙇。
⚓最新HTML/CSSコードスニペット
つっつきボイス:「管理画面ぐらいならこういうのでも別にいいかなと☺️」「社内だとデザインチーム向けの記事ですかね」「ランディングページ(LP)ぐらいだったらこういうのをふんだんに使ってもいいんじゃないかと😆」
「これとかもうスゴいな〜↓」「CSSアニメーションでやるとかスゴすぎ😳」「もう発想一発の世界😆」「これCSSだから文字を選択できるし、文字を移動しているのか書き換えているのかも一発でわかるし」
See the Pen
Flipping Out by Jon Kantner (@jkantner)
on CodePen.
「思いつきですけど、近い将来にテキストはこんなふうに動的にするのが普通になったりするかなと: 重要な部分がプルプル震えて視認性をアップするとか」「まーなくもないかも?」「今の絵文字は色まで含んでるし、文字とはグリフとは何ぞやみたいなのもぶっ飛ばしつつあるというか☺️」
⚓その他フロントエンド
- 元記事: 通信系のデバッグには Charles が便利 - Qiita -- モバイルアプリ向け?
-
サイト: Charles Web Debugging Proxy • HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Reverse Proxy
つっつきボイス:「これも今日のDroidKaigi報告会で触れられてました」「BPSのアプリチームの人が言うには、Charlesは有料だけどできがいいので使ってるそうです」「ほうほう、普通にプロキシでデバッグできるサービス: この種のツールは昔からいろいろありますが、使いやすいのが一番😋」
「ちなみにこの種のツールはカスタム証明書が入れられるかどうかがポイント: それができないと話にならない」「あー」「でないとHTTPS通信をキャプチャしても暗号化を戻せないから読めない😆」
「モバイルアプリはWebみたいにブラウザのデバッガーが見えないからこういうのが必要なのかなと思ったのですが」「Webでも必要なときはありますね: ここまでしなければならないほどの状況はめったにありませんが」「おー」「HTTPレベルの通信であればブラウザのdevツールで見えます: たとえば(API触ったことはないけど)WebSocketなんかで、TCPで言うurgentフラグみたいなのを使って今バッファにあるものを吐き出させるなんてときに、それが正しく動作しているかどうかを確認するにはHTTPレベルのキャプチャでは無理で、パケットレベルでのキャプチャが必要になるでしょうね」「なるほど」
⚓言語
⚓最近のPython環境構築
つっつきボイス:「Rubyでrbenvやらbundlerやらでやってるのと同じようなことをPythonでもやってるんだなと思って」「まあpyenvとかanyenvあたりでやれそう」
「記事ではこのツールがいいとかAnacondaは古いとか書いてあってコメントでツッコミがあったりしてますね」「Anacondaというと自分はRed Hatのインストーラの方を思い出すし↓」「自分もそれ聞いたことあったし」「リンク先はGUIだけど、CUIのcurses的なAnacondaもあった気がする」「PythonのAnacondaは機械学習で入れがちなライブラリだったと思うんですが、jupyter notebookあたりと一緒にインストールしたときに入ってきた覚えがあります」
参考: 第13章 Anaconda を使用したインストール - Red Hat Customer Portal
参考: curses - Wikipedia
「ところで採用面接なんかでも最近Pythonかじってる人がだんだん増えてきた感」「自分も最近触るはめになってます😅」「流行りの言語でもあるし」「業務でどこまで使うかだけど🤔」
「Pythonでビジネスロジック書いてるって話はなぜかあまり聞かない」「そういえば」「機械学習とかAIは基本Pythonだろうけど、WebアプリとかになるとDjangoとかやってる話とか見聞きしてもそっちはあまり聞かないし」
「以前雑談してたときに聞いた話なんですが、以前Pythonを死ぬほど書いてた人が今はRubyがいいと言ってて、その理由がPythonは彼にとっては走らせてみないと挙動がわからないからということでした: Rubyは見ればだいたい挙動がわかるし、うんと小さいコードなら書いていきなりpushとかすることもたまにやったりするとも言ってました」「一般にはPythonの方がコードのブレが少ないって聞きますけど、意外ですね」「そうそう、Pythonの方が誰が書いても同じようなコードになるとか聞くし」
「自分の印象だと、Pythonはあんまりクラスのこととかうるさく言わない感じがしました」「オブジェクト指向という意味ではRubyの方が読みやすいとかそういうところがあるのかしら?」「自分のPythonの使い方がシェルスクリプトに毛の生えたようなものなので😅」
「何となくだけど、PythonはAtCoderみたいなプロコン的なところには向いてる気がちょっとした: 解くべき問題がはっきりしてて、かつ制限時間内に解くみたいな状況」「あー、一人でできる規模で、設計とかあまり関係ないところとか」
参考: AtCoder
「まあ今どきは大きいものについてはオブジェクト指向設計でやるのが当たり前ですが、オブジェクト指向設計の何がいいかというと、忘れられるところ🤣」「🤣」「自分が使ってるものの内部を特に気にせず使えるのがいいところ😋」
⚓その他言語
ので、これからプログラミング言語を作ってばーんってしたい人へのアドバイスは、「自分の感性を信じてやってみろ」くらいしかない。タイミングが良くて、デザインが良くて、良い出会いがあれば、成功するかもしれないし、そうでなくても良い経験になる。
— Yukihiro Matsumoto (@yukihiro_matz) February 19, 2019
https://twitter.com/zetamatta/status/1098230924024532993
つっつきボイス:「Matzから若い人へのアドバイス的な」「自分のやってきたことは再現性がないのであまり参考にならないけどみたいな」「上のツイートの前には以下がありました↓」「4番目は笑い取ろうとしてますね😆」「きっとそう😆」
Rubyに人気が出た理由として私に思いつくのは:
* オブジェクト指向スクリプト言語が「発見」されたタイミング
* Webの台頭で新言語が求められたタイミング
* 達人プログラマーに見つけてもらった縁
* 優れた言語デザインを可能にしたオレの感性
くらいで、どれも制御困難で、後進の役には立たない。— Yukihiro Matsumoto (@yukihiro_matz) February 19, 2019
「Rubyについては、たしかにタイミングの要素はとっても大きかったと思うし: みんながPHPで辟易してて、かつフレームワーク戦争の終息が見えなかった、まさにちょうどそのときにRailsが出現したので」「あの当時3つぐらいフレームワークが乱立してましたよね」「自分も3つぐらいしょうがなく使ってたし: 何でDAOをいくつも使わなきゃいけないんだとか😅」
「それがRails出現後はいっせいにRailsっぽいフレームワークに落ち着きましたし😆」「そうそう!何だよ結局Laravelかよって😆」「Railsが出現したことで仲の悪いPHPフレームワーク同士の結束が急に強まったというか😆」「今のPHPフレームワークならちょっと触ってみてもいいかな〜なんて😆」
「今のPHPは型ヒント付けられるし、PHPをstrictモードで使うなら割と頑張れる気がする」「お〜」「Rubyと違って引数の型を書ける」
参考: PHP: 関数の引数 - Manual -- 型宣言(タイプヒンティング)
参考: PHP: 新機能 - Manual -- strictモード
「D言語ちょっぴりやったことある😆」「言語の登場の早い遅いとかちょっとしたタイミングで運命が変わるってたしかにあるな〜: WebObjectsも早すぎる登場だった感あるし」「JavaScriptも一度滅びかけたのが完全に甦ったし、あのObjective-Cなんてのも当時滅びるしかないと思ってたらNeXTで全面採用されて今やiOSまでObjective-Cだったりするし😆」「ほんと先のことはわからん😆」「ジョブズがあのときその選択を取らなかったら今絶対残ってなかったろうし、その意味では彼がObjective-Cを復興させたといっても過言ではないし」
参考: WebObjects - Wikipedia
参考: Objective-C - Wikipedia
「そういえばObjective-Cの本って、すごく古い本とすごく新しい本のどっちかしかない🤣」「間がごっそり抜けてる🤣」「NeXTの時代とiOSの時代」「Objective-Cで最大にキモいのはCと完全コンパチなところ」「そうだった!」「Objective-CはC言語のプリプロセッサだから、実際にはCのコードを出力するし」「知らんかった〜」「Objective-Cの構文キモチワルイ🤢」「(指で角かっこ[ ]
作って)これですよね?」「それそれ😆」「名前付き引数あるのに順序が決まってるとか」「なに〜😆」「それ名前付き引数なんでしょうか😆」「Cとの互換性を保つためなのでしょうがない🧐」
// Wikipediaより
val = [obj1 msg: [obj2 msg]];
⚓その他
⚓ATMも顔認識で
『次期ATMは画像認識AIと複数の高精細カメラを搭載し、身分証明書を用いた本人確認手続きを自動化する。この機能を使ってコンビニエンスストアの店頭で口座開設手続きが完結』 / “セブン銀が画像AIで本人確認、次期ATMの目玉 | 日経 xTECH(クロステック)” https://t.co/S8yRsVu2ik
— 徳丸 浩 (@ockeghem) February 20, 2019
つっつきボイス:「そういえばセブン銀行も最近ATMの利用率が下がってるせいで手数料収入減ってツラいらしいし😆」「たしかに現金利用する機会減ってますし」
⚓MacでEXE
つっつきボイス:「MacだとたまにEXEがzipに入ってても安心しきっちゃってたし」「してた〜」「いや安心はしないけどっ😆」
⚓その他のその他
参考: 誰でも簡単に「縫合が必要なレベルの切り傷」に応急処置を施せる「ZipStitch」 - GIGAZINE
つっつきボイス:「この傷本物なんでしょうね(イタソー)」「プロレスラーが接着剤で応急処置してから病院に行くみたいなのよりはまともそう?」「これってインシュロック(結束バンド)みたいだし」「インシュロックだ!」「アウトドアで欲しいヤツでしょうね」
参考: よくあるインシュロックの誤使用例 |ヘラマンタイトン株式会社
参考: 実在しない人の顔写真を無限に生成できるWebサイトが公開。ディープラーニング技術を応用 - Engadget 日本版
つっつきボイス:「実在しないっていうのは統計的にそうだろうと言ってるだけなんでしょうね」「混ぜてるから実在しないとかそういう感じかと」「実在しないことを直接バリデーションできたらスゴいし😆」「悪魔の証明😈」
⚓番外
⚓ウミヘビ
ウミヘビは、雨が降ったときに一時的に出来る淡水層の水を飲んでいるらしい、という話。
海水飲めないウミヘビ、水分補給の謎の一端を解明 | ナショジオ https://t.co/QcK0bmarhw
— 樺沢 宇紀 (@adx50150) February 20, 2019
⚓宇宙2題
つっつきボイス:「1つめは大学のときの知り合いが趣味で作ってるはやぶさの軌道を追いかけるサイトなんですが、何年も前にNASAから(別のアプリですが)『これ使わせてくれ』って言われたという何だかスゴい人です」「ほぇ〜」
「2つ目はページのナビゲーションが見事だったので: とにかくページを下にスクロールしてみてください」「ほっほ〜☺️」
今回は以上です。
バックナンバー(2019年度第1四半期)
週刊Railsウォッチ(20190212)EnvoyとIstioに大注目、SQLQLとは、buildkite.comのCI、さよならItanium、PWA vs Androidほか
- 20190204 あってうれしい40のgem、Ruby 2.6.1セキュリティリリース、Hanami v2.0.0.alpha1リリースほか
- 20190128 Rails 6のオートローダーがZeitwerkに置き換わる?Rails 6はRuby 2.5が必須、最近のSQLiteほか
- 20190121 Rails 6.0.0 beta1リリース、Railsは2019年も「あり」か、Jetsでサーバーレス、ES2018の新機能、RSpecの心ほか
- 20190115 Rubyの<=でクラス同士を比較、Rubyの記号の読み方いろいろ、Ruby C API解説サイトほか
- 20190107 Railsのパフォーマンス改善Tips集、Rubyの
&:シンボル
ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやRSSなど)です。