2012-01-01から1年間の記事一覧

コールバック関数の実行回数を間引く - JSX編

JSXで発火しすぎるイベントに手を焼いていたところ、いい感じのイベントの間引きのtipsがKAYACのブログで公開されていた。_level0 - KAYAC Front Engineer Blog 100行ちょっとなのでとりあえずさくっとJSXに移植してみた。説明は上記エントリを参照のこと。…

JSX Synonym始めました

Dart SynonymにインスパイアされてJSX Synonymを書き始めました。まだ草稿なのでmarkdownですが、そのうちjsx.github.orgから参照できるようにします。 JSX Synonym (draft) 2列のコードのうち、上段がJavaScriptで下段がJSXです。Dartと異なり、DOM操作を含…

私の中のエディタ戦争

本の虫: エディター戦争私はemacsでもvimでもない第三のエディタがほしい。それは、何も知らない状態でも使うことができ、しばらくはデフォルトの設定でも十分で、普通のプログラミング言語がマクロ言語として使えて、ファイラやブラウザなどもマクロで実装…

JSX用strftime()/strptime()を書いた

https://github.com/gfx/mizuki // example/datetime.jsx import "../lib/mizuki/datetime.jsx"; class _Main { static function main(args : string[]) : void { var d = new Date; if (args.length > 0) { DateTime.setLocale(args[0]); } var f = "[%a %b…

nore - NodeJS on JavaScriptCore

JavaScriptCoreにconsoleとprocessだけ生やしたCLIを書いた。主にJSXのテスト&ベンチマーク用。 https://github.com/gfx/norejs Mersenne Twisterの速度はこんな感じ。seedを固定してあるのでMTの計算結果はまったく同じになるべきだし、実際そうなっている…

EastAsianWidth判別用コードを自動生成する

VisualWidth実装用に、Unicode::EastAsianWidth みたいなものを自動生成するためのスクリプトを書いた。unicode.orgからとってきたデータをもとに生成しているので安心。これはJSX用だけど、他の適当な言語のためのコードを生成するのも難しくないはず。 #!/…

Concurrent.Thread.jsで遊んでみる

JavaScriptでマルチスレッドプログラミングを実現するライブラリ Concurrent.Thread.js を触ってみた。このライブラリは Concurrent.Thread.Http を利用してAjaxプログラミングを楽にするために開発されたものらしい。コードは以下のとおり。 http://jsdo.it…

jsdo.it で JSX がサポートされました

jsdo.itでJSXとCoffeeScriptがサポートされました!スクリプト冒頭を "//#!jsx" で始めるとJSXモードになります。例えば[twitter:@sasaplus1]さんがJSから移植したJSXコードも、いまや以下のように直接実行できるようになりました。jsdoitなどで簡単にアプリ…

nodejsでprocess.exit()するとstdout/stderrのバッファがflush()されない件

この問題はnodejs 0.4.x ではMacOSXでも存在したようなのですが、0.6.xで修正されたようなので安心していたら、Windowsではまだ残っているようです*1。以下のようにすれば、stdout/stderrr両方確実にフラッシュした後にexit()するようにできます。@mattn_jp+…

TimSort in JSX

JavaScriptのArray.prototype.sort()のアルゴリズムは特に規定されていないようだ。つまり、stableかどうかや最悪計算量は処理系依存である。その結果、JSXのsort()も同様となっている。そこで、stable sortであるTimSortのJava版をJSXに移植してみた。 http…

Mouse repository has been moved to github

I've fixed several issues, released 0.99, and moved the Mouse repository to github. https://github.com/gfx/p5-Mouse I believe that Mouse is still the best class builder for Perl5. Enjoy Perl ;)

Chrome for iOSのJSエンジンはJITなしのJavaScriptCore

Chrome for iOSが発表されたが、スクリプトエンジンのパフォーマンスパターンがUIWebViewと同じである。したがって、アプリケーションの実装はUIWebViewベースで、スクリプトエンジンはJITのないJavaScriptCoreと考えられる。Chrome for iOS で測定したV8Ben…

node-tick-processorでnodejsのプロファイルを整形する

もともとV8にはプロファイル機能が組み込まれていて、V8のリポジトリにはプロファイルデータを整形して表示するための *-tick-processor というスクリプトが入っている。 https://github.com/v8/v8/tree/master/tools linux-tick-processor mac-tick-process…

nodejsでstdinから同期的に全部読み込む

fs.readFileSync() のようなものがあるのかと期待したら、read(2)相当のものしかなくて困惑した。 #!/usr/bin/env node "use strict"; var fs = require("fs"); var fd = process.stdin.fd; var content = ""; var BUFFER_SIZE = 4096; var buffer = new Buf…

JSXでrequestAnimationFrameを使う

現在requestAnimationFrame()はJSX標準ライブラリの timer.jsx に組み込まれています。 W3Cのanimation-timingで定義されているrequestAnimatioFrame()を使うと、JavaScriptでアニメーションをするときに良い感じのフレームレートで実行してくれる、というこ…

