こんにちは、hachi8833です。うらやましさに身を焦がしてます。
やってしまった(経済を回します)。 pic.twitter.com/0lj9zGNGL4
— hikalium (@hikalium) November 13, 2019
つっつきボイス:「この間出たMacbook Proの16インチね」「買った人or買いたい人...はさすがにいないか
」「税金抜きでこの値段はやっぱ高すぎ
」「メモリ64GBはたしかに欲しいけど」「つかそこだけ欲しい
」「Escキーがやっと物理に戻ったし」「名前がProなのにプロ仕様じゃなかったとは
」
- 元記事: 16インチMacBook ProにESCキーが復活したのは「プロ顧客の苦情が多かったから」フィル・シラー語る - Engadget 日本版
- 元記事: 「PCよりMacの方が社員の生産性や満足度が高い」とIBMが過去4年間のApple製品導入プログラムの成果を発表 - GIGAZINE
「お集まりのMacな皆さんにはEsc付いてます?」「私のは付いてます」「いいな〜
」「Touch Barタイプは物理Escキーありませんし」「ここ1年ぐらいはMacからWindowsに移行してるんですけど↓、たまにMacに戻ると物理Escキーないのは不便ですね〜
」
- 各記事冒頭には
でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
- 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です
- 毎月第一木曜日に「公開つっつき会」を開催しています: お気軽にご応募ください
後編も引き続き第16回公開つっつき会を元にお送りいたします。ご参加いただいた皆さまありがとうございました!。
Ruby
メソッド参照演算子.:
が廃止に
ruby-jp Slackで見かけました。以下の記事でも報じたメソッド参照演算子.:
が廃止となりました。
その少し前には.:
は重いという記事も出ていました↓。
その後、廃止に関連するissueを見つけました。
つっつきボイス:「2.7preview1から実験的に入っていたメソッド参照演算子.:
が先週廃止になってました」「Rubyゴルフに使えそうなシンタックス消えた
」「#16275長いな〜」「コロン
:
の意味をこれ以上増やしたくないという意見が見えますね」「Matzの締めくくりコメントを読めばだいたいわかりそう」「.:
は将来別の機能を足すときに使うかも」「ありそう」「今日出席できなかったkazzさんもちょっぴり残念そうにしてました
」
近年は関数型プログラミングにインスパイアされた機能の追加や議論が続いていたが、それらは大局的な設計に基づいていたのではなくアドホックな追加だった。今のところRubyには関数型プログラミングに関する「大きな絵」がないが、今後はより関数型的なRubyの「大きな絵」に基づいて設計すべきと思う。あと点字みたいな
.:
演算子は自分の好みでない。
#16275コメント#26より大意
「nobuさんがコメント#1で『.:
は関数型のためだけではなくて、元々はobj.method
がオーバーライドされててもメソッドを正確に抽出するためのものだった』って書いてますね」「え
」「
obj.method
をオーバーライドするケースってあんまり思いつかないけど」「同じく
」「まあRubyだとそういうことがまったくないとは言えませんし
」
そろそろrakeやめる?(RubyFlowより)
時間がなくてつっつきで追えなかったので、rakeの代替として記事にリストアップされていた以下の2つのgemだけピックアップします。
- リポジトリ: erikhuda/thor: Thor is a toolkit for building powerful command-line interfaces.
- サイト: Thor - Home
# http://whatisthor.com/より
class MyCLI < Thor
desc "hello NAME", "say hello to NAME"
def hello(name, from=nil)
puts "from: #{from}" if from
puts "Hello #{name}"
end
end
# dazuma/toysより
tool "greet" do
desc "My first tool!"
flag :whom, default: "world"
def run
puts "Hello, #{whom}!"
end
end
その他にコメント欄でrunfileというgemも挙がっていました。
- リポジトリ: DannyBen/runfile: Build command line applications per project with ease
- ドキュメント: Home - Runfile Documentation
GitHubのOAuthをバイパスしてみた
ruby-jp Slackで見かけました。
つっつきボイス:「そんなことできちゃったんですね」「この記事書いた人270万円ばかし賞金ゲットしてるな
」「おぉ?」「セキュリティのコンペ?
」「というよりこの人は仕事ではないところでアプリケーションの脆弱性を見つけるという高尚な趣味をお持ちらしくて
、GitHub Enterpriseのトライアル版をダウンロードしてHEADリクエスト周りをゴニョゴニョしたらOAuth突破できたのでGitHubに報告したら25000ドルをゲットした、という感じっすね
」「すげぇ〜
」「よく見つけたな〜」「日本だとあんまりありませんけど、自社のアプリの脆弱性を報告してくれたら内容に応じて賞金を出しますみたいな企画は最近見かけますね
」
prism: mrubyとWebAssemblyでフロントエンドWebアプリ(Ruby Weeklyより)
試しにgem install prism-cli
してprism init
すると以下のapp.rbが生成され、prism server
でブラウザのlocalhost:3042/app.rbにアクセスすると動きました。
class HelloWorld < Prism::Component
attr_accessor :name
def initialize(name = "World")
@name = name
end
def render
div(".hello-world", [
input(onInput: call(:name=).with_target_data(:value)),
div("Hello, #{name}")
])
end
end
Prism.mount(HelloWorld.new)
<!DOCTYPE html>
<html lang=en-us>
<head>
<meta charset=utf-8>
<meta content="text/html; charset=utf-8" http-equiv=Content-Type>
</head>
<body>
<div id="root"></div>
</body>
<script type="text/javascript" src="/prism-assets/prism.js"></script>
<script type="text/javascript" async src="/prism-assets/bundle.js"></script>
<script type="text/javascript">
Prism.run("#root", "/app.rb");
</script>
</html>
つっつきボイス:「とりあえず手元で試したらするっと動いてくれました」「皆さんWebAssemblyでいろいろ遊んではる
」
その他Ruby
- イベント: 平成Ruby会議01@株式会社ドリコム - connpass -- あふれました
LPにスポンサー枠、追加で掲載させて頂きました!
- 株式会社タイミー様
- 楽天株式会社様
- スマートキャンプ株式会社様
- 株式会社オプト様
- メドピア株式会社様
- 株式会社SmartHR様
- 株式会社マチマチ様ご協賛ほんとにありがとうございます
https://t.co/btJkYkjUyo
— tashiro (@tashiro_rb) November 14, 2019
つっつきボイス:「平成Ruby会議よさそうですよね」「まだ参加できます?」「つっつきの時点であと7人なので今のうちですよ」「2スロットありますね」「ドリコムさんの会場だから例によってあの2つの部屋でやるんでしょうね
」「『TextbringerでつくるTextbringer』って
」「Rubyの話もRailsの話もありますね
」「割とRuby寄りかなとは思いますけど
」「12/14は忘年会シーズンですけど
」「こういう濃いイベントに参加すると脳みそがめっちゃ疲れますけど
」「期待できそう!」
講演者の情報を
追加しました。同日の午前中には認定試験合格者限定でまつもとさんに直接質問できるイベント(https://t.co/r30O8E9FP4)もありますので、合わせてご参加ください https://t.co/gGekZQOEiI— Ruby Association (@rubyassociation) November 12, 2019
こちらはつっつき後のツイートです↓。
先日、松江で開催したRubyプログラミングキャンプの参加レポートを書いてもらいました。松江、めっちゃええとこやった〜
ってのが、このレポートを読むとよくわかるはず!
しまもん | おく | Rubyプログラミングキャンプ 2019 in 松江 に参加しました。#nshgrb https://t.co/YfYa8tuxmG
— Junichi Ito (伊藤淳一) (@jnchito) November 18, 2019
DB
PostgreSQL 12のクエリパフォーマンス第一印象;(DB Weeklyより)
つっつきボイス:「PostgreSQLも12か〜」「そういえばPostgreSQLは年1でメジャーバージョンアップされるポリシーに変わってましたね」「タイトル通りファーストインプレッション
」「軽くベンチ回してますけど↓だいたい誤差の範囲かと
」
シェアと用途
「質問なんですけど、日本国内でPostgreSQLを使ってる大手のサービスってありますか?」「大手になると1種類のデータベースだけということはあまりないですね: ぶっちゃけて言えばWebアプリではMySQLもPostgreSQLも使われてます」「なるほど」
「自分はWebアプリを長くやってきたのでその範囲で言うと、(クリティカルでない)エンドユーザー向けのWebアプリではMySQLを使っていることがやっぱり多いと思います」「お〜」「主な理由は、単純なクエリであればMySQLの方が速いことが多いから: 今でもぽすぐれより速い」「おぉ〜」
参考: PostgreSQLとMySQL、使うならどっち? データベース専門家が8つの視点で徹底比較! - エンジニアHub|若手Webエンジニアのキャリアを考える!
「対照的にPostgreSQLは複雑なクエリをちゃんと書けるという特徴があります: なのでシンプルなWebアプリだとMySQLで十分なことが多いんですけど、複雑なビジネスロジックをクエリにする場合はたとえばMySQLだと通らなくてPostgreSQLだと通るということがあります」「ふぅむ
」
「MySQLとPostgreSQLは使い始めてみるといろいろ違いが出てくるんですよ: どちらかというとPostgreSQLの方が標準SQLと呼ばれる規格に近くて、MySQLは標準から外れているところがちょくちょくあるという」「訛り強そう
」「MySQLで通るクエリがPostgreSQLだと通らないというのはよくあります、しかもめちゃくちゃよくあります
」「ひぇ〜
」
移行について
「困るのは、たとえば最初はMySQLにマッチする要件だったのに、アプリが育ってきてPostgreSQLの機能を使いたくなったときとかですね: 自分の経験上、MySQLからPostgreSQLへの移行は死ぬほどつらかったことしかなかった」「うぅ
」「後から別のものにお引越しするのは本当に本当に大変
」
「逆はどうでしょう?」「PostgreSQLからMySQLへの移行が発生することはめったにありませんね: 単純なクエリを速くしたい以外のモチベーションがありませんし、今ならmemcachedやRedisで高速化する方法などもありますし」「なるほど!」「そういうわけで、RDBMSの選択で悩むぐらいならぽすぐれにしとけば?って自分なら思いますし
」「
」「もちろん異論は認めます
」
RDBMSの違い
「質問ですけど、MySQLとPostgreSQLの書き方はそんなに大きくは変わらないと思ってもいいんでしょうか?」「単純なクエリであればざっくり8割ぐらいは同じに書けますけど、一方でしか通らないクエリも書けます: そもそも引用符の使い方からして違いがありますし↓」「そうでしたか
」
Web+DB Pressの特集を自分でまとめたメモから引用します↓。
「まあOracleでもMicrosoft SQL Serverでもみんなそれぞれ方言ありますし、どれが正しいという話でもありませんし、まずは1つに決めてみっちり学習して、それから他のものについて違いを学んでいくのがいいと思います」「なるほど!」
その他DB
GitHub上でGoのOSSを公開していたら、おもむろにwasm対応してくれる人が現れてブラウザでデモが可能になり面白い https://t.co/H0Ld6KgiLI
— k0kubun (@k0kubun) November 12, 2019
つっつきボイス:「Rubyコミッターのk0kubunさんが作ったツールをどなたかがWebAssemblyでブラウザで動くようにしてくれたそうです」「なるほど、スキーマを別のRDBMS用に更新するCREATE TABLE
構文を生成してくれるのね」「上の話題とシンクロした感
」
参考: k0kubun's blog
ALTER TABLE user ADD COLUMN created_at datetime NOT NULL AFTER name
「ちょうど今表示されてますけど、MySQLだとAFTER name
って書けるんですよ↑」「そういえば!」「MySQLなら作成済みのカラムの間に新しいカラムをこれで挿入できるんですが、ぽすぐれはできない」「PostgreSQLはカラム順変えられないんでしたっけ?」「
CREATE TABLE
レベルではできません」「テーブル作り直しか
」「とまあこういうところにもRDBMSの違いがあったりします: 両方経験すれば『こういうカラム順変更は簡単じゃないゾ』ってわかりますけど、片方しか知らないとハマったりします
」「
」
「質問ですが、RDBMSを別のものに変えて欲しいみたいな注文を受けたときに、できるできないを見分けるコツってあるんでしょうか?」「自分もさんざんこの種のワナを踏んできたことで、だんだん鼻が利くようになってきたかなと思います」「妖怪アンテナが立つというか
」「逆にこれは実は簡単とか、この機能は移行先にもきっとあるはずだと確信を持ったりするというのもだんだん見えるようになってきました
」「やはり経験なんですね
」
クラウド/コンテナ/インフラ/Linux/Serverless
最近のIaas PaaSクラウド動向
つっつきボイス:「Synergy Research Groupの調査結果だそうです」「ともするとポジショントークになりがちですけど、Alibabaがランクインしてるということは一応世界をカバーしているかな
」「ちょっと前に、Office 365の売上を足すとMicrosoftの方が売上高いみたいな報道が流れて、Amazonがクラウドで負けたのかと勘違いする人が続出したりしてましたけど
」「それ足したらあかん
」「この記事はIaaS+PaaSで比較してるから割と正しそうかな
」「この種の記事はどう売りたいのかという意図まで読んでおきたいですね
」
「Azureが割と伸びてる」「オンプレのWindows Serverからの移行が多そう」「あ、オンプレ(オンプレミス)というのは機材を自社内に物理的に置くことを指します」「クラウドと対になる概念なんですね」
「オンプレではなくAWSみたいなクラウドに置く場合、クラウド側のハードウェア置き換えの都合などで『今度何月何日何時にインスタンスをシャットダウンして再起動します』みたいに強制的に再起動させられたりしますが、AWSは契約上そうしていいことになっています」「
」「その代わりクラウドはハードウェアの老朽化とかについて利用者側は考えずに済むというメリットがあります
」
「実機を構築したことがあるとわかるんですけど、実機ハードウェアの部品って5年後にも同じものがあるかどうかわからないんですよ」「」「特にハードディスクはロットによって微妙な違いがあったりして組み合わせると具合が悪いみたいな一種の神話があったりするので、近いロットで揃えるようにしたりしますね」「逆にロットを合わせない方がいいみたいな神話もあったりしますけど
」「そうそう、どっちもあるんですよ
」「ロットが同じだと同時に壊れやすいらしいとか
」「工場が違うとダメらしいとか
」「RAID 5で1個壊れて差し替えたらリビルド中にまた1個壊れて、それを差し替えたらさらに壊れて...なんて話も聞きますし」「それはひどい
」
「でクラウドだとそういうつらい目に遭わなくて済むので広く使われるようになったという感じです」「なるほど!」「物理サーバーはほこり溜まるからキライ
」「Azureが伸びているというのも、おそらくそういうオンプレのWindows Serverをクラウド化したいという需要に乗ってるのかもしれない
」
GitHubの新機能
GitHub上のRuby、Python、Goで、関数の定義へのジャンプや参照箇所を見つけることができるようになります!本日より一般公開です。他の言語も順次対応していく予定ですのでお楽しみに! #GitHubUniverse pic.twitter.com/srn2cjlrvf
— GitHub Japan (@GitHubJapan) November 13, 2019
つっつきボイス:「ついさっき上が流れてきました」「GitHubで定義ジャンプできるようになったか
」「さしあたってRubyとGoとPython」「定義ジャンプは先々週ぐらいからできてたかな〜、GitHub Universe↓でいろいろ新しいものが発表されてましたし」「あ、GitHubのイベントですね」
「PHPの定義ジャンプはまだ難しいんだろうな」「Rubyの方が難しそうですけど
」「候補リスト出すぐらいならやれそう」「
method_missing
使ってると無理かも」「今Active Supportあたりで定義ジャンプやってみると、インスタンス変数なのにメソッド引いてきたりしてるし
」「それでもないよりうれしい
」「ソース取ってくるのめんどいときとかね
」
「スマホアプリでプルリクやマージできるとか何とか」「スマホでまでやりたくないな〜
」
「GitHub Actionsも来ましたね」「今のところ/actionsの管理方法がまだバタバタしてる感じかな〜」「その辺の運用はこれからでしょうね
」「GitHubでやれることがいろいろ増えるのはいい
」
我々の未来の世代のために、現代のオープンソースのコードを保存するGitHub Archive Programをスタートします。1000年間保存可能な設備を北極海に浮かぶスバーバル諸島の地中深くに埋めることで保存します。未来のためにあなたのコードを残しましょう。 https://t.co/yRy85QaXun #GitHubUniverse
— GitHub Japan (@GitHubJapan) November 13, 2019
「これもさっき流れてきました↑」「Rosetta Project↓みたい?」「砂漠にアーカイブデータを置くプロジェクトってのもあった覚えが
」「砂漠も極地も環境が安定してるからでしょうね」「南極の氷はそろそろ溶け始めてるんじゃ?
」「Git自身は分散管理だから本来こういうプロジェクトはなくてもいいはずで、その意味ではGitではなくてGitHubのプロジェクトなんだな〜ってちょっと思ったり
」
その他クラウド
- 元記事: Announcing improved VPC networking for AWS Lambda functions | AWS Compute Blog(Serverless Statusより)
- 元記事: The API Gateway security risk you need to pay attention to | theburningmonk.com
JavaScript
TypeScript 3.7リリース(JSer.infoより)
breaking changesもビシビシ入っているようです。
つっつきボイス:「TypeScript書いてる人います?」「ほい」「おぉやってますか」「まあTSもどこまで厳しくやるかで原理主義派とそうでない派の紛争が勃発してて面倒ですが
」「
any
許すかどうかとか」
参考: TypeScriptのanyは嘘? - Togetter
「CoffeeScriptを使っている方は?」「rails new
するときに真っ先に外すgem」「さすがに使う人減ったか」「実は数年前にCoffeeScript 2↓ってのが出てるみたいですけど
」「おや
」
参考: CoffeeScript 2という新たなる希望 - Qiita
その他JS
This is a good read. I'm working on performance optimization recently as well. I think it's crucial to get a whole picture before doing anything. Like you should have a good test coverage before refactoring.
Avoid Premature Optimization by @victorczhou https://t.co/uAXrtkf0Rq
— Stan (@_st0012) November 11, 2019
// 同記事より: 見苦しくなる例
// Compiled with faster.js
const arr = [1, 2, 3];
const results = new Array(arr.length);
const _f = (e => 2 * e);
for (let _i = 0; _i < arr.length; _i++) {
results[_i] = _f(arr[_i], _i, arr);
}
つっつきボイス:「いわゆる『早すぎる最適化はよくない』という話」「よくある記事ですけどJavaScriptベースですね」「もうJITに任せればいいんじゃね?
」
CSS/HTML/フロントエンド/テスト
h2とh2c
ということで、h2 も h2c も HTTP/2 のこと、TLSによって暗号化がされているものがh2、暗号化されていないものがh2cという事だった。
同記事より
つっつきボイス:「先週のウォッチ制作中に見つけた記事です」「DevToolsのプロトコル欄にh2とかh2が出ると」「暗号化してないのがh2c」「知らんかった〜別に困らんけど
」「ちょい短すぎかと
」「まだ広まってないし名前また変わるかもしれませんし
」「そのうちHTTP/3出ちゃうでしょうし
」「最近はバージョンをカジュアルに上げるの流行ってますし
」
言語・ツール
Test Anything Protocol(TAP)とは
# testanything.orgより
TAP version 13
1..N
ok 1 Description # Directive
# Diagnostic
---
message: 'Failure message'
severity: fail
data:
got:
- 1
- 3
- 2
expect:
- 1
- 2
- 3
...
ok 47 Description
ok 48 Description
more tests....
つっつきボイス:「最初Ruby Weeklyでrspec-tap-formatters↑を見つけたのですが、TAPが何なのかが気になって」「どれどれ、1から6までテストするとして、以下だと1と3がfailして、6番目のテストもないから6もfailするという感じ↓」「言語に依存しないでテストを書けるようにするものみたい」
1..6
not ok
ok
not ok
ok
ok
FAILED tests 1, 3, 6
Failed 3/6 tests, 50.00% okay
「rspec-tap-formattersはspecをそのTAP形式↓で出せるのね」「他のテストツールもTAP扱えるようになればテストを共通化できるだろうという夢の世界」「そういえばcucumberも言語非依存なんで、複数言語向けのライブラリでcucumberでテスト書いてるところもあったりするけど、そういうふうに1段階上がるノリなのかも
」「それはそれでわかりますね
」
TAP version 13
# test: String {
# group: #present? {
# group: when whitespaces and other characters {
ok 1 - returns true
1..1
# tests: 1, passed: 1
}
# group: when nil {
not ok 1 - returns false
---
location: "./resources/string_spec.rb:8"
error: |-
Failure/Error: expect(string.present?).to eq(false)
NoMethodError:
undefined method `present?' for nil:NilClass
backtrace: "./resources/string_spec.rb:9:in `block (4 levels) in <top (required)>'"
...
1..1
# tests: 1, failed: 1
}
# group: when whitespaces only {
ok 1 - returns false
1..1
# tests: 1, passed: 1
}
1..3
# tests: 3, passed: 2, failed: 1
}
1..3
# tests: 3, passed: 2, failed: 1
}
1..3
# tests: 3, passed: 2, failed: 1
# duration: 0.026471 seconds
# seed: 27428
その他
これもソリューション
番外
英語のお気持ち
失礼します!
has/give priorityとかですと仰るように高優先度かと存じますが、この単語そのものは優先度でよいのではないでしょうか?優先順位をつけるというprioritizeという動詞もありますし。— 父
(@fushiroyama) November 11, 2019
"Shooting yourself in the foot" is an expression that means making a mistake. A footgun is a powerful tool that makes it easy to make terrible mistakes! It is mostly used in computer software. Normal people don't use "footgun", which says something about computer software...
— Thomas Munro (@MengTangmu) December 4, 2018
つっつきボイス:「そういえばpriorityって文脈でちょい変わるなと思って」「どっちもありますね〜」
「footgunは翻訳中に調べて見つけたんですが普通の辞書にはまだ載ってませんでした」「新しい言葉っぽい」「これ単語になるのか
」「『自分の足を撃ち抜く』がどんどん短くなってついに1語になった感
」「略しすぎ
」「プログラマーならわかる
」「たぶんIT業界限定
」
後編は以上です。
おたより発掘
あとこれにも載ったんだー!!!
嬉しいhttps://t.co/DUSgoyqpeN— tashiro (@tashiro_rb) November 19, 2019
バックナンバー(2019年度第4四半期)
週刊Railsウォッチ(20191118前編)ActiveJob引数のログ抑制、RailsガイドProプランお試し、ファイルアップロードのレジュームgemほか
- 20191112後編 invisible gemで可視性を変えずにパッチ当て、スライド:「型なし言語のための型」、自然言語の言語名を推測ほか
- 20191111前編 Active Recordモデルをprivateで封じ込める、心折れないRailsスキーマ管理、Railsセッションをクロスドメイン共有ほか
- 20191106後編 holiday_japan gemで日本の祝日判定、小さい関数が有害になるとき、Gitブランチのファジー検索ほか
- 20191105前編 Rails 6のデフォルト設定解説、DHHも消したいaccepts_nested_attributes_for、スライド『実践Railsアプリケーション設計』ほか
- 20191029後編 Ruby 2.7.0-preview2、tapping_device gemとhumanize gem、平成Ruby会議ほか
- 20191028前編 RailsにSTI用メソッドsti_class_forとpolymorphic_class_forが追加、RuboCopを変更箇所だけにかけるgem、strftime書式生成サイトほか
- 20191021 Rails 6でhas_many関連の修正やSprockets 4.0対応、Shrine 3.0がリリース、Minitestスタイルガイドほか
- 20191015 スライド「Rails Performance issues and Solutions」を見る、dirtyに*_previously_was が追加、Sidekiq 6.0.1ほか
- 20191008後編 Ruby 2.7のInteger#[]でバイナリチェック、rubyzip gemは強力、13KBのJavaScriptゲームほか
- 20191001後編 RedisとRubyをつなぐredis-object gem、Fullstaq Rubyの新バージョン、COUNT(*)とCOUNT(1)の速度ほか
今週の主なニュースソース
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp Slackなど)です。