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

Java VMでのPHP

PHPをJava VMで動かしたいと思ったので、いろいろ調べてみた。 Java VM用のPHPとしては、現状でCaucho QuercusとPROJECT ZEROのP8があるようだ。 どちらもPHP5.2をターゲットにしているみたい。 P8 ここで、PROJECT ZEROのP8の方は、WebSpere sMeshの一部み…

注文の多いグラフィックエディタ

jQueryを勉強中。 やっぱ最初に作るのはグラフィックエディタだろJKということで、ドット絵エディタを作ってみた。 ただ作っても面白くないので、使えるのは16色まで、しかも横8ドットにつき2色までという、知ってる人は知ってる制約を付け加えてみました。 …

文字列リテラルの比較の書き方が決着

Java7からは if (s?.equals("リテラル")){ ... } と書けばいい

クラウドとデータベース

クラウドは単なるバズワードではありません。 クラウドがバズワードというのは確かで、具体的な定義もなくどんどん意味が適当になっていて、とりあえずサーバー複数で処理すればクラウドということになっていったりするんだと思います。 けれど、単なるバズ…

劇速SSD

前のエントリ「ハードディスクもオンボードになるのかな?そうするとプログラムモデルも変わる。」で そうすると、SATAとかケチくさいこと言わず、大量にどっさりと転送できるようになったりするんじゃなかろうか。 などと書いてたら、PCI Expressでどっさり…

RDBMSの時代の終わりが見えてきた

クラウドと一緒にやってきたもの 最近、クラウドが流行ってます。 GoogleのMapResuceから始まって、MicrosoftのAzureまで、大手のクラウド製品が出揃った感じ。 で、そこで、こんなクラウド製品が出ましたというときに、必ずといっていいほどそのクラウド用…

ハードディスクもオンボードになるのかな?そうするとプログラムモデルも変わる。

ハードディスクじゃなくてSSDですけどね。 そのあたりは、有機ELディスプレイを液晶ディスプレイと言っちゃう感じ。 ハードディスク/SSDをまとめたパソコン内臓ストレージの呼び名って、なんかいいのありますかね? まあ、それはともかく。 もう少しするとSS…

情報技術を構成する3要素の関係

情報技術を構成するのは、計算理論、それを実現するハードウェア、そしてそれらを作り使う人です。 それら3者の関係を考えてみました。 計算論は、どういう計算が可能か、計算をどのように行うかという理論です。 ハードウェアは、物理的に計算を行う装置で…

実用を考えると、文字列リテラルとの比較は文字列リテラルが先のほうが見やすい

もう落ち着いた話題だけど、SwingWorkerのサンプル書いて思い出した。 文字列リテラルの比較の話だけど、"リテラル".equals(s)よりもs.equals("リテラル")のほうが見やすいとか意味を反映しているとかあった。 けど、実際にJavaで文字列リテラルの比較などと…

SwingWorkerでスレッドからGUI操作

EventQueue#invokeLaterなどを使えということなのですが、実際の処理をいちいちinvokeLaterすると処理の記述が分断して大変みにくくなります。記述の美しさよりも処理の安全さ、とはいえ、これはあんまり。 ということで、Java SE 6からはSwingWorkerという…

正しいスレッドプログラム

ここまでスレッドのサンプルを書いてきたのですが、主にプログラムがみにくくなるとか、めんどいとか、動くからえぇやんという理由で、やるべきことをやってないところがあります。 スレッドからのSwing操作とwaitの処理です。 Swingはシングルスレッドモデ…

higayasuoを本気にさせると恐ろしい

このランキングを見て欲しい。 http://tophatenar.com/tag/java ここでid:higayasuoは5位にランクされているが、これ、ちょっと前まで20位あたりだったのだ。 このまえ一緒に飲んだときに、このランキングの話になって、id:higayasuoが「なんでJavaカテゴリ…

なんも考えずに"リテラル".equals(s)と書け

"".equals(stringVariable) は改悪だろうについて。 まず、空文字との比較は場合による。というか、空文字との比較なら s != null && s.isEmpty() か s == null || s.isEmpty() などと書くほうがいい。 あと、件の問題は改悪とは言わないまでも、問題文だけ…

Lock/Conditionのサンプル

追記:「見せかけの起動」に対応しました。2008/12/6 http://d.hatena.ne.jp/nowokay/20081206#1228542137 wait/notifyでスレッド間の同期を行ったのですが、wait/notifyは対象オブジェクトでsynchronizedする必要がありました。 ということは、逆にいうとsy…

wait/notify/interruptのサンプル

追記:「スプリアスウェイクアップ」に対応しました。2008/12/6 http://d.hatena.ne.jp/nowokay/20081206#1228542137 ここまで、いろいろなロックを扱ったのですが、スレッド間での実行の制御も必要になります。 Javaでは、スレッド間の実行の制御にwait/not…

殺伐としたプログラム

