正規表現 年月日の漢字削除
2007/08/31
簡単な正規表現だけど。
s = s.replaceAll("(年|月|日)", "");
System.out.println(s);
結果は、
20070831
簡単な正規表現だけど。
忘れないようにメモです。時間があるときにまとめたいです。
ネットワークのデータを待ちうけでこんな感じのコードを書いていました。
※適当です。
groovletとgspがとてもいい感じです。
groovletとgspの連携方法です。
シナリオ
groovletを呼び出して、処理を行いその結果を、gspを利用して表示してください。
javaです。
小数点3桁まで表示したい場合です。
BigDecimalのsetScaleでいい感じです。
ROUND_CEILING
正の無限大に近づくように丸めるモードです。
ROUND_DOWN
0 に近づくように丸めるモードです。
ROUND_FLOOR
負の無限大に近づくように丸めるモードです。
ROUND_HALF_DOWN
「もっとも近い数字」 に丸めるモードです。
ROUND_HALF_EVEN
「もっとも近い数字」 に丸めるモードです。
ROUND_HALF_UP
「もっとも近い数字」に丸めるモードです。
ROUND_UNNECESSARY
要求される演算の結果が正確であり、丸めが必要でないことを表す丸めモードです。
ROUND_UP
0 から離れる
javadoc 1.4
groovletがすごくいい感じなので、groovletでしばらく何かつくってみようかと考えていて、springと一緒に使えないかなと考えた。
どういったことを希望しているかというと、
xxx.groovletで呼ばれると、DIで必要なオブジェクトのインスタンスをgroovyに渡してくれるイメージです。
HttpServletResponseならresponse
HttpServletRequestならrequest
って感じで、groovletからは何も考えず使えます。
で、この仕組みはもちろん、GroovyServletが提供してくれています。で、このGroovyServletがgroovyスクリプトを初期化して、ServletBindingなるものを作成します。このServletBindingでresponse,requestとかをgroovletに渡してくれるための処理を行ってくれているようです。
そんな感じで、beans.xmlに定義したbeanをgroovletですぐに使えたら(setter injectionされて)いいなぁとか考えているのですが、調査中です。
で、groovletでspringを利用できるだけでもいいかなぁということで試してみました。
実験手順は、
(1)web.xmlに、リスナーを登録します。
Code To Joy: It's Raining Closures
今度は、男性が一票している...
関連
プログラマメモ2: Java7にクロージャー搭載に一票
GZIPOutputStreamで、出力ストリームにデータの書き込みを終わらせる場合は、
迷わず、finishを使うこと。flushではありませんよ。
と自戒をこめて。2,3時間はこれではまった。
出力ストリームへの圧縮データの書き込みを終了します。このときストリームは閉じられません。複数のフィルタを同じ出力ストリームに連続して適用するときにこのメソッドを使用します。javadoc
swtを使用する時の注意点
たとえばJFrameをEXIT_DISPOSEで閉じるにして、その上にDislplayをおいたときに、先にJFrameが閉じると、Displayをdisposeするタイミングを失うので、DO_NOTHING_ON_CLOSEにして、Windowイベントをひろって、display.dispose()したのちに、frame.setVisible(false),frame.dispose()するとうまくいった。
groovletでの実験です。
下記のようなコードを用意して動かしてみました。
どう書く?org
にTiny MML どう書く?orgというお題があったので、思わずアカウントを作成して投稿してみた。
NoteChannelのplayNoteRawメソッドを使用しています。
pitch - MIDI pitch values (0 to 127, 60 is middle C)
velocity - velocity of note, where 0 = silence - note off.
NoteChannel
WIRED VISION / Bjorkもお気に入り、透明ブロックを操作する電子楽器『reactable』(1)
かっこよかったので紹介。
うーん、こんな感じのつくってみたいなぁ
このブログの傾向として、たいがい何かにチャレンジして挫折していますね。
しかし、千里の道も一歩から。失敗して立ち上がっていきたい今日この頃です。
POJにチャレンジしてみました。
java1.5から導入されたjava.util.Scannerが非常に便利なのですが、System.inから改行を受け取りたい場合、どうも使いづらいことがわかったので、別の方法を模索している最中です。
java.util.Scannerの使い方をちょい研究せねば...
いろいろ調べていて、java.io.StreamTokenizerを使用したことがなかったので試してみました。
このトークナイザーを使えば、簡単なパーサーは楽に作れると思いました。
java.io.StreamTokenizerにはTT_EOLがありました。
行の終わりが読み込まれたことを示す定数です。javadoc1.6
行の終わりをトークンとして処理するかどうかを判別します。flag 引数が true の場合、このトークナイザは行の終わりをトークンとして処理します。行の終わりが読み込まれると、nextToken メソッドは TT_EOL を返し、ttype フィールドにこの値を設定します。
行は、キャリッジリターン文字 ('\r') または改行文字 ('\n') で終わる文字シーケンスです。また、直後に改行文字が続くキャリッジリターン文字は、行末を表す単一のトークンとして扱われます。
flag が false の場合、行末文字は空白として扱われ、その機能はトークンを区切るだけです。
javadoc1.6
groovyを使用してmidiで簡単な音を発音してみます。
実は、フィボナッチミュージックというのをみかけて、真似したかったのですが...
この一ヶ月間、groovyづいています。
groovyにはメソッドポインタという機能があります。名前の通りに、メソッドをポインタ化(!?)して使うってことですね。
やはりループを押さえておこうということで、
デコンパイラツールのjadを使うスクリプトをgroovyで書いてみた。
もちろん、groovyである必要はまったくないけど。
このプロパティが true の場合、このオブジェクトの start() メソッドでそれ以降起動されたサブプロセスにより生成されるエラー出力は、標準出力とマージされます。これにより、Process.getInputStream() メソッドを使って、エラー出力と標準出力の両方を読み取ることができます。マージにより、エラーメッセージと対応する出力との相関を示すのが容易になります。初期値は false です。
javadoc api
java.sql.Statementには、setMaxRowsというメソッドが用意されています。
この Statement オブジェクトで作成された任意の ResultSet オブジェクトが含むことのできる最大行数の制限値を、指定された数に設定します。制限値を超えた行は通知なしに除外されます。
java6 doc api
Allows a closure to be passed in to configure the JDBC statements before they are executed to do things like set the query size etc.
javadoc groovy api
いまさらながら感がさらに漂いますが、javaでビット表示です。
Integer.toBinaryString
であればこれで変換します。
System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
とすれば、
1111111111111111111111111111111
と表示されます。
次に0埋め、桁あわせですが、String.formatterが使えるかなぁと思ったんですけど、ちょっとうまくできなくて...
しかたがないので、
論理積(&) 論理和(|)を逆におぼえていたことは内緒です。
以下、自分を納得させるための説明です。
論理積(AND(&))は
1に1をかけると1
0に1かけても0
でおぼえています。
論理和(OR(|))は
0に1をたしても1
だから片一方に0がでてきても、その片一方に1があれば、1でおぼえています。
で、
これで、java(javaに限らず)でint値からRGBの値をとるときのおきまりの書き方がわかるわけで、
rgb & 0xff0000
R、G、B の3つの値は 0 ~ 255 の任意の整数を取るものとし、また値が最大のものを max、最小のものを min とすると、グレースケール変換後の値 Y (値の範囲は 0 ~ 255 の整数とする)は、以下の式で求められます。
Y = ( max + min ) / 2
osakana.factory - グレースケールのひみつ
Y = ( 0.298912 * R + 0.586611 * G + 0.114478 * B )
X = 2.2
R = ( R ^ X ) * 0.222015
G = ( G ^ X ) * 0.706655
B = ( B ^ X ) * 0.071330
Y = ( R + G + B ) ^ ( 1 / X )


