デザインドック(Design Doc)について

rebuild.fm

rebuild.fm

rebuild.fm でデザインドックという耳慣れない単語が出てきたので調べてみました。
エピソード内では書くのが大変、会議が進まない、生産的でないなどわりと否定的なトーン。
なんでも、デザインドックと銘打つと噛み付いてくる人たちが一定数いるそうです。
そのため、ゲストの @omo2009 さんはDesign Doc ではなく、Note と呼ぶようにして彼らを寄せ付けないようにしているらしい。

というわけで以下にデザインドックに調べたことを簡単にまとめる。

デザインドックとは

デザインドック(Design Doc)とは、Googleのエンジニアがソフトウエアを開発する際に必ず書くドキュメントです。

一般的にDesign Documentというと、設計仕様書のことをさすようです。設計仕様書はソフトウエアのシステム的な設計がどのように行われているかを記したドキュメントです。一方でGoogleのDesign Docは、あるソフトウエアについて、何を・なぜ・どのように作るかを記したものです。

Google の Design Doc について - Please Sleep

プロジェクト立ち上げ時の 1~2週間をかけて書く。ある程度ポイントが書けたら、もうコーディングへ。

コードを書いていると解離していくので、できるだけ解離しないようにアップデート。

Google のソフトウェア・エンジニアリング

デザインドック の内容

  • プロジェクトの背景、目的
    • おおまかな設計(コードを見ただけでは判らないような、アーキテクチャ)
    • プロジェクトの参加者(このプロジェクトに関して、誰に連絡を取ればいいのか)
    • セキュリティやプライバシーについての考察(問題と対処方法)
    • テスト、モニタープラン(運用時の考慮。障害の発見と復旧手法など)
    • レポジトリ上の位置やサーバのアドレスなど

実際にGoogle社内で書かれたWebKit WebSocket のデザインドック
http://docs.google.com/View?id=dfm7gfvg_0fpjg22gh

Dagger 2.0 のデザインドック
https://docs.google.com/document/d/1fwg-NsMKYtYxeEWe82rISIHjNrtdqonfiHgp8-PQ7m8/edit#

テンプレ
[O] Design Doc 的な何か用の Wiki 記法によるテンプレ

感想

いまやっている比較的小さなプロジェクトで試しに書いてみた。
rebuild でネガティブなトーンだったが個人的にはそんなことはなくて(ミーティングで使わなかったから?)書く意味は十分にあると思う。
走り出すために、事前に情報を集約させておいて走り出したらデザインドックはもう更新しないというやり方がいいと思う。
きちんとしたドキュメントを残すなら、デザインドックではなくて別に仕様書という形で残したほうが楽だし効率的と感じた。 あくまでも自分たちがやることの目的や意味合いや実装を確認する準備運動的な意味合いとして捉えて、なにがなんでもメンテナンスするぞというのは現実的でない気がする。

「作るべきものの形をみる」ようにするためのものという認識でチーム内に浸透すればいい結果を生むのではなかろうか。

Google流資料作成術

Google流資料作成術

  • 作者: コール・ヌッスバウマー・ナフリック,村井瑞枝
  • 出版社/メーカー: 日本実業出版社
  • 発売日: 2017/02/16
  • メディア: 単行本
  • この商品を含むブログを見る

複数ファイルのアップロードについて

multiple 属性を指定します。

<input type="file" name="file" multiple>

Ajaxを使わない

Ajaxを使わない方法、<form type="submit">で複数ファイルのアップロードを行おうとすると制約に困るかもしれません。

<form type="submit"> だと例えば以下のようなことが行なえません。

  • 特定ファイルの並び替えや削除

どうしても<form type="submit"> で行いたい場合、multiple 属性の指定を外します。

<input type="file" name="file">

参考までにファイルを削除する方法について
javascript - how to reset <input type = "file"> - Stack Overflow

Ajaxを使う

いわゆるAjax、XMLHttpRequest を使用するほうが、FormData オブジェクトFileAPI を利用できるため極力こちらを選択しましょう。
XMLHttpRequest の利用 - Web API インターフェイス | MDN

FormData オブジェクトFile API をサポートしていないブラウザもサポートする場合は別途仕様を検討して費用をいただきましょう。
FormData - Web API インターフェイス | MDN
JavaScript でのローカル ファイルの読み込み - HTML5 Rocks

FormData オブジェクトFile APIが利用できるなら、いろいろできるのでユーザーが使いやすいアップロード機能を実装しましょう。
最速・最高のファイルアップロードに近づくための1歩 - Qiita
至高のファイルアップロード - Qiita
File API

以上です。

仕事がはかどるJavaScript“超

