(メモ)今日はYAPC::Kansai 2017 OSAKAの日です

  • 8
    いいね
  • 0
    コメント

YAPC::Kansai 2017 OSAKA に参加しておりますので、自分のためにメモを残しておきます。

オープニング / nqounet さん

  • 第2回 YAPC Japan 開催
  • ネックストラップ着けて、飲食禁止(飴ちゃんも)、立入禁止区域、禁煙
  • 電源はB会場、C会場。通路、A会場は禁止。赤ストラップの方の撮影禁止
  • 会場別タグ: #yapcjapanA, #yapcjapanB, #yapcjapanC

実録!『すぐわかるPerl』 / 深沢 千尋 さん

  • すぐわかるPerl、文字コード超研究、すぐわかるオブジェクト指向Perl、かんたんPerl、の著者
    • かんたんPerlがおすすめ
  • 今日の話は作業の省力化の省力化について
  • 汎用機PG→音楽ライター→ソフトハウス(ローカリゼーション会社に変貌)
  • Sprint (Bolandのワープロ) → FrameMaker文書へ
    • 先輩が作ったツールを実行するだけ・・・だけ?
    • awk × sed × sh
  • 初めてのPerl: Larry Wall "awk, sed, shのビーズを糸で繋ぐのを止めて、ブンゼンバーナーで溶かしてみたら真珠へ(!!)"
  • プログラムの4段階: 自分のため(ワンライナー)、同僚のため(社内ツール)、顧客のため(オーダーウェア)、世界のため(汎用ツール)
  • ワンライナー: 拡張子ごとにファイルを集計する例。わからない
    • 10行に書き伸ばせば、意味がわかる : 「テンライナー」
  • 正規表現
    • x スイッチを使って10行に伸ばす
    • マッチさせたい正規表現ごとに分岐してテストしやすくしておく
    • 代表的なテストデータを付けておく
  • すごい正規表現は正規表現しか使えないツールから発生する
    • スーパー検索置換プログラム、オフィスソフト、DTPソフト
  • テンライナーの味噌蔵
    • 自作プログラム集
    • 完動するものを集める
  • 「emacs は "イイ!MAX" という意味」
  • 「すぐわかるPerlはSPEEDだったが、かんたんPerlはきちんとAKBへ対応」
  • 味噌蔵の例
    • 「クパン?シーパン?」
    • SYNOPSIS を動くようにしたもの
    • 正規表現テスター
    • 「M-x しぇがshellのエイリアス」「コンタミ」(contaminationのことらしい)
  • MS-Officeとの共存 (キセルかお墓か)
  • キセル方式: VBA - Perl - VBA
    • マクロ付きdoc(.docm)に、仕様+マクロ
  • お墓方式
    • XE (indeX Entry) から索引を作る例
    • そのままだとUnicode順になる (読みフィールドを加えたい)
    • 任意のマクロ文字列で置換(お墓)→処理→処理語をお墓に戻す
  • 社内ツールの社会学
    • 開発者にとって: 簡単、再利用性、サポートの手間の削減、スキルアップ
    • ユーザにとって: 汎用ソフトより軽い、小回りがきく、ユーザからパワーユーザへ
    • 開発者にとって: ぎりぎりまで使われない、裏マニュアル
    • ユーザにとって: 品質が低い、予算がない
  • 会社の意義
    • 家康(決められた手順)か秀吉(新しい手順)か
  • 質疑応答
    • Q. 年間に書くツールの数は?
    • A. お前は今まで書いたワンライナーの数は覚えているのか
    • Q. 味噌蔵の数は?
    • A. 200件
    • Q. 書籍のレビューアは?
    • A. 担当者のみ。ただし、返答は必ず書籍の修正でするようにしている
    • Q. 年数がかなり経っているが、新しくなっている部分は?
    • A. 昔dankogaiさんのブログに影響されて use strict
    • A. 「今井絵理子さんがあんな人だとは・・・」
    • A. 正規表現がUTF-8対応
    • Q. AKBの選抜総選挙の順位が低い人が居ますが?
    • A. 漢字の呼び方の誤りが面白そうなメンバーを選んでいる

