Java JDBC Oracle

[Java] ユニットテストでコネクションプールを使う Oracle編

UCP ユニットテストでコネクションプールを使う ではTomcat JDBC Connection Poolを使って、コネクションプールを実現したけど、Oracleを使っている場合はUCP(Universal Connect Pool)を使うと比較的簡単に同様のことが実現できる...

Java JDBC MySQL Tomcat

[Java] ユニットテストでコネクションプールを使う

コネクションプール [Java]ユニットテストでDataSourceを使う では、自前のContextを作ってDataSourceを取得した。 通常のユニットテストであれば、これでも十分だけど、パフォーマンステストなんかでテスト対象がマルチスレッドになっている場合はコネクショ...

Java JDBC MySQL

[Java] ユニットテストでDataSourceを使う

DataSourceとContext Webアプリケーションのユニットテストで、JUnitとかの実行時にDBの接続先をどこから取得するかを考えなきゃいけない時がある。 たいていのWebアプリケーションではアプリケーションサーバで設定されているDataSourceをJNDIを...

PHP

[PHP] PHPのビルトインサーバでxdebugを使う

※使用したPHPのバージョンは5.6.30 ビルトインサーバ PHPは -S オプションをつけてコマンドを実行すると、ビルトインのwebサーバが起動する。 例えば、8080ポートでカレントディレクトリをwebrootとしたい場合は以下のようにする。 $ php -S...

PHP

[PHP] PHPでのログレベル

monolog PHPのログライブラリとして、 monolog を使っていたのだけれど、ログレベルがやたらにあるなぁと思っていた。 DEBUG INFO NOTICE WARNING ERROR CRITICAL ALERT EMERGENCY

JavaScript PHP

[JavaScript][PHP] Setのないプログラミング言語でハッシユをSetとして使う

Setがない。 PHPやJavaScriptではデータ構造として、Set(集合)がない。 少なくとも、 PythonのようなSet は存在しない。 ※ちなみに SPL でもSetはないみたい。

bash unix シェルスクリプト

[unix] 複数キーでjoinしたい

unixでRDBのテーブル結合のように複数のファイルを共通のフィールドで結合する場合はjoinコマンドを使う。 簡単な例 $ cat items 1001 2017-10-08 バナナ 100 1001 2017-10-09 バナナ 90 1002 2017-10-08 ...

C

[C] ヘッダファイルで、関数マクロではなくstatic inline関数を使う

Cでの関数名の競合 Cでは小さなユーティリティ関数を関数マクロで実現する場合も多いけど、関数マクロだとコンパイラによる型チェック等の恩恵を受けられなくなってしまう。 ※わざと、型に関係なく汎用的な処理をさせたいために関数マクロを使うことも多いと思うけど。 また、Cの場合は...

bash linux

[bash] Linuxでリダイレクトがよくわからなくなったときの確認

標準出力と標準エラー出力のリダイレクト Linuxで標準出力や標準エラー出力をファイルに保存するのにリダイレクトさせたり、ファイル保存しつつ、端末表示するときにteeコマンドを使ったりするのは日常的にあるだろう。 でも、bashで複雑なリダイレクトをしていると、どのように動作...

Java ジェネリクス

[Java] ジェネリックメソッドの戻り値でワイルドカードを使うと

Collections.addAllとArrays.asList ジェネリックメソッドで可変長引数を使うと警告が出る でSetにデータを詰めるのに Collections.addAll を使ったんだけど、この手のもので、変数宣言と同時に使われる記法としては Arrays.asL...

Java ジェネリクス

[Java] ジェネリックメソッドで可変長引数を使うと警告が出る