仕事がはかどるJavaScript“超"活用術 AI、セキュリティ、クラウドを自動処理

EV需要の増加に期待して洛陽モリブデンに投資

EVが普及するだろうとは思うがTeslaが量産化にもたもたしている間に他のメーカーがキャッチアップしそうだ。

https://www.tesla.com/sites/default/files/images/model-3/social-m3-meta.jpg

どのメーカーが覇権を握るかわからないのでいったんバッテリーに使用するリチウムイオン電池に目を向けることにした。 リチウムイオン電池は電気自動車やスマートフォンなどにバッテリーとして使われておりEVが普及することつまりリチウムイオン電池の需要も増加するという目論見です。
ちなみにTeslaの株は売った。

リチウムイオン電池には主に以下の金属(レアメタル)が使用されていて

  • リチウム
  • コバルト

https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Kobalt_electrolytic_and_1cm3_cube.jpg/300px-Kobalt_electrolytic_and_1cm3_cube.jpg

事実、このふたつの金属はここ数年上昇傾向にある。 リチウムイオン電池を使用する機器の需要予測も考えるとこれらに投資するのは理にかなっている。

ただ、どうもこれらを直接取り引きする方法が見つからなかった。 ぐぐってみてもLondon Metal Exchangeという取引所のチャートは表示されるが 肝心の取引する業者が見つからない。どこも金と銀とプラチナとパラジウムばかりだ。

おそらくは、金や銀などにくらべてマイナーなため規模が小さくどこも取り扱わないのだろう。

そこで、コバルトやリチウムを直接採掘している会社の株に投資すればいいのではと考えた。

コバルトやリチウムに鉱山採掘に積極的なのが中国企業なのだが、とくにアフリカに積極的な投資を行っている。 その中でも2社、洛陽モリブデンと四川天斉リ業に候補を絞ることにした。 洛陽モリブデンはコバルト、四川天斉リ業はリチウムを専門に取り扱っている。 さらにこれに四川天斉リ業の親会社、成都天斉実業もプラスすることにした。

と思ったが四川天斉リ業と成都天斉実業は深セン市場に上場しており、国内では数社しか取扱がなく断念した。

コンゴの銅・コバルトのテンケ・フングルメ(Tenke Fungurume)鉱山の56%の所有権をフリーポートマクモランから取得した中国企業の洛陽モリブデン(03993)が注目できます。同鉱山は、15年に1.6万トンのコバルトを生産しており、コンゴの生産量の4分の1、世界シェア13%を占める計算です。

中国は無数のリチウム電池を必要としており、投資家は、それを認識している。深セン株式市場に上場する、数少ないリチウム専業の四川天斉リ業(002466.SZ)は、今年株価が90%以上急騰。

というわけで、洛陽モリブデンに投資したのだがその後トランプが保護貿易を打ち出したり、FRBの利上げ局面にはいったり、そもそもテスラもBYDも冴えない感じでいったん踊り場といったところに。。

決算は好調みたいですね

【3993】洛陽鉬業首季盈利增1.6倍

洛陽モリブデン(03993)は、中国会計基準によると、第1四半期、15.5億元(人民元、以下同じ)の利益は、1.6倍の前年比の増加を発表した。

当期の営業利益は74.35億元で、前年同期比28.53%の増加となりました。

同社によると、主要金属製品であるコバルト、銅、モリブデン、タングステンの市場価格は前年比上昇の影響を受けており、現在は各板事業の運営が安定している。 

はたしてこれからどうなることか。

洛陽モリブデンチャート
洛陽モリブデンチャート

図解EV革命 100年に1度のビジネスチャンスが一目瞭然!

図解EV革命 100年に1度のビジネスチャンスが一目瞭然!

わかることしかわからない

わからない

もしくはわからないことをわかるようになる方法論がわからない。
つまり勉強のやり方がわからない。

勉強の哲学とか読めばいいのだろうか。

わからないことをどのくらいわからないままにしていいのか

新しいことを独学で学ぶ場合、知らない用語だらけで意味がさっぱりわからん。
ここで知らない用語をどれだけの範囲でどのくらいの深さで調べればいいのかわからん。
もしそれがわかっているならそれはその用語を知っているということではないだろうか。
この辺の検討を誤ると、些末なことに足を取られてるだけだったりのちのちさっぱり学習効果が上がらなかったりする。

回避の行動

回避の行動は、無秩序な行動から子どもを守るために必要な反応である。 この概念を大人の人生にあてはめてみば、回避の行動をとる子どもは、人生にある種の意味と秩序をまず見つけようとする人間へとまちがいなく成長していくことが認められる。 人生は必ずしも、あるいは、それほど対人関係には左右されはしないものである。

