東京Node学園祭2018に参加したのでアウトラインメモ。

Keynote

  • Node学園のロゴが変わった
  • NodeFestは今年で最後、来年からJSConf JP(仮)の予定

Offline-First Collaborative Data Structures

  • P2P データプロトコルのDataについて
  • P2P === Can run anywhere === Don not trust specific server
  • 話すこと
    • P2P
    • Append only logs
    • Hash Array Mapped Tries
  • 普通のサーバへの接続方法

    const net = require("net") const socket = net.connect("test-server")

  • 名前が暗号化されてない

  • 問題: すべての通信を暗号化したい

  • P2PのPublic Keyがnameになって名前解決する

    • 名前もpublic key的に暗号化される
  • noise-network - npm

    • NOISE protocolでつなぐ
    • public key === name
  • デモ

    • NOISEを使って接続する
    • 普通のnetではhostnameが暗号化できない。 P2P/NOISEではhostnameにpublic keyを使って名前も暗号化して通信できる。
  • Append only log

    • 追記のみのログ
    • Merkle Trees
    • ハッシュ木で実装する
  • 例) 5 が欲しい時

    • 5から親をたどり、UNCLEからのハッシュ値を照合する
    • log(2n)
  • HAMT ~ イミュータブルで高速なハッシュマップ ~ | κeenのHappy Hacκing Blog

  • hypercore - npm

    • append only log
  • DEMO

    • NOISEでつないてhypercoreでappend only log
  • Hash Array Mapped Tries

Accessibility vs latest Web APIs. Can’t we just get along?

LT

ちゃんとリソース開放していますか?

  • Node.jsでWebアプリを作ってる人が対象
  • MySQLとかのコネクション管理について
  • DBコネクションの管理方法ついて
  • リクエストが大量に来たときに、開放忘れのコネクションが大量に残る
  • → 開放の3つのルール
    • 正常終了したとき
    • 異常終了したとき
    • 既に切断済みのばあい
  • → on-finishedが同じ事をできる

Node.jsでIoTっぽいことをする

  • obnizというIoTデバイスを作る
  • リアルアンパンデバイス
    • JavaScriptでサーボモータを90度回転といったことができる
    • Fusion360というCADソフトを使って3Dプリンタを使って出力
  • りあるど根性ガエル
    • 眠くなったら起こしてくれる
    • お腹にGoogle Homeが入ってる

Andrey

  • PostCSS の作者
  • 失敗について
  • Lesson 1: There is no such thing as stupid users. There is only bad UI
  • Lesson 2: Always report about issues. Even if it was a documentation issue
  • Lesson 3: Let the Robots do the work. Robots must suffers

power-assert v2

  • power-assertの哲学 「テストコードは投資、テストフレームワークは投資を無駄にしてはいけない、ゆっくり進化する」
  • power-assert
    • 覚えることを極端に少なくしてる
  • 後方互換性
  • 次の3種類
  • Source compatible, Binary compatible, Functional compatible
    • Functional Compatibilityが難しい
    • 作者が見てるスコープとユーザーのスコープが異なる
  • 作者はユーザーのアメーバのような利用スコープの面倒を見る
  • Nodeはsemver
    • majorでグレーな変更
    • majorであげるとき: デフォルトの設定を変えるとき
    • 破壊的変更時にmajorを上げるのは約束
  • power-assert v2
    • fix: avoid false positives
    • feat: async assertion
      • assert.rejectsassert.doesNotRejects などのサポート
      • 後方互換性がPromiseによって破壊された
    • chore: polyfillの掃除

How to choose the best npm modules for your team?

  • How many npm module are you using?
  • 4 repositories
    • 20 ~ 75 npm moduleがある
    • = 197 modules
    • = 197回の決定が必要
  • npm moduileを選んだ理由を説明できるか?
  • ゴールの決定
  • 候補について考える
  • 何を使うかを決める
  • 問題を解決する

kosamari

  • https://squoosh.app/ というアプリを作った話
  • wasmを使った画像変換ツール
  • 要件
  • 既存のツールを使う
  • フレームワークを使う
  • GitHubで開発する
  • クロスブラウザ対応
  • 画像処理アプリを作ろうという話になった
  • CLIで画像変換するのが嫌でGUIを作る
  • 小話
    • wasmにスレッドが入った -> Cのモジュール自体がスレッド対応してなかった
    • WebWorker -> 途中で止められない処理を扱うのに便利、workerごと捨てれば止まる
    • webpackめんどくせい -> minifyで魔法が適応される(dead codeを削除)
    • Preactを使ったのでファーストビューで読んでいる
    • Netlifyでデプロイしている
  • 今後の予定
    • iframe embed
    • crop
    • バッチ
    • 対応codec