高速化の初歩 / risouさん

  • 「エバーノートでda*nko*aiのIDとったの誰だよ!」
  • 高速化したいとき
    • プログラムは高速に動くに越したことはない
    • 定期的に実行するプログラム(10分間隔が10分で終わらない)
    • クリティカルパス(並列実行している中で一番遅いもの)を早くする
    • 短時間で何度も実行 (プロセス作り過ぎでリソースで死んだり)
  • 素数判定の高速化
    • 10万までの素数を調べるのに6分かかる
    • 割り算を試し過ぎている
    • 割り切れたら諦める → 10倍の速度に
    • 割る数字は素数だけで良い → さらに10倍の速度に
    • sqrt n 以下だけ試せば良い → 0.126 sec へ
    • この先は、費用対効果が悪い
  • エラトステネスの篩 : 0.026 sec
    • 良いアルゴリズムを選ぶことが大事
    • サンダラム、アトキンの篩
  • メモ化
    • フィボナッチの例: 545 msec から 0.114 msec へ
    • Memoise : Perlに入っているが、手で書いたほうが速い
  • List::Compare
    • 17msecから35msec(遅くなる) 前処理が遅いため。
  • モジュールは汎用性が高い。用途によってはチューニングしきれないことがある
  • (ダーティーな)小ネタ
    • join より . が速い
    • 固定値を先に計算したほうが(20より後のPerlはオプティマイズされる)
    • ループ内で関数を呼ばない
    • SoA(Structure(Hash) of Arrays)とAoSだと、SoAの方がCloneが速い
  • 高速化は本当に必要か
    • ボトルネックはコードにないかもしれない。
    • DBのチューニング、CDNの利用
    • NYTProf の利用

Vue.jsで作るSPAから学ぶMVVM、非同期処理、その光と影 / しんぺいさん

  • 牧歌的クライアントWEB : HTMLをレンダリング
    • JS、非同期処理は味付け
  • リッチなUX: チャット、動画、音楽
  • SPA : 画面遷移で状態がリセットされない
    • 問題: ブラウザはドキュメントビューア。SPA・・・?
  • ブラウザを作っている人は自分より頭がいい
    • SPAでページ遷移とかはよくない
    • とは言え、あり得る
  • SPAの先輩はGUI
  • GUIのアーキテクチャ MVC, MVP, MVVM
    • プレゼンテーションドメインセパレーション
    • UI定義とイベント、以外は全部Modelに書く
  • MVVMは、JSだとVue.jsが良い
    • View, VM, Model(usecase, repository, data/domain model)
    • 全てクライアントサイドにある
    • VMはModelの voidなメソッドを叩く (密結合しないため)
    • Modelの状態の変化をVMが監視する
    • 状態はすべてModelが管理する
    • プレゼン層は状態の監視に徹する
  • 永続化 : Cookie + Session に載るのがいいでしょう
    • CORSの問題 : Safariだとthird partyのCookieが捨てられる
    • CSRF問題 : 普通のWEBアプリケーションと同様
  • WAFが脆弱性対策などをしているので、そのレールに乗ったほうが良い
  • レースコンディション
    • プレゼンテーション、ModelとAPIを1-1にしない
    • サービス層を作り、VMはサービス層のみを叩く (サービス層で非同期処理の待ち合わせ)
  • まとめ
    • SPAはやめよう、やるならGUIを参考に、ブラウザの恩恵は大事
  • 質疑応答
    • Q. Fluxとの違いは?
    • A. プレゼン層へのDIをどうするか、あたり

