KISSの法則++
課題を1つ解決するためにそれ以上の複雑性を持ち込むのが素人の筋悪。
複数の課題を同時に解決するのがプロのアイデア。
時間と共にドロドロの魔女鍋のようなコードにしてしまうのが素人の限界。
時間と共にシンプルで明確なコードになり、後の事まで考えた設計/テストを残すのがプロの精錬。
— コラーゲンたっぷりさん (@uupaa) December 6, 2015
アイデアとは, 解像度を高める, ナイーブ性
“コードが仕様書。我が生涯に悔いなし”は、エンジニアの辞世の句。
創業者が急いで書いたコードは大抵が糞コード。創業者より優秀なエンジニアが入社したら全て書き直してもらうのがベスト。聖域無きリファクタリング
— コラーゲンたっぷりさん (@uupaa) December 6, 2015
フェーズとフォーカス, 事業の継続性, 机の奥のカビパン(リスクを取らない事がリスク, 腐ったミカン)
コードには寿命がありその価値は時間と共に失われる。メタ情報(設計,テスト)があればコードがダメになっても書き直せる。引き継ぎ可能なメタ情報には資産価値がある。
メタ情報のないコードは糞コードに分類される。
コードを利用する事で生まれる価値と、コード自体の価値を混同してはいけない
— コラーゲンたっぷりさん (@uupaa) December 6, 2015
コードの資産的価値, 普遍的な設計の価値, フェニックス性
Update Bit.js, ExpGolomb.js and HexDump.js
Bit.js, ExpGolomb.js, HexDump.js を更新しました。
- Bit.split1 〜 4 を Bit.split8 〜 32 にリネームし、byte 数ではなく bit 数で幅を指定するように統一しました
- BitView の再設計を行い、BitView#u1 〜 u8, u16, u24, u32 を追加しました
- BitView#ug と sg を追加しました。Exponential-Golomb coding で符号化された bit を読み進めることができます
- ExpGolomb.js で negative value (負の値)をサポートしました
- HexDump でスタイルの重ね掛けが可能になりました
- options.rule[tag].bold:Boolean = false を追加しました。"font-weight:bold" を指定する代わりに bold: true が利用できます(太文字になります)
無ければ作るし、ついでに公開するし の流れ
ブラウザでバイナリを扱うのが辛すぎて、何とかしたいと作りこんでいた冶具(HexDump.js) がだんだん極まってきたの図。
ただの Hex Dump 機能として作ってたハズが、気がついたらこんな感じに。
冶具: 作業の効率を改善するために自分でクリエイトする道具
HexDump(source, { style: { "packet_start_code_prefix(00 00 01)": { values: [0x00, 0x00, 0x01], css: "font-weight:bold;color:green" }, "stream_id(1 byte)": { begin: 3, end: 4, css: "font-weight:bold;color:blue" }, "PES_packet_length(2 byte)": { begin: 4, end: 6, css: "font-weight:bold;color:red" }, } });
Webフロントエンドの人達(?)が次々と微妙なツールを導入して「流れが早過ぎる」とつぶやいているのを横目で見て感じている事
自分の会社に「新ツール導入の際はCTOの許可が必要」というルールを生やして居心地を悪化させたり、後輩のやる気を削りたくなかったら、ツールの将来性を考えて行動したほうが…
SI等のアレな現場にその手のルールが存在するのは何故なのか?という事と、自分達もその歴史の一節にならないように
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
必要な物は生まれる(創れば良い)ので、どんな問題がありどのような解決方法があり、状況の変化にどう対応するかなど、大人はツール導入前に織り込んでおくし、”勉強会の人が流行ってるって言ってたし”ですぐ廃れるツールを導入するなんて事を繰り返してると、あっという間にデストピアな職場に。な
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
“ツール導入で劇的に効率や抱えている問題が改善される”なら導入すればいいし、今ある物にメリット+1する程度の微妙さなら、+5ぐらいになるまでほっとけば良いのに。初期学習コストや導入/撤収コスト等のサンクコストを支払い続けてまで微妙なツールを次々に導入しつづけるの、イケてないですね
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
現場に微妙なツールを次々にもちこむの、作業コストと効率を意識できてないからだと思うので、コストメリットを数値で説明できる状態にしてから導入してほしい。
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
俺によし、(たぶん)皆によし、うーーーん良し。程度の考えならちょっと導入は待って欲しい。
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
Android4.1→4.2 のような微妙な改善だと嬉しさが得られないので、
Win95→2000 のようにちょっと我慢してから導入すると「うぉぉぉーすげー」とジャンプアップを体験できてハッピーになれる。
微妙なツールを導入し続ける人は Win95→Me やって文句言ってるよね
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
まとめると
仕事で使う道具を Windows 95 → 98 → Me → 2000 → XP → Vista → 7 → 8 な感じにするのイケてないし、
Windows 95 → 2000 → XP → 7 がイケてる。という話です。
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
仕事と趣味をまぜるとテーマがぶれてしまい感想の言い合いになってしまうので、何をどう解決したかを数値化できるといいですね
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
問題にフォーカス
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
こちらもあわせて
ツール導入による効率改善と、コストメリットの意識化と数値化に関する具体例などはこちらになります。出演は @shibu_jp さんと @damele0n さんです
https://t.co/sys1cAFwKb
https://t.co/AkOGsLtWwn
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
なんでこの人は、突然こんな事を言い出す人になってしまったのか?
「ツールの導入が許可制(つまり禁止)」の現場に行くとExcelで色々こなさないと行けないし、VBAスキルだけが上昇して行き「こんなクソみたいな労働環境を生み出した全ての原因物質と前任者をぶっ殺して俺も死ぬ」な気持ちになるので、そういうツラミを経験するとこんな感じの老害になります
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
無期限な酷いルールを生やしたがる人を見つけたら、アホなルールを生みだす前に暗殺すべきだし、そういうルールを生み出すきっかけを作らないように自分達の住む環境は自分達で快適に維持するように努力したい。
つまり、高齢者が車の事故を起こすから禁止にするのではなく、技術的に解決したいですね
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
長々と述べましたように、必要なのは何かを永続的に禁止するルールでは無く、技術によるソリューションです。予算を下さい。
— コラーゲンたっぷりさん (@uupaa) November 20, 2015
GamePad.js で PS4 のコントローラーをサポートしました
今日は GamePad.jsのお話です。
GamePad.js で PS4 のコントローラもサポートしたよ。
(コントローラーは渋川さんから借りました) pic.twitter.com/8O0wcYHmSq
— コラーゲンたっぷりさん (@uupaa) 2015, 10月 28
PS4 の隣は NexusPlayer のパッド(ASUS GamePad)です。
ブラウザとGamePad.js があればUSB+Bluetoothで最大4人まで各種コントローラーまぜこぜで、同時プレイできるっすよ。
— コラーゲンたっぷりさん (@uupaa) 2015, 10月 28
ForceClick.js disable the force click in link navigation of iPhone 6s. (リンクの先読み機能を無効化)
ForceClick.js は force click によるリンクの先読み機能を無効化するライブラリです。
iPhone 6s Safari で <a href="...">
をクリックすると、3通りのアクションが発生することはご存知でしょうか?
- 軽くタッチすると、リンクを現在のタブで開く (open link)
- 長めにタッチすると、コンテキストメニューが開く (longpress, open contextmenu)
- 強く押すとモーダルダイアログが開き、リンク先のページをプレビュー (force click on link navigation)
3番目の機能は iPhone 6s で新たに追加された機能です
普段使いには便利な機能なのですが、問題を誘発するケースがいくつか見つかっています。
WebGame における問題
「レイドボスと戦う!」と書かれたボタン状のリンクがあり、リンク先が戦闘画面だとしましょう。
そのような状況でリンクを強くクリックするとプレビュー画面上で戦闘が始まります。
そして指を離すと、すぐに終了してしまいます。
この場合サーバには「ユーザは行動した(行動力を消費した)。レイドボスとの戦闘は終了(中断)した。報酬なし」と記録されます。
ユーザは戦闘を離脱した自覚も持てず「なんだこのク◯ゲーは!!」となります。
軽い興奮状態にあるユーザは "ボタンを強く押してしまう" 前提でUI/UXを考える必要がありますが、防ぎようがありません。
許諾や支払いを行う画面における問題
リンク先がYES/NOなどの選択肢を含む確認画面だとしましょう。
そのような状況でリンクを強くクリックするとプレビュー画面上で確認画面が表示され、指を離すと閉じてしまいます。
システムはこれを「ブラウザバックが発生した」「ユーザが不正な操作を行った」「ユーザがキャンセルした」と判断するかもしれません。
トランザクションはキャンセルされ、商品の購入はできず、契約の締結も中断してしまうかもしれません。
問い合わせが来てしまいます。
force click をOFFにするお手軽な手段は今のところ提供されていません
色々見た感じですと、WebKit のエンジニアはこの副作用にまだ気がついていないようです。
<meta ...>
で封印する方法は存在せず、-webkit-touch-callout:none
や -webkit-user-select:none
のようにCSS で封印する方法も見つけられませんでした。
pointer-events: none
も試してみましたが、 none にしてしまうとタッチ操作に一切反応しないため、リンクをクリックする事ができなくなってしまいました。
Next Action
ForceClick.js で現行の問題をカバーできるようでしたら、次は WebKit(Apple)に対して機能追加(改善)要求を出して行こうかと考えています。
つまり、このようなライブラリを必要とする対処療法ではなく、ブラウザ側が機能をON/OFFする方法を用意する(根本治療)に切り替えて行きたいです。
(ε・ ワ ・)з 遠慮せず手伝ってくれてもええんやで…
Demo
iPhone 6s で demo にアクセスし、上段のリンクを軽くタッチ, 長くタッチ, 強くタッチしたあとに、下段のリンクを同じように操作してみてください。下段ではそれらの操作が機能しないようになっています。
下段のリンクを軽く押すと背景色が青く、強く押すと背景色が黄色になります。