valid,invalid

関心を持てる事柄について

builderscon 2017 - day 2 メモ

builderscon 2017 - day 1 メモ - valid,invalid に続いて2日目のメモ。まとめや感想はあとで。

※ 内容については間違っている可能性あり。


小さく育てるコンパイラ

  • コンパイラは実装量が多い
  • まずは既存言語のサブセット->自分が欲しい機能を足す->オレオレ構文に置き換えていく
  • なぜ構文が最後?どういう構文が良いかは動かさないとわからない。まずは動くものを作るのが大事
  • 既存言語は既に動いているので実装は絶対にできる。パーサの実装をまずは流用できる
  • MinCamlベース(小さい実装なので参考にしやすい)でLLVM
  • 今回欲しかった多相型

OSSの引き継ぎ方

  • Rubyの状況:2013年頃に初期の開発者がRustとかGoに行ったりしてしまった
  • 利用者としてできること contribute, fork, re-implementation, take over
  • 引き継ぎの始まり
    • イシュー/Email/DMで「引き継ぎたいんですけど」と言うと結構引き継がせてくれる。twitterはダメ
    • READMEで募集してるのもよく見る
    • 作者じゃないのに pull request にコメントしまくったりすると「お前やれよ」となったりする
  • rake
    • Jimが他界してしまって放置されることになった
    • これもhsbtさんが引き継いだ
    • まずhoeからbundlerへ。標準ボイラープレートを使って、テストや開発が簡単にできるようになっていれば参入障壁が下がる
    • 1.9のサポートを切ったらbreaking changeで色々なライブラリやツールから苦情が…
    • migration path をちゃんと用意すればよかった。うざいぐらいwarningだしたりとか
  • psych
    • Ruby側を変更するとJRuby側が壊れたりするのでCI入れたかったがownerしか設定できない
    • aaron からownershipもらうためにカンファレンスで直接はなした
    • セキュリティイシューも何回か踏んでいる。詳しい人が身近にいると便利
  • 「リリースすること」がとても大事
    • リリース権も一緒に渡したほうがよい
  • rubygems/rubygemsrubygems.orgではない)
    • 2015年にPMがいない状態でどうやっていくのか不明瞭になった
    • RubyTogetherという組織が引き継ぐことになった
    • その組織のbundlerチームが入って元々のコミッターが全員リムーブされた
    • ruby本体の変更を取り込んでもらうのが超大変

Factory Class

  • もともとはプログラマ
  • キーボードを作るのにそんな大変じゃないだろうと思っていた、一ヶ月ぐらいとか
  • 最初のプロトタイプに興味を持ってくれた人がいてkickstarterで300$ 50個売ろうと考えた
  • 2000個作ることになっていきなり大変になった
  • いろんな工場を回った、台湾、中国、日本(高かった)
  • 結果、Shenzhenで良い会社を見つけたのだがチームの営業員がやめてしまった
  • その会社の連絡がぜんぜんこなくなり、9ヶ月たって辞めた営業からキャンセルになったと連絡
  • その1ヶ月後に有名な企業から新しいキーボードが出た…何か裏側であったのかも
  • 反省としては、その工場からすると自分たちは最小顧客だったということ
  • 中国の起業とやりとりするときは非常に対面やマナーが大事

質問

  • 工場選定以外でプログラミングやデザインの問題はなかったか?
    • プログラミングは自分の領域なのであまり辛いことはなかったし、いろいろ助けてくれる人もいた
    • デザインについては外の人に頼んだりして結構うまくやってくれた
  • テストについて
    • 落下テスト、電気系統のテスト

The Evolution of PHP at Slack HQ

  • HHVM + Hack
  • SlackのDAUは半分が北米、次いでUK, JPの順
  • 急成長の中で大きいチームでも使えるようにする苦労
  • Jan 2017 Enterprise Grid リリースで大チームにも対応
  • 少チームでも大人数チームでも同じ体験をしてもらう必要がある
  • PHPを使っていると驚かれるが、世の中のスタートアップが使ってきたものである
  • Slack のリードプログラマfacebook出身でHHVMのエキスパートでもある
  • PHPは…正直ダメな子です
  • 2015年、SlackはOOPしてなかった…
  • 大きいチームで使われることになってパフォーマンスの問題が出てきたときの答えがHHVM
  • hack
    • バックグラウンドで走る静的型チェッカー。ただしPHPの特色である開発のスピードは落とさない
    • 後方互換姓あり
  • Route53によるカナリアリリースでパフォーマンス改善を確認できた
  • あるときHHVMのバグがあって大顧客のPixarに迷惑をかけたことがあった
    • パッチをあてられるような勉強も必要
  • レスポンスタイムが半分ぐらいに

