Kengo's blog

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

Entries from 2011-01-01 to 1 year

論語読書録

文化の背景に「中庸」などの考えがあると聞いたことから、岩波文庫の論語を読み進めています。原文と読み下し文がついているので、中国語の勉強にもなんとなくなるんじゃないかとも期待しています。あまりに古いので、口語としては使えないでしょうが……。 論…

激選・転勤で持っていった本10冊

中国に書籍を発送するときに「11冊以上は関税がかかりますよ!」と言われたので、10冊まで激選しました。以下に紹介しますが、意外と手元に置いておきたい技術書は限られるものですね。今後購入する書籍はできるだけ電子書籍にしていきたいので、The Pragmat…

中国版 #gag_fail & #gag_success まとめ(2011年9月〜10月)

#gag_fail フーテンの戸田さん(户田の発音がhutianなので) 「配送してくれるんですか」「はい、そうです」 「料理に虫がとまってしまいましたね」「無視しましょう」 「トイレが詰まった!」「あやかりたいものです(つまらないので)」 「画鋲がない!ガ…

ASM利用例を更新

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

中国に引越しました

先月末に中国の上海に転勤しました。当面はこちらで生活を送る予定です。まだわかりやすい写真が無いのですが、一応Yuyuan付近の建物の写真を貼っておきます。 当初は地理も文化も習慣も言葉もわからない土地でどれだけやっていけるか不安なところもありまし…

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…

Mavenプラグインで外部ライブラリをrepackageする方法

自作ライブラリを配布するときに、ライブラリが依存する外部ライブラリを同梱したい場合があります。しかしフツーに同梱・配布してしまうと、ライブラリを利用するプログラムの依存関係と衝突してしまってトラブルになりかねません。バージョンの違うロギン…

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

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) - …

twistoireの障害報告ならびに対応のご説明

昨日未明から本日11時にかけて自作Webサービスtwistoireに障害が発生し、サービスを提供できませんでした。ユーザの皆様にはご迷惑をおかけしました。 簡単ではありますが、以下に障害内容を報告いたします。 障害内容 フォロワーが5,000を超えるアカウント…