[Java] ユニットテストでコネクションプールを使う Oracle編
UCP ユニットテストでコネクションプールを使う ではTomcat JDBC Connection Poolを使って、コネクションプールを実現したけど、Oracleを使っている場合はUCP(Universal Connect Pool)を使うと比較的簡単に同様のことが実現できる...
[Java] ユニットテストでコネクションプールを使う
コネクションプール [Java]ユニットテストでDataSourceを使う では、自前のContextを作ってDataSourceを取得した。 通常のユニットテストであれば、これでも十分だけど、パフォーマンステストなんかでテスト対象がマルチスレッドになっている場合はコネクショ...
[Java] ユニットテストでDataSourceを使う
DataSourceとContext Webアプリケーションのユニットテストで、JUnitとかの実行時にDBの接続先をどこから取得するかを考えなきゃいけない時がある。 たいていのWebアプリケーションではアプリケーションサーバで設定されているDataSourceをJNDIを...
[PHP] PHPのビルトインサーバでxdebugを使う
※使用したPHPのバージョンは5.6.30 ビルトインサーバ PHPは -S オプションをつけてコマンドを実行すると、ビルトインのwebサーバが起動する。 例えば、8080ポートでカレントディレクトリをwebrootとしたい場合は以下のようにする。 $ php -S...
[PHP] PHPでのログレベル
monolog PHPのログライブラリとして、 monolog を使っていたのだけれど、ログレベルがやたらにあるなぁと思っていた。 DEBUG INFO NOTICE WARNING ERROR CRITICAL ALERT EMERGENCY
[JavaScript][PHP] Setのないプログラミング言語でハッシユをSetとして使う
Setがない。 PHPやJavaScriptではデータ構造として、Set(集合)がない。 少なくとも、 PythonのようなSet は存在しない。 ※ちなみに SPL でもSetはないみたい。
[unix] 複数キーでjoinしたい
unixでRDBのテーブル結合のように複数のファイルを共通のフィールドで結合する場合はjoinコマンドを使う。 簡単な例 $ cat items 1001 2017-10-08 バナナ 100 1001 2017-10-09 バナナ 90 1002 2017-10-08 ...
[C] ヘッダファイルで、関数マクロではなくstatic inline関数を使う
Cでの関数名の競合 Cでは小さなユーティリティ関数を関数マクロで実現する場合も多いけど、関数マクロだとコンパイラによる型チェック等の恩恵を受けられなくなってしまう。 ※わざと、型に関係なく汎用的な処理をさせたいために関数マクロを使うことも多いと思うけど。 また、Cの場合は...
[bash] Linuxでリダイレクトがよくわからなくなったときの確認
標準出力と標準エラー出力のリダイレクト Linuxで標準出力や標準エラー出力をファイルに保存するのにリダイレクトさせたり、ファイル保存しつつ、端末表示するときにteeコマンドを使ったりするのは日常的にあるだろう。 でも、bashで複雑なリダイレクトをしていると、どのように動作...
[Java] ジェネリックメソッドの戻り値でワイルドカードを使うと
Collections.addAllとArrays.asList ジェネリックメソッドで可変長引数を使うと警告が出る でSetにデータを詰めるのに Collections.addAll を使ったんだけど、この手のもので、変数宣言と同時に使われる記法としては Arrays.asL...
[Java] ジェネリックメソッドで可変長引数を使うと警告が出る
ヒープ汚染 Javaで定数のSetを作ろうとして、以下のようにしたら、コンパイル時に警告が出てしまった。 private static final Set<String> fruits = readOnlySet("apple", ...
[シェルスクリプト] [ -a ][ -o ]が POSIX では Obsolescent になっていた?
[ -a ] シェルスクリプトで変数の値が0と100の間にあるかどうか、確認するときはこんなふうに書いたりする。 $ i=100 $ if [ $i -ge 0 -a $i -le 100 ] ;then echo "$i"; fi 100 tes...
[シェルスクリプト] forループでのパス名展開
forループ シェルスクリプトでファイルごとに同じ処理を実行するなんてことはよくあるね。 そんな場合はforループでパス名展開を使う。 例えば、*.log形式のファイルの中身をすべて出力したい場合は以下のようにする。 for f in *.log do cat ...
[Linux] pkg-configでパッケージ情報を取得する
コンパイルオプション [Linux] FUSEでデータ生成 でFUSEアプリケーションのコンパイルをするときに以下のようなコマンドで実行した。 $ gcc -Wall zero.c $(pkg-config fuse --cflags --libs) -o zero ...
[Linux] FUSEでデータ生成
データ生成 [Linux] FUSEを使ってみよう ではFUSEを使って、ファイルシステムとしてマウントする例を見たけど、今度はFUSEを使ってデータを生成するファイルを作ってみよう。 開発用のヘッダファイルとかが必要になるので、 https://github.com/li...
[Linux] FUSEを使ってみよう
fusermount Linuxでユーザ側のアプリケーションレイヤーでファイルシステムを実現する仕組みとして、FUSE(Filesystem in Userspace)がある。 これを使うと、いろんなものをファイルシステムとして扱うことができる。 https://git...
[Java] スレッド開始前後の共有変数
[Java][C]JavaのvolatileとCのvolatile でJavaのvolatileについて書いた。 けど、以下のようなコードでエンクロージングクラスからキャプチャされたローカル変数が起動された側のスレッドから見えることや、起動されたスレッドが設定した変数がスレッ...
[sqlite] SQLiteでの日付型の扱い その2
前回 はSQLiteでの日付の表し方だったけど、今度は日付を用いた計算をしてみよう。 日付の足し引き 1年以上前のデータを削除するような場面では現在から1年前の日付が必要になる。 sqlite> select date('now', 'lo...
[sqlite] SQLiteでの日付型の扱い その1
日付型がない SQLiteは型として日付(Date)型を持っていない。 なので、どうするかというと以下の3つのパターンがある。 ISO-8601形式 : TEXT ISO-8601の文字列形式で日時を保持する。 ユリウス通日 : REAL 紀元前4713年1月1日の...
[SQLite] SQLiteで実行計画を見てみよう その3
explain [SQLite] SQLiteで実行計画を見てみよう その2 ではテーブル結合の実行計画を取得して、nested loopの様子を見たけど、SQLiteではさらに詳細に内部の実行手順を見ることができる。 今度はexplain query planではなく、e...
[SQLite] SQLiteで実行計画を見てみよう その2
テーブルをもう1つ作成 [SQLite] SQLiteで実行計画を見てみよう その1 では結合もサブクエリもないSQLだったので、selectid,order,fromがすべて0の実行計画だった。 テーブルを結合した時の実行計画はどうなるだろうか? まずはもう1つのテーブ...
[SQLite] SQLiteで実行計画を見てみよう その1
テーブル作成とデータ投入 [unix] シェルを使って、テストデータ生成 でテストデータを作ったので、SQLiteにデータを投入してみよう。 まずはテーブルのDDLを作成する。 $ cat create_table.sql create table if not exi...
[awk] awkでカラム方向の計算
tr -s ' ' '\n' 前回 は以下のようなコマンドでcalコマンドの結果を行方向に変換した。 $ cal | tr -s ' ' '\n' | awk 'NR==2 { mm = $1 } N...
[unix] dateコマンド違い
ある月の土日の日付を列挙するスクリプトを作っている時に、dateコマンドの挙動がOSによってかなり違うことに気づいた。 Mac(BSD) date 最初にMac(BSD)で実行する例。 $ cal | tr -s ' ' '\n' | ...
[XML] xmllintを使って、XMLの内容を検証する
xmllint 前回 に引き続き、コマンドからXMLを取り扱う話。 今度はxmllintを使って、XMLの内容を検証してみよう。 今回はXMLの内容検証用にXSDファイルを用意する。 http://xmlsoft.org/xmllint.html 入力データは前...
[XML] xsltprocを使って、XMLをCSVに変換する
xsltproc XMLをDBのテーブルに格納したい時はDBのツールを利用するために、一旦CSVに変換したくなる。 XMLからCSVへの変換っていうと、プログラムを組まなきゃって思うけど、xsltprocを使うとXSLTファイルで変換マッピングを作ってあげれば、シェルからでも...
[Java,C] 浮動小数点での丸め誤差の例
floatやdoubleといった浮動小数点数で計算をしていると、丸め処理をしているつもりでも誤差が出ることがある。 これの簡単な例がないかなぁと思っていたんだけど、 0.35 * 3.0 でうまく表現できそう。 Javaで 0.35 * 0.3 を計算してみる Javaの...
[bash] IFS(Internal Field Separator)について
シェルスクリプトでreadを使う時にフィールド分割したくない場合やフィールドの区切り文字を変えたい場合なんかにIFSの値を変えたりする。 でも、実際にIFSの値を変えるとどこまで影響があるんだろうか? read これが最も一般的な使い方だと思う。 例えば、IFSが明示的...
[linux] grepでファイル単位の検索条件
grepを使うときは基本的に1行の中のパターンを検索するし、たいていの場合はそれで問題ない。 でも、たまに条件に合致するファイルを抽出する必要がでてきたりするよね。 行単位ではなく、ファイル単位での検索条件を考えてみよう。 準備 今回、試したのはGNU grep。 ま...
[unix] 標準出力の接続先によって、動作を変える
[unix] パイプ処理時のバッファリング ではgrepやsedに出力のバッファリングオプションがオプションがあるのを見た。 他にも出力先によって、動作が変わるコマンドはある。 lsの出力 例えば、lsも出力先が端末だと、ファイル名を適当に区切って並べてくれるけど、出力先...
[sed] sedのホールドスペースの練習
[awk,Ruby,C#,Java]いくつかの言語でフィボナッチ数生成 でawkとかを使ってフィボナッチ数列を生成したけど、sedでこれができないかなーと思ってやってみた。 sedでフィボナッチ数列生成 sedは数値演算を直接サポートしていないので、文字列の長さを数字とみな...
[awk] awkで指定行毎に改行除去
行区切りのデータを適当な行数でまとめる で paste を使って、指定行毎に改行を除去する方法を書いたけど、改めて見ると、こんなの awk で簡単にできるじゃん。 指定行毎に改行を除去するってのは 1 2 3 4 5 6
[Windows] パイプでつないだコマンドはサブシェルで実行される
echo foo | set /p x= で x は設定できない [Windows] コマンドプロンプトで文字列入出力のTips では改行なしのメッセージを set /p を使って出力した。 >set /p x=hello<nul & echo worl...
[Java] Streamで例外処理を扱う
UncheckedIOException Java8から UncheckedIOException という例外が追加されている。 https://docs.oracle.com/javase/jp/8/docs/api/java/io/UncheckedIOExcepti...
[C] ポインタのアドレス参照範囲と未定義処理
不正ポインタ CでNULLポインタや解放済みのメモリ領域を指すポインタ(ダングリングポインタ)を参照すると、未定義の動作となる。 バッファオーバーランとかの書き込みではなく、厳密にいうと参照だけで未定義動作になるんだね。 ただし、ポインタが指している領域ではなく、ポインタ...
[C] マクロトークンの文字列化
マクロの文字列化演算子 Cのマクロで数値定数が存在する場合にログに数値のみではなく、定数名を出力したい場合がある。 こういうときはマクロの文字列化演算子(#)を使う。 #define STR(S) #S #define ORANGE 1 #define APPLE ...
[LL] Let's LL
社内の技術発表会で発表した資料をSlideShareに投稿しました。 CやJavaプログラマがLLにも目を向けてみるって感じの内容です。 Let's LL https://www.slideshare.net/t_ichioka_sg/lets-ll
[Windows] コマンドプロンプトで文字列入出力のTips
PowerShellとかありますが、なんだかんだ言ってWindowsのバッチファイルって、何気に使うと便利な場面多いですよね。 でも、Unixのシェルほど融通が効かないので困ってしまうことも多いよね。 なので、ちょっと文字列入出力について、まとめ。 リダイレクトやパイプ...
[unix] スティッキーなビット?
Unixのファイル権限 Unixのファイル権限は読み/書き/実行が4/2/1のビットで表されていて、ファイルの"オーナー/グループに所属するユーザ/それ以外"がそれぞれが8進数の1桁に割り当てられている。 例えば、あるファイルが オーナーは読み書き実行...
[Oracle] TO_DATEでのFX書式文字列
TO_DATEの書式指定 Oracleでテーブルに日付を格納するときにはTO_DATEで文字列からDATEやTTIMESTAMPに型変換したりする。 このとき、'YYYYMMDD'とかで書式指定すれば、文字列を書式に合わせてパースしてくれる。 > ...
[JavaScript] JavaScriptのDateとmoment.js
JavaScriptのDate JavaScriptのDateオブジェクトは日付指定生成時に間違えやすい。 例えば、以下のようにすると Console.log(new Date('2017/01/01')); Console.log(new Date(...
[VBA] On Error Resume Next で条件判定の次の行
VBAではエラーが発生しても、処理を継続させるための構文として On Error Resume Next が用意されている。 これを使えば、エラー発生時にも処理位置が次の行に移って、処理が継続される。 Visual Basic言語リファレンス On Error ステートメ...
[WSH] Windowsのコマンドプロンプトで正規表現を使って、文字列置換
ファイルや標準出力の内容を文字列置換したいなんてことはよくあるよね。 こんなときUnixだと、sedやawkを使うところだけど、Windowsのコマンドプロンプトでは該当するコマンドが用意されていない。 バッチに変数の文字列置換をする機能はあることはあるけど、バッチでループを...
[VBA] IsError関数によるエラー処理
VBAには On Error によるエラートラップ以外にIsError関数によるエラー判定方法が存在する。 "On Error" or "IsError" ? 例えば、引数が負数であればエラーとする処理は以下のようになる。 Fun...
[VBA] VBAの条件演算子は短絡評価にならない
タイトルどおりだけど、VBAの条件演算子は短絡評価にならない。 どういうことかというと、以下のようなNULLチェックがうまくいかない。 If x = Nothing Or x.Foo = "abc" then これはxがNothingではない場合に限っ...
[VBA] 動的配列の初期化判定
VBAで動的配列を使うときに自分で変数を宣言した場合は初期化のタイミングがわかるけど、共通に使う関数の場合は引数の配列が初期化済みかどうか判定したい場合がある。 Not Not こんなときに使われるイディオムとして Not Not で比較するというものがある。 ...
[Salesforce]Force.com Security Source Scanner の誤検知
ソースコードのセキュリティをチェックすることができる、 Force.com Security Source Scanner というサイトを利用してみました。 今回スキャンしたのは、以下のようにApexでレコードのdeleteをしているものを含むソースです。 【レコードを...
[JavaScript] 配列のようなものって?
arguments変数を本物の配列に変換する方法 ではArray.applyを使ってarguments変数を配列に変換した。 でも、Function.applyメソッドの第2引数は基本的には配列ってことになってる。 配列を作るために配列を渡すってのは変だね。applyメソッド...
[JavaScript] arguments変数を本物の配列に変換する方法
JavaScriptで任意の関数の戻り値の真偽を逆転するような関数を生成するには以下のようになる。 function not(pred) { return function(args) { return !pred.apply(null, arguments); ...
[unix,perl,正規表現] perlでsed,grep,awkライクに
sedでダブルクォートで括られてる("ABC")ような文字列の置換をしようとしていたんだけど、うまくいかなかった。 $ sed -e 's/"[^"]+"/"xxx"/g' "f...
[Java]System propertiesとOutputStreamからの文字列取得
Javaを使ったプログラムででエラーが起こった時に使っていたJavaのバージョンやOSの環境が知りたいことはよくある。 その度に確認するのも大変だよね。 なので、プログラムの起動時にSystem propertiesの値をログなんかに出力しておくといいかもしれない。 単純...