builderscon 2017 - day 1 メモ

以下、所感混じりのメモ。まとめや感想はあとで書く。

※ 内容については間違っている可能性あり。


Desktop Apps with JavaScript

マイクロチームでの高速な新規開発を支える開発・分析基盤

  • LUCRA
  • gunosy で得られた知見を使って記事のグルーピングを機械学習でやる
  • 最初から分析できる環境が欲しかった
  • うまくいったポイント
    • やるやらないの切り分け
    • Gunosy の基盤の強さ、gunosy はGoの使用歴がかなり長い
  • やるやら基準
    • アプリのコンセプトを検証する
    • 大事なのは記事が見られて、検証・運用可能な基盤をつくること
    • やらないこと:Android、リファクタ、フォロー、お気に入り
  • gunosy/go という共有資産があり、OpsWorksでデプロイすればAPIサーバがすぐできる
  • 記事分類・生成に必要なAPI
    • クローラー、カテゴリ分類器、タブジェネレーター(特定カテゴリの記事一覧を生成する)
  • 2段階キャッシュ(ローカル、リモート)
  • マイクロアーキテクチャをやりすぎない
  • 分析
    • 大量のログを取得している、トップビューだけで10以上
    • 分析環境はRedash
    • 運用開発問わずチーム全員が分析用SQLを書く
    • Slack にKPIを通知
  • 分析結果の理由

    • ブランドイメージを追求したいからと言って、根拠なく「ファッション」「コスメ」を推すという意思決定は絶対にしない(データで確信が持てない施策は極力許さない)
    • 高いCTRやRRが期待できるプッシュ、機能通知しかやらない
  • ログ設計を最初からうまくやるには?

    • Gunosy にはもともと似たようなアプリがあり、ある程度ログの型が決まっているのでだいぶやりやすい
  • プロダクトとログの乖離
    • 開発者も分析基盤に触るが、専任のチームがいる。CSの博士号を持っていたり英語論文を読みまくったりするかなり高度な人たちが分析に責任を持っている。また、彼らの提案を受け入れる土壌がチームにある

複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ

  • 何も考えずに作ると何が起きる?
    • DOM をコードで作ってるとか…
    • 巨大なものを一目で理解するのは不可能
  • 分割する?機能、画面、リソースなどの単位
  • Presentation Domain Separation
    • Presentation と Domain をワケましょうということしか言っていない
  • MVVM
    • MVVM で model が VM を持っても良さそうだけど…?実際にやるとDOMのテストとかがModelのテストに入ってきてつらい。オブザーバパターンで依存関係を整理したりできる
    • PDS は model 設計については何も言っていない
  • layered architecture
    • モデルを3層にする。アプリケーション、ドメイン、インフラストラクチャ
    • アプリケーション層:プレゼンテーション層との窓口
    • ドメイン層:ディレクタ的関心。ドメイン層の設計は非プログラマでも読める感じだと良い
    • インフラストラクチャ層:技術的関心。プラットフォームや外部APIに依存した実装をドメインに書くと汚くなってしまうからインフラストラクチャ層に追いやろう
    • 依存関係はP->A->D->I だけどテスタビリティが高いのはDだからそこに依存したい
  • clean architecture

    • テスタビリティの高いドメイン層を中心に依存する
    • この考え方は具体的なアーキテクチャではない
    • 実現方法は、インフラストラクチャ層をDIする、プレゼンテーション層をモデル層が監視するオブザーバパターンなど
  • 状態管理の問題

    • ドメイン層に状態が散らかりすぎる
    • CQRS(コマンドとクエリを分ける)
  • バリデーションはアプリケーション層に書いている。コマンドというクラスを作って「アプリケーションへの入力が正しいかどうか」を判定する。(モデルに持つのがよくあるパターンだけど。フォームクラスとかは?)

  • 悩んだら原則に立ち返る