アンソニー・ストウ 孤独―自己への回帰

逃げてもいい。
むしろ逃げたいと思うのなら逃げるべきだ。

プレビュー環境を構築するのに便利なサービス

さくっとプレビュー環境を用意したい。 DBがいらない静的なサイトをクライアントに見せるのにサーバーの設定とか面倒だし費用もかかる。

そんな悩みを解決してれるNetlifyとngrokを紹介。

Netlify

https://www.netlify.com/

https://www.netlify.com/img/global/meta-image.jpg

これはなに

静的サイト向け自動デプロイアプリケーションです。

ローカルで作業して git push したら、自動でプレビュー環境(https)にデプロイされる。 ブランチごとにプレビュー環境をそれぞれ用意することも可能。

DBはデプロイに含まれないのであれば、やりたいことはプレビュー環境としてはこれでほぼカバーできる。

サンプル

独自ドメインを設定 https://yabukarastick.work/

独自ドメインを設定するとブランチ名がサブドメインに指定できる develop ブランチをデプロイすると develop.yabukarastick.work として公開される

https://develop.yabukarastick.work/

必要な環境

Github GitLab Bitbucket のいずれかのアカウント

公開鍵の設定を行い上記のリポジトリにアクセス(git clone, git push )できるマシンとスキル

カスタマイズ

かなり柔軟に設定できる。

ここからはユーザー向けのURLになる。

Deploys

Build command

デプロイ時に実行するコマンド

Publish directory

公開するディレクトリ 指定したディレクトリ以外はアクセスできない

Production branch

公開されるブランチ デフォルトはmaster

Branch deploys

ブランチのデプロイ設定 全て、ブランチはデプロイしない、個別設定のいずれかを選択 デフォルトはブランチはデプロイしない

ブランチをデプロイする設定にした際コミットのハッシュ値ごとにURLが生成される。 管理画面上からpublishするとマスターにマージされる。 独自ドメインを設定していない状態ではブランチごとにプレビューはできない。

Domains

ドメインの設定

xxxx.netlify,com の xxxxは自由に変更できる 独自ドメインも設定できる 参考→ NetlifyとGithubで独自ドメインのサイトをHTTPS化したメモ

独自ドメインのSSL化も無料でできる

ngrok

https://ngrok.com/

https://i1.wp.com/qs.nndo.jp/wp-content/uploads/2017/11/ngrok.png

これはなに

ローカル環境を外部へ公開するアプリケーションです。

トークンの登録(最初だけ行う)を行って

ngrok がインストールされたディレクトリで以下のコマンドを叩くとローカル環境が外部に公開される。

$ ./ngrok http 80

バーチャルホストを設定している場合は公開するホスト名を指定してあげます。

$ ./ngrok http -host-header virtual-host.name  80

URLやトークンはランダムな文字列なので管理画面から確認する

トークン https://dashboard.ngrok.com/get-started

URL https://dashboard.ngrok.com/status

必要な環境

ngrok アプリケーション(Windows)

ngrok アカウント

コマンドラインツール(Windowsのターミナル Git Bash のターミナル)

コマンドを叩く勇気

カスタマイズ

独自ドメインの設定→有料プラン などできる。

個人的な用途としてはgit push することなくスマホの確認用として使うくらいなので無料で満足している。

その他

以下にもエントリを書いている。

まとめ

めちゃくちゃ便利だ。 これなら15分で環境用意できる。 ありがとうございました。

ブラックジャックの黒いコートあるいは生存戦略に基づいた意識的な選択

ブラックジャック先生の黒いコート

正月休みに暇だったのでブラックジャック先生のことをいつの間にか考えていた。あるある。

ブラックジャック先生を知らない人のためにいちおう説明すると本名は間黒男といって無免許の医者だ。 不幸な生い立ち、手術料は法外で、友人は少なく、同居人は腫瘍に幼女の肉体を与えた少女。あっちょんぶりけ。 でも腕はたしか。 もうすでに終わった存在と思われていた手塚治虫を復活させたマンガの主人公だ。

ブラック・ジャック 1

ブラックジャック先生は夏でも黒のコートを着ている。 これはとても医者らしくない。 なぜ彼がこんな格好をしているかというと、彼は医者にみられたくない医者だからだ。 つまり夏でも黒のコートを着ているほうがブラックジャック先生として生きやすいのだ。 難しくいえば黒のコートは生存戦略に基づいた意識的な選択であったのだ。

