Kengo's blog

Technical articles about original projects, JVM, Static Analysis and JavaScript.

プログラミング

HTML5ゲーム開発環境構築支援ツールを作った件

testlingの登場によりQUnitを捨てる可能性が出てきたeller86です。操作を間違ったときのリアクションがわかりにくい*1のですが、それを大きく上回るメリットを享受できそうです。大半のOSS開発なら無償プランでも充分じゃないかと。唯一の不安は、サイトが潰…

surrogate-pair.jsをnpmモジュール化しました

ASM4.0がリリースされてwktkしているeller86です。しかし今日はJavaScriptの話をします。以前から開発していたライブラリsurrogate-pair.jsをnpmモジュールにしました。まだpublishできていません*1が、以下のブランチから取得していただくこともできます。 …

patch-erの心構え?

args4jにpatchを送りました。まさか著名なライブラリのバグ容疑者を発見するとは思わず。「Argumentアノテーションを使い」「不正な値を渡す」という2因子の現象ですね。 https://github.com/kohsuke/args4j/pull/4 23時頃に意図しない動作に気づき、そのま…

世界中のユーザーに自分のカジュアルゲームを楽しんでもらうためのjust idea

回線の遅さについて考えていたらenchant.jsの機能追加を思いついたのでpull requestを送ろうとしたのですが、現状を鑑みるに優先度が上がらない(他に書くべきコードがある)のでアイデアだけここに残しておきます。ゲーム開発者の参考になれば。 問題提起:…

ASM利用例を更新

ASM3.3利用例 短編集を更新しました。動的にクラスを定義したことはあまり無かったのですが、そこそこ楽に書けますね。バイト列からClassインスタンスを作る方法もわりと忘れがちなので、それも書いておきました。

guava librariesに追加されたEventBusについて

今までguavaのr09を使っていたのですが、先月末にRelease10.0が出ていたようなので早速使ってみました。 新機能として目立つのはCacheとEventBus。Cacheはなんとなく使い道が分かりそうなのでEventBusについて調べたところ、シンプルで使いやすそうなイベン…

enchant.jsとDOM操作の連携