一番上がjava版で作成したもの。
その次が、Tinrocket, LLC | HyperDitherで作成したもの。
なんとなく近いかなぁと思ったんだけど。
HyperDitherの設定はcontrastをonにしている。
1. Start with a standard stochastic dithering algorithm.
2. Propagate only 3/4 of the total error term.
3. Propagate the error to the neighbors as follows:
Tinrocket, LLC | Programming:Computer Graphics
命題の「あらかじめ用意しておいた正解」が存在し得ないように、プログラムの「あらかじめ用意しておいた正解」などない。あるとすれば、それは単純すぎる解で、バグ撲滅には全く役に立たない。そんなつじつま合わせから、ズルリと抜けるのがバグと呼ばれている何かである。
Inemuri nezumi diary(2007-07-25)
JavaやC#よりもSmalltalkやRubyのほうがなぜ楽しいかなんて、口では絶対表せないよなーといつも思います。よく言われるのは、静的型言語と動的型言語の違いですけども、これはあるポイントを見逃しています。「言語内DSLに合うか合わないか」ほうが、本質的な違いだと思います。Martin Fowler's Bliki in Japanese - ドメイン特化言語
Time.now.tomorrow.midnight
RFC 4180対応版 CSVレコードの分解 どう書く?org
あとで書く。
うーん、しばらく暇つぶしにことかかないなぁ
いろいろな人の回答みたのですが、みなさんコンパクトですね。
自分のJava版だとサイズが大きいなぁ
参考
Comma-Separated Values - Wikipedia
RFC 4180 Common Format and MIME Type for Comma-Separated Values (CSV) Files
ありました。
self と引数に渡した配列の各要素からなる配列の配列を生成して返します。生成される配列の要素数は self の要素数です。
Rubyリファレンスマニュアル - Enumerable
collectメソッド、mapメソッドは配列の各要素に対してブロックを実行し、結果を配列で返却します。それぞれ、破壊的メソッドcollect!、map!が用意されています。
逆引きRuby - 配列

