読書メモ:イシューからはじめよ(1)

バリューのある仕事とは

  • イシュー度(置かれた局面での答えをだす必要性の高さ)と解の質(どこまで明確に答えがだせているかの度合い)が高い仕事
  • 解の質が高い仕事であってもイシュー度が低いと結果的にバリューのある仕事は生まれにくい(犬の道)
  • 誤:「問題かもしれない」 正:「今この局面で白黒はっきりさせるべき問題」

イシューの見極め

  • 相談できる相手をもつ(本当に受け手にとってインパクトがあるのか?)
  • 具体的な仮説を立てる(答えが出せる形になる、必要な情報と分析がわかる、解釈が明確になる ので)
  • 言葉にする
    • 主語と動詞をいれる
    • 「〜はなぜ?」という形にしない、「〜すべきか?」にする
    • 比較表現にする
  • よいイシューの条件を満たす
    • 本質的(イシューは状況に応じて変わる)
    • 深い仮説
    • 答えが出る

イシューが見つけにくい時

  • 変数を削る
  • 視覚化する
  • 後ろから考える
  • so what?を繰り返す
  • 極端な場合をかんがえる

イシューからはじめよ―知的生産の「シンプルな本質」

イシューからはじめよ―知的生産の「シンプルな本質」

nature of code:今日の練習「障害物を避けて獲物に向かうように進化するビークル」

See the Pen 障害物を避けて進化 by kanaparty (@kanaparty) on CodePen.

前回

tuitui.hatenablog.com

のコードをベースに、障害物を設置してそれを避けて通るように進化させる課題。

前回のコードとの大きな違いは、ビークルの表現のクラスのなかの、適応度を更新する部分。

//適応度を更新
  updateFitness() {
    this.fitness = Math.pow(1 / this.RecordDistance * this.finishTime, 4);
    if(this.hitObstcle){
      this.fitness *= 0.01;
    } else if(this.hitTarget){
      this.fitness *= 2;
    }
  }

前回はライフサイクルが終了した時のビークルの位置を見て適応度としていたが、
今回はライフサイクル中に一番近い付いたときの距離と、そのサイクル数の短さが適応度に反映されるようにする。
また、ターゲットにぶつかったときは2倍の適応度に、障害物にぶつかったときは10分の1の適応度にすることで重みをつけている。

この課題、写経なのでなんとなくできている感のある動きになってはいるものの、
適応度を図る部分や突然変異率、母数などちょっとしたことが与える影響がかなり大きくて 自分一人で1から組み立てチューニングできるようになるのは大変なんじゃないかな、と思ったり。。

nature of code:今日の練習「獲物に向かうように進化するビークル」

See the Pen 獲物に向かうように進化するビークル by kanaparty (@kanaparty) on CodePen.

久しぶりにnature of codeの課題!
前回の進化の課題の表現を文字列から運動に変えて、 解を「獲物(画面右端の丸)にたどり着くこと」とした。
はじめはてんでバラバラの方向に向かう集団が、世代を進めるとだんだん獲物に辿り着けるように進化していく。

読書メモ:webを支える技術(1)(2)

URL URN URI

URL(リソースの場所)、URN(リソースの名前)、URI(リソースの識別)

REST

REST・・・webのアーキテクチャスタイル(指針・作法・流儀、システムを設計するときの指針)

リソース

  • web上に存在する、名前(URI)をもったありとあらゆる情報のこと。
  • URIを使うことでプログラムがアクセスできるようになる。
  • 複数URIをもったリソースもある。
  • ひとつのリソースは複数の表現ができる。
  • リソースには状態がある。

クライアント/サーバー

  • ステートレスサーバー
    アプリケーション状態を保存しない
  • キャッシュ
    いちど取得したデータをクライアントで使い回す
  • 統一インターフェイス
    httpが8個のメソッドしかもっていないのとかがそれ
  • 階層化システム
    負荷分散したりできる
  • コードオンデマンド
    プログラムをサーバからクライアントへ落としてきて実行する(jsとか)

クールなURI

「クールなURIは変わらない」

  • 言語依存の拡張子を使わない
  • 実装依存のパス名を使わない
  • メソッド名を使わない
  • セッションIDを含めない
  • そのリソースを表現する

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

読書メモ:webを支える技術(3)

TCP/IPについて

インターネットのネットワークプロトコルは階層型になっている

  • ネットワークインターフェイス
  • インターネット層
    パケット単位でデータのやりとり。IPが相当する部分。データ送り出すことは保証するが、送り先に辿り着いたかの保証はしない。
  • トランスポート層
    TCPが相当するところ。データの転送の保証をする。接続先の相手にコネクションを貼ってデータの抜け漏れがないかチェックする。 どのアプリケーションにデータが渡るか決めるのがポート番号。
  • アプリケーション層
    メールやDNSやHTTPを実現するところ。

ソケット・・・ネットワークのデータのやりとりを抽象化したAPI


ステートレス

HTTPはステートレスなプロトコル

ステートレス ←→ ステートフル

  • ステートレスでは・・  - アプリケーション状態を保持しない

    • クライアントのリクエストメッセージに必要な情報をすべて含める(自己記述的メッセージ)
    • サーバ側のシステムが単純になる
    • でも毎回必要な情報を送るので送信するデータ量が多くなる
    • ネットワークトラブルが起きたときにリクエストが処理されたかわからないので通信エラーへの対処が必要  
  • ステートフル

    • 代表的なものにFTPがある
    • クライアントの数がふえると同期するサーバも増やさなくてはいけなくて大変

アプリケーション状態・・セッション状態(ログインしてからログアウトするまで)のこと


HTTPのメソッド8個

HTTP入門

POSTとPUT

どっちでもリソースの作成ができる。でも、クライアントがURIを決めたいときはPUTが適しているが そのURIが存在しているか調べたり、クライアントが内部実装を熟知していないといけなかったりするので 特別な理由がない場合はPOSTでリソース生成をしたほうがよい

べき等

冪等 - Wikipedia 「ある操作を1回行っても複数回行っても結果が同じであること」

  • GET HEAD ・・・ べき等 で 安全(通信エラーが起こっても結果がかわらない)
  • PUT DELETE ・・・ べき等
  • POST ・・・べき等ではなく安全でもない

POSTの誤用に注意

GET PUT DELETE で実現できる機能はべき等と安全性が利用できるのでなるべくそれで実現する


ステータスコード

クライアントの挙動を左右するのでステータスコードの選択は重要。

ステータスコードは先頭の数字で分類されている

  • 1** 処理中(クライアントはリクエストを継続するか再送信)
  • 2** 成功
  • 3** リダイレクト(レスポンスメッセージの locationヘッダを見て新しいリソースに接続する)
  • 4** クライアントエラー
  • 5** サーバーエラー

認証

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)