enchant.jsはDOM要素をうまく隠蔽してくれているので、どんな要素を使っているのかを開発者が気にする必要はありません。しかし見た目にこだわるゲームを作るときなどは、DOM要素を意識することで可能性が広がるのも事実です。今回はenchant.jsとDOM操作(id…

mockitoコードリーディング備忘録

オフラインになっていた間、mockitoのコードを読んでいました。自分用ですが、感想を簡単にまとめておきます。 全体的にとても読みやすい。 クラス名・変数名・メソッド名の命名が適切なのだろうが、それ以上にクラス分割の単位が適切であるように思う。 ど…

canvasで3Dレーシング

先週末の3連休で実装したゲームを9leapに投稿しました。canvasを使った3Dレーシングです。 9leap : D3 racing by eller86 - どこでも遊べる、投稿型ゲームサイト 本ゲームの特徴はcanvasで3Dを描画しているところでしょう。とは言えcanvasで3Dを描画すること…

ASM4の新機能一覧 日本語訳(〜RC2)

私が好きなバイトコード操作ライブラリであるASMが、Java7対応の新バージョンを開発しています。まだ情報が少ないのですが、MLの投稿をもとに新機能をまとめてみました。今後実際に使って気づいたことがあれば追記します。 ASM 4 RC1 released ! ASM 4.0 RC2…

jslint.vimをMac OS Xに入れた

JavaScriptをチェックしてくれるvimプラグインjslint.vimをMacBook Airに入れました。公式マニュアル通りにやってOKだったら苦労はなかったのですが、そんなことはなかったのでエントリを残しておきます。 前提 プラグイン管理にpathogen.vimを使っている gi…

Google App Engineの新料金に自作ウェブサービスを最適化した話

巷で議論を呼んでいるGoogle App Engine(GAE)の料金改定ですが、拙作ウェブサービスtwistoireも当然対象となります。どのくらい課金されるようになるかというと、こんな感じ。 だいたい5$/day、つまり150$/month……高い!高いよ!で、なぜこんなに課金され…

enchant.jsにpull request送った

動的に生成する要素のデザインにCSSを使いたいなぁ、Entityのidやclassに触れるといいなぁ、ということで送りました。 Pull Request #11: Entityからidとclassにアクセスしたい by eller86 · wise9/enchant.js · GitHub QUnitによるユニットテスト付きです。…

enchant.jsのフレーム管理周りを改造した話

この土日は体調回復しつつ国産ゲームエンジンenchant.jsのコードを読んでいました。先日9leapで公開したTowerDefenceゲームを低速端末でもスムーズに動作させたかったのです。 その成果はなんとかforkとして結実しました。ここにはなにをやったか、既存実装…

Javaの7大禁じ手

.bbpBox104197592832937984 {background:url(http://a0.twimg.com/images/themes/theme1/bg.png) #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-hei…

「From Lambdas to Bytecode」を読んでinvokedynamicの使い方を学んだ

@skrb氏のツイートで知った2011 JVM Language Summitのプレゼン資料のひとつ、From Lambdas to Bytecodeを読みました。ラムダ式をどうバイトコードに変換するか、そこでInvokedynamic(indy)がどう効いてくるかという話です。 .bbpBox95715831945773056 {ba…

Open Graph Protocol向けマークアップができているか確認できるFacebookのアプリ

この週末はいくつかのサイトを参考にOpen Graph Protocolについて検証などしていました。 Open Graph - Facebook ontwikkelaars フェイスブック、ミクシィ、グリーで使われている OGP (Open Graph Protocol) とは何か - IT戦記 Facebook Open Graph Protocol…

ウェブアプリ開発における画面デバッグ 自己流ノウハウ

JavaScriptに本腰を入れて*1からそろそろ9ヶ月になるので、少しずつたまってきた感じのデバッグノウハウをまとめておきます。 どこで動かなければならないのか意識する デバッグとは関係ないように見えますが、まず動作環境を意識するのが重要です。 IE6で動…

最近のアウトプット

ここ数週間で作ったものについてまとめておきます。 Javaのコンストラクタに関する知識と私見 GWの時間をつぎ込んで書いたのがこれです。Javaのコンストラクタはきれいにコーディングする上でもJVMの動作を理解する上でも重要なファクターであると感じており…

SVG with Javascript習作

SVG女子が話題を呼んでいることもあり、連休中にSVGに触れました。作ったのはJavascriptで動的に図形を描画したり動かしたりするもの。ジャンルとしてはSRPGやタワーディフェンスゲームに近いと言えます。 forked from: SRPG Map (Hex, SVG) - jsdo.it - sha…

マージソート性能調査

昨日書いたマージソートはlengthを使うから遅くなるのではないかという漠然とした不安を持っていました。そこでlengthの使用頻度を抑えた関数を実装した上で、パフォーマンスをより細かく調べていくことにします。 lengthを使わないMergeSort リストの長さも…

最近はHaskellをよく書いています

TopCoder部でHaskellのコードを書き溜めているのですが、たまにはこちらのブログにも載せておきます。 MergeSort 毎回lengthが走るのは性能上悪影響を及ぼしそうな感じ。Java同様Haskellの処理系においても性能面を語れるようになれるといい。 参考にしてい…

appengine-mapreduceをプログラムから実行する

以前使ったappengine-mapreduceをプログラム内から実行する方法をまとめています。revision 150を対象としていますので、お使いのrevisionが新しすぎて使えない場合は公式資料を参照願います。 設定を作成する まずは処理を実行するための設定を行います。こ…

Java仮想マシンの教育用シミュレータを実装しました

JVM内部の挙動、特にframeやoperand stackやconstant poolについて人に伝えるためのツールが欲しいと考えていました。高速で省メモリなコードを書いたりマルチスレッドプログラミングしたりするには(Javaヒープの使い方と並んで)役立つ知識ですし、Scalaな…

JVM用アセンブラJasminを触る

自分はJVMの仕様について比較的知っている方らしいということに最近気づき、バイトコードについて人に説明するためのツールとしてJVM用アセンブラJasminの利用を検討。 バイトコードの理解があれば困らずに利用できるツールだと思うが、説明に使うには若干不…

プチコン用ミュージックプレイヤー

'MUSIC PLAYER CLS:CLEAR:SPCLR M=0:P=-1:MMAX=29 BGMSTOP GOSUB @DRAW @MAIN GOSUB @CHK VSYNC 8 GOTO @MAIN @CHK B=BUTTON() IF B AND 1 THEN M=M+1 IF B AND 2 THEN M=M-1 IF B AND 4 THEN M=RND(MMAX+1) IF M<0 THEN M=MMAX IF MMAX

プチコンでかんたんプログラミング

今朝9時にダウンロード解禁となったプチコンを買いました。私は25歳ですし(元)マイコン族ではないのですが、BASICからプログラムを始めたようなものなので懐かしさを感じます。とりあえずFizzBuzzと跳ねるボールを組んでみたのでコードを晒しておきます。 …

appengine-mapreduceにpatchを2つ送った話

前々回のエントリで触れたappengine-mapreduceについて2つほどpatchを送っていましたが、どちらも採用の方向でご検討いただけたようです。 Issue 86 - appengine-mapreduce - Writer#write(JSONObject.toString) is slower than JSONObject#write(Writer) - …

AppEngine-MapReduceをGAE/Jで使ってみた

*1 ということで@twistoireの管理用にAppEngine-MapReduceのrevision150を使ってみた。 用意されている公式ドキュメント読めばわりと問題なく使えるが、まだまだ洗練されてはいないので細かいところで苦労する感じ。以下に使うまでの流れをまとめる。 jarを…

bulk loaderによるダウンロード速度はデータ数依存?(追記あり)

メモ。新しいKindをバックアップ対象に加えたところ、従来バックアップしていたKindに比べて格段に時間がかかった。新しくバックアップしたKindは総データ量は小さいのだが、件数が格段に多い。Google App Engineのbulk loaderは、データ量よりもデータ数に…