あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

可変長引数

Scalaにも可変長引数があった。 メソッド定義の引数の型の後に * をつける。 object Foo { def main(argv: Array[String]) { put("aa","bb", "cc", "dd") put("AA", "BB") put() } def put(s: String*) { s.foreach(print); println } } コンパイル後の clas…

シングルトンオブジェクト

Scala ではすべてがオブジェクトのため Javaの static フィールド、クラスの定数、クラスメソッドはないがシングルトンオブジェクトの宣言 object をサポートしている。 object のメンバは、ちょうどjava のクラスの static フィールドメンバと同じような扱…

関数の型 の記述

関数の型は、(関数やメソッドの定義で)引数の型や戻り値の型に指定する。 (引数の型, …) => 戻り値の型引数の型を丸括弧で囲って、=> の次に戻り値の型を書く。 (Int, Long) => String(Int) => String引数が1個だけの場合は丸括弧を省略可能 Int => String引…

ちょっとだけ気になったこと

同パッケージ内の他の class の static 定数の参照 通常、他の class の static 定数(final 変数)を参照する場合は class名.定数名 ですが同パッケージ内にある他の class の static 定数を参照する場合は class 名の指定がなくてもコンパイルエラーにならな…

FindBugs の @NonNull @CheckForNull アノテーション

FindBugs の @NonNull アノテーションで引数や戻り値が null でないことを明示すると、可読性もよくなるし、間違って null の引数を指定したり、null を返すコードを書くと、FindBugs の指摘が入るので、不要な null チェックの冗長なコードが減少する。 imp…

guava-libraries の型推論してくれるファクトリメソッド

java JDK 6でジェネリクスの要素をもつコレクションの生成は長ったらしく冗長。 import java.util.ArrayList; import java.util.List; import java.util.HashMap; import java.util.Map; .. final List<String> list = new ArrayList<String>(); final Map<String, Integer> map = new HashMap<String, Integer></string,></string,></string></string>…

immutable コレクション

Google の guava-libraries の 不変(immutable)なコレクション。 普通に HashMap 等を使うほうが簡単だがオブジェクトの状態が変わらないので、 状態に依存しないコレクション操作ができて、状態の変化によるバグを防止できる。 複数のオブジェクトで同じコ…

の関数

Scala の関数は、関数定義として呼び出せる。(Javaのメソッドや C の関数と同様) 名前のない関数として関数リテラルを記述できる。 関数リテラルを値として代入できる。(実行時のオブジェクト(FunctionNのインスタンス)) 関数オブジェクトはFunctionNトレイ…

XMLのスキーマ変換中に発生した ConcurrentModificationException

