[PHP] Embed SAPIでCからPHPを呼び出してみる その1

[Java,JNI]JNIでクラス検索するときのパッケージ名 では、CからJVMを起動してみたけど、今度はCからPHPを呼び出してみよう。

Linux上で、PHP 7.1.1を使った例。

Embed SAPI

Cから直接PHPを呼び出すためにはEmbed SAPIを使う。
SAPIというのはServer APIと呼ばれるもので、実際にPHPのスクリプトを解釈する部分と実行環境の橋渡しをする。
PHPスクリプトがWebサーバから呼び出されたり、コマンドラインから呼び出されたりすると、SAPIが異なる状態で、呼び出されることになる。

http://php.net/manual/ja/function.php-sapi-name.php

[PHP] 遅延静的束縛

Pythonでは

[Python] classメソッドとstaticメソッドでは、Pythonでのclassメソッドとstaticメソッドを見た。

同じようなことがPHPでもできないだろうか。

PHPでは

PHPでは、遅延静的束縛なんていう仰々しい名前の機能で、これに近いことができる。

http://php.net/manual/ja/language.oop5.late-static-bindings.php

Pythonの場合はメソッド自体をclassメソッドにしたり、staticメソッドにしたりしたけど、PHPでは静的コンテキストでクラスを参照する時にself::とstatic::を使い分ける。

[PHP] PHPでの日付文字列パースと要素取り出し

PHPで日付文字列をパースして、そこから曜日を算出する必要があった。
こんなの簡単だろと思ってたんだけど、いくつか気をつける点があったので、メモ。

strptime

まずはstrptimeを使って、こんな感じにした。
$d = (strptime("20180507", "%Y%m%d"));
var_dump($d);

[Java] SQLExceptionのgetNextExceptionとiteratorの違い

SQLExceptionを補足した時にチェーンされた例外

SQLExceptionを補足した時にチェーンされた例外をすべて見たかったんだけど、getNextExceptionで戻り値がnullになるまでループするのと、iteratorでループするのでは取得される例外が異なるみたい。

https://docs.oracle.com/javase/jp/8/docs/api/java/sql/SQLException.html
        ...
    } catch (SQLException e) {
        for (Throwable t : e) {
            ...
        }
    }
        ...
    } catch (SQLException e) {
        for (SQLException sqle = e; sqle != null; sqle = sqle.getNextException()) {
            ...
        }
    }

[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("A", "B", "C", "A", "B", "C")
v1 <- c(1, 2, 3, 4, 5, 6)
v2 <- c(100, 200, 300, 400, 500, 600)
df <- data.frame(label, v1, v2)
df
   label v1  v2
 1     A  1 100
 2     B  2 200
 3     C  3 300
 4     A  4 400
 5     B  5 500
 6     C  6 600

[R] vectorとlistの関係

generic vector

Rのドキュメントを見ると、listの説明として、"Generic Vectors"という言葉が出てくる。

https://www.rdocumentation.org/packages/base/versions/3.4.3/topics/list

んー、なんだこれ。と思ったんだけど、vector関数の挙動を見たら、なんとなくわかったような気がする。