Kengo's blog

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

プログラミング

MSAキャッチアップ用プロジェクトを作りました

MSAは理屈が多く、手を動かさないとわからないことが多すぎるので作りました。 GitHub - KengoTODA/brownie: A distributed video converter ついでに非同期I/OとサーバサイドReactiveを学ぶためにVert.xとRxJavaを採用しています。Spring Framework 5は別で…

RxJavaはVert.x 3でSQL書くのに便利

自分にとっての新技術を試すための個人プロジェクトでVert.xを使っているのだが、PostgresクライアントがTechnical Previewになったのでオンメモリに乗せていたデータをpostgresに乗せるようにしたところ、2重3重のネストがコードに現れるようになった。 本…

Googleのアサーション用ライブラリTruthを試してみた

Guavaのテストコードを読んでいたらTruthというtesting frameworkが使われていることに気づき、最新の個人プロジェクトで使ってみました。まだアルファ版ですし、自分でも使い続けるかどうか微妙なところですが、試用記録として利点をまとめます。 なお著者…

How to track state of operand stack by FindBugs 3.0.1

Yesterday I released findbugs-slf4j v1.2.0, which supports more useful analysis based on OpcodeStackDetector. Here I will summarize my problem and solution. What is TOP? Problem is that my detector could not track state of OpcodeStack, bec…

昨今のメソッドの命名方法事情まとめ

一時期はメソッド名は動詞で始まらなければならないと言われていましたが、昨今ではJava標準APIでも動詞ではないメソッド名が散見されます。本エントリではその傾向をまとめます。 of, from(from, of, valueOf, fromString, fromNullable etc.) fromやofは…

JavaのStreamで末尾再帰

JavaのStreamで末尾再帰するというアイデアが今読んでるFunctional Programming in Javaで紹介されていた。 The Pragmatic Bookshelf | Functional Programming in Java agiledeveloper: Functional Programming in Java is quite Approachable 動かしてみた…

The Art of Enbugging

I've read The Art of Enbugging (PDF) by Andy Hunt and Dave Thomas. This is little long, but good article to share your topic with teammate. If you're trying to improve maintainability of your product, it will help your communication. I fee…

goog.Promise の使い方

日本語情報少ないので。 Promiseとは? こちらをご覧ください。 JavaScript Promises: There and back again - HTML5 Rocks Promiseオブジェクトを作る newを使ってコンストラクタを呼ぶだけです。このとき、引数に関数をひとつ渡してやる必要があります。こ…

Tips to accelerate your original game

To make your game more interesting, you should pay much attention to keep high performance. This is UX problem, but it is not designer who can solve. Only developer has solution for this problem, so we should learn about when we face probl…

経験の少ない技術者にどのような気付きの機会を作るべきか

チームで仕事をする上で気づきの機会を提供することが大切であると考えているのですが、では新人の技術者には何を気づかせるべきなのでしょうか。基本的には以下だと考えています。 目的を忘れないこと コミュニケーションの大切さとその理由 作ったものがど…

OSSコントリビュータとしての私の歴史

来週木曜日、@ikeike443 さんに教えていただいた以下のイベントに参加します。 Developers Summit 2014:【13-E-1】OSSコミッタ大集合 で、話す前に考えをまとめとかなきゃーということでこの14年弱で起こったことや感じたことをまとめておきます。 フリーソ…

My acts on the WWW in 2013

I will summarize my online actions in this year. Old articles are below: My acts on the WWW in 2011 (Japanese) My acts on the WWW in 2012 personal products I have released several personal products, and 4 of them are important to explain m…

スキル差の存在を前提としたJava開発の私の理想

スキルの低い人が生産性における問題ならその人を何とかするのが根本解決だよねと話したら、人に強要することなんてできないじゃないですかーという反応をいただいた。 これはすごく的を射たもので、チームを引っ張ってモノづくりをするうえで・チームを引っ…

How to use UserValue to implement FindBugs plugin

UserValue is a good way to mark local variable. By this marking, you can chase item or classify type of item. To use operand stack, your detector should extend OprandStackDetector or its subclass. OprandStackDetector OpcodeStackDetector#ge…

When we need to divide small class into 2 classes

3~4 years ago, I divided code into some classes which has own responsibility. Now, I have got another option, dividing into some classes which has 1 processing. 1 class which has 1 responsibility and 2 processing Imagine that how to code a…

間違い探しゲームをアップデート

間違い探しゲームのバージョン2を9leapで公開しました。バージョン1には全くといっていいほどゲーム性が無かったので、大幅なテコ入れを図っています。1分で何回間違いを探せるか?というシンプルなルールなのですが、短い時間で楽しみやすい仕上がりになっ…

eller86のオンライン活動総決算2011