レガシーな Perl システムに DDD(ドメイン駆動設計) を取り入れる / @sairoutine さん

  • 関西人は「~まんねん」とはいわない(「あめちゃん」は言う)
  • (PCがフリーズ)「command + option + ESC」
  • Mobage 11周年、 1131タイトル稼働中、 5191 タイトルが終了
    • Perl 5.8.8 で動いている。独自フレームワークMobaSiF
  • ブラウザゲーム運用 : LAMP + Memcached
    • 月4回のイベント
    • 新規イベントは1からゲームを開発
  • MVC
    • Model : O/Rマッパー
    • View : Mtemplate / ガラケー3キャリア対応を1つのHTMLで
    • Controller : "Page層" URLとのマッピング、validation
  • 7年のサービス運用
    • 人の入れ替わり (現行メンバーが書いたものは10%程度)
    • 知識の継承ができていない
    • 仕様の肥大化 (既存仕様との不整合。タスクの見積もりが難しい)
  • レガシーPerl特有の辛さ
    • euc-jp, Shift_JIS : 最近のエンジニアには通じない
    • 引数がなんだかわからない(引数のデータ構造をコードから推測)
    • 神クラス、addXXXInfo、巨大if、グローバル変数
    • 超モノリシック: タイトル1つが壊れるとmobage全体が壊れる
  • きちんとOOPする
    • DAO層の追加 : コントローラにSQLを書かない
    • Model層の追加 : fatコントローラの解決
    • Logic層の追加 : fatモデルの解決。ゲームロジックのみ
  • OOPで足りない部分
    • OOPについての指針
    • DDD
  • 書籍: ドメイン駆動設計と、実践ドメイン駆動設計
  • 哲学と戦術に分かれている
  • 今回はドメインモデルとレイヤ化アーキテクチャ
  • レイヤ化アーキテクチャ
    • View / Controller(入出力), Controller / Service(ドメイン層のオブジェクトの協調), Domain(ロジック), DAO(インフラ)
  • Domain層とService層を追加した
    • Domainは状態を持つ、Serviceは状態を持たない
    • ロジックをDomainとServiceへ分離
  • 例: ボスへの攻撃処理
    • Domain::User, Domain::Boss, Domain::UserItem, Domain::UserItem, Domain::BattleField の発見
    • 発見されたものをさらに詳しく見る : Domain::Deck, Domain::Card, Domain::Boss::* の発見
    • Service::Attack ドメインを組み合わせて、攻撃時に起こる状態の操作
    • 難点: 状態を持てないので、引数が長くなりがち
    • Service が処理の順番を担保
  • エンジニアが考えること
    • ドメインモデルの発見
    • ワークフローを考える
  • DDDについて議論になったところ
    • 古いコードとの接続 : リファクタリングするか、ラッパーを書く
    • サービスは状態を持つべきか : Serviceをシンプルにするため、制限した
  • チームメンバーの巻き込み
    • 新規イベントで個人的に採用
    • コードをベースにメンバーに伝達(口頭/レビューでの摺合せすべきだった)
    • 勉強会で広める (コードを書く前の勉強会ではピンと来ない)
  • 解決したこと
    • 静的関数、生のデータ構造はドメインモデルに
    • ifはポリモフィズム
    • 戦術だけ見るとただのOOP。大切なのは哲学
    • 大切なのは理論ではなく、チームで共有できた認識の方
  • 展望
    • 既存のコードを置き換えたい
    • ユビキタス言語も取り入れたい

