diff --strip-trailing-cr
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を一旦、空白を含まないものに差し替えるとうまくいきます。
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]);