読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

JavaScript

囲碁AI A19.js

以前にA9.jsというブラウザ上で遊べる9路盤囲碁AIを公開しました。 今日は、これの19路盤版、A19.jsを公開しました。 FacebookのELF OpenGoのニューラルネットワークを使っています。iMac Late 2012(GTX-660M)でニューラルネットワークの評価は380ms前後でし…

Web WorkerのためのRemote Method Invocation(RMI)

表題のライブラリを作成しました。 github.com 山口さんが開発されたPyaq(https://github.com/ymgaq/Pyaq)という9路盤の囲碁AIをJavaScriptの移植(A9.js)したのですが、そのときに、 UIのレスポンスを維持するためにAIの演算はワーカーで実行したい でも、ワ…

NodObjCを使ってNode.jsでPasteboardの画像データを取得する

Node.jsでスクリーンショットを扱いたいことがあって、外部コマンドscreencaptureを起動してファイルを生成してそれを読み込むという処理をしていました。 ファイルの生成場所にはRAMディスクを使うなど高速化を図っていたのですが、やはりオーバーヘッドが…

サイトの画像を一括ダウンロード

訳あって、サイトに表示されているimg画像を一括してダウンロードするスクリプトを書きました。 ((func) -> scr = document.createElement 'script' scr.src = "//ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"; # 短いのに大げさですが、jQue…

ニコ生風コメント表示

囲碁中継サイト「耳赤」にニコ生風コメント表示機能を追加しました。 汎用性あるかと思いますので、その部分だけ切り出したコードを公開します。 https://github.com/y-ich/nico-comment-window

タッチデバイスの判定

いつからでしょう?気がついたらデスクトップChromeがTouchEventをサポートしていました。 document.createEvent('TouchEvent')を実行しても例外を発生させてくれず、自作のアプリでマウスとタッチでイベントハンドラを切り替えていたものがデスクトップChro…

Mobile Safariで好きなタイミングで音を鳴らす

iOS Safariのaudio要素はユーザーイベントで再生をしないと音が出ないようになっています。iOS6でWeb Audio APIがサポートされ、この制約を緩和するノウハウが色々なブログで公開されています。 今回、このノウハウを実際に使うことになったので、CoffeeScri…

Mobile Safariで自動ロックを抑制する

ナビゲーションアプリ、パズルのようなゲームをウェブアプリで作ると、iPhoneの自動ロックを抑制したくなります。ネイティブアプリならidleTimerDisabledプロパティを使うところです。 解はあって、それは10秒以下の短いaudioを鳴らし続けることです。 Mobil…

ウェブで、iOS7のような動く壁紙を作る

iOS7では壁紙にパノラマ写真を選ぶと壁紙が動くそうです。 面白い。でも、ウェブで簡単にできますね。やってみましょう。 端末の姿勢(オイラー角)を扱うのに、Three.jsを使いました。 <html> <head> <meta charset="UTF-8" /> <title>Wall paper</title> <style type="text/css"> html, body { height: 100%; } body { background-image</meta></head></html>…

コールバックを介して値を取得する関数を配列の要素毎に適応するための関数

配列の要素毎に関数を適用するmapは記述を簡潔してとても便利です。でも、ネットワークを介してデータを取得するなどコールバックされた時に値がわかる場合には使えません。なので、そのための関数を作ってみました。 (jQueryのDeferredを使っています。) as…

オフラインでも使える効果音再生

以下はクリック音を出すサンプル。keySound.play()で音が出ます。 keySound = _context: new webkitAudioContext() play: -> return unless keySound._buffer? source = keySound._context.createBufferSource() source.buffer = keySound._buffer source.co…

任意の値のプロパティとプロトタイププロパティを取り出す

ウェブアプリでエディタを作っていて、自動補完を実装するために、プロパティを抽出するコードを書きました。 propertyList = (value) -> switch typeof value when 'string' then Object.getOwnPropertyNames value.__proto__ when 'undefined' then [] els…

iOS5マップ風ウェブアプリ更新

version 1.2.12 iOS上で入力欄にアルファベットを入力した時の候補が消去できない不具合を直しました。 iOS上で検索欄にアルファベットを入力した時、検索後、入力が消える不具合を直しました。

Tweets in the World

世界中のツイートを地図上で表示するサイト"Tweets in the World"を作りました。 http://tweets-in-the-world.herokuapp.com 具体的には、位置情報を含むツイートをマーカーでプロットし、2秒に一度、適当にツイートの中身を表示しています。Photo Filterを…

iOS5マップ風ウェブアプリ更新

version 1.2.11 iOS上で検索入力のオートコンプリートに不具合がありましたので、直しました。(長い間、不具合に気がつかず申し訳ございませんでした。)

iOS5マップ風ウェブアプリ更新

version 1.2.8 移動モードで自転車に対応しました。 version 1.2.7 斜め45度航空写真に対応しました。 経路検索にて移動モードに応じて地図の表示を変更するようにしました。

iOS5マップ風ウェブアプリ更新

version 1.2.6 タッチデバイスでのクリックの遅延をなくしました。 アニメーション効果を速くしました。 version 1.2.5 住所と緯度経度だけでなく、施設名でも検索できるようになりました。 現在地追尾のインディケータに、最初の位置確認までの状態を追加し…

iOS5マップ風ウェブアプリ、バージョンが確認できるようになりました

起動画面の右下にあるiボタン(地図のオプションを選択するボタン)をタッチすると、一番下にアプリのバージョンを表示するようにしました。 それだけです… 追記: 午後4時18分時点で、最新バージョンは1.2.2となりました。(アプリケーションキャッシュのデバッ…

iOS5マップ風ウェブアプリのGPS関連インジケータ

現在地追尾のボタンで位置情報取得の状態がわかるように修正しました。 位置情報取得の使用が許可されていない場合、淡いボタン 現在位置追尾中に、位置が取得できなかった場合、1秒毎の点滅 現在位置追尾中に、位置が取得が時間切れだった場合、2秒毎の点滅

iOS5マップ風ウェブアプリに関するお知らせ

iOS6のためのiOS5マップ風ウェブアプリに関してです。 iOS6でこのアプリをウェブアプリ(全画面表示)の形で使うと、現在位置のトレース機能が動いていないことが判明しました。十分な評価が足らず申し訳ございません。 対策としては、Safari上で使っていただ…

iOS5マップ風ウェブアプリ、起動時間短縮しました。

ウェブアプリ(「ホーム画面に追加」)の状態で、起動時間に、iPhone 3GS/3G回線で20秒以上、WiFiで16秒掛かっていましたが、10秒強で起動するようになりました。(アプリケーションキャッシュを導入しました。)上位機種ならもっと速いです。 ストリートビュー…

iOS5マップ風ウェブアプリ、Panoramioが見られるようになりました。

iボタンから「Panoramioを表示」をクリックしてもらうと、上のようにPanoramioの写真が見られるようになりました。 Enjoy! http://y-ich.github.com/maps/maps.html追記: 19日の夜からiOSでストリートビューボタンがタッチできない状態でした。21日午前0時に…

JavaScriptパフォーマンスベストプラクティスその5

Nokia Developerより オブジェクト指向JavaScript 代わりの継承機構を検討すること JavaScriptではオブジェクト指向スタイルの継承をまねるたくさんの方法が存在する。しかし、継承をまねるすべての機構が似たように動くわけではない。 特にコードがオーバー…

JavaScriptパフォーマンスベストプラクティスその6

Nokia Developerより クライアント-サーバー通信 XMLHttpRequestにタイムアウトを設定すること ブラウザはXHR requestをある時間後タイムアウトするが、スクリプトの制御下で接続を中断することが有益なことがある。これはsetTimeout()を使って XHRコールに…

JavaScriptパフォーマンスベストプラクティスその7

Nokia Developerより アニメーション アニメーションは控えめにすること ハードウェアサポートのないアニメーションは遅い。本当の有用性の価値をもたらさない余分なアニメーションを避けるようにすること。少なくともユーザーにアニメーションを無効にする…

JavaScriptパフォーマンスベストプラクティスその8

Nokia Developerより イベント イベント委譲を使うこと もしイベントハンドラをバインドする必要がある新しい要素を動的にたくさん生成するなら、イベントハンドラを個々のオブジェクトに割り当てることは、すぐにことが大きくなって、高価になる。 複数のイ…

JavaScriptパフォーマンスベストプラクティスその9

Nokia Developerより スタイル CSSを最適化すること 部品ライブラリを作ること 一貫した意味論的スタイルを使うこと 内部で透明性を持つようにモジュールを設計すること 柔軟に グリッドが好きになるように学ぶこと セレクタを最小化すること 構造とスキンを…

JavaScriptパフォーマンスベストプラクティスその10を飛ばしてその11

Nokia Developerより jQuery固有 注意せよ!これらの最適化パターンはjQuery 1.2.6を対象にしている。最近のバージョンやSizzleセレクタエンジンはこれらのボトルネックのいくつかを軽減している。 NB! These optimization patterns are aimed at jQuery 1.2.…

JavaScriptパフォーマンスベストプラクティスその4

Nokia Developerより Document Object Model (DOM) の難解さ ソース: Efficient JavaScript - DOMDOMパフォーマンスの遅さは以下の3つの主な原因に遡ることができる: 大規模なDOM操作 DOM APIの大量の使用は遅さのよく知られた原因である。 スクリプトが多す…

JavaScriptパフォーマンスベストプラクティスその3

Nokia Developerより よりよいロードパフォーマンスの秘訣 より速いスタートアップとスプラッシュスクリーンの表示のためにはブロッキングなしにスクリプトをロードすること <script>タグがHTMLドキュメントの中に見つかると、参照されたスクリプトリソースをダウン…