Mojolicious で Web開発のすべてが「簡単」に / 木本さん

  • サンプルコードPerl入門

    • 初心者の本が少なかった
    • 初心者のために役に立つサイト
  • Mojolicious

    • WEB開発に使う機能が詰まっている
    • 今日はGitPrepの中身を
    • cpan Mojolicious で簡単にインストール (cpanmじゃない?)
    • 1ファイルでWEBアプリケーションが(数行でも)
    • 最初のステップが小さいと楽
  • paramevery_param(チェックボックスなど)

    • 値の復元 ( HTMLFillInForm 的なもの)
    • QUERY_STRINGPOST 文字列も意識しなくていい
  • url_for, query

    • url_with クエリ文字列の改変
  • PHPみたいにHTMLの中にPerlのソースコードが書ける (初心者向き)

  • セッション : CookieとJSON

  • Mojolicious は「小さく初めて」大きく成長させる

  • GitPrepのソースコードの例

    • ルーティングの定義は階層的に
    • テンプレートの中でパラメータなどにアクセスできる
    • session の例: ソルトがある、https を使う、なのでパスワードをCookieに入れても安全
    • その他、リバースプロクシ、ログイン、など様々な疑問をMojoliciousが解決
  • 自社製の古いフレームワークのMojoliciousへの置き換え

    • PHPとPerlの混在
    • PHPからPerlを呼び出したり
  • リファクタリング : 小さな作業をコツコツと

    • Shift_JISをUTF-8へ
    • アプリをEUC-jpからUTF-8へ
    • MySQLをEUC-jpからUTF-8へ
    • 自社製WebをMojoliciousへ
    • ソースコードが半分以下、保守性は5倍に
  • テンプレートの独自記法 → Mojolicious でPerlへ

  • HTML::FillinForm → Mojoliciousへ

  • セッション情報をファイルに保存していた → Mojoliciousセッション×HTTPSへ

  • 辛かったこと

    • 文字コードと独自フレームワークの混在との戦い、クリティカル
  • 面白かったこと

    • 新しいことへのチャレンジ
    • リファクタリング(家のリファクタリングは無理)
    • 緊張感
  • WebSocket

    • クライアントとサーバの双方向通信
    • 接続の開始はクライアントだが、その後は対等な関係
    • リアルタイム性
  • リアルタイムチャットはHTTPでは難しい

    • ポーリングになるので時差が出る
    • ロングポーリングは実装が複雑
    • WebSocketでは簡単
  • 大量接続をさばけるのか?

    • Mojoliciousは非同期I/Oをサポート
  • 問題点

    • F/Wのパケットフィルタリングなどで弾かれる(SSLを使うといい)
    • リバースプロクシが難しい(nginx または AWS)
    • 到達は保証できない(順序は保証される)
    • ポーリング、ロングポーリング、EventSourceなどのほうが適することも多い
  • リアルタイムチャットのデモ

    • 「こんにちわ」「こんちちわ」「やぷし」
  • リモートコントローラーのデモ

    • ボタンを押すと、別のブラウザの猫が動く
    • events->on events->emit send
  • 質疑応答

    • Q. 引き継ぎ前のシステム書いた者だけど、PHP部分のパフォーマンスは悪化してない?
    • A. アクセス数少ないから断定はできないけど、恐らく大丈夫

