ねぎ嫌い

思いついたことをてきとうに。

2017-09-06 Divorce and Occupation

原文:flowingdata.com

アメリカにおける離婚率と職業の関連を調べたお話。

アメリカでは結婚したカップルのうち実に半分は離婚でその関係を終えているという。
その離婚率はカテゴライズすることで一定の傾向が見えてくる。
例えば、非正規雇用者のほうが正規雇用者に比べて離婚率は高い。
アジア人のほうが離婚率は低い傾向にある。

この記事では2015年のACS(American Community Surver)の調査結果を基に、
各職業による離婚率の傾向を計算している。

最も離婚率が低いのは保険数理士であり、最も高いのはバーテンダーやゲームマネージャーであった。
カテゴリ別に見ると、最も低いのは建築とエンジニアで最も高いのは輸送業であった。
結果的に、教育の水準の高低がそのまま離婚率にも反映されているように見えている。
また、給与の高低も相関があるように見える、とのこと。

2017-09-05 A collection of things software developers should know

原文:github.com

全てのプログラマが知っておくべき記事や本を紹介している。
知っている必要はないが、知っているとより良いプログラマになれる。

以下のカテゴリごとに列挙されている:

2017-09-04 Run your own OAuth2 server

原文:www.ory.am

自前のOAuth2.0サーバーを構築するお話。
OAuth2.0サーバーにはORY HydraというGolangで書かれたオープンソースのものを使っている。

まず、この記事のターゲットは、

既に世の中にはOAuth2.0サーバーはあるが、ユーザー管理のやりかたを強制してきたり、自由にならないことが多くあった。
そのため、ORY Hydraでは、数行のコードを実装するだけで独自のユーザー管理をすることが出来るようになる明確なフローが存在する。
第三者の開発者が使用したり、他の全てのアプリケーションが使えるように、ORY Hydraがユーザー情報をOAuth2.0のアクセストークンとOpenIDのConnect IDトークンに変換する。

以下に簡単な流れを記載する。

  1. PostgreSQLや諸々をdockerでインストールする
  2. 環境設定をする
    2-1. System Secretの発行
    2-2. Databaseの設定
    2-3. 初期データの生成
  3. OAuth2サーバーの起動
  4. トークンの発行と検証
    4-1. SSHでコンテナに接続する
    4-2. Hydraに接続する
    4-3. アクセストークンの発行
    4-4. アクセストークンの検証
  5. 同意フロー
    5-1. 同意クライアントの作成
    5-2. アクセスコントロールポリシーの生成
    5-3. コンテナの起動
  6. OAuth2.0 + OpenIDの認可フロー
    6-1. OAuth2.0コンシュマーアプリの生成
    6-2. OAuth2.0認可コードフローの実行
    6-3. ログインと同意
    6-4. アクセストークン・リフレッシュトークン・IDトークンの取得
  7. 認可済みリクエストの発行

2017-09-04 HomeBrew Analytics – top 1000 packages installed over last year

原文:brew.sh

2016年7月からの1年間、Homebrewで最もインストールされたパッケージのランキングのお話。

1位がnodeで以下のように続く。

  1. node
  2. git
  3. wget
  4. yarn
  5. python3
  6. python
  7. mysql
  8. coreutils
  9. openssl
  10. posgresql

1000位まであるのでここ1年での流行りを手っ取り早く追えるのかもしれない…。

2017-09-01 The art of over-engineering your side projects

原文:The art of over-engineering your side projects – Liam Symonds

お金を稼ぐことを目的としたプロジェクトのアンチパターンのお話。

筆者はそのようなプログラミングの傾向として、過剰な機能をもたせすぎるとしている。
そのようなアンチパターンを撲滅するために、筆者がかつて経験した間違いを列挙している。

  1. プロジェクト管理
  2. 過剰に設計されたインフラ
  3. 技術の引き出しへの心配
  4. 独自フレームワークの作成
  5. 継続的機能提供

1. プロジェクト管理

素晴らしいアイディアとどのようにそれを達成するかの見通しを持っているとして。
論理的に、アプローチの計画を並び替えたものをひとまとめにしようとする。
しかしながら、当初の計画にフォーカスしすぎてしまい、「プロジェクト管理」という罠に落ちてしまっている。
つまり、顧客のストーリーを描いたり、バックログの作成やまだ始まってもいないプロジェクトのツールを探し出したり、質実な管理のために大量のお金をかけたりしている。

解決策:
未だ存在しないプロジェクトを管理しようとしないこと。
アイディアとざっくりした時期間だけをノートに書き留める、これだけで良い。
2ヶ月後にそのプロジェクトで何をしているのか予測し始めたとしても、予測通りに行くことはほとんどない。

2. 過剰に設計されたインフラ

プロジェクトの見通しが立ち、その未来を考えられるようになると、 「サービスに100万の人が訪れるようになったらどれくらいスケールすべきだろうか?」とか
「どのようにマルチゾーンの冗長性をもたせようか?」とか
「100%の稼働率をどのように達成しようか?」などと考え始めるかもしれない。

読んでいる人の中にはバカげていると感じる人がいるかもしれないが、その感覚は正しい。
多くの人々は、ユーザー数が適正になるよりも前にその要件を満たすような行き過ぎたインフラ構成になっている。

解決策:
まずは実装すること。
実装したら、アプリケーションが動く最低限のアーキテクチャに展開すること。
多くのユーザーを獲得し、モニタリングをして、負荷と冗長性を考慮したインフラに変更すること。

3. 技術の引き出しへの心配

多くのエンジニアは潜在的な顧客が裏側でどう動いているかを気にしている、と考えている。
顧客はRubyで動いていようが、GoだろうがPHPだろうが気にしない。
気にしているのはパフォーマンスと目的を満たせるかどうかだけである。

解決策:
自分の書きやすい/経験のある言語で書くこと。

4. 独自フレームワークの作成

Bootstrapはつまらないし、Materializeは大きすぎるし…。Foundationはなしだな…。自分で作ったほうがマシだ。

以前はそのようにも思ったけれど、一度完成させてみるとそのような願望はなくなっていた。

解決策:
フレームワークを使って、それをカスタマイズすること。
自分が明確に必要な部分だけをリファクタリング/ビルドをして。

5. 継続的機能提供

「2. 過剰に設計されたインフラ」と似ているが、何一つ提供する前に、継続的に機能を提供する仕組み設計してしまう。
JenkinsやDrone, Travisは素晴らしいツールであるが、それらの設定に時間をかけるよりも、稼働させるべき。

解決策:
まずはビルドする。それから継続的機能提供を考える