array_column便利

多次元配列から一部の要素だけ抜き出したいという時にどうすればいいのか?
ループで取り出すというのが古い言語的な発想だけど、俺たちのPHPならそういう便利道具が元々あるのでは?と調べてみたらあった。

$hoge = [
            ['id' => 1, 'name' => 'stratocaster', 'price' => 70000],
            ['id' => 2, 'name' => 'les paul', 'price' => 150000],
        ];

こんなのがあったとして、nameだけ取り出したいとする。

        $piyo = array_column($hoge, 'name');

とすれば取り出せる。
さらに第3引数で新しい配列のインデックスを指定できる。

        $price_list = array_column($hoge, 'price', 'name');

とすると、nameをキーにした配列になる。

array(2) { ["stratocaster"]=> int(70000) ["les paul"]=> int(150000) }

こんな感じ。地味にあると使える場面がありそうな関数です。

IntelliJ系IDEでJavaScriptのコーディングスタイルを変更する

例えば自分の場合はPhpStormをメインで使っているのだけど、その場合はデフォルトだとJavaScriptPHP的なコーディングスタイルになってしまう。
そういう場合にJavaScriptのコーディングスタイルを変更したい場合の設定。
Preferences -> Editor -> Code Style -> JavaScript まで行き、Set from...を押すとGoogleなどのコーディングスタイルが設定できる。

設定画面

apacheのログが標準出力になっているDockerイメージがあった

環境構築で外部のイメージを使ったところ、apacheのログが標準出力になっていた。
こういう場合、docker-composeコマンドでコンテナ内に入らなくてもログが確認出来る。
例えばwebという名前のコンテナにしていた場合は以下のような感じで確認できる。

docker-compose logs web

AWSコマンドでEC2インスタンス一覧を作成

--queryで欲しい情報を指定する。今回はインスタンスID、インスタンスタイプ、名前が付いていたら名前を取得。
--outputで出力したい形式を指定する。デフォルトはJSON。textかtableが人間には読みやすい。

aws ec2 describe-instances --query "Reservations[*].Instances[*].{Id:InstanceId,Type:InstanceType,Name:Tags[?Key==`Name`]|[0].Value}" --output table

AWS EC2のインスタンスからアクティブモードしか受け付けていないFTPサーバーと通信する。

今時FTPなんて使うのかって話ありますが、まだあるようです。
という訳でこの時の問題がEC2インスタンスというのは直接グローバルIPが割り当てられている訳ではないこと。
FTPの通信をtcpdumpでキャプチャしてみたところ、相手に自分のポートを伝えるPORTコマンドの時にプライベートIPを伝えている。
で、AWS側は勝手にうまくやってくれる…訳ではなく、そのまま通信が途切れてしまう。
標準のFTPコマンドではこれに対応できないようなのでlftpというクライアントを入れる。
単純にyumでインストールできる。

その後、lftpで接続

# hoge.example.jpに接続
lftp hoge.example.jp
# userコマンドでユーザー指定
user hoge
# passwordを聞かれるので入力

この後にFTPの通信の設定をする。

# パッシブモードをoff (アクティブモードに)
set ftp:passive-mode off
# ここで外に出て行くときのグローバルIPを指定
set ftp:port-ipv4 xxx.xxx.xxx.xxx

この後は普通に操作が可能なはず。