mail_form.cgi reboarn / dankogaiさん、moznionさん

  • 個人的にはSMTPは生まれる前に消し去りたい
  • アカウントを作成する時に必要なもの(代替がない)
  • 受け取ったコード
    • cgi-lib.pl jcode.pl が今のUbuntuでは動かない
    • CGI.pmEncode.pm に置き換えた
  • 使ってるマシンは普通の 2014 Mac Book Pro
    • ZFSでパーティションを切っている
    • ZFSだと圧縮がきくので、VMも省スペースになる
  • 現在の mail_form.cgi を動かした(拍手)
  • ここからは筋書きなしの本番
  • CPANモジュールをインストールしようと思ったが、wi-fiのない会場なのでパケ死が怖い
    • 宿のwi-fiも死んでた( apt update で30分とか)
  • HTMLが大量に埋め込まれてる 「PHPerなら普通でしょうけど」
  • sendmail は入ってない環境もある
    • ssmtp
  • Encode::from_to はイミュータブルではないので使いたくない
  • サブルーチン先頭の &
  • ファイルハンドル MAILmy $fh
  • 「テスト無しで触るのは怖い」「昔はよくやってた。心臓止めないで心臓摘出手術するようなもん」
  • open にリスト形式でコマンドを渡すと、shellが起動されないので安全となる
  • 「送ってみましょう・・・あれ?」元に戻すと、メールが来る
    • 時間もないので諦め
  • print がたくさんあるのも・・・ → ヒアドキュメント使いたい
  • ページの処理毎にサブルーチンを分離 sendmail print_form
  • 「弾さん、セミコロンがありません」「よくやるよね」
  • 「いやあ・・・これ辛いなあ」
  • エンコーディングを UTF-8 に
  • このスクリプトの美しい点 : 1ファイルに全てのdataが入ってる
  • 「1時間のリファクタリングで10年戦えたら虫が良すぎますね」
  • メアドの正規↑表現↓がガバガバ → http://emailregex.com/ からすごいのをコピペ → シンタックスエラー
    • 「コピペプログラミングは良くないという見本」
  • 「だいぶよくなってきましたね」「だいぶよくなってきたけどこんなので10年戦いたくない」
  • $cgi->Vars$cgi->param(...)
  • 「こういうの(リファクタリング)は恨み言を言いながらやるとよかったりしますよ」
  • 「現状どのくらい戦えますか?」「3日?」
  • 5.24 から CGI モジュールは標準ではなくなりました
  • (ここでプロジェクターの電源が落ちる)
  • 「ライブコーディングには魔物がすんでますよ!」
  • 「(話を)つなげますか!どうつなげますか!」「(HDMIが)いや、つながってるよ」
  • あと180秒!
  • 「弾さん、ここらでまとめを」「まとまるの?これ」
  • use strict use warnings しちゃったので、後十年は持つと思います
  • プロジェクタは時々壊れるので注意を
  • 仕事を安請け合いしないようにしましょう!

Perl ウェブ開発の中世 〜CGI と Plack の間〜 / OGATA Tetsuji さん

  • 歴史と歴史から学べることの話
  • 1991年WEB誕生、1993年CGI誕生
  • 1995年Win95、1999年i-mode で日本でのインターネットの普及
  • 1990年代にCGIの誕生とウェブ人口の急増
  • CGIが高コストなことが問題
    • CGIスクリプトの実行が重い
    • シェルでのコマンド実行と同じ
    • Perlは初期のCGIで絶大な支持
    • 大航海時代の会社は案件が終わる度に終了していた → 無駄を省くために東インド会社の誕生
  • CGIとしてのPerlの利点
    • ISPがトラブルに対応しやすい
    • Perl以外のスクリプト言語は対抗馬が黎明期
    • 会社でも利用されるようになった
  • 大手企業、中小企業がCGIの遅さに耐えられなくなる
  • Apache mod_perl の登場
    • 海外で生まれたのは1997年
    • PerlでApacheモジュールを書けるようにする仕組み
    • CGIが速く動く、のは副次作用
  • FastCGI
    • CGIとは違うメカニズム
    • 言語の種類は問わない
    • Apacheではmod_fcgi
    • PerlではFCGI
  • SpeedyCGI
    • Perlに特化したもの
  • mod_perl VS FastCGI
    • mod_perl はApacheNi依存したチューニングが可能
  • WEBサーバの形態
    • prefork, イベント駆動, スレッド
    • Apacheは MPM の差し替えで prefork, event, worker
  • PSGI / Plackの誕生
    • WAF開発者が様々なWEBサーバに対応するのが苦しい
    • CGIの仕様と寄せている
  • PSGI / Plackへの学び
    • あえて簡単にして支持を得る
    • 競争すべき以外の部分では協力
  • 現代の選択
    • 周囲の人に支持されてるもの (Mojolicious, Amon2)
  • 古いものが悪、新しいものが善、とは限らない
    • 新しい技術の豆乳が直接利益につながるわけでもない
    • 他人の意見を尊重し、自分に自身も持つ