はてなブログにエントリを書きました。はてなブログにはまだTwitter連携機能がなさそうなので、こちらのブログからリンクを貼っておきます。 eller86のオンライン活動総決算2011 - eller's blog はてなブログはこざっぱりしていて好印象ですが、WYSIWYGはち…

RequireJSによるコードの分割と最適化 for enchant.js

enchant.jsプログラミングでRequireJSを使うとなにが嬉しいの?どうやって使うの?という話。最初はenchant.jsをCommonJS/Modulesに合うように書き変えなきゃダメだと思っていたんですが、そんなことはないんですね。これは便利。 何が嬉しいの? 開発時には…

JVM用KEMURIインタプリタとコンパイラを実装

最近JavaScriptばかり書いていたためか無性にJVMと戯れたくなったので、KEMURIの実行環境を作成しました。 eller86/JKEMURI · GitHub 単なるインタプリタとJavaのclassファイルを生成するコンパイラがあります。インタプリタは以前実装したことがあるのです…

eller86のpatch近況

最近ここにpatch送った記録を残していなかったので、まとめて。issue報告も混ぜてます。 node-esc Issue #1: `require('esc')` throws "Cannot find module" · pvorb/node-esc · GitHub 1つめはHTMLエスケープを行うNodeのモジュールがインストールできない…

メモ・複数のJS/CSSをRequireJSでひとまとめにする

RequireJSをちゃんと調べたらbrowserify以上に自分の目的に近かった。UglifyJSでのコード短縮なんかも処理してくれるし。assets埋め込みなどの処理を挿し込むのはちょっと無理っぽいので、そこは泥臭くやる必要がありそうだ。 REQUIREJS OPTIMIZER REQUIREJS…

メモ・NodeでHTMLファイルにJSファイルを埋め込む

HTML5ゲーム開発環境構築支援ツールを作った件の続き。通信回数削減という名目のもとで、HTMLにJSファイルを静的に埋め込む方法について調査する。試した環境はMac OSX Lion(10.7.2)のNode v0.4.12。 ちなみにこの「埋め込み」がNodeに適した処理かどうか…

Guavaをどっぷり紹介(I/O編)

イヤホンを新調したら雨夢楼と光のストライドがきれいに聴こえて嬉しいeller86です。洗濯機でイヤホンを洗濯してしまったときは絶望の淵に立たされていた気がしますが、あの絶望がこの喜びにつながるとは一体誰が想像したでしょうか。 さて前回のGuava紹介記…

Jenkinsプラグイン実装初心者が参考にしたリンク集

未だにJenkins実践入門を読めていないeller86です。入手は来月半ばになるでしょうか。Jenkinsの基本的な使い方は知っているつもりですが、プラグインの実装方法などちょっと突っ込んだ内容も載っているようなので楽しみです。 さてここ2日間ほどJenkinsプラ…

Coberturaの「次」は、いつ生まれるのか

上海の飲食店でJenkinsではじめるビルド職人入門をざっくり流し読みしたeller86です。最新の技術書がこうして海外で快適に読めるとは素晴らしい時代ですね。著者ならびにGDP関係各位に感謝です。 で、この電子書籍でコードのカバレッジ測定にCoberturaを使っ…

Guavaをざっくり紹介

Guava librariesをご存知でしょうか?Googleが開発・使用しているコアライブラリです。OSSであり簡単に入手できます。 http://code.google.com/p/guava-libraries/ このライブラリは結構多機能で、海外の著名プロダクトでもよく見かけるのですが、日本のネッ…

JavaScriptはいつの間にこんなにでっかくなっちゃったんだろう

はてなブログのニュースに大歓喜しているeller86です。ダイアリーはあちこちガタが来ているように見える(私見)ので、ゼロから書きなおしたというのがとてもプラスに見えています。そのうちバックグラウンドについての技術解説も出るでしょうし、いろいろと…

JavaScriptで複数行文字列を扱うためにヒアドキュメントを使いたくなったら

泣くしかない のですが、代替案としてこのような方法もあります。 CoffeeScriptのウェブサイトを開く メニューバーのTRY COFFEESCRIPTをクリックし、コンソールを開く 左ペインに(ダブルクォーテーション3つ)(改行2個)(ダブルクォーテーション3つ)と入…

JavaScriptのAST変換

ASTとは腐れ縁にある気がするeller86です。専攻とかは全然関係ないんですが、大抵の仕事でその姿を見ているような……。さてJavaScriptのAST変換を使ってenchant.jsのassetsを変換できないか試してみました。以前は正規表現でなんとかしましたが、どうせやるな…

testlingを使うためにあがいた記録

私の環境ではtestlingさんが無言でおなくなりになることがしばしばです。サンプルではうまくいくので回線の問題ではないようですが、それ以外の原因がわかりません。 $ tar -cf- . | curl -sSNT- -u mail@address.com:pass testling.com/?browsers=iexplore/…

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…