では、なぜ黒のコートのなにが彼にとって有利にはたらくのだろう。 ブラックジャック先生がコートを手放さない表層的な理由(いいわけ)はいつでも手術ができるように手術道具をコートの中に仕込んでいるためだ(銃刀法違反だ)。 たまに命を狙われたときにコートに仕込んでいたメスで相手を撃退しているので、自分の身を守るためという理由もあるかもしれない。

https://pbs.twimg.com/media/C4iu-l3UMAAXBU5.jpg

しかし、手元にはせいぜいメス一本くらい残しておいてほかの手術道具一式は鞄の中に入れておけばいい。 メス一本ならジャケットでもパンツでも隠しポケットの中に入れたりすれば身軽に動けるしコートいらないですよね。 なんなら拳銃でもいいじゃないですか。 はい論破。

他人が想起するわたしと他人にイメージされたいわたし

唐突な自分語り。

ぼくは仕事で打ち合わせに行くときたいてい普段着のままでいく。 ときどき普段は着ないジャケットで行くこともあるがスーツにネクタイはない。 それはスーツにネクタイという格好に意味がないというよりもマイナスだからだ。

どういうことかというと、スーツにネクタイという格好はビジネスを思わせる。 そしてぼくはエンジニア職でビジネス的な立場でものを言うのが得策でない職種だからだ(これくらい3日あればできるよね?)。 たまに、同じ職種でスーツにネクタイの人もいるが残念ながらビジネスとしては的はずれなことしかいえないのでただの間抜けにしか見えない。

立場的に非ビジネスのことしかいえない人間がビジネスの格好をしてもおかしなことになるだけだ。 格好だけそれらしくしても不格好が目立つだけで世の中そこまで甘くないのだ。

エンジニアにも経営的な視点をという意見もあるがそれについては depends on としかいえない。

逆に、普段着でビジネス的に的はずれなことを言ってもこいつはエンジニアだからしゃーないと大目に見てもらえる。 あえてそのような的はずれな意見をすることで場の空気を変えたり、自分の意見を聞いてもらいやすくできるのだ。

人は他人を外見で判断する。自分の中の既成概念で相手がどんな人間なのかラベリングするのだ。

あなたがスーツを着てツーブロックで色黒なら不動産か保険の営業だと思われる。 問題は他人が想起する記号化されたイメージがあなたにとって有利にはたらいているかどうかだ。

記号化されたイメージとあなたが相手に与えたいイメージは異なるだろうかそれとも同じだろうか。 もし異なるのなら、異なることがプラスに働いているのだろうか。

黒いコートの理由

さて、話をブラックジャック先生に戻そう。

彼はモグリ(無免許)でしかも法外な診療報酬をぼったくる医者なのだ。 既存の価値観からは逸脱している。 患者の多くはおそらく彼のような医者とは会ったことがないだろう。

そこでまず患者に第一印象で「なんだこいつは」と思わせる必要がある。 ようやく答えにたどり着いた。そうそこで黒いコートが必要になるというわけです。

夏でも黒のコート、こいつ変なやつだな。と。 そう思わせればこっちのもの。 手術料さんぜんまんえんですと請求しても相手はああこいつは変な格好しているだけあって手術料もめちゃくちゃなんだなと納得してくれる。はずだ。

髪は七三、黒ぶちメガネで立ち居振る舞いは聖人君子の医者が「うーん、手術料いちおくえんですね」何事もないように伝える。あなたは何が起こったのかわからないだろう。あれ、これ募金とか必要なやつじゃん。それって海外で受けるから高いんでしょ。ここは日本医療保険とても発達した国。これは何かの間違いだ、そうだもしかしたら病気とか全部夢だったのかな。あぁなんだ夢だったか、びっくりしたびっくりしたと思考がお花畑方面に旅立ってしまう。 これはいけない。 患者は一刻を争う病状かもしれないのに、手術料の同意を得るどころか患者が自分の置かれた状況について疑問を持ち始めたら手術までの道のりがずいぶんと遠回りになってしまう。

はたまた冷静に弁護士とか警察とか手続きを取られるのもよくない。 臨場感がすべてだ。 相手に自分のフォーカスさせたい情報にフォーカスさせ、かつ冷静さを失わせた状態で意思決定を行わせる必要がある。 そこで、そう黒いコートですね。

普通の医者のように合法的な診療報酬を取るのであれば、夏は長袖のシャツとジャケット、それに医療用の器具が入った鞄というスタイルで過ごすはずだ。 事実研修医時代の彼はほかの医者と同じファッションだった。

まとめると自分の要求を通しやすくするためには見た目が重要だということ。 それをブラックジャック先生は気づいててあえて夏でも無理して黒いコートを着ているということ。

以外と計算高い男だったんだね、ブラックジャック先生は。

ブラック・ジャック 3