latest log

酩酊状態で書いたエンジニアポエムです。酩酊状態で読んでください。

KISSの法則++

アイデアとは, 解像度を高める, ナイーブ性

フェーズとフォーカス, 事業の継続性, 机の奥のカビパン(リスクを取らない事がリスク, 腐ったミカン)

コードの資産的価値, 普遍的な設計の価値, フェニックス性

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フロントエンドの人達(?)が次々と微妙なツールを導入して「流れが早過ぎる」とつぶやいているのを横目で見て感じている事

こちらもあわせて

なんでこの人は、突然こんな事を言い出す人になってしまったのか?

GamePad.js で PS4 のコントローラーをサポートしました

今日は GamePad.jsのお話です。

PS4 の隣は NexusPlayer のパッド(ASUS GamePad)です。

ForceClick.js disable the force click in link navigation of iPhone 6s. (リンクの先読み機能を無効化)

ForceClick.js は force click によるリンクの先読み機能を無効化するライブラリです。

iPhone 6s Safari<a href="..."> をクリックすると、3通りのアクションが発生することはご存知でしょうか?

  1. 軽くタッチすると、リンクを現在のタブで開く (open link)
  2. 長めにタッチすると、コンテキストメニューが開く (longpress, open contextmenu)
  3. 強く押すとモーダルダイアログが開き、リンク先のページをプレビュー (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 にアクセスし、上段のリンクを軽くタッチ, 長くタッチ, 強くタッチしたあとに、下段のリンクを同じように操作してみてください。下段ではそれらの操作が機能しないようになっています。
下段のリンクを軽く押すと背景色が青く、強く押すと背景色が黄色になります。