[Java] enumとDBに格納するコードを対応付けたい
enum拡張 Javaのenumを拡張して、何らかの値を持たせることはよくあると思う。 特にDBに格納するコードとenumを対応付けたくなる。 そういう場合は、コンストラクタに引数を持たせて初期化する。 Fruits.java enum Fruits implem...
[bash] ヒアドキュメントでquit の続き
標準入力を終了させる [bash] ヒアドキュメントでquit で、ヒアドキュメントを使ってquitコマンドを送り込む方法を書いたけど、よく考えたらquitを書かなくても標準入力を終了させれば、bcを終了させることができるのだった。 $ cat run.sh #!/bin/s...
[JavaScript] Promiseを使ったsleep
JavaScriptのasync/awaitを調べていたら、MDNにsleepを簡潔に書けそうな例があった。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Using_promises sleepの...
[JavaScript] 並列処理と再帰呼び出し
JavaScriptは基本的にイベントハンドラ内で動作しているイメージなので、シングルスレッドが前提。 そんな中で複数のループ処理を同時に動かしたいときに、うまく書けないかなーと思ってやってみた結果。 試した環境はnode.js v10.13.0 普通のループ ものす...
[Java] EclipseのJavaコンパイラをコマンドラインとAPIで呼び出してみる
JDT Core batch compiler EclipseのGUIメニューからJavaのビルドを実行すると、JavaのコンパイラはEclipseが内蔵しているコンパイラが使われる。 これはJDT Coreのbatch compilerと呼ばれる機能で、jarを指定すれば、...
[Java] 内部クラスの使いどころ
内部クラスのフィールドの可視性 Javaの内部クラスのフィールドはprivateにしてもエンクロージングクラスからは可視になっている。 class InnerClass { private static class StaticClass { pri...
[Java] 静的型言語のスタティックメソッド
[PHP] 遅延静的束縛 では、PHPのself呼び出しとstatic呼び出しの違いについて書いた。 結局、static呼び出しではクラスレベルでのオーバーライドを実現しているのだった。 静的型言語ではその辺りはどうなってるんだっけ?例えば、Javaは。
[PHP] 設定ファイルフォーマット色々
PHPのフレームワークやライブラリを使っていると、色々なフォーマットの設定ファイルが登場する。 各種のファイルを自分で読む場合も簡単にできてしまう。 PHP 設定ファイルもPHPファイルそのまんま。 CodeIgniterなんかで使われていて、結構スタンダードなパターン...
[Java] Comparable<T>問題
Javaで区間を表すクラスが欲しかったけど、ジェネリック型の取り扱いで右往左往してしまった。 最初のアイデア Comparableを2つ持つabstractクラスを作って、実際の比較対象の型は継承先のクラスで決めればいいと思ったので、以下のようなRangeクラスを作った。 ...
[Java] ResourceBundleのキャッシュ
ResourceBundle.clearCache プロパティファイルからのプロパティ読み込みの動作確認時にプロパティファイル自体を入れ替えて、確認しようとしたけど、最初はうまくいかなかった。 sample_test1.properties sample1=Foo s...
[PHP] 配列からオブジェクトへの変換の続き
[PHP] PHPオブジェクトと配列の変換まとめ では、連想配列からオブジェクトに変換する方法を取り扱った。 CSVからの読み込みのように要素がインデックス付けされている場合はどうしたらいいだろうか。 array_combine キーと値の配列から連想配列を作成するにはa...
[bash] ヒアドキュメントでquit
終了コマンドが必要になる場合 sqlplusやbcのように実行終了時にquitといった終了コマンドが必要になる場合、シェルスクリプトからファイルを実行する時にファイルに終了コマンドが入っていないと終了しない。 例えば、以下の場合、run.shを実行すると、1を表示した後に標...
[Docker] scratchイメージとstaticライブラリ
scratchイメージ 最小限の素のDockerイメージを自分で作る場合にはscratchイメージを使う。これをちょっと試してみた。 https://hub.docker.com/_/scratch/ サンプルプログラム 普通にCのhello worldを作ると。 ...
[Linux] Dockerコンテナ同士で仮想シリアルポートをつないでみる。を詳しく
Dockerコンテナ同士で仮想シリアルポートをつないでみる。 では、socatを使って2つのコンテナ同士をつないだ。 どのようにつながっているのかを順を追って見てみよう。 Server1でlisten まずは前回同様にServer1側を起動する。 socat実行時に -...
[Docker] Dockerコンテナ同士で仮想シリアルポートをつないでみる。
socatで仮想シリアルポート socatを使うと、以下のような感じで、仮想シリアルポート同士の通信ができる。 $ socat pty,raw,echo=0,link=/dev/ptty0 pty,raw,echo=0,link=/dev/ptty1 $ ls /dev/...
[unix] netcatの -p オプション
busyboxのnc のスクリプトは最初 docker の alpine linux で動かしていて、うまく動作しなかったので、どうしたもんかと考えていた。 実は素の alpine linux の nc は busybox で busybox の nc はオプションが違うみた...
[unix] netcatでhttpサーバ その2
coprocを使おう [unix] netcatでhttpサーバ その1 では fifo を使って、リクエストを処理した結果をパイプの前にいる netcat に返したけど、今度は bash のコプロセスを使ってやってみよう。 ※子プロセスじゃなくて、コプロセスだよ。copro...
[unix] netcatでhttpサーバ その1
webサーバからの応答によって、処理を変えたいときにテスト用のwebサーバが欲しくなるよね。 そんな時はnetcatを使おう。 まずは まずは応答用のHTMLファイルを用意する。 normal.html 改行コードはCRLFにしておく。
[PHP] オーバーロードとマジックメソッド
[PHP] PHPオブジェクトと配列の変換まとめ では、存在しないプロパティに値を設定すると、プロパティが追加されるのを見た。 class A {} $a = new A(); $a->foo = 'f'; var_dump($a); // object...
[bash] 配列をset(集合)として扱いたい
[bash] 配列をソート、検索 でbashの配列操作について書いたけど、配列をset(集合)として取り扱いたい場合の操作について。 ※bash4以降では連想配列が使えるので、bash4前提であれば、そっちを使ったほうがいいかも。 配列をユニークにする まずは配列から重複...
[bash] 配列をソート、検索
シェルスクリプトでは標準入力から読み込んで、標準出力に書き込むフィルターパターンが多いので、配列を使う機会はあまりないかもしれない。 でも、配列を使っている場面で配列をソートしたくなる時もある。 そんな時も簡単にやりたい。 もちろんsortコマンドで シェルスクリプトは...
[PHP] compact, extractと変数のスコープ
[PHP] PHPオブジェクトと配列の変換まとめ では、オブジェクトと配列の変換を取り扱ったけど、スコープ内の変数を配列として取り出すにはどうすればいいか。 globalキーワード その前にPHPでのスコープとグローバル変数の関係について。 PHPではローカル変数を宣言...
[Java] 既存のクラスを(擬似的に)拡張したい
サブクラスしか持っていないメソッド Javaでサブクラスがスーパークラスが持っていないメソッドを持っているときに統一的に取り扱おうとすると面倒なことが多い。 本来はサブクラス側を直した方がいいのかもしれないけど、既存のクラスでこちらが修正できない場合も多々ある。 例えば、...
[PHP] PHPオブジェクトと配列の変換まとめ
ファイルから読み込んだ値をオブジェクトにしたり、逆に外部に渡したい時にはオブジェクトのプロパティを連想配列にしたい場合は結構ある。 DBの場合はPDOなどフレームワークがやってくれることも多いけど、自分でやりたい場合はどうすればいいか。 配列からオブジェクトを生成する 新...
[MySQL] MySQLのキーワード、予約語
MySQLの予約語? SQLでは基本的に予約語をテーブル名やカラム名に使うことはできない。 MySQL 5.6 9.3 予約語 https://dev.mysql.com/doc/refman/5.6/ja/reserved-words.html "IN...
[PHP] PHPで複数配列のループ
PHPで複数の配列を同時にループするときにarray_mapを使うといいみたい。 例えば、こんな。 $arr1 = [ 1, 2, 3 ]; $arr2 = [ 4, 5, 6 ]; foreach (array_map(NULL, $arr1, $arr2) as [ ...
Excel PHP PHPSpreadSheet Spout
[PHP] PHPでExcel処理
PHPSpreadSheet PHPからExcelファイルの読み書きをするには、PHPExcelの後継となっているPHPSpreadSheetを使うのが一般的だろうか。 https://phpspreadsheet.readthedocs.io/en/develop/ ...
[PHP] Embed SAPIでCからPHPを呼び出してみる その3
[PHP] Embed SAPIでCからPHPを呼び出してみる その2 では、zend_eval_stringlを使って、文字列をPHPスクリプトとして解釈、実行してみた。 今度は定義済みのPHP関数をCから呼び出してみよう。 ※今回も同様に、Linux上で、PHP 7.1...
[PHP] Embed SAPIでCからPHPを呼び出してみる その2
[PHP] Embed SAPIでCからPHPを呼び出してみる その1 では、PHPのファイルパスをSAPIに渡すことによって、PHPスクリプトをCから実行してみた。 今度はPHPファイルを介さずに直接、文字列をPHPスクリプトとして実行してみよう。 ※今回も同様に、Lin...
[PHP] Embed SAPIでCからPHPを呼び出してみる その1
[Java,JNI]JNIでクラス検索するときのパッケージ名 では、CからJVMを起動してみたけど、今度はCからPHPを呼び出してみよう。 Linux上で、PHP 7.1.1を使った例。 Embed SAPI Cから直接PHPを呼び出すためにはEmbed SAPIを使...
[PHP] 遅延静的束縛
Pythonでは [Python] classメソッドとstaticメソッド では、Pythonでのclassメソッドとstaticメソッドを見た。 同じようなことがPHPでもできないだろうか。 PHPでは PHPでは、遅延静的束縛なんていう仰々しい名前の機能で、これ...
[PHP] PHPでの日付文字列パースと要素取り出し
PHPで日付文字列をパースして、そこから曜日を算出する必要があった。 こんなの簡単だろと思ってたんだけど、いくつか気をつける点があったので、メモ。 strptime まずはstrptimeを使って、こんな感じにした。 $d = (strptime("2018...
[Java] SQLExceptionのgetNextExceptionとiteratorの違い
SQLExceptionを補足した時にチェーンされた例外 SQLExceptionを補足した時にチェーンされた例外をすべて見たかったんだけど、getNextExceptionで戻り値がnullになるまでループするのと、iteratorでループするのでは取得される例外が異なるみた...
[R] データフレームをグルーピングして、sum,max 〜aggregate編
by関数の出力 データフレームをグルーピングして、sum,max 〜by関数編 では、by関数を使って、データフレーム内の特定のカラムをキーとしたグループでsumやmaxを算出した。 これはこれでもいいんだけど、by関数の出力はグループ毎のリストになるので、場合によっては出力...
[R] データフレームをグルーピングして、sum,max 〜by関数編
SQLのgroup byのようにRのデータフレームをグルーピングして、sumやmaxを取るのに意外に手間取ってしまったので、メモ。 まず、データ このようにA,B,Cとラベリングされたデータに対して、ラベルの値ごとにsumやmaxを取りたい。 label <- c...
[R] vectorとlistの関係
generic vector Rのドキュメントを見ると、listの説明として、 "Generic Vectors" という言葉が出てくる。 https://www.rdocumentation.org/packages/base/versions/3....
[Python] classメソッドとstaticメソッド
classメソッドとstaticメソッド Pythonにはclassメソッドとstaticメソッドがあるけど、Javaなんかに慣れたプログラマーからすると、最初はわかりづらい。 具体的にはこんな感じ。 class.py #!/usr/bin/python class...
[C] inline関数再び
インライン展開されない場合の挙動 以前、 [C] ヘッダファイルで、関数マクロではなくstatic inline関数を使う でstatic inlineにすれば、関数名の競合が起こらないという記事を書いた。 この方法だと安全ではあるけど、インライン展開は必ずされるわけではな...
[R] Rの標準入出力
Rで他のスクリプトと連携できないかと思って、標準入力から読み込んで、標準出力に加工後のデータを出力するスクリプトを作ろうとしたら、変なところではまってしまった。 まずはこれ 最終的にはこうなった。
[R] vector要素へのアクセス
CやJavaに慣れたプログラマーがRを使おうとすると、配列の扱いという基本的なところで、いきなり戸惑ってしまうことがある。 array? vector? まず異なるのはarrayというのが、CやJavaのいわゆる配列とは別のデータ構造を意味しているということ。 http...
[Java] 符号なし整数の扱い
符号なし用メソッド達 Javaのintやlongは符号あり整数で、Cのunsignedのような修飾子は存在しないため、Javaでは変数の型を明示的に符号なし整数にすることはできない。 ただし、Long,Integerに用意されているメソッドを使えば、intやlongを実質符号...
[Oracle] SQLのトークン区切り
2FFROM OracleでSQLのトークンの間にスペースが入っていないのに正常に実行されてしまうケースがあった。 要約するとこんな感じ。 > SELECT 2 FROM DUAL; 2 > SELECT '2' FROM DUAL; 2 ...
[Java] JVMTIを使ってJVMエージェントを作ってみる その4
エージェント側のスレッド起動 JVMTIを使ってJVMエージェントを作ってみる その1 JVMTIを使ってJVMエージェントを作ってみる その2 JVMTIを使ってJVMエージェントを作ってみる その3 とは少し趣向を変えて、エージェント側のスレッドを起動してみよう。 ...
[Java] JVMTIを使ってJVMエージェントを作ってみる その3
ブレークポイントを設定する JVMTIを使ってJVMエージェントを作ってみる その1 、 JVMTIを使ってJVMエージェントを作ってみる その2 に引き続き、今度はmainメソッドの先頭にブレークポイントを設定して、その時点のスレッドを表示してみよう。 ポイントはClas...
[Java] JVMTIを使ってJVMエージェントを作ってみる その2
バイトコード表示 JVMTIを使ってJVMエージェントを作ってみる その1 ではClassPrepareイベントハンドラを登録するところまでだったけど、今回はmainメソッドのバイトコードを表示するところまでやってみよう。 バイトコード表示にはバイトコードを取得する許可を与...
[Java] JVMTIを使ってJVMエージェントを作ってみる その1
JVMTI Javaのコードを書き換えることなく、実行中にスレッドやヒープの情報を取得するツールはいろいろと存在する。 これらのツールのようにJavaの実行環境情報を実行中に取得するにはどうしたらいいんだろう。 JNIでクラス検索するときのパッケージ名 ではJNIを使って...
[Java] Jetty-Runnerでお手軽にWebアプリを試す
Jetty Runner JavaでWebアプリを試したい場合はTomcatやGlassFishといったアプリケーションサーバを用意して、設定ファイルを作って、デプロイして...といった手順が必要になる。 でも、サンプル作成やデバッグ目的でもっと手軽にServletを作りたい...
[PHP] PHPで任意精度計算
BC Math PHPでは小数を含めて、任意精度で計算をしたい場合はBC Math関数を使う。 http://php.net/manual/ja/book.bc.php こんな感じで。 bcdiv('123.45', '78.90', 1...
[PHP] PHPの変な演算子
変な演算子たち PHPではNull合体演算子、宇宙船演算子という変な演算子がある。 Null合体演算子は比較対象がNULLであれば指定した値を返し、非NULLであればその値をそのまま返してくれる。 宇宙船演算子はCのstrcmpみたいなもので、二値を比較して、等しければ0...
[WSH] Windowsのコマンドプロンプトでtee
tee [WSH] Windowsのコマンドプロンプトで正規表現を使って、文字列置換 ではコマンドプロンプトから文字列置換をする方法を書いた。 他にもよくある作業として、画面で出力を確認しながら、同じものをファイルに取っておきたいことがあるよね。 いわゆるteeだ。
[bash] quine
明けましておめでとうございます。 2018年もよろしくお願いします。 $ q=q=%q\;printf\\x20\$q\\x20\$q\\n;printf $q $q q=q=%q\;printf\\x20\$q\\x20\$q\\n;printf $q $q