昨日 trang を使った時に発生した ConcurrentModificationException は いっしょに ダウンロードしたソースファイル(src.zip)を見てみると com/thaiopensource/relaxng/input/xml/Inferrer.java 内にある 下の拡張 for 文(for (Name elementName : outputQue…

XMLスキーマ変換ツール trang を使ってみた。

スキーマの種別は指定する拡張子で判断してくれるようだ。 比較的単純な XML だと問題なくスキーマを作成してくれたが 巨大で複雑な(1500行くらいある)XMLを指定すると、ConcurrentModificationException が発生した。 $ java -jar trang.jar foobar.xml foo…

の配列は、Tuple のように使える

Ruby は配列で、Scala の Tuple のような使い方ができます。 foo, bar, enable = case num when 0; ['bar', 10, 1] when 2; ['foo', 33, 0] when 4; ['run', 14, 0] when 6; ['stop', 25, 1] else; ['etc', 99, 0] end

Tuple を使う

本格的に仕事で Scala を使用することはないのですが、Java のプログラム内で scala の Tuple を使ったりしています。 値を保持するだけのために新規クラスなんかを作成する必要が なくなり結構、便利です。 import scala.Tuple3; .. private Tuple3<String,Integer,Boolean> getData</string,integer,boolean>…

から [Ruby] へ..

RubyはJavaより生産性が高い故に、JavaからRubyに移行するのでしょうか 果たして、本当にRubyの生産性は高いのでしょうか? 2008/03/25 Rubyの「生産性10倍」とか「プログラミングが面白くなる」とかの宣伝 2007/11/12 JavaとRubyの間にある、ベルリンの壁 20…

定数定義のインタフェース (java)

java の interface で定数のみの定義を行っているものがありますが 以下の理由で、それは良くありません。それは、public static final の field だけで構成されていて、method を持っていません。 定数をクラス又はインスタンスで使用するということは、実…

バグのチェック

最近、findbugsでアプリケーションのリファクタリングというか、潜在バグのチェックをやっている。FindBugs の RV_ABSOLUTE_VALUE_OF_RANDOM_INT (不適切な符号付き32-bit整数の乱数の絶対値計算) のバグタイプの対応としてRandom#nextInt() で返された値に…

プログラマのこだわり

プログラマにとってのこだわりって、人それぞれだと思いますが職業プログラマにとっては、やはり「プログラムがちゃんと動作すること」です。(私はそうです。)いや、こだわりではなく、そうでなくては次から仕事がなくなるので絶対条件になるわけですが。 …

はじめてRailsを触ってみる。

RubyはテストプログラムなんかをRubyで作ってきたのだが Railsを触るのは初めて、前知識はほとんど無しで ネットを頼りに進めてみる。 Rails 1.2 と Rails 2.0.2では結構、変更になっている。 デフォルトDBが MySQL から SQLite3 になった。 Rails 2.0 のテ…

コマンド ファイルの秒までのタイムスタンプを表示

$ ls -l --full-time $ ls --full-time でも表示できた。

Runtime.exec

悩まされていたjavaアプリケーションのメモリエラーは、javaアプリケーションから外部コマンドを実行するために使用していたRuntime.exec() に原因があることがわかった。 これは、動作環境が unix 系 (使用していたのは Linux ) の場合に起こるようです。Ru…

jconsole

javaアプリケーションのメモリエラーに悩まされていたので リソースチェックや監視ツールを調べていてjconsoleという監視ツールがあるのを知りました。 これは、j2SE5.0からデフォルトで付属するようになったJMX準拠の監視ツールです。 javaアプリケーション…

debug

System.out.println( (new Exception()).getStackTrace()[1].toString() ); デバッグ時はこれで、どこから呼ばれているかがわかる。

VNC client

debianからVNCを使う。VNCのサーバーとしてではなくクライアントで # apt-get install xvncviewer でインストールして $ xvncviewer でIPを入力するダイアログボックスが表示されるのでVNCサーバーのIPを入力すると、 今度はパスワード入力のダイアログボッ…

ご無沙汰しています

1年近くも書いてなかったんですね。日記。 最近はじっくりプログラミングするというよりシステムの完成度を上げるための検証や調査をやることが増えましたね。 最近は検証で、Rubyを使い始めました。ホームワークは、java6でプログラムを書き始めてます。

java GUI アプリケーション

2〜3年前に作りかけていたSWTアプリケーションを最近見つけた。その頃にSWTを知り、これからのjava GUIがおもしろいかもとXMLエディターもどきをつくりかけていたのを思い出した。 本業がいそがしくなり、中断したままになっていた。 また、いじりたくなり…

Linux + java開発に戻ってきました。

ブランクは約1年ですね。 昨年の10月ぐらいから、Windows + PHP や NORTi + C の開発をやっていたのですが、 先月からLinux & java の開発プロジェクトに戻ってきました。やはり自分にはこの取り合わせでの開発が合っているように思います。

エンコードチェック

ブラウザ等で入力された文字列がシステムでエンコード可能かどうかチェックする処理 必要になったので調べてみました。 import java.nio.charset.Charset; import java.nio.charset.CharsetEncoder; /** * 文字列がエンコード可能かどうかチェックする * @pa…

プログラマーの残業はなぜなくならない

きょうも残業か、とつぶやくプログラマーがほとんど なのでしょうか? 私は残業がソフトウエア開発の生産性を下げる。と思ってます。 なぜ残業しなければならない状況になったのか? お客さんの都合、ユーザの都合なのか? とりあえず時間がないから、残業し…

C言語の signed とunsigned の違いではまりやすいパターン

C言語の signed とunsigned の違いではまりやすいパターン (C言語プログラミングでの落とし穴)基本的なことなのですが、 はまると?になってしまうので注意です。 char data; data = 0xFF; if (data == 0xFF) { // int型にキャストされるので、dataは-1、0…

NOTEiではなくNORTi

NOTEiではなく、NORTiでした。お恥ずかしい。iTronを逆さまにするとNORTiなんですね。今ごろ、気づきました。またまたお恥ずかしい。

NORTiプログラムでTCP/IP通信の問題⇒解決

5月になりました。ゴールデンウィークです。あ〜あ休みたいです。が、お仕事がまだ残ってました。仕様変更やら、ハード的な不具合やらで安定するまでゴールデンウィークのお休みはお預けです。(T_T) NORTiプログラムでのTCP/IP通信の問題は解決しました。原…