プログラミング

Python3 で os.walk() を使ってファイル一覧を生成しようとしてyeildを使うまで

Python3 でツールを書いていて、あるフォルダ以下のファイル一覧を再帰的に取得したくなった。MS-DOS の 「DIR /S /B」みたいなイメージで。Python の osモジュールには、os.walkというこういうときに便利な関数があるので、これを使ってファイル一覧を作る…

Oracle JDBCドライバでLONG列にアクセスする際の注意点

LONG列なんかはもう非推奨で普通はBLOB使うからほとんど問題にはならない内容なのですが。Oracleのデータディクショナリテーブルの一つALL_TAB_COLUMNS(USER_TAB_COLUMNS)のDATA_DEFAULT列はなんとLONG型で、これにアクセスするときにこの問題にはまって2…

scheduleAtFixedRate() を実行中のタスク側から停止する

Javaで、一定時間ごとに実行するプログラムをかく必要があったのでjava.util.concurrentのScheduledExecutorServiceを利用してプログラムを書いた。一定時間ごとの実行についてはscheduleAtFixedRate()を使って難なく書けた。 しかし、このとき実行されるタ…

クラスの遅延初期化方法

普通、シングルトンなクラスを作るとき、ふつう初期化は以下のようにする public class Hoge { private static final Hoge hoge = new Hoge(); private Hoge() {} public static Hoge getInstance() { return hoge; } } でも、これだとクラスHogeを参照した…

クラス継承での注意事項

継承クラスでコンストラクタが呼ばれる順番は以下の通り 親クラスのコンストラクタ実行 子クラスの変数初期化 子クラスのコンストラクタ実行 なので、以下のような抽象クラスを作ってしまうと、正しく動作しない public abstract class hoge { public hoge()…

レコード型変数の初期化

Delphiで、レコード型変数に宣言時に初期値を入れる方法がわかったのでメモ。 type TTestRec = record column1: String; column2: String; column3: String; end; var //宣言時にデフォルト値入力 var_t: TTestRec = (column1:'VAR1'; column2:'VAR2'; colum…

かっこいいfor文

ツリー構造を、ノードからルートまでたどって処理をするプログラムを書くとき、いままでは以下のように書いていた。 Node nd = currentNode; while(nd != null) { queue.add(nd); nd = nd.parent(); } 今日、本を読んでいたら、以下のように書かれているのを…