svn:ワーキングコピーの特定のファイルを特定のリビジョンに戻す

まず、どのリビジョンで変更になったかを確認:

svn log ファイル名

ここで、svn logが全ての更新を表示してくれない場合は、リポジトリ全体を/tmpとかにcoすると出ます(他に方法があるとは思うけど・・・)

次に、ファイルをもとに戻します:

svn update -r リビジョン番号 ファイル名

Git:削除してしまったファイルを復活させる

まず、どのコミットで消してしまったかを探します:

git rev-list -n 1 HEAD -- deleted_image.png

すると長いコミットのハッシュが出力されます。 そのコミットで削除してしまったので、その1つ前の状態から取得します:

git checkout コミットハッシュ^ -- deleted_image.png

コミットハッシュの後にカラット^を付けてください。

bash:空白を含むファイル名

次のように、全てのファイルに対してなにかの処理を行いたいとします:

for i in `find . -type f`
do
ls ${i}
done

この場合、hello world.txtといったようにファイル名に空白が入っているとうまく動きません。 デフォルトのIFS(区切り文字)が空白を含むため、

ls hello
ls world.txt

といった具合に解釈されてしまうためです。

対策ですが、

SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in `find . -type f`
do
ls ${i}
done
IFS=$SAVEIFS

のようにIFSを一旦、空白を含まないものに差し替えるとうまくいきます。

vim:viminfoが生成されない

CentOS7で.viminfoが書き出されない、変だなーと思ったら、デフォルトのvimには入ってないのでした。

yum -y install vim-enhanced

と実行して.viminfoが有効になっているvimをインストールし

vi .bash_profile

として

alias vi='vim'

と設定。最後に

source .bash_profile

とすると、viminfoが利用されるようになります。

CakePHP3:既存のソースにローカリゼーションを導入する

諸々の事情で、既存のソースを多言語対応することになりました。 いろんな箇所に

echo "こんにちは"

といった具合に辞書を参照しない形でテキストが埋め込まれています。 これを

echo __('こんにちは');

に変更したいのだけど、手で書いていたら日が暮れてしまう。 そこでvimのマクロを使うことにしました。

.vimrcに次を書いてください:

let @a=':s/\%V.*\%V./<\?= __(''&'') \?>/^M'

※最後のMについてはそのまま入力するのではなく、コントロールキーを押しながらvMと押すと入ります

次に、テキストを辞書への参照に変更したいソースをvimで開いて、vコマンドで選択し、次に、@aと入力すると__('')で括られます。

CakePHP3:Swagger-codegenでコードを生成し、CakePHP3に組み込む

Macにswagger-codegenをインストールする

注意:brew install swagger-codegenだと、3系のswagger-codegenがインストールされますが、 そいつが生成するPHPコードは壊れてます。よって、2系をお使いください。

brew cask install homebrew/cask-versions/java8
brew install swagger-codegen@2

シムリンクを貼る

cd /usr/local/bin
ln -s /usr/local/Cellar/swagger-codegen@2/2.4.1/bin/swagger-codegen swagger-codegen

ymlファイルからコードを生成する

swagger-codegen generate -i hoge.yml -l php -o /tmp/test

これで/tmp/testに生成されたコードが出力されます

composer.jsonの更新

CakePHP3のcomposer.jsonを更新します。 "require"はこんな感じ:

    "require": {
        "php": ">=5.6",
        "cakephp/cakephp": "3.5.*",
        "mobiledetect/mobiledetectlib": "2.*",
        "cakephp/migrations": "~1.0",
        "cakephp/plugin-installer": "~1.0",
        "josegonzalez/dotenv": "2.*",
        "ext-curl": "*",
        "ext-json": "*",
        "ext-mbstring": "*",
        "guzzlehttp/guzzle": "^6.2"
    },

"autoload"はこんな感じ:

    "autoload": {
        "psr-4": {
            "App\\": "src",
            "Swagger\\Client\\": "lib/"
        }
    },

終わったらupdateします:

composer update

libフォルダを設置

/tmp/test/Swagger-Client-php/libを、CAKE_ROOTにコピーします

クライアントコードを呼び出す

$authorization = "Bearer xxxxxxxxxxxxxxxxxxxxxx";
$hogeApi = new \Swagger\Client\Api\HogeApi(); 
$hoge = $hogeApi->hogeGet($authorization);
$this->log(print_r($hoge,true),LOG_DEBUG);

SSLのエラーが出る場合

APIサーバのSSL証明書がオレオレだとこのエラーが出ます:

[0] cURL error 60: Peer's Certificate issuer is not recognized. (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
Swagger\Client\ApiException

対策ですが、Api/HogeApi.phpを次のように編集しましょう:

$this->client = $client ?: new Client(['verify' => false]);