読者です 読者をやめる 読者になる 読者になる

HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

PHPの三項演算子の注意すべき挙動

PHPで以下のようなコードを書いていてしばらくはまっていたのでメモ。

Apache TikaのPDFファイルテキスト抽出で遊んでみる

今更ながらに「Apache Tika」というものの存在を知る‥PDFとかその他諸々のファイルのメタデータやテキストを抽出してくれる‥|Apache Tika https://t.co/CsCBY74ekK— HHeLiBeX (@hhelibex) 2017年2月27日 ということで、サイトのParser APIを追いかけてコー…

シフト演算とMath.pow(2, n)と(+Math.pow(2, n)の怪)

自分が時々やらかしてしまうのでメモ。 環境は、CentOS 7(VM)上のOpenJDK 1.8.0_111。 2のべき乗(整数値)が欲しい場合はシフト演算 2のべき乗(整数値)が欲しいときに時々やらかしてしまうのが、以下のようなコードを書いてしまうこと。 for (int i = 0; i < …

rangeによるrangeの違い

Pythonのコードをちゃんと書いたことはないのだけど、ある理由でPythonのコードを読んでいて、ふと気になって調べたメモ。 結論から言うと、rangeで範囲を指定したときに列挙される値が、プログラム言語や、同じ言語でも書き方によって違うのだな、と。 実行…

QueueやStackとして使うなら‥LinkedList vs ArrayDeque

頭がJava 1.4で止まっているプログラマの呟き(謎)‥ LinkedListをQueueとして使ったあるプログラム(何)を書いていて、QueueやStackとして使うならLinkedListよりArrayDequeがお勧めとアドバイスをもらったので、軽く検証してみた。 事前準備 ソースコードは以…

参照はあいまい

いわゆるJavaの初心者がどつぼにはまりがちな、「参照はあいまい」と言われて戸惑うケース。(NGコード) package t2014_1008_01; import java.util.*; import java.sql.*; public class Main { public static void main(String[] args) { Date now = new Date…

SQLExceptionから取得できるSQLSTATEとエラーコード

ふとjava.sql.SQLExceptionのJavaDocを見ていたら、SQLSTATEとベンダー固有のエラーコードを取得できることに(いまさら)気づいた。 ベンダー固有のエラーコードはログに吐き出すくらいしか用途を思いつかないが、SQLSTATEはある程度規格化されているはずなの…

JavaプログラムからMySQLに4バイトのUTF-8文字を放り込んでみる

前の記事で、PHPプログラムからMySQLに4バイトのUTF-8文字を放り込んでみた。 MySQLで4バイトのUTF-8文字を扱ってみる - HHeLiBeXの日記 正道編 ついでなので、Javaプログラムの場合はどうなるのかを調べてみた。 例のごとく、「𠮟」と書かれた部分は「叱」…

短縮URLの展開処理を各言語で書いてみた

別にぜんぜんなんてことはないのだけど、なんとなく(謎)。 展開処理とは言っても、リクエストを出してLocationヘッダの内容を取っているだけだけど。 Java java.net.HttpURLConnectionクラスを使用して、こんな感じで。 import java.io.IOException; import …

AutoCommitの動作を誤解していた訳

以下の続き。 SET AUTOCOMMIT=0後の動作を誤解していたらしいの巻 - HHeLiBeXの日記 正道編 そもそもJDBCでは、トランザクション処理を書くときに、次のいずれかの書き方をすることになる: // TODO エラー処理 Connection connection = DriverManager.getCo…

イテレーションの最中に要素を削除する

Javaで次のようなプログラム: Map<String, String> map = new HashMap<String, String>(); map.put("a", "A"); map.put("b", "B"); map.put("c", "C"); for (String key : map.keySet()) { if (key.equals("b")) { map.remove(key); } } を書くと、java.util.ConcurrentModificationException</string,></string,>…

FrontBaseを入れてみた

何がきっかけだったかすっかり忘れてしまったのだが(と言いかけて、PHPのオンラインドキュメントを眺めていたら存在を知ったということを思い出したらしい)、FrontBaseというRDBMSの存在を知ったので、実際に導入してみた。その際の手順メモ。 FrontBase イ…

列名を持たない列の列名(意味不明)

なんと言えばいいのか分からなかったので意味不明なタイトルになったが、要は次のようなクエリを実行したときの結果表の列名はどうなるのか、ということ。 SELECT COUNT(*) FROM hoge ということで、一通り調べてみた。 次のテーブルを前提とする。 CREATE T…

ISBNをチェックするユーティリティ

唐突に、いつかどこかで役に立つかなぁ、と思い、持てる力(何)をいろいろ出してユーティリティを書いてみた。 アルゴリズムはWikipedia(ISBN - Wikipedia)を参考にした。 Java版 多少のブランクはあってもやはり私のプライマリ言語ということでまず最初に。 …

大昔に修正されたタイムゾーン関連のバグ

ある人(誰)から、Windows Server 2008でタイムゾーン関連のバグがあるという話を聞いた。発生するのが「J2SDK 1.4.2_14 b01以前」ということでえらい昔の話なのだが、ニッチな問題が好きな自分としては実際に動かして確認しないわけにはいかない(謎)というこ…

「f(n+1)=f(n)の各桁の二乗の和」という数列

某番組で次のような問題が出されていた。 次の○に入る数字は何か? 4→16→37→58→89→145→42→○→4 で、求め方はタイトルのとおりなのだが、任意の数字に対して数列を作ってみようと思い立って、次のようなプログラムを作成。 import java.util.ArrayList; import…

JavaFXで遊んでみる

次の記事を何気なく眺めていて、唐突にJavaFXに触れてみようと思ったらしい。 Java技術最前線 - 「詳説JavaFX」第1回 JavaFXとは:ITpro Java技術最前線 - 「詳説JavaFX」第2回 JavaFXでHello, World!:ITpro この記事ではJavaFX 1.3+NetBeans 6.9betaを使…

NetBeansを使ってJMSで遊んでみる

今からでも遅くないらしいので、JMS(Java Message Service)で遊んでみた。 今からでも遅くない JMSを学ぼう!(前編) 非同期通信の世界へようこそ (1/6):CodeZine 今回は、以下を動かしてみた。 この記事にサンプルが載っている「Point-to-Pointメッセージ…

NetBeans 6.7.1 for WindowsでのJDKの切り替え

とある事情で、NetBeansが使用するJDKを切り替えたかったのだが、Eclipseほど簡単にはいかないようだったので全部探した。 また探すのはいやなので、編集したファイルをメモ。 環境 NetBeans 6.7.1 OS: Windows Vista Business SP1 編集したファイル E:\Prog…

ビット演算子

なぜか唐突に、ビット演算子で「0xaaaaaaaa」と「0x2aaaaaaa」をシフトしてみようと思ったらしい。 public class Main { public static void main(String[] args) { int[] nums = { 0xaaaaaaaa, 0x2aaaaaaa, }; for (int n : nums) { System.out.printf("===…

BufferedReaderとLineNumberReader

BufferedReader#readLine() で実装されている、入力を行に分割するアルゴリズムを再利用する手立てはないものか、と調べていたら、LineNumberReader#read() が使えそうということに。 Read a single character. Line terminators are compressed into single…

Simpleライブラリの検証(6)

ざっくりと試してみたSimpleライブラリ。 Simpleライブラリを試してみる - HHeLiBeXの日記 正道編 いろいろと気になる点もあったので、ざくっと検証してみる。の続き。 全プリミティブ型とその配列をシリアライズしてみる いまさらだが、まぁ、基本というこ…

改行コードの出力

改行コードがプラットフォームごとに異なるというのは常識だが、ついつい次のようなプログラムを書いてしまう。 System.out.printf("%5d %5d\n", 12, 345); さすがに、print、printlnを使う場合はエスケープシーケンス "\n" を直接ソースコード上に書くこと…

Simpleライブラリの検証(5)

ざっくりと試してみたSimpleライブラリ。 Simpleライブラリを試してみる - HHeLiBeXの日記 正道編 いろいろと気になる点もあったので、ざくっと検証してみる。の続き。 値の解析エラーの扱い たとえば、POJOではshort型として定義されているフィールドに対応…

java.lang.reflect.AccessibleObject#setAccessible()の影響範囲

自分は、設定を変更したら元に戻さないときがすまない性分なので、何気なく次のようなコードを書いていた。 private static void printPrivateFieldValue(Object obj, String name) throws Exception { Field field = obj.getClass().getDeclaredField(name)…

正規表現におけるメタ文字をエスケープするメソッド

今まで、正規表現のメタ文字をエスケープするのに、バックスラッシュとかをいっぱい書いていたのだが、簡単にエスケープする記法があることに最近気づいた。さらにそのような文字列を生成するためのメソッドがあることにも気づいた。 パターン(置換前)文字列…

Java Puzzlers 罠、落とし穴、コーナーケース

Java Puzzlers 罠、落とし穴、コーナーケース作者: ジョシュア・ブロック,ニール・ガフター,柴田芳樹出版社/メーカー: ピアソン・エデュケーション発売日: 2005/11/14メディア: 大型本購入: 3人 クリック: 92回この商品を含むブログ (57件) を見るふと目にし…

無駄にCPUを使いたい処理(謎)

次のようなコードに遭遇したとき、一瞬、見なかったことにしようかと思った。 private static String buildString(List codes) { String resStr = ""; // 何か別の処理 for (int j = 0; j < codes.size(); ++j) { if (Integer.parseInt((String) codes.get(j…

JSPで誤ったコメントアウト

実害がなかったので「未遂」ではあるのだが‥ 問題となったのは次のコード。 <%@ page contentType="text/html" pageEncoding="UTF-8" %><% response.setHeader("pragma","no-cache"); response.setHeader("Cache-Control","no-cache"); %>

Simpleライブラリの検証(4)

ざっくりと試してみたSimpleライブラリ。 Simpleライブラリを試してみる - HHeLiBeXの日記 正道編 いろいろと気になる点もあったので、ざくっと検証してみる。の続き。 Elementアノテーションのdata要素 JavaDocを見たときに気づいたElementアノテーションの…

Simpleライブラリの検証(3)

ざっくりと試してみたSimpleライブラリ。 Simpleライブラリを試してみる - HHeLiBeXの日記 正道編 いろいろと気になる点もあったので、ざくっと検証してみる。の続き。 Javaフィールドの値がnullの場合の扱い 当然のことながら、すべてのJavaフィールドの値…

Webアプリケーション開発の際の注意事項(4)

これまでの記事。 Webアプリケーション開発の際の注意事項 - HHeLiBeXの日記 正道編 Webアプリケーション開発の際の注意事項(2) - HHeLiBeXの日記 正道編 Webアプリケーション開発の際の注意事項(3) - HHeLiBeXの日記 正道編 今度はコードを書くときの注意で…

トランザクションを放置したために現れる亡霊データ

データベースのトランザクションの終了処理をきちんとしないために、トランザクションがタイムアウトするまでの間、未コミットの亡霊データ(何)が見えてしまうという爆弾コード。 実際のコードを簡略化し、JDBCに置き換えたコードで掲載。 private static vo…

Webアプリケーションが起動したスレッドからJNDIリソースを取得できるか

Webアプリケーションサーバー上で動作するアプリケーションから、JNDIリソースとして登録されたデータベース接続オブジェクト(データソース)を取得、なんていうのはよくやることだが、今まで知らなかった原因により、データソースを取得できないケースがあっ…

Simpleライブラリの検証(2)

ざっくりと試してみたSimpleライブラリ。 Simpleライブラリを試してみる - HHeLiBeXの日記 正道編 いろいろと気になる点もあったので、ざくっと検証してみる。の続き。 要素名や属性名は「JavaBean標準」固定なのか Lureクラスなら"lure"という風になるとい…

Simpleライブラリの検証(1)

ざっくりと試してみたSimpleライブラリ。 Simpleライブラリを試してみる - HHeLiBeXの日記 正道編 いろいろと気になる点もあったので、ざくっと検証してみる。 XML宣言と文字エンコーディング サンプルでは、出力されたXMLファイルにXML宣言が存在しない。そ…

Simpleライブラリを試してみる

「Simple」という名のライブラリがあるらしい。 JavaオブジェクトをXML形式にシリアライズするSimpleライブラリ | Unofficial DB2 BLOG Simple を使って XML シリアライズを行う Simple 2.7.1 (v2.0からはZIP形式で提供されているのに、2009年11月24日更新(…

Webアプリケーション開発の際の注意事項(3)

これまでの記事。 Webアプリケーション開発の際の注意事項 - HHeLiBeXの日記 正道編 Webアプリケーション開発の際の注意事項(2) - HHeLiBeXの日記 正道編 ただ、これまでとは違って、コードの書き方の問題ではなく使用しているライブラリに関連する問題。以…

Webアプリケーションクラスローダーのシミュレーション

以前に、止まってくれないWebアプリをテーマに次のような記事を書いた。 Webアプリケーション開発の際の注意事項 - HHeLiBeXの日記 正道編 Webアプリケーション開発の際の注意事項(2) - HHeLiBeXの日記 正道編 で、検証に使用していたWASのトライアル版は(た…

SQL Server のデータベースに JDBC 接続するまで

Microsoft SQL Server 2005 Express Edition を導入し、Java プログラムから JDBC 接続をしようとした。 Download Microsoft SQL Server 2005 Express Edition Service Pack 3 from Official Microsoft Download Center Download Microsoft SQL Server Manag…

TIMESTAMP のリテラル

TIMESTAMP のリテラルを記述する際に、DB2 で苦労した記憶が唐突によみがえってきたので、手元にある DBMS を比べてみた。 IBM DB2 Express-C v9.1.2 IBM DB2 Express-C v9.5.2 IBM DB2 Express-C v9.7.0 Oracle Database 10g Express Edition PostgreSQL v8…

Finalizerの動作を実際に見てみる

次の記事(2007/12/27): 現場から学ぶWebアプリ開発のトラブルハック(9):JavaのGC頻度に惑わされた年末年始の苦いメモリ (1/3) - @IT の「【第5話】犯人はお前だ! Finalizer!!」を久しぶりに目にして、Finalizerの動作を実際に見てみるか、と思ったらし…

ユーザ定義型(構造型)の値をJDBCで扱ってみる

せっかくSQLにユーザ定義型(構造型)を定義する機能があるので(謎)、JDBC経由で参照、更新をしてみる。 使用する環境は以下のとおり。 DB2 Express-C v9.7.0 (と書いて FP1 に更新しなきゃならないことを思い出したらしいが、それはまた後で) とりあえず、ア…

File.deleteOnExit() を使用していたライブラリ

トラブルは得てして古い環境で起こる。以下のエントリ: File.createTempFile() と File.deleteOnExit() のコンボ罠の続き - HHeLiBeXの日記 正道編 を書いたのもそんなトラブルがきっかけだが、原因の1つはアプリケーションそのものではない‥いや、(古いラ…

File.createTempFile() と File.deleteOnExit() のコンボ罠の続きの続き

過去のエントリで、 File.createTempFile() と File.deleteOnExit() のコンボ罠 - HHeLiBeXの日記 正道編 File.createTempFile() と File.deleteOnExit() のコンボ罠の続き - HHeLiBeXの日記 正道編 というのを書いたが、別に「コンボ罠」というわけではない…

java.lang.ref.Reference 関連 - 到達可能性

そういえば、大昔に「よく分からん」とか言って放り投げていた java.lang.ref パッケージ関連のクラスとその周辺知識。 先日、soft reference とかの話が出てきたので、今度はちゃんと読んでみた。(とりあえず到達可能性について) java.lang.ref (Java 2 Pla…

Webアプリケーション開発の際の注意事項(2)

初回の記事は以下。 Webアプリケーション開発の際の注意事項 - HHeLiBeXの日記 正道編 某所(何処)での某氏(誰)の報告が気になったので、シンプルケースで検証。 なんでも、java.io.ObjectStreamClass#lookup() を呼ぶだけでクラスローダーが残ってしまうとい…

java.sql.Array を使ってみる

DB2 v9.5 から ARRAY 型がサポートされるようになった。ただし、自分が認識している範囲では次の制限がある。 プロシジャ(Procedure)のパラメータでのみ指定できる。 (DB2 v9.7以降)関数(Function)のパラメータか戻り値にも指定できる。(とオンラインマニュ…

Generics+Auto-boxing の罠

Auto-boxing が導入されたことで、本来は Collection に格納できない(ラッパークラスによる明示的なラッピングが必要な)プリミティブ型の値を、コード上では明示的なラッピングをしなくても格納できるようになった。 しかし、あるプリミティブ型の引数をとる…

ByteArrayOutputStream クラスの toString() メソッド

Object.toString() メソッドは、デバッグ出力などのときに役立てる、くらいの意識しかなかったのでまったく気にしていなかったのだが、java.io.ByteArrayOutputStream クラスの toString() メソッドはオーバーライドされている。 で、何が返ってくるのかと思…