programming

リストリテラルなら…

新しいJava7にimmutableなリストを記述できるリテラルが導入されるけど、Java5ならこういうヘルパメソッドを用意すればいいだけの話なのだ。(誰でも思いつくけど) public static <T> List<T> constList(final T... elems){ return Collections.unmodifiableList(</t></t>…

あまりよくないObjectのidentityの使い方

明らかに不穏です。 // finalを付けないと更に不穏なコードにできます。 private static final String SPECIAL_TOKEN = new String(""); public static void methodXXX(final String arg){ if(arg == SPECIAL_TOKEN){ // なんか特別な処理 } // 普通の処理 }…

EclipseのQuick Assistを活用しよう

EclipseのQuick Assist/Fix(Ctrl + 1)機能を活用しよう。 // Invert conditions 機能 if(!a && !b); ↓ if(a || b); // Invert equals 機能 someString.equals(""); ↓ "".equals(someString) // Join nested if statements 機能 if(a) if(b); ↓ if(a && b); E…

定数と比較するレベルでも頻出するようならさっさとメソッドにすべし

今日、自分で学んだこと。 SOME_CONSTANT.equals(someString) とかいう記述が頻出するなら、この程度であってもメソッドに置換すべし。 isSomeConstant(someString);

C言語復習中…

去年の1月ぐらいにちょっと勉強したC言語(C89)を今復習中。いや、ほんとはC++も勉強してたはずなんだけど。でもC言語は言語仕様がコンパクトで分かりやすい。その実、罠だらけだが。とりあえずK&Rの後ろの規格的な部分をパラパラパラ… メモリ上の一区域をオ…

クソコードの特徴

同じコードがとにかく何度も続く。これが一番の特徴。 色々な問題を1つの関数に持ち込んでいる。問題の分割がへたくそ。同じ問題を解くコードが複数個所に現れる。 for文が少ない。繰り返し構造を積極的に用いてない。クラスなどの抽象構造が少ない。 メソッ…

Lispbox

LispboxというEmacsのdistribution。Winユーザでもzipを解凍してbatを実行するだけでCommon Lispをはじめられる。個人的にAllegroは好きじゃないので(生理的な問題)、CLISP版をインストールした。しかしSchemeならWindowsでも動くGaucheとかあるのに、Comm…

Python 3000

This article explains the new features in Python 3.0, compared to 2.6. Python 3.0, also known as ???Python 3000??? or ???Py3K???, is the first ever intentionally backwards incompatible Python release. だいたい変更点を見ていたら、ほとんど意…

VBAでShift_JIS以外の文字コードを読み書きしたいならADODB.Stream。

ADODB.Stream(ActiveX Data Object Library)というクラスを使えば、VBA(COM)にてShift_JIS以外の文字コードの読み書きが出来ます。クローズドなWindows環境にて(ある程度の)文字コード変換プログラムが簡単に作れます。ほかにWindowsデフォルトで出来る機…

VBAでリストを返却するユーティリティ関数では配列ではなくCollectionを使おう

リストを返却するユーティリティ関数では返却値に配列ではなくCollectionを使おう。 ' 今開いているブック(複数)からname$の名前を持っているブックだけ集めて返す。 Function CollectOpenedWorkbooks(name$) As Collection Set CollectOpenedWorkbooks = …

プログラムの動作を早くする並列的(concurrent)アプローチ

(考えたことを書いてみる。正直書いてあることは自明なので役に立つようなものではありません。) はやさを求めて プログラムにしても、人手による作業にしても、作業にかかる時間を短縮しようとしたら以下のようなことをだいたいやるでしょう。 作業を減ら…

もっとevalされるべき

もっとevalされるべきというのに笑った。それにしてもニコニコ動画でLispができるのはすごい!

Concurrent Clean

Haskellの親戚のConcurrent Cleanにちょっとだけ触れてみよう。 http://sky.zero.ad.jp/~zaa54437/programming/clean/ http://www.geocities.jp/lethevert/clean/gettingStarted01.html http://www.geocities.jp/lethevert/clean/clean-mode.html Cleanideと…

いい加減聞き飽きたもの

関数も値である ラムダ(誰か飽きてギリシャ語っぽくランブダって言うようになってくれよう) レキシカルクロージャ とくにレキシカルクロージャに関しては今後これに関して「珍しい!」「すばらしい機能だ!」「Common Lispにはあったのだが、ほかのFuckin'…

Haskell

遅延評価って言語仕様の要請じゃないのね。 リンク [http //haskell.org/onlinereport/:title](言語仕様的なもの) : 巷で売ってる本だけじゃいろいろわからないよね。和訳版もありました! [http //haskell.org/ghc/:title] : Glasgow Haskell Compilerの…

文字列比較(かきすて)

http://capsctrl.que.jp/kdmsnr/wiki/bliki/?FineDetailを前に見ていて、どうすれば「数字を特別扱いしたソートになるだろう?」と考えていた。 そしてとりあえず今日作ってみた。課題として手ごろだ。 普通の文字列比較 まずは普通の文字列比較。これを使う…

Return-Type-Based Method Overloading in Java(かきすて)

おもしろそうな記事発見:Return-Type-Based Method Overloading in Java http://today.java.net/pub/a/today/2008/07/31/return-type-based-method-overloading.html Jasminってなにさ(Java-ASM => Javaのアセンブラツールです) 記事の途中に出ているJasm…

複数キーのハッシュマップ

複数のキーから一意の値を取り出すようなハッシュマップ(java.util.HashMap)をもし作成したい場合、キー部分に複数キーを表現するようなオブジェクトを使うよりは、できるならば文字列連結で複数キーを表現してしまったほうがいい。*1(あとから管理する者も…

CommonLispのreduceと, Schemeのfoldの違い

まあこういう違いです。引数の適用の仕方なので、方言みたいなものですが。 CommonLisp - reduce (defun myreverse (lis) (reduce (lambda (x y) (cons y x)) lis :initial-value nil)) (myreverse '(1 2 3 4 5)) ; (5 4 3 2 1) Scheme - fold (define (myre…

fold - fold([lr]1?)?, reduce, Aggregate, accumulate

http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29Common Lispにはreduceという関数があり、これはSchemeやHaskellでいうところのfoldにあたります。 いわゆる畳み込み関数というやつで、『畳み込みする関数』と『その初期値』を使って、リス…

Advanced Visual Basic6

以下の本を買った人へ:Advanced Visual Basic 6: Power Techniques for Everyday Programs (DevelopMentor Series)作者: Matthew Curland出版社/メーカー: Addison-Wesley Professional発売日: 2000/07/13メディア: ペーパーバックこの商品を含むブログ (1…

IOは非同期にせよ

IOは非同期にせよ。出来る限り非同期にせよ。 書くだけ書いて読み返さないデータは全て非同期で書き出してしまえ。スレッドに乗せるな。制御に乗せるな。遅いものはそれだけで作業させよ。 ログとか、アプリの排出データとか。

テストすべきところ

プログラマになって最初のうちは、ソフトウェアのテストすべきところはごく一部に抑えるべきという考え方だった。 経験を積み出すと、まんべんなく、という考えになった。 最近では、基本的にまんべんなく、であるが、自明である部分はやらなくていいという…

foo, bar, baz, hoge, hage …??!

Wikipedia:hoge foo bar baz まあ、これはいいとして、自分の場合こまったことに hoge hage fuge fuga なんです。これの困ったところはhogeとhageだと見分けが難しいのと、それと髪の毛を気にする人の前にこのソースがあるとちょっと悪い気がするところです…

ハッシュ

たまにはアルゴリズムの勉強。 今日はハッシュテーブル。いわゆるハッシュ関数によるマップですね。 (いわゆるマップとかの)ハッシュ関数 任意のオブジェクトをintに変換する関数。同値のオブジェクトは必ず同じ値のintに変換される。 なるべくintの値域内…

ストリーミングモデル

ストリーミングモデル、と私が勝手に呼んでいるパターン。 もうプログラミングの帝石みたいなものだけれども、インプットが巨大(あるいは無限)な問題を一定のメモリで解くというやり方。 以下が対照的だろう。 メモリに全部ファイル内容を読んでから1行ず…

末尾再帰にいたるまで

末尾再帰(tail recursion)は意識しないとそうならない。 再帰の中には末尾再帰に変換できないものも当然ある たいがい再帰関数で途中結果を持ちあるくようにすれば末尾再帰にできる ただ、これを無理やりやると結局スタックを持ち歩いているのと違わなくなる…

インナークラス、匿名クラス

(2008/10/22に加筆。) Javaではインナークラス、匿名クラスの違いがわかってると便利です。 以下のクラスから参照できる変数スコープの違いをはっきりと示すことができるとかっこいいでしょう。 staticなインナークラス ただのインナークラス 匿名クラス …

Genericにすべきなのか?

Genericに出来る余地がある場合、さっさとGenericにすべきなのか?なやむ。

java.util.regex.Patternクラスのソース

ざっと5000行ある…。これを読むのは辛い…。