RDBアンチパターンリファクタリング

  • 不適切なデータベースがコードやサービスの成長を止める
  • データベースリファクタリングおすすめ
  • データベースの不吉な匂い
    • データは生き物、どんどん追加されていく
    • 積み木と同じなので初期設計に失敗すると仕様変更ができない
  • 何をリファクタするかはシステムによる

    • シングルアプリケーション vs マルチアプリケーション
    • シングルアプリケーションのときはDBマイグレーションが活きてくる
    • マルチアプリケーションは難しい、片方は止められなかったり…
  • データベースリファクタリングはすごく長いスパンになる、だから戦う準備が大事

    1. 抽象化。データベースアクセスには永続化フレームワークをはさむ
    2. データは変化する。モニタリングして変化の影響を知る必要がある
    3. テスト。
    4. 覚悟。DB停止はありえる。エンジニア以外がサービスの停止可否を握っているなら政治力も必要
  • 手間も時間もかかるからころ検討が大事。そのデータベースに価値はあるか、費用対効果は、いつやるべきか

    • 対象選定
    • リリース時期を決める
  • 変更前・中・後すべてのテストを行う

  • DBは影響範囲が広いので切り分けできるように小さな変更を繰り返すことが大事

質問

RDBパターンでRDBでないのを聞くのは恐縮 MongoDB MongoDBをすてるマイグレーションパスについて考えている 少しずつデータシンクして切り替えていく アプリケーションもMongoに合わせたコードになってしまっている マルチアプリケーション 一度に億単位のデータ全部をmigrateするのは無理

  • JSON
  • FDW (foreign data wrappers) postgres のように mongodb を扱うことができる、テーブルのように

QR code

  • QR code はデンソーが発明
  • 仕様書もある
  • 実は16個に分割できる
  • ヘッダーに全部でいくつ、自分が何番目かを持っている – 医療用カルテで1つだけだとエラーが起こりやすいので必要だった

狭いマンションにもドラム式洗濯機は置ける

結論

3方向をぴったり壁で囲まれた64cm×64cmの一般的な防水パンにもドラム式洗濯機を置くことができる!!!

f:id:ohbarye:20170723134341p:plain

f:id:ohbarye:20170723134004j:plain

ドアの開閉もできる。

買ったもの

kakaku.com

公式ページ: メーカー希望小売価格は税込246,240円。高い!!

幅639 × 奥行600 × 高さ1050mm

選んだ経緯

id:taketyan引越・同棲 1 年目の 2016 年に買って良かったもの | Born Too Late 記事で読んだ TW-117X3L の後継機、TW-117X5L が欲しかったのだが、幅645 × 奥行750 × 高さ1060mm を設置しようとすると壁を破壊しないといけないので諦めた。

調べるとプチドラム/ミニドラム式洗濯機というのがあるらしいとわかり、その種の中で最も評価が高かった Cuble NA-VG710L にした。

価格

トータルで152,037円かかった。

注文明細

本体価格は135,000円だったが、延長保証や取り付けなどの手数料もかかった。古い洗濯機のリサイクル回収代はもとから含まれていたようだ。

******************************************************************
 ご注文商品明細
******************************************************************
★洗濯機 パナソニック NA-VG710L  ★延長保証加入★(商品コード:1207582)
  無料搬入商品   取付希望    リサイクル回収:1個
 ¥135,098(税込) × 1 個 = 135,098 円

リサイクル回収運搬  (商品コード:99992002)
 ¥3,240(税込) × 1 個 = 3,240 円

---------------------------------------------------------------
小 計 ¥ 138,338
延長保証料 ¥ 6,755
送 料 ¥ 0
取付料 ¥ 3,240
手数料 ¥ 1,220
===============================================================
合 計 ¥ 149,553

リサイクル券

エアコン、テレビ、冷蔵庫・冷凍庫、洗濯機を捨てる際には家電リサイクル法にもとづいて料金を支払わないといけない。今回は料金郵便局振込方式だったので新しい洗濯機の配送 兼 古い洗濯機の引取が来る前に郵便局に行ってリサイクル券を買う必要があった。