とりあえず油売りに挑戦
Karetta|キミならどう書く 2.0 - 2007 - その 1
あとで、その2を書こう。
きまぐれ日記: ソートの平均要素移動距離
上記の記事を読みまして、手習いがてらに、groovyで表現してみました。
シナリオ
配列をランダムにシャッフルし,ソートするした場合の要素の平均移動距離を求めてみてください。
def result = sum / trial / m_size;
モンテカルロ法はよく確率を近似的に求める手法として使われる。n回シミュレーションを行い、ある事象がm回起これば、その事象の起こる確率は当然ながらm/nで近似される。試行回数が少なければ近似は荒く、試行回数が多ければよい近似となる。モンテカルロ法 - Wikipedia
行列の積をプログラミングで行ってみます。
シナリオ
2次元配列を引数にとって行列の積を行うメソッドを作成してください。

//(1)
23 34
31 46
//(2)
23 34
31 46
//(3)
17 27
16 27
17 36

たまにはプログラムのことを忘れて、脳内メーカーなるものをためしてみました。
興味深いです。
脳内メーカー
愛ばかり....Orz.そして忘れる。
任意のディレクトリにファイルがあるかどうかのチェックをしたい。
シナリオ:
javaで2の31乗とInteger.MAX_VALUEを知りたい。
FileChannel
駆け足メモ
rubber band を表現するための試作
参考:
JListのアイテムを範囲指定で選択 - Java Swing Tips
工夫したのは、点線が動いているようにみせるために、Timerを使って書きはじめの位置をずらして交互に表示させていること。
数値文字参照、文字実体参照について。
カンマは、数値文字参照で表現すると,です。
American Standard Code for Information Interchange - Wikipedia
文字参照 - Wikipedia
シナリオ
groovletを使ってGETの値を表示してください。
POIを使って読み込めなかったエクセルファイルがあったので、それについてのメモです。
解決策をみつけたわけではないです。
「日本語」をURLエンコード
sjis:%93%FA%96%7B%8C%EA
utf-8:%E6%97%A5%E6%9C%AC%E8%AA%9E
euc-jp:%C6%FC%CB%DC%B8%EC
groovletをutf-8で書きたい場合は、
アプリケーションサーバを起動するときにファイルエンコーディングを指定する。
jettyなら、起動するときに、
java -Dfile.encoding=UTF-8 -jar start.jar
とします。
参考:
ちくわプログラマの作業履歴@はてな

この画像は、Tinrocket, LLC | HyperDitherというアプリケーションを使用して変換したものです。
HyperDitherは、Atkinson Ditheringというアルゴリズム?を実装したものだそうです。
シナリオ
Atkinson Ditheringっぽいのを実装してみてください。
これからWebAPIを考えているなら、APP(Atom Publishing Protocol)を視野に入れて設計したほうがよい?
この先、Web API を設計する人は、まず APP が利用できないか検討しましょう。 APP を採用すれば自然と REST スタイルを採用することになります。これまで悩みがちだった Web API の設計が、かなり楽になると思います。 Web API を設計する人は、オレオレXMLを設計する前に、Atom/APP をベースにしたらどうなるか、を考えて見ましょう。きっと Atom/APP は良い選択肢になってくれるはずです。yohei-y:weblog: APP の標準化作業がほぼ終了
シナリオ:
bloggerではてなブックマーク(はてブ)のbマークボタンと、被ブックマーク数を表示したい。
eclipseでant taskのftp使用する際に、
commonsのnetが必要になったのでメモ。

Christopher Walken Illusion - Mighty Optical Illusions
上記のサイトでおもしろいアニメーションGIFがありました。
このアニメーションGIFは4枚のGIFで構成されていまして、おもしろい効果をだしています。
そこで、プログラムで表現できないかなと考えました、
ベースになる、宇宙の写真はここから。
HubbleSite - NewsCenter - Hubble Photographs Grand Design Spiral Galaxy M81 (05/28/2007) - Release Images
どうやって表現しますかといいますと、
まず、上記の宇宙の写真をグレースケールに変換します。表示します(a-1)。そして動いた感じをだすために、少しずらして表示します(a-2)。そしてその白黒写真を反転(invert)します(b-1)。そしてこの反転した画像をずらして表示します(b-2)。
この四枚を繰り返して表示して効果を真似てみました。
作成したアプリケーションは下記のような感じです。java webstartにしてみました。
起動は下記のボタンから。
起動時に画像処理を行っているのでちょっと起動にもたつきがありますが...
画像処理は、
Jerry's Java Image Processing Pages
を使用しています。いろいろフィルターが用意されいるので使いやすいです。
コードは下記の感じです。