はてなシステムの考古学 / motemen さん

  • あるPerl企業の15年を追うケース・スタディ
  • 老舗ベンチャー 2001年から。2016年上場
  • 古代 2001-2004
    • エンジニア2名
    • この頃はPerl企業 (すぐわかるPerl、プログラミングPerl, Apache 拡張ガイド)
    • CGI → Apache::Registry 2001年。use strict my
    • OOP、フレームワーク、CVSの導入
    • Hatenaフレームワーク : mod_perl の MVC、HTML::Template
    • 人力検索サイトはてな、はてなダイアリー
  • 中世 2004-2007

    • Hatena2 フレームワーク : mod_perl2、ヘルパースクリプト、ローカルサーバ
    • 早ければ1日でサービスインしていた
    • はてなブックマーク 2005-02-05 合宿開始、 2005-02-10 ベータリリース
    • はてな匿名ダイアリは1日でリリースされた
    • はてなグループ (2004)
    • 開発スタイル : 情報公開、50%(の完成度)ルール、1人1プロダクト、立ったまま会議、フリーアドレス
    • オープン戦略
    • インフラチーム 2007 : チームらしいチーム(この時のツールがマカレル)
  • 近世 2007-2011

    • エンジニア20人。ソフトウェア的に反映していた時期
    • 京都に戻って、開発に集中
    • はてなブックマークリニューアル : AI手法、負債返却
      • チーム開発とフレームワーク
      • エンジニア4、デザイナ2、9ヶ月
      • Ridge, DBIx::MoCo, Ten.js => modules-Hatena
    • Ridgeへの道
      • Hatena2.5、RoR、Catalystなどが候補に
    • サマーインターン (2008年から)
      • 成功体験を持ち帰ってもらう
      • リクルーティング
      • 副作用: ドキュメント、社員教育の体制の整備
    • 新しいサービスを作りやすかった
      • Ridge + Moco、RPM管理
      • forkの蔓延
  • 近代 2011-2014

    • はてなブログ (2011) (はてなダイアリーのリニューアル)
    • 何も実装がないフレームワーク
      • フレームワークは設計指針
      • Plack/PSGI, Router::Simple, DBI::SQL::NamedPlaceholder, Text::Xslate, JSON::XS
    • 現在の基盤にもなるもの: Plack, Starlet, Carton, daemontools, nginx, MySQL, Redis
    • 洗練されたチーム開発 : 開発フローについて話すのが流行った
    • 2012 : GitHub Enterprise : PRレビュー、wikiは未使用
    • 開発フローの伝搬 : IRC/Slackでの口コミ、異動に伴って伝搬
  • 現代 2014-

    • 多様化 : エンジニア50人
    • mackerel (2014)
      • 当時CTOの肝いり
      • Scala / Go / PostgreSQL
    • Perlによる大規模開発の課題
      • 長命サービスの保守、大規模Perlの難しさ
      • DDD用語が使われるようになった
    • 2015 はてなブックマーク in Scala
    • Perlも健在 : 開発の高速さ、知見、枯れてる
    • BrandSafeはてな (2014)
    • 東京オフィス、シニアエンジニア制度(エンジニアのメンタリング)
  • ここまで見てきた歴史とフレームワークが対応している

    • フレームワークは何をしたか : 開発の加速、技術スタックの規定
    • 近代以降は設計指針になった (指針を開発の枠組みとして共有)
    • 明示的(コード、日記)、暗黙的(経緯、空気)によってもたらされた
    • 知識は暗黙知と形式知の間を行き来
      • カンファレンスで発表→聞いた人が実践→・・・
    • 過去と比較をすると、現在を語ることができる
    • 10年後の未来を語ることができる
  • スライド作成にYAPCのスライドとインタネットアーカイブが便利だった

  • 質疑応答

    • Q. 上場によってエンジニアに変わったことは?
    • A. セレモニーに出た程度。とくにない
    • Q. perlcodesample書いてるんですが、はてなダイアリは開発続いてますか?
    • A. 新規機能はやってない。要望があればはてなブログに追加される