ヒープ汚染 Javaで定数のSetを作ろうとして、以下のようにしたら、コンパイル時に警告が出てしまった。 private static final Set<String> fruits = readOnlySet("apple", &...

bash unix シェルスクリプト

[シェルスクリプト] [ -a ][ -o ]が POSIX では Obsolescent になっていた?

[ -a ] シェルスクリプトで変数の値が0と100の間にあるかどうか、確認するときはこんなふうに書いたりする。 $ i=100 $ if [ $i -ge 0 -a $i -le 100 ] ;then echo "$i"; fi 100 tes...

bash unix シェルスクリプト

[シェルスクリプト] forループでのパス名展開

forループ シェルスクリプトでファイルごとに同じ処理を実行するなんてことはよくあるね。 そんな場合はforループでパス名展開を使う。 例えば、*.log形式のファイルの中身をすべて出力したい場合は以下のようにする。 for f in *.log do cat &q...

linux

[Linux] pkg-configでパッケージ情報を取得する

コンパイルオプション [Linux] FUSEでデータ生成 でFUSEアプリケーションのコンパイルをするときに以下のようなコマンドで実行した。 $ gcc -Wall zero.c $(pkg-config fuse --cflags --libs) -o zero ...

FUSE linux

[Linux] FUSEでデータ生成

データ生成 [Linux] FUSEを使ってみよう ではFUSEを使って、ファイルシステムとしてマウントする例を見たけど、今度はFUSEを使ってデータを生成するファイルを作ってみよう。 開発用のヘッダファイルとかが必要になるので、 https://github.com/li...

FUSE linux

[Linux] FUSEを使ってみよう

fusermount Linuxでユーザ側のアプリケーションレイヤーでファイルシステムを実現する仕組みとして、FUSE(Filesystem in Userspace)がある。 これを使うと、いろんなものをファイルシステムとして扱うことができる。 https://git...

Java マルチスレッド

[Java] スレッド開始前後の共有変数

[Java][C]JavaのvolatileとCのvolatile でJavaのvolatileについて書いた。 けど、以下のようなコードでエンクロージングクラスからキャプチャされたローカル変数が起動された側のスレッドから見えることや、起動されたスレッドが設定した変数がスレッ...

C editline linux readline unix

[C] 対話型コマンドでユーザ入力サポート

bashやsqlite3のような対話形式のコマンドでは上下の矢印キーでコマンドの履歴をたどれたり、tabキーでファイル名を補完できたりする。 自分で作った対話型コマンドでも、こんな機能が使えたらいいよね。 readline こんな時は GNU readline を使うこと...

sqlite

[sqlite] SQLiteでの日付型の扱い その2

前回 はSQLiteでの日付の表し方だったけど、今度は日付を用いた計算をしてみよう。 日付の足し引き 1年以上前のデータを削除するような場面では現在から1年前の日付が必要になる。 sqlite> select date('now', 'lo...

sqlite

[sqlite] SQLiteでの日付型の扱い その1

日付型がない SQLiteは型として日付(Date)型を持っていない。 なので、どうするかというと以下の3つのパターンがある。 ISO-8601形式 : TEXT ISO-8601の文字列形式で日時を保持する。 ユリウス通日 : REAL 紀元前4713年1月1日の...

SQL sqlite

[SQLite] SQLiteで実行計画を見てみよう その3

explain [SQLite] SQLiteで実行計画を見てみよう その2 ではテーブル結合の実行計画を取得して、nested loopの様子を見たけど、SQLiteではさらに詳細に内部の実行手順を見ることができる。 今度はexplain query planではなく、e...

SQL sqlite

[SQLite] SQLiteで実行計画を見てみよう その2

テーブルをもう1つ作成 [SQLite] SQLiteで実行計画を見てみよう その1 では結合もサブクエリもないSQLだったので、selectid,order,fromがすべて0の実行計画だった。 テーブルを結合した時の実行計画はどうなるだろうか? まずはもう1つのテーブ...

SQL sqlite

[SQLite] SQLiteで実行計画を見てみよう その1

テーブル作成とデータ投入 [unix] シェルを使って、テストデータ生成 でテストデータを作ったので、SQLiteにデータを投入してみよう。 まずはテーブルのDDLを作成する。 $ cat create_table.sql create table if not exi...

awk bash linux unix シェルスクリプト

[unix] シェルを使って、テストデータ生成

[シェルスクリプト]ランダムな数値 では乱数の生成をしたけど、改めてシェルを使ってのテストデータ生成を考えてみよう。 できるだけ、デフォルトでありそうなコマンドかつ移植性のありそうな方法で。 同じ文字列の繰り返し 同じデータを繰り返し生成する場合はyesコマンドに文字列を...

awk bash シェルスクリプト

[awk] awkでカラム方向の計算

tr -s ' ' '\n' 前回 は以下のようなコマンドでcalコマンドの結果を行方向に変換した。 $ cal | tr -s ' ' '\n' | awk 'NR==2 { mm = $1 } N...

awk bash unix シェルスクリプト

[unix] dateコマンド違い

ある月の土日の日付を列挙するスクリプトを作っている時に、dateコマンドの挙動がOSによってかなり違うことに気づいた。 Mac(BSD) date 最初にMac(BSD)で実行する例。 $ cal | tr -s ' ' '\n' | ...

bash XML シェルスクリプト

[XML] xmllintを使って、XMLの内容を検証する

xmllint 前回 に引き続き、コマンドからXMLを取り扱う話。 今度はxmllintを使って、XMLの内容を検証してみよう。 今回はXMLの内容検証用にXSDファイルを用意する。 http://xmlsoft.org/xmllint.html 入力データは前...

bash XML シェルスクリプト

[XML] xsltprocを使って、XMLをCSVに変換する

xsltproc XMLをDBのテーブルに格納したい時はDBのツールを利用するために、一旦CSVに変換したくなる。 XMLからCSVへの変換っていうと、プログラムを組まなきゃって思うけど、xsltprocを使うとXSLTファイルで変換マッピングを作ってあげれば、シェルからでも...

C Java

[Java,C] 浮動小数点での丸め誤差の例

floatやdoubleといった浮動小数点数で計算をしていると、丸め処理をしているつもりでも誤差が出ることがある。 これの簡単な例がないかなぁと思っていたんだけど、 0.35 * 3.0 でうまく表現できそう。 Javaで 0.35 * 0.3 を計算してみる Javaの...

bash linux unix シェルスクリプト

[bash] IFS(Internal Field Separator)について

シェルスクリプトでreadを使う時にフィールド分割したくない場合やフィールドの区切り文字を変えたい場合なんかにIFSの値を変えたりする。 でも、実際にIFSの値を変えるとどこまで影響があるんだろうか? read これが最も一般的な使い方だと思う。 例えば、IFSが明示的...

grep linux

[linux] grepでファイル単位の検索条件

grepを使うときは基本的に1行の中のパターンを検索するし、たいていの場合はそれで問題ない。 でも、たまに条件に合致するファイルを抽出する必要がでてきたりするよね。 行単位ではなく、ファイル単位での検索条件を考えてみよう。 準備 今回、試したのはGNU grep。 ま...

C linux unix

[unix] 標準出力の接続先によって、動作を変える

[unix] パイプ処理時のバッファリング ではgrepやsedに出力のバッファリングオプションがオプションがあるのを見た。 他にも出力先によって、動作が変わるコマンドはある。 lsの出力 例えば、lsも出力先が端末だと、ファイル名を適当に区切って並べてくれるけど、出力先...

awk bash grep linux sed unix シェルスクリプト

[unix] パイプ処理時のバッファリング

xargsで出力を遅延させる フィルタの役割をするコマンドは大抵バッファリングするので、teeとかでデバッグしていると、フィルタリングされたテキストがすぐに端末に表示されないことがある。 何かバッファリングの効果を目に見えるように再現できるいい方法はないかなと思ってやってみた...

awk sed unix シェルスクリプト

[sed] sedのホールドスペースの練習

[awk,Ruby,C#,Java]いくつかの言語でフィボナッチ数生成 でawkとかを使ってフィボナッチ数列を生成したけど、sedでこれができないかなーと思ってやってみた。 sedでフィボナッチ数列生成 sedは数値演算を直接サポートしていないので、文字列の長さを数字とみな...

awk unix シェルスクリプト

[awk] awkで指定行毎に改行除去

行区切りのデータを適当な行数でまとめる で paste を使って、指定行毎に改行を除去する方法を書いたけど、改めて見ると、こんなの awk で簡単にできるじゃん。 指定行毎に改行を除去するってのは 1 2 3 4 5 6

Windows コマンドプロンプト

[Windows] パイプでつないだコマンドはサブシェルで実行される

echo foo | set /p x= で x は設定できない [Windows] コマンドプロンプトで文字列入出力のTips では改行なしのメッセージを set /p を使って出力した。 >set /p x=hello<nul & echo worl...

Java Stream API ジェネリクス

[Java] Streamで例外処理を扱う

UncheckedIOException Java8から UncheckedIOException という例外が追加されている。 https://docs.oracle.com/javase/jp/8/docs/api/java/io/UncheckedIOExcepti...

C

[C] ポインタのアドレス参照範囲と未定義処理

不正ポインタ CでNULLポインタや解放済みのメモリ領域を指すポインタ(ダングリングポインタ)を参照すると、未定義の動作となる。 バッファオーバーランとかの書き込みではなく、厳密にいうと参照だけで未定義動作になるんだね。 ただし、ポインタが指している領域ではなく、ポインタ...

C

[C] マクロトークンの文字列化

マクロの文字列化演算子 Cのマクロで数値定数が存在する場合にログに数値のみではなく、定数名を出力したい場合がある。 こういうときはマクロの文字列化演算子(#)を使う。 #define STR(S) #S #define ORANGE 1 #define APPLE ...

LL slideshare

[LL] Let's LL

社内の技術発表会で発表した資料をSlideShareに投稿しました。 CやJavaプログラマがLLにも目を向けてみるって感じの内容です。 Let's LL https://www.slideshare.net/t_ichioka_sg/lets-ll

Windows コマンドプロンプト

[Windows] コマンドプロンプトで文字列入出力のTips

PowerShellとかありますが、なんだかんだ言ってWindowsのバッチファイルって、何気に使うと便利な場面多いですよね。 でも、Unixのシェルほど融通が効かないので困ってしまうことも多いよね。 なので、ちょっと文字列入出力について、まとめ。 リダイレクトやパイプ...

linux unix

[unix] スティッキーなビット?

Unixのファイル権限 Unixのファイル権限は読み/書き/実行が4/2/1のビットで表されていて、ファイルの"オーナー/グループに所属するユーザ/それ以外"がそれぞれが8進数の1桁に割り当てられている。 例えば、あるファイルが オーナーは読み書き実行...

Oracle

[Oracle] TO_DATEでのFX書式文字列

TO_DATEの書式指定 Oracleでテーブルに日付を格納するときにはTO_DATEで文字列からDATEやTTIMESTAMPに型変換したりする。 このとき、'YYYYMMDD'とかで書式指定すれば、文字列を書式に合わせてパースしてくれる。 > ...

JavaScript moment.js

[JavaScript] JavaScriptのDateとmoment.js

JavaScriptのDate JavaScriptのDateオブジェクトは日付指定生成時に間違えやすい。 例えば、以下のようにすると Console.log(new Date('2017/01/01')); Console.log(new Date(&#...

VBA

[VBA] On Error Resume Next で条件判定の次の行

VBAではエラーが発生しても、処理を継続させるための構文として On Error Resume Next が用意されている。 これを使えば、エラー発生時にも処理位置が次の行に移って、処理が継続される。 Visual Basic言語リファレンス On Error ステートメ...

C# JavaScript Windows WSH

[WSH] Windowsのコマンドプロンプトで正規表現を使って、文字列置換

ファイルや標準出力の内容を文字列置換したいなんてことはよくあるよね。 こんなときUnixだと、sedやawkを使うところだけど、Windowsのコマンドプロンプトでは該当するコマンドが用意されていない。 バッチに変数の文字列置換をする機能はあることはあるけど、バッチでループを...

Excel VBA

[VBA] IsError関数によるエラー処理

VBAには On Error によるエラートラップ以外にIsError関数によるエラー判定方法が存在する。 "On Error" or "IsError" ? 例えば、引数が負数であればエラーとする処理は以下のようになる。 Fun...

VBA

[VBA] VBAの条件演算子は短絡評価にならない

タイトルどおりだけど、VBAの条件演算子は短絡評価にならない。 どういうことかというと、以下のようなNULLチェックがうまくいかない。 If x = Nothing Or x.Foo = "abc" then これはxがNothingではない場合に限っ...

VBA

[VBA] 動的配列の初期化判定

VBAで動的配列を使うときに自分で変数を宣言した場合は初期化のタイミングがわかるけど、共通に使う関数の場合は引数の配列が初期化済みかどうか判定したい場合がある。 Not Not こんなときに使われるイディオムとして Not Not で比較するというものがある。 ...

Apex Salesforce

[Salesforce]Force.com Security Source Scanner の誤検知

ソースコードのセキュリティをチェックすることができる、 Force.com Security Source Scanner というサイトを利用してみました。 今回スキャンしたのは、以下のようにApexでレコードのdeleteをしているものを含むソースです。 【レコードを...

JavaScript

[JavaScript] 配列のようなものって?

arguments変数を本物の配列に変換する方法 ではArray.applyを使ってarguments変数を配列に変換した。 でも、Function.applyメソッドの第2引数は基本的には配列ってことになってる。 配列を作るために配列を渡すってのは変だね。applyメソッド...

JavaScript

[JavaScript] arguments変数を本物の配列に変換する方法

JavaScriptで任意の関数の戻り値の真偽を逆転するような関数を生成するには以下のようになる。 function not(pred) { return function(args) { return !pred.apply(null, arguments); ...

Perl unix 正規表現

[unix,perl,正規表現] perlでsed,grep,awkライクに

sedでダブルクォートで括られてる("ABC")ような文字列の置換をしようとしていたんだけど、うまくいかなかった。 $ sed -e 's/"[^"]+"/"xxx"/g' "f...

Java

[Java]System propertiesとOutputStreamからの文字列取得

Javaを使ったプログラムででエラーが起こった時に使っていたJavaのバージョンやOSの環境が知りたいことはよくある。 その度に確認するのも大変だよね。 なので、プログラムの起動時にSystem propertiesの値をログなんかに出力しておくといいかもしれない。 単純...