券を購入するには捨てたい洗濯機の製造業者と品目が必要だと書いてあるが、とりあえず型番だけメモして行ったら調べてくれた。

この券の購入に2,484円かかったのでトータルで150,000円を超えてしまった。

感想

購入について

よくわからない家電ECサイト勘弁してくれ〜と思っているものの、数万円単位での値引きや取り付けとか引き取りの依頼を含めると使わざるを得なかったのが辛いところ。

注文から4日で届いたのは早くて嬉しい。

製品について

とりあえず洗濯&乾燥を試してみると4時間30分ほどで洗濯〜乾燥まで終わった。これまでの縦型洗濯機だと計5時間(洗濯1時間 => 洗濯機の乾燥1時間 => 浴室乾燥機で3時間)かかっていたのとあまり変わらないが、わざわざ干さなくてよいのが最高。

騒音が気になるかもと思ったが壊れかけの旧洗濯機より遥かにマシだった。洗濯機からドアを一枚挟めばまったく気にならない。

また、製品のデザインがかっこよい。洗濯機の前でぐるぐる回る洗濯物を何も考えず眺めていたら10分ぐらい経過していたので暇つぶしにもおすすめだ。

最近仕事中に Apple Music で聞いている音楽 - むかし聞いていたけど最近どうしてるんだろうシリーズ -

むかし聞いていたけど最近どうしてるんだろうシリーズ

Arts & Crafts になぜか偏った

新しいアルバム出しているんだなーと気付いてそのまま聴ける Apple Music 最高

The Most Serene Republic

www.youtube.com

Dirty Projectors

www.youtube.com

Los Campesinos!

www.youtube.com

Broken Social Scene

www.youtube.com

Stars

www.youtube.com

Ra Ra Riot

www.youtube.com

『日本語という外国語』読んだ

日本語という外国語 (講談社現代新書)

日本語という外国語 (講談社現代新書)

あらすじ