Lightning Talks

Perl流では5分でドラで強制的に切りますよ。

沖縄でPerlに入学したので勢いでLTしてみた / 八雲アナグラさん

  • 2016年のPerl入学式で衝撃を受けた
  • ハッシュリファレンスがかっこいい
  • Perlを書いていたら成人していた
  • Acme::MadokaMagika を作った
  • マミられる機能はありません
  • ->qb メソッドで色が black に変わる
  • READMEが適当、バグが多い、メソッドが動かない
  • 「Perlたのしー!」

Twitterの非ブロック数可視化ツールを作ってみた / おささん (@osaponさん)

  • ブロックとは? 嫌な人が見えないように
  • 広告の報告
  • 先行ブロック : そりの合わなそう人を先行してブロック
  • ブロックした人数はわかるが、ブロックされた人はわからない
  • 自己申告してもらうと良い blolook
    • 2億件くらい
  • ブロックをバラすのはよくない
    • 誰からブロックされたか気になる、という声はあるが、対応しない

Hokkaido.pm 参加報告 / azumakuniyukiさん

  • 参加したいなと言っていたら papix さんに行くとツイートされた
  • 北海道いいよねって話をしてきた
  • ytnobody さんの Azure Functions の話が面白かった
  • 翌日 小樽のはやしや食堂、ホッケ定食
  • 飛んでいたら Sisimai が Azure Functions で動いていた
  • Perl入学式札p(ドラ「ごーん」)

仮想環境でWindows版Perlをビルドする / 白方 健太郎さん

  • 「最新版のWIndowsでは動きません」「環境がない」
  • 仮想環境でWindowsのPerlをビルドする
  • Windows10評価版を使うと良い
    • MSアカウントを作ってアンケートに答えれば
    • 英語版を使うこと
  • Visual Studioも無料の英語版
  • VS2013にはgit機能があるので、Perlのソースを落としてくる
  • Makefileの中の、CCTYPEを使うコンパイラについてコメントアウト
  • Visual Studio Tools の Native Tools Command Prompt を使う
  • nmake を使ってビルド
  • -g オプション対応してますよね?」(ドラ「ごーん」)

スケジュールに意志を込める / i47_rozaryさん

  • Project Monaging よりの人間
  • 1週間ごとにリリースび固定
  • 予定タスク < 差込タスク だった
  • タスクを事前に聞きに行って、計画を立てる
  • 納期と成果物の乖離
  • ステークホルダーの意志を入れる
  • 懸念点を出しておく
  • チームで合意を取る
  • 問題を隠さない、説明を尊重する
  • こうありたい、という意志を持つ
  • (ドラ「ごーん」)

