開発

Javaの正規表現とJavaScriptの正規表現の空白クラスは異なる

本日は軽いネタ。Java だろうが JavaScript だろうが、正規表現は拡張構文の違いはあるものの基本的には同じに扱える。と思いきや、Unicodeが入ってくるとだいぶ状況が違うようだ。言語によってサロゲートペアの扱いが違うのは知っていたが、空白クラス(\s…

なぜ、プログラマは滅びないのか

先日、「プログラマを志す君に伝える「仕事が無くなるリスク」」という、少々頭の悪い記事を読み、まぁ、こんなのまともに相手する人いないか、と思っていた。ところが、「将来、人工知能がプログラマの代わりになることを想定するのはおかしいことではない…

システム開発はもっと明朗会計にならなければいけない

数ヶ月前、都内某所に引っ越しを行ったのだけれど、その際、何箇所かに引っ越しに見積りをしてもらってわかったことがある。まったく明朗会計ではないのだ。いろいろ情報を集めた結果わかったのは、きちんと相見積を取った上で、あそこはこの値段だったので…

XMLIC 1.0.3 リリース&GitHubへの移行

XMLIC の 1.0.3 リリースに合わせて GitHub に移行しました。機能追加そのものはたいした内容ないですが……。wmf2svg も移行し次第 OSDN 側のプロジェクトサイトは閉じてしまおうと思うのだけれど、OSDNは申請しないとプロジェクト閉じれないという面倒くさい…

EXCEL列幅を徹底解明する

仕事で Apache POI を使っているのだけれど、getColumnWidth や getDefaultColumnWidth の返す値が EXCEL のそれとはまったく異なる値を返すので大変困ってしまった。仕方なくEXCEL VBA を使ってフォントやサイズを変更しながら値を出力してみたのだが、線形…

Javaのクラス内に存在する定数値をメソッド毎に出力する

Javaのクラス内が依存しているフィールド、メソッドの一覧を表示する - A.R.N [日記] の続き。Javaの各クラス内で書かれたSQL文を抽出したかったので、Javassist を使って定数を抜いてみた。 本当は、スタック位置をきちんと考えてメソッドの引数としてどの…

Struts1 の ClassLoader 脆弱性問題について

Apache Struts 2の脆弱性が、サポート終了のApache Struts 1にも影響Struts1なんて星の数ほどのJava開発者がソースコード読んでたはずなのに、よく今まで誰も気づかなかったものだと思う。「目玉の数さえ十分あれば、どんなバグも深刻ではない」という言葉は…

履歴管理されているマスタの空白期間を埋めるSQL

履歴管理されているマスタ(キー項目に対し適用開始日、適用終了日を持ち行が複数発生するマスタ)を使うようなシステムで帳票出力時に名称が出てこないといった問題がしばしば起こる。原理的にはトランザクション上にある日付データで参照すれば、入力時点…

主キー問題を整理する

だいぶん前から延々とくすぶっているIDキー問題あるいはサロゲートキー問題なのですが、一時期下火になっていたのですが、また再燃している感もあります。それだけ奥深い問題なのかもしれません。 複合主キー「否定派」と「許容派」の論争 IDの設計について…

HTML でリッチテキストエディタを実現する方法

そんなの contenteditable でできんじゃん、と思っていたら全然そんなことなかったのでメモ。 まず編集可能な HTML 領域を作るには次の二種類の方法がある。 contenteditable="true" designMode="on" 違いは contenteditable がある特定の要素の中だけを編集…

Chrome のイケてないところ

Chrome というか webkit というか blink のイケてないところなんだけど、アレだけウェブ標準ガー、と言いつついまだにCSS2レベルでも対応してない動作がいくつかあり困ってしまう。具体的には以下の問題がある。 テーブル列を非表示にする visibility: colla…

XMLICというライブラリをリリースしてみた

つい先週、XMLICというライブラリをリリースしました。XMLIC - jQuery like DOM traversal and manipulation API名前を見ただけだとJSONICのXML版のように思われるかもしれませんが、実体はXML専用のJava用jQueryという代物です。こんな感じで使えます。 XML…

CSS非拡張ツール Wlite 0.2.0 リリース

最近、LESSとかSCSSとかCSS系のメタ言語が流行っています。特にSCSSの拡張機能Compassのベンダープレフィックスとかすごくいい感じです。ほしい……。でも、イマイチ踏みきれない点があります。それはいつまで言語として生き続けるかわからないことです。この…

Javaのクラス内が依存しているフィールド、メソッドの一覧を表示する

世の中には javassist というとても便利なライブラリがある。通常は、バイトコードの書き換えに利用することが多いが、バイトコードを調べることで依存関係やメタ情報を取得することもできる。単に依存しているクラスを取得するだけであれば、CtClass#getRef…

複数の履歴管理されるマスタを結合してマスタを作る(外部結合編)

前々回の記事にて、内部結合を使って複数の履歴管理されるマスタを結合する方法を書いたが、マスタを外部結合する必要がある場合、困ったことになる。外部結合では下図のように空き領域を埋めなければ、その部分の開始日、終了日が取得できない。 今のところ…

SQLで安全に除算を行なう

本日は軽い話題。SQLで除算を行なう時に困るのは、ゼロ除算の扱いだ。通常のプログラミング言語ならともかく、集計・分析をメインとするSQLにおいては、ゼロ除算はNULLあるいは0になってくれれば問題ない場合が多く、ゼロ除算エラーが発生してしまうのは、単…

複数の履歴管理されるマスタを結合してマスタを作る(内部結合編)

開始日と終了日を持つ履歴管理されるマスタは、特定の日付においては一意に定まるので通常の利用であれば問題ないが、複数の履歴管理されるマスタから別の履歴管理されたマスタを生成するのはものすごく困難である。しかし、内部結合する(=関係する履歴管…

「業務系SEの末路的なお話でして」と一人当たりGDP

「業務系SEの末路的なお話でして」という資料が一部の人々(というかソフトウェア業界人に)の話題になっています。 業務系SEの末路的なお話でして from okachimachi この資料自体は業界人的には、現在置かれている絶望的状況を的確に記述しているように思う…

履歴管理されているマスタを圧縮するSQL

[2012/8/23] 内容に誤りがあったため、一旦公開を停止していましたが、SQLが修正できたの再度公開しました。昨今は、どこの会社でもマスタを履歴管理するのが流行りらしく、適用期間(適用開始日と終了日)を持つことが多い。以前からこのようなマスタを扱う…

Oracle で SELECT INSERT 文を生成する

データをコピーする場合、CREATE TABLE テーブル名 AS SELECT ... の形式で書くとテーブルのコピーを作ることができる。当然、INSERT INTO テーブル名 SELECT ... の形式で書けばデータコピーできる……と思うのが実は大間違い。この構文では、テーブルのカラ…

PL/SQLでテーブルを同期する

他システムなど外部からデータを取り込み加工して本テーブルに取り込みたい場合というのは非常に多い。非常に多いにも関わらず、SQLでこのような処理を書くのは意外と難しい。いろいろと試行錯誤した結果、FULL JOINを使う方法に落ち着いた。 FOR cur_rec IN…

SQLで条件分岐

条件分岐という言葉を聞いた瞬間、SQLで書くことを諦めてしまう人がいる。しかし、SQLで条件分岐を書きたい時には次のどちらかのパターンを使えば良いだけである。 CASE 句を使う UNION ALL を使う 区分によって計算方法を変えたい場合は前者を使う。 SELECT…

按分時に端数を寄せるSQL

仕訳の配賦処理や消費税の按分計算で端数を伝票の特定の行に寄せたい場合がある。しばしば、この手の計算はPL/SQLなどを使って手続き型で実装されることが多いが、ウィンドウ関数を使えば簡単に実装できる。基本的な考え方はこうだ。 総金額に対する各明細へ…

重複データからユニークな行を取り出すSQL

昨日のエントリで N対M になるようなテーブルを結合するときは、N対1 にする必要がある旨書いたが、具体的にどうするかまでは書かなかった。例えば、全銀CSVをそのまま取り込んだ銀行マスタ(銀行コード、銀行名称、銀行支店コード、銀行支店名称)から銀行…

SQLの組み立て方

ソフトウェア開発をやっていると、SQLが苦手なプログラマに多く出会う。SQLはすごく柔軟で高度な処理を簡潔にかけるにも関わらず、わざわざ単純なSQLを使って大量のデータをした後、Javaなどの手続き型言語で加工するわけだ。単にアホなだけという可能性も否…

JSONIC 1.3.0 ベータ2 でどれくらい速度が改善したか

というわけで、JSONIC 1.3.0 ベータ2 出しました。直前の計測では、GSONを上回るパフォーマンスが出ていたのですが、GSON2.1が出ているのを気づかずにいたため、入れ替えて測ってみたら、高速化されててまた負けてしまってましたorzまぁ、それはともかく、JS…

json-simple その実力はいかに。

Twitterで検索すると不具合情報がつかみやすいので、たまに検索しているのだが、昨日検索してたらjson-simpleがいいらしいよ、という話が出ていたので調べてみた。Heap based parserとか書かれているので、もしかすると高速化のヒントが得られるかもしれない…

JSONライブラリのパフォーマンス比較

つい先日、Androidアプリで使えるJSONライブラリ比較という記事で例によってJSONICパフォーマンス悪い、という話が出ており、個人的には必要性を感じていないものの、悔しいのでパース側も高速化してみることにしました。というわけで、本日、いわゆるプルパ…

Antでfilesetのファイル一覧を標準入力としてプログラムに渡す

TwitterでTPPに賛成の論陣を張ったところ、人非人やら非国民やら言われ肩身の狭い今日この頃。正直、反対派がこれが問題だ!と言っている話がまったく問題に見えなかったりで、世間との乖離を感じる次第。まぁ、それはともかく今日もAntですwAntにはfileset…

Dartに求めるもの

Googleから新しいプログラミング言語 Dart が発表された。内容を見るかぎりとても実用的なすばらしい言語に思える。どこら辺が実用的かと言えば、Java言語そっくりなシンタックス(既存言語と似たシンタックスを用意することは、広く利用される言語になる条…