Kengo's blog

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

Entries from 2010-01-01 to 1 year

test for embedding gist

newするとJVM内で何が起こるのかという話(前編)

私的まとめ。2段階に分かれており、今回はその初回。 JVM内の挙動を知るにはJVMに渡されるバイトコードを知ることからと考え、これについてまとめる。 バイトコードの確認 例えば public class Test { public static void main(String[] args) { Test test =…

ほんとに怖いfinalize

import java.util.concurrent.TimeUnit; public class Laputa { public static void main(String[] args) { new Laputa(); while (true) { try { System.gc(); System.runFinalization(); TimeUnit.MILLISECONDS.sleep(100); } catch (InterruptedException …

ASMで実行時にメソッド定義を書き換える

今さらながらJavaクラスに対する動的なweavingを試してみました。DIコンテナやフレームワークに任せることが一般的になった領域であり技術が直接役に立つことはないでしょうが、JVMやクラスファイルに対する理解を深めるきっかけにもなると考えたためです。 …

2010年10月のJavascript作品まとめ

今月jsdo.itに投稿した作品です。 orgel フロッキング2 遺伝的アルゴリズム フロッキングと遺伝的アルゴリズムはこちらの本を参考にしたものです。AIはゲーム作成における難関のひとつだと思いますが、その手本を得ることができました。ゲーム作成に関心のあ…

Googleカレンダーで給料日を調べる

自作TwitterBotに給料日判定ロジックを組み込むべく、GoogleカレンダーのAPIを利用するコードを書きました。APIのご利用は利用規約に従って計画的に。 1.jarを入手する gdata-java-clientから最新のjarを入手。ビルドパスに追加。 2.ユーティリティを書く 簡…

マネジメントについて考えるべきネタ

今年の個人目標にマネジメントの理解・実践を挙げています*1。9ヶ月間やってきて手応えもありますが、課題山積というのが正直なところです。残り3ヶ月で消化できるよう、懸念と疑問を列挙します。 コミュニケーションにおいて、マネジメントは何であるとされ…

GoogleのJava基礎ライブラリguava librariesというものがあるらしい

Google Collections Libraryを使おうと思ってGoogle Codeにアクセスしたら、開発が継続されていないことに気づきました。どうやらGuavaというプロダクトにマージされたようです。 This project has evolved into Guava! http://code.google.com/p/google-col…

Javascriptによるゲーム制作体験まとめ

ここ数日の有給休暇を使いJavascriptタワーディフェンスゲームを制作したので、その感想など。Javascriptはページに動作を付与する程度の使い方しかしてこなかったので、とても新鮮な体験となりました。 「Javascriptでゲーム」は現実的 作るだけなら他の言…

Twitter4Jで非推奨メソッドを使わずにOAuthログイン

今月からBasic認証が廃止されたことを受け、Twitter4Jで作ったツールをOAuth利用版に書き換えていらっしゃる方も多いのではないでしょうか。 公式サイトにもコード例が載っていますが、残念ながら非推奨メソッドTwitter.setOAuthAccessToken(AccessToken)を…

Javascriptによるゲーム開発中

最近jsdo.itでHTML5を使ったゲームを開発しています。具体的には、canvas要素による描画を主軸に据えたタワーディフェンスゲームです。 TowerDefence 5th - jsdo.it - Share JavaScript, HTML5 and CSS HTML5によってWindowsでもMacでも初代iPod touchでも動…

とりあえず知っておきたいMapの鉄則と周辺知識

わりと多種類で使い方に迷うJavaの連想配列(Map)について、各実装の紹介と周辺知識をまとめました。Javaに触れる際の参考になれば。 鉄則その1「とりあえずHashMap」 Mapインタフェースの実装はたくさんありますが、まずはHashMapから使うことを勧めます。…

Javaプログラムをプロファイルするためのチートシートを作成しました

jps, jstack, jmap, jstackといったJDK6に付属するツール群の使い方をA4用紙1枚にまとめたものです。 Java Profiling Cheat Sheet スレッドダンプとヒープダンプだけでも使えるようになると、Javaプログラムの理解と問題判別にずいぶん役に立つと思います。…

DeflaterOutputStreamの内部実装とBufferedOutputStreamと組み合わせる際の注意点

前回の実験で、DeflaterOutputStreamとBufferedOutputStreamの組み合わせ方によってパフォーマンスが大きく異なることがわかりました。今回はこの遅延の原因がDeflaterOutputStreamの実装に起因することを確認し、なぜBufferedOutputStreamでデコレートすべ…

出力を高速化するBufferedOutputStreamとDeflaterOutputStream

Javaで入出力のコードを書く場合、必ずと行ってもいいほどBufferedOutputStream, BufferedInputStream, BufferedWriter, BufferedReaderのいずれかを使うのではないでしょうか。これらはJavaヒープ上にデータを蓄積*1し、I/Oの回数を削減する機能を担うもの…

LinkedHashMapを応用した、意外と便利なLRUCacheの実装

※この記事の内容は古いです。実用されるならこちらの記事も参照ください。 アプリケーションのパフォーマンス向上にキャッシュが有効なケースがあります。 memcachedをはじめとした分散型キャッシュのAPIやJava標準(候補)のJCacheを利用しても良いのですが…

「並行コンピューティング技法」より並列クイックソートを実装してみた

ここ数カ月、並行処理およびその実装方法について地道に調べていました。具体的な内容としては、java.util.concurrentパッケージの使い方やデザインパターンの理解、サンプルプログラムの作成と性能テストです。 こうした自主学習の総まとめ*1として、オライ…

「マネジメント」で粘土あそび・専門家としての経験から考えるマネジャーの正しい活用方法

先週はマネジメントの5章まで読みました。この本を紐解く動機となった「専門家」に関する言及も出てくるようになり、それが「マネジャーとは異なる"手段"で組織に貢献する人材」であることを知りました。よくよく考えてみれば「専門家=professional」なわけ…

「マネジメント」で粘土あそび・はじめに

入社から2年が経ち"新人"から"中堅"へと変化することを求められているいま、仕事上の判断基準やコミュニケーションツールとして経済や経営、マネジメントを学ぶ必要性を感じています。特に古典的な経済の知識は経営者の言葉に出てくることが多く、頭にいれな…

2010年の抱負

社会人2年目となる2009年は、勤務スタイルを確立して成果を出せるようになる=安心して仕事を任せていただけるようになることを目標としていました。そしてそれはかなり達成できました*1。社会人としての土台をある程度確立し、課題を解決する能力がひと通り…