タグ

ブックマーク / kazuhooku.hatenadiary.org (14)

  • npm (node package manager)の菱形依存問題とdedupeと社内モジュールとJSX - kazuhoのメモ置き場

    npmで色々コードを書いていると、以下のような依存関係ができてしまうことがある*1。 a +-- b <-- depends on c@1.0.x | `-- c@1.0.3 `-- d <-- depends on c@~1.0.9 `-- c@1.0.10このように「bが依存するc」と「dが依存するc」が異なるものになってしまうと、(2回cがロードされる分)プログラムが無駄に大きなものになってしまったり、(bとdがお互いで生成したcを使う場合に)片方で生成されたcのインスタンスをもう片方で「instanceof c」してもfalseが返ってきてしまう、などの問題が発生する。 この問題を解決するために、npmはsemantic versioningという枠組みとnpm dedupeというコマンドを提供していて、両者を使うことで、依存構造を以下のような形に変換して問題を回避することができる

    npm (node package manager)の菱形依存問題とdedupeと社内モジュールとJSX - kazuhoのメモ置き場
    teppeis
    teppeis 2014/02/04
  • Inline JSONPの長所について (続: サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス) - kazuhoのメモ置き場

    サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス - kazuhoのメモ置き場 の件、id:tokuhirom がさくっと HTML::CallJS というモジュールを書いて公開してくれた (Shipped HTML::CallJS - tokuhirom's blog 参照) ので、どういう Inline JSONP を使うとどういう形で書けるか、ぱっと例をあげたいと思います。 まず、サーバサイドのプログラム。 以下は perl で、tokuhirom の HTML::CallJS と Text::MicroTemplate を使っている例。 JavaScript の呼出を保存する配列を用意し、そこに呼出をどんどん追加していっています。一定条件下でのみ特定のクライアントサイド処理を呼び出したり、配列の各要素について呼び出したりすることも簡単にできま

    Inline JSONPの長所について (続: サーバサイドからクライアントサイドのJavaScriptを呼び出す際のベストプラクティス) - kazuhoのメモ置き場
    teppeis
    teppeis 2013/11/08
    Inline JSONP/JSONに対するDOM dataの利点はCSP対応じゃないでしょうか。
  • 30秒でわかるオープンソースライセンスまとめ - kazuhoのメモ置き場

    「よくわかるFOSSライセンスまとめなんてないよねー」と煽られたので3分で書く。 オープンソースライセンスは、以下の3種類に大別される。 代表的なライセンス 改変部分のソースコードの開示が必要 リンクして使う、他のソフトウェアのソースコード開示が必要 GPL (コピーレフト型) ○ ○ LGPL /MPL (準コピーレフト型) ○ × BSDL / MITL (非コピーレフト型) × × 自作のソフトウェアをオープンソースで公開する場合、 コピーレフト型にする場合は「GPLv2以上」 準コピーレフト型にする場合は「LGPL兼MPL」 とするのが無難。非コピーレフト型はMITLのほうがBSDLよりも明確だと言われることが多い(そしてどちらを選んでも問題ない)。 ※表の出典は OSS ライセンスの比較および利用動向ならびに係争に関する調査 より詳しく知りたい方へ: ライセンスの解釈については、

    30秒でわかるオープンソースライセンスまとめ - kazuhoのメモ置き場
    teppeis
    teppeis 2013/10/04
    30秒でわかった!
  • node.js におけるエラー処理のコーディングパターン (もしくは非同期 JavaScript における例外処理) - kazuhoのメモ置き場

    node.js を代表とする JavaScript を用いた非同期プログラミング環境においては、コーディングパターンのベストプラクティスが共有されておらず、結果として品質の低いコードが多くなるという問題があるように思います。そこで、特にエラー処理をどう書くべきか、既存のライブラリを使う方法を紹介してみることにしました。 いきなりですが、ファイルの文字数を返す関数を作ることを考えてみます。Java だと以下のような感じになるでしょうか。countChars メソッドに注目すると、エラーを例外として扱っていて、モジュラーかつ簡潔になっていることがわかります。 class FileCounter { static long countChars(String filename) throws IOException { FileInputStream is = new FileInputStre

    node.js におけるエラー処理のコーディングパターン (もしくは非同期 JavaScript における例外処理) - kazuhoのメモ置き場
  • 巨大な bookmarklet を信頼できる形で配布する方法 - kazuhoのメモ置き場

    Twitter で聞いてみたところ @hasegawayosuke さんいわく、Bookmarklet の文字数制限は最短だと約2,000文字らしいです。 でも、その長さで bookmarklet を書くのって難しいですよね。かといって、別のサーバから JavaScript をダウンロードして実行するとなると、そのダウンロードされたスクリプトが安全か、という問題が出てきます。 ならば、暗号学的ハッシュ関数を2,000文字以下で実装し、ダウンロードしたスクリプトの改ざん検証を行った上で実行すればいいのではないか。そうすれば、文字数の制限に悩むことなく Bookmarklet の開発に勤しめるのではないでしょうか。 ジャジャーン!というわけで、とても短い SHA-1 の JavaScript 実装を作りました*1。 GitHub - kazuho/sha1.min.js: SHA-1 impl

    巨大な bookmarklet を信頼できる形で配布する方法 - kazuhoのメモ置き場
    teppeis
    teppeis 2013/05/07
    「暗号学的ハッシュ関数を2,000文字以下で実装し、ダウンロードしたスクリプトの改ざん検証を行った上で実行すればいいのではないか。」ジャジャーン!
  • JSXにテンプレート型サポート入れ始めた - kazuhoのメモ置き場

    まだ master にはマージしてないですが kazuho/user-defined-templates ブランチのやつを使うと、 class Adder.<T> { static function f(x : T, y : T) : T { return x + y; } } class Test { static function run() : void { var n = Adder.<number>.f(1, 3); log n; var s = Adder.<string>.f("abc", "def"); log s; } } が、最適化オプション (--optimize inline,fold-const) でコンパイル後に Test.run$ = function () { /** @type {!number} */ var n; /** @type {!string}

    JSXにテンプレート型サポート入れ始めた - kazuhoのメモ置き場
    teppeis
    teppeis 2012/06/07
    わー、これやりたかった!
  • JSX はなぜ「速い」のか - kazuhoのメモ置き場

    なぜ「速い」のか、について JSX 開発者の立場から。 たとえば、シューティングゲームで一番重たい処理は何か。言うまでもなく衝突判定。多数の弾や敵機の衝突判定を毎フレームごとに行う必要があり、この演算が重たい。 JSX に同梱されている web/example/shooting.jsx には衝突判定のコードが複数あるが、一番重たいのは Bullet#update 関数で、その処理は以下のようになっている*1。 for (var rockKey in st.rocks) { var rock = st.rocks[rockKey]; if (this.detectCollision(rock)) { if (rock.hp == 0) return false; inDisplay = false; if (--rock.hp == 0) { st.score = Math.min(st.s

    JSX はなぜ「速い」のか - kazuhoのメモ置き場
    teppeis
    teppeis 2012/06/03
  • kazuhoのメモ置き場

    今後はメモも含めKazuho's Weblogに書いて行こうと思います。 以前以下のようにツイートした話だけど、OSSの開発モデルを社内開発にそのまま持ち込むのは危険。 チーム開発の場合、簡単にコメント返せないようなPR送られた時点で負けだと思ってる。無駄なコードが生産されないよう事前に設計を詰める作業をすべき / “雑なレビュー - ✘╹◡╹✘” http://htn.to/by5or1 https://twitter.com/kazuho/status/431602421068877824 今日一般的に想定される「OSSの開発モデル」はEric S. Raymondの有名なエッセーである「伽藍とバザール」によって解説されたところの「バザール」である。 「バザール」モデルにおいては、多くの改善提案の中から最善と考えられる実装が取り入れられ、コミュニティで共有されるようになる。同エッセーか

    kazuhoのメモ置き場
  • TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場

    Ajaxを使うためにはページ内リンク (hash fragment=URLの#以降) を使うのが一般的*1 hash fragmentはサーバに送信されないから、JavaScript非対応のブラウザだと動作しない 特にサーチエンジンのクローラ等で問題になる*2 そこで Google は、#! が含まれる URL を hash を含まないものに読み替える仕組みを提唱している。例えば「www.example.com/ajax.html#!key=value」のサーチエンジン用URLは「www.example.com/ajax.html?_escaped_fragment_=key=value」になる。 TwitterやFacebookはこの仕様に従うことで、Ajax な UISEO を同時に実現している、というわけ。ということを調べたなう。 参照: Getting Started  | 

    TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係) - kazuhoのメモ置き場
  • Amazon AWS と NIFTY や Rackspace のクラウド (IaaS) は、技術的にどう違うのか - kazuhoのメモ置き場

    AWS はコンポーネント指向の IaaS 現時点でのクラウドコンピューティングの大勢は、リソースをオールインワンで提供すること。一般ユーザーにとっての SaaS なアプリケーションは、もちろんそうだし、開発者にとっての Google App Engine も然り。 Amazon AWS も、EC2 や S3, Relational Database Service, Elastic Load Balancer といったサービスコンポーネントを Amazon が提供し、それを開発者が組み合わせて可用性の高いサービスを構築するようになっている。 コンピューティングリソースと、基盤ソフトウェアコンポーネントがセットで提供されているというのは、IBM PC以前のパソコンを思い出すような... Rackspace Cloud や NIFTY Cloud は VM 指向 一方、AWS に継ぐ IaaS

    Amazon AWS と NIFTY や Rackspace のクラウド (IaaS) は、技術的にどう違うのか - kazuhoのメモ置き場
    teppeis
    teppeis 2010/04/08
    AWSはコンポーネント指向、NIFTY等はVM指向
  • vipっていうviラッパー作った - kazuhoのメモ置き場

    http://github.com/kazuho/vip/ よくperlとかで、 $ perl print "テストコードを色々..."; ... ^Dとかやってテストするけど、コード書き間違えちゃったりした時に編集できなくてめんどいのと、書いたコードが失われちゃうのが嫌だなあと思ってた。で、ついに重い腰をあげて、2つの問題を解決するラッパー書いた。 $ vip | perlとかやると、vi で編集した結果を標準出力にはいてくれる。ファイルは $HOME/vip 以下に保存されるので、あとから探すこともできる。 以下FAQ Q. $ENV{EDITOR} を見てくれないのですが? A. vip (vi pipe) なので vi 専用です ... てか vip 言いたいだけ (ry

    vipっていうviラッパー作った - kazuhoのメモ置き場
    teppeis
    teppeis 2009/10/28
  • FastCGI プロトコルってなんのためにあるのかわからない - kazuhoのメモ置き場

    どういう場合に便利なんだっけ。てか HTTP プロトコルでいいじゃんみたいな。 たとえば httpd とアプリケーションサーバを分割するような環境なら、apache + fastcgi external server みたいな構成よりも、apache (mod_proxy + mod_proxy_balancer) + apache (mod_perl) とかのほうが柔軟だし。 あるいは、apache + fastcgi external server みたいなのを組むよりも、apache (mod_proxy + mod_proxy_balancer) + HTTP::Server::Simple (Net::Server::Prefork) でいいんじゃないかみたいな。 unix socket を動的に作成して通信、みたいたことをする場合でも、独自プロトコルな必要ってないんじゃないのか

    FastCGI プロトコルってなんのためにあるのかわからない - kazuhoのメモ置き場
    teppeis
    teppeis 2009/09/09
  • Bash で HTTP リクエストを投げる - id:kazuhookuのメモ置き場

    shwget | gniibeの日記 | スラド あたりを見ながら遊んでいたわけですが。 % (echo GET / >&0 ; cat) < /dev/tcp/localhost/80あたりが最小形態ですかね。HTTP/0.9 を使ってボディだけ取る。 % (echo GET / >&0 ; cat) < /dev/tcp/localhost/80 | openssl md5トップページのチェックサム。

    Bash で HTTP リクエストを投げる - id:kazuhookuのメモ置き場
  • MySQL (InnoDB) における行のサイズと速度の関係について - kazuhoのメモ置き場

    集約演算を行うケースでは、行のサイズを小さく保つことはとても重要。アクセス頻度が低いコラムは別テーブルに追い出すとかしたほうがいいくらい。 一方、集約演算を行わないケース (単一行の insert, update 等を含む) の場合は、(クライアントとの通信のための) システムコールがオーバーヘッドになるので、小さなテーブルにたくさんアクセスをするよりも、長い行を持つテーブルに1回アクセスするほうが良い。 たとえば手元の環境での insert on duplicate key update の速度は、 行のサイズ 必要時間 0KB 1 3KB 4 6KB 7 9KB 13 12KB 13 とかそんな感じ (環境やクエリによる変わるので自分で測定してね。9KB の速度低下はページサイズの1/2を超えたからかな)。つまり、行のサイズが1KB程度だと、通信のオーバーヘッドが大きいからあまり問題に

    MySQL (InnoDB) における行のサイズと速度の関係について - kazuhoのメモ置き場
  • 1