日本人が考える「日本語」と外から見た「ニホンゴ」は違います。「どこが難しい?」「意外な魅力とは?」「どう教えるか?」豊富な日本語教育経験から語る、日本人のための日本語再入門。(講談社現代新書

日本人が義務教育〜高等教育で学ぶ「国語教育」ではなく、日本語を母語としない人向けの「日本語教育」にフォーカスした本。

面白かった点

日本語は日本人が思うほど難しくない

「第4章 外国語として日本語を眺めてみると」より。

昨日、私は八時におきました。九時に、朝ごはんを食べました。朝ごはんは、トーストとサラダでした。おいしかったです。十時に電車で銀座へ来ました。デパートで黒いコートとストライプのネクタイを買いました。

外国人がこのように話すのを見た日本人はたいてい「日本語上手ですね」と感心する。しかし、著者によれば「一日に三時間、月曜から金曜まで学べば、早ければ一ヵ月、どんなに遅くても二ヵ月で、このレベルまで達する」という。

国語教育を思い出し、五段活用やらサ変やらカ変やらを思い浮かべる日本人にとっては「そんなはずない」と言いたくなるかもしれないが、「です・ます」にフォーカスして学ぶ限りでは日本語の動詞は非常に簡単なのだと。

日本語表現のゆたかさ

上記のような簡易さがある一方で、話を最後まで聞かないとわからないような複雑な表現も多々ある。

とりわけ、「第5章 日本語表現のゆたかさを考える」で挙げられていた例文、「山田選手はかなり練習させられていたらしいよ」の一文の述語の説明は白眉だった。

「させられていたらしい」という述語だけで以下の4つの情報を表現している。

  1. 過去のことである(〜た)
  2. 本人の意思とは反していた(〜せる)
  3. 一過性のことではなく継続していた(〜ていた)
  4. 話し手にとってこの件に確証はない(〜らしい)

テンス・アスペクト・ムード

聞きなれない文法用語があった。テンス(時制)はまだしも他の2つは何だろう。

アスペクト

アスペクトは「ある動作がどの局面にあるか」を表現する文法形式。「相」ともいう。「食べ始めた」という言葉は以下のように分解できる。

アスペクトを変えることで「食べいた(進行)」や「食べ終えた(完了)」などの表現が可能になる。

ムード

ムードは「単なる事柄を表す以外の話し手の気持ちのありよう」について述べる文法形式。言語学では「法」と呼ぶ。

これを用いることで「働くつもりだ」「食べるらしい」といった表現が可能になる。

ここまでの知識を総動員すると、「させられていたらしい」は結局以下のように解析可能となる。

  • 「させ」: 使役
  • 「られ」: 受け身
  • 「てい」: 進行(アスペクト
  • 「た」: 過去(テンス)
  • 「らしい」: 推測(ムード)
  • 「よ」: 判断(ムード)

感想

日本語教育に関する内容が中心の本だが、これに携わらない人や興味のない人であっても、普段意識することのない母語言語学面での分析からは上述のような面白い知見を見つけることが出来ると思う。

とりわけ、日本語を話したり学んだりしている外国人と普段から接している人にとっては彼ら彼女らがどのように日本語を捉えているのか、どのような点に躓きがあるのかを理解する一助となるので、一層お薦めできそうだ。

『サウンド・オブ・ノイズ』観た

Netflix で観た。

予告編を観た時の高揚感はすごかったが突然の恋愛要素と感情移入しづらい主人公たちのために後半には気持ちが失速してしまった。

身近なものを楽器にして演奏するのも街中で演奏するのも誰もが思いつきそうなアイディアだけど、それが"音楽"になるまで作り上げていくのはとてもとても大変なことなので、見事にやってのけたライブシーンはどれも良かった。

数年後にライブシーンだけ見返しそうな気がする。

ソフトウェアの世界での slug / スラグ / スラッグの意味

かつての自分と全く同じ気持ちを持った質問者によるurl - What is the etymology of 'slug'? - Stack Overflow('slug' の語源は?)が気に入ったので抄訳。

python - What is a "slug" in Django? - Stack Overflowよりも質問の仕方が良い。

ちなみに今の自分が「'slug' ってなに?」と聞かれて説明するなら「ヒューマンリーダブルな ID」あたりが妥当な回答だろうか。


Q: ‘slug’ の語源は?

‘slug’ は特筆すべき理由のない言葉なのか、それともやはり何らかの意味がある言葉なのでしょうか?あるとき私は会話の中でこの言葉を使用したのですが、「なぜ ‘slug’ って呼ばれているのか」と聞かれたときに私も意味を理解してないと気づきました。

もちろんそれがどのように使われているかは知っているのですが… http://codex.wordpress.org/Glossary#Slug

結局、この言葉の背景にはどんな意味があるのでしょうか?

A: 由来は新聞業界です

‘slug’ は、新聞業界から来ている言葉です。

これは、制作過程で記事に与えられる非公式の名前、つまりコードネームみたいなものです。記事が担当記者(もしくはそれ以前)から編集者を経て印刷機に至るまでの道のりでの呼び名です。例えば「'kate-and-william' の校正は終わった?」のように使われます。

一部のシステム(Djangoなど)では URL の一部として ‘slug’ を使って記事を特定します。 www.mysite.com/archives/kate-and-william という具合です。

遡ると脚本の ‘slug lines’ に行き着くかもしれません。この ‘slug lines’ はシーンの背景、つまり、いつ誰がどこで〜などを表現するものです。後に続く文章を説明するものであるという点で ‘slug’ と似ています。

ライノタイプ*1においては、'slug' は個々の文字の形から作られた一本の線の金属を意味していました。1行ごとに単一の ‘slug’ を作ることによって、従来の1文字ごとに組み合わせを作るやり方が大幅に改善されたのです。

これは推測ですが、'slug' はもともとは(何かしらを押印しなければならないような)偽造されたコインのためのものだったのでしょう。言葉の使われ方が印刷用語に至り、そこから「1行の活字」、そして「記事の要約」へと変遷した様子を、私は容易に想像することができます。そうした印刷の世界からオンラインの世界へ移るのはこれまた実に簡単なことでしょう。

*1:ライノタイプは、キーボードを打鍵する事によって、活字母を並べてそれを鋳型とし、それに溶けた鉛を流し込んで、新聞などの印刷版型を作成する装置である。単語や空白から成る横一行を丸ごと活字にする事が出来る。かつては印刷所などにあった。ライノタイプという名称は、Line of type (一行の活字)を省略したものである。 quoted from ライノタイプ - Wikipedia