驚くべきことにPerlの話 / makamakaさん

  • 酔っ払わないほうがいいでしょう
  • Time::Pieceに yyyy-mm-dd などを生やす
  • 無理じゃね? => 演算子overload
  • yyyy/mm/dd はできない (m//) とかぶる
  • 「ページがたくさんあるけどパラパラ漫画なのでご安心を」
  • Acme大全2016
    • 615個のAcmeモジュール
  • Parumon カードゲームをボードゲームに移植
  • ゲームバランスが悪い (納期が襲ってこない)

温故知新 / 竹迫 良範さん

  • 未踏
    • Dripcap
      • packet analyzer
      • Electron ベース
      • JSでプラグインを書ける
    • Noah
      • LinuxバイナリをMac上で動かす
  • UNIX、アセンブラ、昔の技術を若手に伝承したい
  • アセンブラ短歌
    • アララギ派 : 命令を流れるままに扱う
    • .comバブルの再来
  • どうやって若い人を育成?
    • アセンブラかるた
  • 日本でいちばん有名なハッカー 「下村努」
    • Take downで映画化
  • MITの鉄道模型クラブが発端
    • ありものから便利なものを作ること hacking
  • ソフトウェアのハッキングは目に見えない
  • FORTRAN
    • IBM 704 パンチカード
    • 72カラムでの折り返しの起源
    • 紙テープ節約のコードゴルフが行われていた
  • KT-80
    • メモリの値を直接読み書き
    • 設計図も添付
    • (最近) 大人の科学 : 4bit マイコン
  • Harvard Mark I Computer
    • ループはなかった (物理的に紙テープを輪にする)
    • データと命令が完全に分離されていた
    • 世界最古のバグ (蛾が挟まってた)
  • COBOL
    • 実は自然言語で処理を記述できる
    • . で終わるのは古い言語、 ; で終わるのは新しい言語
  • データとコードが分離されていない == セキュリティリスク
    • HTMLにJSが書ける
    • 文字列の組み合わせでSQL文を生成
    • データ領域でコード実行を抑制(ハーバード・アーキテクチャの復権)
    • 実行されないと思っているデータに実行コードが混入する
  • 0 1 を実践的に学べる場所が必要
    • 公道でこれらを試すと逮捕される時代
    • コンテストで伝授する
  • ローマは一日にして成らず → せめて2日は欲しい
  • FM TOWNS
    • 最初から 32bit
    • LSI C-86 試食版
    • アーケードで100円使うのが勿体無いので、ゲームを作り始めた
  • シュレディンガー方程式を調べるために図書館に行ってた
    • 今の基礎
  • Silicon Graphics INDY
  • Sun SPARC station LX
    • 50M Hz (CPUのクロック数)
    • 学生1人辺り 10MB HDD容量
  • C, X11 programming
  • ロボットの制作
  • Namazu の改良 (初めてのオープンソース)
  • JavaかPerlかで、Perlを選択してしまった
  • Shibuya.pm のリーダーの引継 : 「バソキヤを食べる」
  • Perl Cookbookの監訳
  • 2003年 Shibuya.pm で初登壇
    • mod_perlにおける C10K Problem
    • 推測するな、計測すべし
    • 適切な MaxClient値の設定
    • KeepAliveはoffにすべき
    • Esehttpd + Pound
    • ETagが効くとか効かないとか
    • disable_ssl.h を作るhackとか
  • 正規表現でマインスイーパー
    • YAPC Asia 2011 のマインスイーパーのソルバ
    • 画像処理と Win32::GuiTest
    • デバグが大変(キーボードとマウスの制御が奪われている)
    • Perl Killer USB!!
  • 高専生による Bad USB の自作
    • Alpine Linux / 10MBくらいでツールを配れる
  • 最近はマネージメント業務
    • Perlの知見 : 自動化、一元管理
    • Excel 方眼紙の自動化
  • 動機と能力が被っていると、幸せな仕事
    • 就職してから能力を増やす
    • グルー人材が重要
  • 50代には社会を良くすることに取り込みたい
    • Audrey Tang の入閣
    • Perlコミュニティの良いところ
  • 10年後、100年後を考えて成長していくとよい

クロージング

  • かんたんPerl当選者発表
  • ベストトーク
    • Webエンジニアに知ってほしいRDBアンチパターン
      • 賞品 "RICOH THETA S"
  • ベストライトニングトーク章
    • 驚くべきことにPerlの話
      • 賞品 "HHKB Pro Bluetooth"
  • 参加者は180人
  • スタッフ写真撮影
  • 今後の予定
    • 2017年7月1日 YAPC::Hukuoka 2017 HAKATA
      • トーク応募も始まってます
    • 2018/XX/XX YAPC::Okinawa (!!)
    • 201[89] YAPC::Tokyo