@daichan4649に「殺伐としたプログラムしか見ていないのでいつも癒されます」と言われたのだけど、「殺伐としたプログラム」ってどんなのだろう? こうですか?わかりません >< lockしたらunlockしません。早い者勝ち ソースはこれ

Lockのサンプル

Javaの同期の基本はsynchronizedなのだけど、synchronizedはブロックとして使わないといけないので使いづらい場合がある。ロックの取得と開放を同じメソッド内で行わなくてはいけないし、異なるロックを自由なタイミングで取得開放できない。 そこで使うのが…

ReadWriteLockのサンプル

では、ReadWriteLockのサンプル。 読み込みスレッドは互いにロックせず、書き込みスレッドは他のスレッドとは同時に動かせない、というロックです。 サンプルでは、「か電車」が書き込みスレッド、「電車」が読み込みスレッドです。「か電車」が動くときには…

CyclicBarrierのサンプル

こないだのときは説明できなかったけど、CyclicBarrier いくつかのスレッドがバリアにたどりつくまで待ちます。 このサンプルではスピードの違う「電車」がまんなかで全ての「電車」がそろうまで待ちます。 コンストラクタでいくつのスレッドを待つかを決め…

Semaphoreのサンプル

こないだのスレッド入門のときに見せてたサンプル。 ブログ用に再構成。「電車」が3つずつ動きます。 Semaphoreは、同時に実行できるスレッド数を制限できます。 このサンプルでは3つに制限しています。 static Semaphore semaphoe = new Semaphore(3); セマ…

投機実行のやつでReadWriteLockを使ってみる

投機的実行をやってみたやつで、synchronizedを使ってたのだけど、ReadWriteLockを使ったほうが並列可能性が高くなるかもね、と思ってちょっと修正してみた。 ところで、最後のロックを次のように、ReadLockの中でWriteLock取得しようと思ったんだけど、デッ…

BigDecimal版sqrtであらかじめMath.sqrtを使う効果

ところで、前回のGauss-Legendre法でBigDecimal版sqrtを使いました。で、この中の処理である程度の精度までをdoubleで求めてるのですが、これの効果がどれだけあるか確認しました。 まず、doubleを使ったsqrtで100桁までの円周率を100回求めると、処理時間は…

ガウス・ルジャンドルの方法での円周率

もう一個だけ、円周率を求めておく 算術幾何平均というのを使う。 これは、a, bについて とすると がnが無限のときanとbnが等しくなるというもの。 で、なんかいろいろ調べてたらどこからひっぱってきたか忘れたのだけど、次のようなプログラムで円周率が出…

BigDecimalで平方根を求めてみる

唐突に平方根を求めてみます。 平方根を求めるときはを求めるとして という方程式の解を求めればいいことになります。 方程式の解はニュートン法で求めます。 http://www.akita-pu.ac.jp/system/elect/comp1/kusakari/japanese/teaching/Programming/2005/no…

スレッドで投機的実行を実現する方法を考えてみた

スレッドのロックをする場合、読み込み処理同士は他に影響を与えないのでロックをする必要がない。 Javaでは、ReadWriteLockを使うと、読み込みスレッドは同時にいくつでも動くけど書き込みスレッドは他のスレッドが動いていると処理をまち、書き込み処理中…

マルチスレッド対応カウンタ

Javaの++演算子はアトミックじゃない。つまり、++nは、n = n + 1と分解されたとき、nを読み込んだ後、1足した値をnに書き込む前に他のスレッドがnを変更していたら、すでに他のスレッドで行っていた変更が無効になる。 で、これはvolatileをつけてもだめ。 …

ただ漠然と10000時間では意味がない

10000時間くらいやったら天才になれる、ということですが。 http://lifehacking.jp/2008/11/the-law-of-10000-hours/ ぼくは小学校のころからプログラムしてるので、そこから大学の最初の4年まで、趣味だけで組んでた時期は週3時間くらいプログラムしてたと…

マルチスレッド環境でlongを共有するときの注意

このプログラムは止まるだろうか? このスレッドは、lockの上位32ビットと下位32ビットが異なると止まる。mainでは、lockに同じ乱数を上位32ビットと下位32ビットに設定する。 だから、プログラムが書いた通りに動けば止まらないはず。 import java.util.Ran…

さらに円周率を求めてみる

こないだ、積分の練習に円周率を求めてみたんだけど、もうちょっとちゃんと円周率を求めてみる とりあえず、モンテカルロでってことなので、やってみる。 円周率をモンテカルロで求めるときには、ランダムに選んだ点が円に入るかどうかで判定します。 つまり…

Java Expert #03 にNetBeans Profilerの記事を書きました

Java Expert #03にNetBeans Profilerの記事を書きました。 たぶん、今日発売。 Java Expert #03:書籍案内|技術評論社 今回は「まるごとNetBeans」 半分以上NetBeansです。 けど、見本誌をながめてみて思ったのですが、id:shinさんが書かれているように、い…