Unit tests for JSX

いずれJSX web siteにも載せますが、JSXには非同期テストにも対応したユニットテスト・フレームワーク、test-case.jsxが標準で添付されています。t/lib/*.jsxはこのtest-case.jsxでテストされています。使い方は以下のようにTestCaseを継承して、"test"で始…

Uint8ArrayとUint8ClampedArrayの違い

W3Cによれば、この違いは値がclampされるかどうからしい。clampというのは、範囲の指定されたintにその範囲を超えた値を代入したとき、通常であればmoduloで処理するところを、範囲の上限の値を代わりに代入する、というものだ。 // NOTE: node.js doesn't s…

Dart Hackathonに参加しました

Googleのオフィスで行われたGlobal Dart Hackathonにチューターとして参加して、ハッカソン開始前に軽くDart on Smartphoneについて解説&デモを行いました。当日の様子はtogetterにまとめられています。 Dart Hackathon #dartjp - Togetter Hackathonの優勝…

source-mapを可視化する

source-mapは非常に期待のできる技術だが、軽く仕様を読んでもどのように動くのかよくわからない。そこで、souce-mapを可視化するツールを作ってみた。source-mapの処理にはmozillaのJavaScriptによる実装を使った。左がオリジナルのソースコード、右がclosu…

ブラウザにCommonJSを簡単に提供するスニペット

CommonJS (+node.js 独自拡張)なモジュールをブラウザで読み込むにはいくつかの方法がある。たとえばbrowserbuildはまとめて1ファイルにしてくれるので、プロダクションコード用としてはとてもよい。一方でbrowserbuildは痒いところに手が届かないしデバッグ…

円マークキーでバックスラッシュを入力する

正規表現リテラル /foo\/bar/ が構文エラーで弾かれてなぜだろうと思っていたら円マークが原因だった。これだから日本語キーボードは困る。 カッとなってtextareaで円マークをバックスラッシュに置き換えるようにした。ついでにTABキーで\tを入力するように…

C++でJavaScriptのString.prototype.replaceを実現できるか

ECMA ScriptのString.prototype.replaceメソッドは第二引数が関数だった場合、パターンマッチでキャプチャされる部分が可変長でしかもこの可変長引数が固定引数に挟まれているという不思議仕様です。 使用例: #!/usr/bin/env node console.log( "(f)ooba(r)…

source map generatorの使い方

source map rev.3の実装であるsource-mapを調べてみた。 https://github.com/mozilla/source-map このモジュールの提供するsource map generatorとしては、プリミティブなSourceMapGeneratorとより抽象化したSourceNodeが提供されている。 SourceMapGenerato…

闇鍋プログラミング勉強会でDartの発表をしました

闇鍋プログラミング勉強会に参加して、Dartの処理系について話をしてきました。id:krustfさん、開催おつかれさまでした。 レポートはid:uzullaさんのレポートがよくまとまってます。私もいい感じにエアろくろをしている写真をとっていただきました。 「闇鍋…

Xslate 1.5008 released

異常系の振る舞いを少し変えました。 https://metacpan.org/release/Text-Xslate Xslateでは、render()へ渡すテンプレートパラメータや登録関数からの戻り値は必ずEncodeモジュールでデコードしたテキスト文字列であるべきです。しかし、デコードしてないバ…

クールすぎる新機能「SourceMap」で楽々Dartデバッグ

タイトルは釣りです。まだDartは対応してません。 Introduction to JavaScript Source Maps - HTML5 Rocks 圧縮後のJavaScriptやコンパイル後のCoffeeScriptでも、ブラウザ上で元のソースを参照できる新技術「Source Maps」登場 - Publickey Source Mapとい…

frogrunを書いた #dartlang

frogc foo.dart && node foo.dart.jsという繰り返しに飽きてきたので、Dartでfrogrunというコマンドを書いた。インストールは cp frogrun.dart ~/bin/frogrun などとすればよい。本当はfrogcの実装を直接呼びたいが、APIが用意されていないようなのでプロセ…

Standalone Dart VMのソース構成

闇鍋プログラミング勉強会でDartの処理系のひとつであるfrogcについて発表します。さて、Dart SDKにはもうひとつdart(1)というコマンドが付属していますが、こちらについては上記の勉強会では触れないのでここにメモしておきます。ますソースコードは以下か…

クロージャのあるDartではC++ likeなbind()は不要

DartでBindとジョブキューみたいなの作ってみた - とりあえず適当な名前にした C++ (C++11以前) でよく使われる関数オブジェクトは無名関数やクロージャがない言語での苦肉の策なので、クロージャのあるDartではあまり使う必要はないと思います。このあたり…

Dartでfireworksを書いてみた

Dartでfireworksを書いてみた。 https://github.com/gfx/dart-Fireworks クラスを普通の構文で扱えるのは便利だし、静的型に基づくDart Editorの補完が便利で、コーディングは容易だった。Dart EditorがEclipse系ということもあり、ActionScriptを書いている…