タグ

ブックマーク / hagino3000.hatenablog.com (9)

  • Struct.js ver. 0.3をリリースしました - hagino3000's blog

    欲しかった機能が実装できたのでタグを切りました。 hagino3000/Struct.js https://github.com/hagino3000/Struct.js 主な機能追加 ネストした構造のサポート nullableオプションの追加 カスタムバリデーション関数のサポート 設定で全チェックを無効化する機能を追加 初期作成時の値チェックを追加 型チェックのためのコーディングをなるべく増やさないというポリシーです。素のObjectと同様に扱えるが必要なチェック機構は備えている物を目指しています。しかし副作用としてプロパティの有無でそれが何であるかを判定するダックタイピングは不可能になってしまった。よってそこだけは Struct.getType(obj) を使います。 リリース用の設定 Proxyオブジェクトを生成しないので、通常のプロパティアクセスのコストだけになる。 Struct.

    Struct.js ver. 0.3をリリースしました - hagino3000's blog
  • JavaScriptで厳格な型チェックを行なうライブラリを書いた - hagino3000's blog

    (追記) Version 0.3をリリースしました。 先日のjava-ja温泉で「JavaScriptは独りでヒャッハーするのには良いけど、複数人で開発しだすと途端にカオスになって苦労する」という話になった。それに対する解の一つはClosure Compilerが採用したアノテーションによる型の定義と静的チェックだろう。それとは別のアプローチで何かできないかなと考えていたら、ECMAScript 6にObjectのプロパティアクセスをフックできる仕組み(Proxy.create)があったのを思い出した。Proxy APIを使ってみたら型チェックが効くC言語の構造体みたいな物が作れたのでライブラリ化した。 hagino3000/Struct.js https://github.com/hagino3000/Struct.js これを使うと何が良いかというと obj = {}; obj.hog

    JavaScriptで厳格な型チェックを行なうライブラリを書いた - hagino3000's blog
  • Node.jsのモジュールをC++で書く (引数と戻り値) - hagino3000's blog

    引き続きv8.hを読みながらNodeモジュールを書く練習をする。 モジュールのメソッド定義ですが、名前の通りv8::Argumentsが引数の表現で、[]オペレータでアクセスするとv8::Value型のそれぞれの引数が得られる。型チェックはIsNumberやらIsStringといったメソッドはあっても、型を直接返してくれる物は無いのでやや面倒。 試しに、こんなモジュールを作ってみる。 #include <node.h> #include <v8.h> #include <iostream> using namespace v8; // 引数の数と、それぞれの型をチェックするメソッド Handle<Value> ArgumentTest(const Arguments& args) { HandleScope scope; for (int i = 0; i < args.Length();

    Node.jsのモジュールをC++で書く (引数と戻り値) - hagino3000's blog
  • 0mq(zeromq)をnode.jsで使う - hagino3000's blog

    depthJSを参考にKinectとブラウザの連携をさせていたのだが、depthJSは中間層がPythonのtornadeなので、node.jsにしてみた。 zeromq.node https://github.com/JustinTulloss/zeromq.node インストールはnpmからできた。コードはこれだけ。 var http = require('http'), io = require('socket.io'), zmq = require('zeromq'); var server = http.createServer(); server.listen(9876); // node.js ==> browser var webSocket = io.listen(server); webSocket.on('connection', function(client) {

    0mq(zeromq)をnode.jsで使う - hagino3000's blog
  • OpenGLなにそれうまいの?? という人のためのWebGLの始め方 - hagino3000's blog

    追記:例題の頂点シェーダーで何をしているか説明を追加しました 追記:動作環境の所修正しました、IE9では動作しません。 皆さんはじめまして、荒川智則です。この記事はJavaScript Advent Calendarの21日目です。 この記事では、Google I/OやFirefox Developers Conferenceで華麗なデモがバリバリ出てくるにもかかわらず、実際に使っている人が異常なまでに少ないWebGLについて書きます。対象読者はWebGLに興味があるor手を出してみたけどクソ難しそうだし既に諦めそう、という人です。 WebGLの概要 WebGLはOpenGL ES 2.0のグラフィックAPIをCanvas要素上で使える様にした物です。OpenGL ESはOpenGLの組み込み機器向けのサブセットで、iPhoneandroid端末にも搭載されています。OpenGL ESな

    OpenGLなにそれうまいの?? という人のためのWebGLの始め方 - hagino3000's blog
  • Chromeでworkerプロセスが死ぬ問題 - hagino3000's blog

    解決するのにここ2日間かかってしまったバグ。 WebWorkerでworkerプロセスを作る。workerの中でタイマーを回して5分毎にサーバーからデータを取得、そのデータをメインスレッドに返す、というのを実装したが、workerが5分~10分経つと死んでいるというもの。onerrorへの通知も無い。 いろいろ悩んだ末、もしかしてGCされてるんじゃあ……と思ったらその通りのようで、グローバルオブジェクトから参照できる所に突っこんでおいたら死ななくなった。 Operaだと動いているworkerが勝手に殺されたりしないのでChromeのバグかも*1。GCしてくれなくてもworkerを殺す手段としてterminateメソッドが用意されている。自分で作成したworkerは自分で殺した方がわかりやすい。 検証ページ(workerを2つ作って、片方のみglobalオブジェクトから参照可能にしておく)

    Chromeでworkerプロセスが死ぬ問題 - hagino3000's blog
  • nikkei.comで右クリックを使えるようにするGreasemonkeyスクリプト - hagino3000's blog

    経済新聞のページ見てる最中にいきなり右クリックが使えなくなって、Macbookのタッチパッドが壊れたかと焦った。動きを見るに、DOMContentLoadedのタイミングでcontextmenuイベントに悪さしてる様なのでjQuery.unbindした。これくらいなら元のソースを読まなくても勘でなんとかなる*1 // ==UserScript== // @name RightClickForNikkei.com // @namespace http://d.hatena.ne.jp/hagino_3000/ // @description Enable contextmenu in nikkei.com // @include http://*.nikkei.com* // ==/UserScript== (function() { if (unsafeWindow && unsafe

    nikkei.comで右クリックを使えるようにするGreasemonkeyスクリプト - hagino3000's blog
  • 一歩進んだjQueryサンプル集 - hagino3000's blog

    radikoのJavaScriptソース読んでたんだけど、コード圧縮してない上に懇切丁寧なコメントも残したままなので、jQueryのサンプルとして紹介されそうだなと思った。 ttp://radiko-dl.ssdl1.smartstream.ne.jp/radiko-dl/player/js/player.js radiko.jp http://radiko.jp/ グローバル変数使いまくりだとか、cookieの操作は独自実装しなくてもjquery.cookie.jsを使った方が楽なんじゃないか、とかいろいろありますが。公式ドキュメントの触り以下の事しか書いて無いのにブクマされまくってる記事よりよっぽど役に立つんじゃないかと。 他にはTwitterのホーム画面にもjQueryを使ったコードがあって $(document).ready(function() { if ($.browser.m

    一歩進んだjQueryサンプル集 - hagino3000's blog
  • JavaScriptの再帰処理の限界 - hagino3000's blog

    JavaScriptの再帰処理をarguments.calleeを使って書くか、関数リテラル名指定で自分を呼び出すかでエラーになった時の挙動が違ったのでメモ。 arguments.calleeの場合 ブラウザ エラーになる回数 エラーメッセージ メモ IE6 438 スタック領域が不足しています catchできない IE7 1747 stack over flow at line XX. catchできない window.onerrorでハンドルしようとするとIEがクラッシュ Firefox 3.0 2999 too much recursion catchできない Safari 4 Beta 40326 Maximum call stack size exceeded. catchできない 関数リテラル名指定の場合 ブラウザ エラーになる回数 エラーメッセージ メモ IE6 462 スタ

    JavaScriptの再帰処理の限界 - hagino3000's blog
  • 1