Windows の Path をコマンドラインから設定する

メモです。C:\Go\bin にパスを通したいとして、以下のようにするとマシン全体の Path に追加できます。

  1. PowerShell を管理者権限で起動する
  2. 以下を文字通りに入力する

    [Environment]::SetEnvironmentVariable("Path", $env:Path+";C:\Go\bin", "Machine")

  3. コマンドプロンプトを別途開いて go を打ってみる

GUI が諸事情で使えない人はどうぞ。

memcached の二つのプロトコルと API デザインの難題について

yrmcdsという memcached のクローンを開発・メンテナンスしています。yrmcds は memcached を機能拡張しているので、クライアントライブラリも独自に開発する必要があり、libyrmcds という C/C++ 用クライアントライブラリとそれを基にした php-yrmcds という PHP の拡張モジュールも開発・メンテナンスしています。

この時点でもう関心ない人が大半だと思いますが、ここから書くのは世界中でたぶん私くらいしか苦労してないし、することもない話です。苦労したので書き残しておくか、くらいな駄文です。 You've been warned!

続きを読む

PHP7 で yrmcds クライアントの拡張を動くようにした

先日 PHP のメジャーバージョンである [PHP7][] がリリースされました。 性能向上のために内部構造が大きく変更されているため、PHP5 向けの拡張モジュールは大幅に書き直しが必要です。

拡張モジュールを開発したことがある人はご存知の通り、PHP の内部 API は公式の解説がほとんどありません。 必然、先人の資料や本体のコードを読み漁ってなんとかするわけで、以下の資料を大いに参考にいたしました。

続きを読む

先頭行だけ grep してファイル名を表示したい

/usr/local/bin にある #!/usr/bin/python3 をみつけたい、場面です。

こんな感じ。

find /usr/local/bin -type file | xargs awk '/python3/ {print FILENAME} {nextfile}'

1行目だけ検査したらさっさと nextfile で次に移るので OK というわけ。

nextfile Stop processing the current input file. The next input record read comes from the next input file. FILENAME and ARGIND are updated, FNR is reset to 1, and processing starts over with the first pattern in the AWK program. If the end of the input data is reached, the END block(s), if any, are executed.

追記

FNR (行番号)を if で判定して nextfile することで、任意の行数を処理できます。
あと、grep といいつつ awk なタイトル詐欺ですみません。

手軽に Go スクリプトを実行する

Linux 限定ですが、binfmt_misc を使えば shell script や Python と同じように実行ビットを立てるだけで実行できるようになります。

  1. 以下のスクリプト/usr/local/bin/gorun とでもして保存

     #!/bin/sh
     exec go run "$@"

  2. Debian/Ubuntu なら update-binfmts があるので以下を実行

    sudo update-binfmts --install go /usr/local/bin/gorun --extension go

  3. Go スクリプトに実行ビットを立てる

    chmod a+x hello.go

  4. hello.go が直接実行できるようになる

     $ ./hello.go
     Hello World!

小ネタで頻出と思いますけど。