It's raining cats and dogs.

無駄なことなんてないはず

android studioで2段階認証設定済みのgithubからcloneする

android studioを使ってgithubからコードをcheckoutするときに、github側で2段階認証(two factor authentication)を設定しているときはpersonal access tokenを使うそうです。

http://michaelcarrano.com/blog/using-github-with-android-studio

githubの画面からtokenを発行しても良いけど、android studioからtokenを取得することもできるようだ。

  1. android studio起動
  2. 起動後のメニューから「configure」→「preferences」を選択
  3. 左メニューから「Version Control」「GitHub」を選択
  4. Auth TypeのプルダウンをTokenにすると「Create API Token」ボタンが出てくるので押す
  5. ログインダイアログがでてgithubのID/PWを入れると認証コードを入力するウィンドウがでるので、2段階認証の認証コードを入力する
  6. Token欄にtokenらしき●印がでるので、「Test」ボタンを押すと接続確認が取れる
  7. 右下の「OK」ボタンを押して完了

あとは起動後のメニューから「Check out from Version Control」からgithubを選んでプロジェクトをcheckoutしたらおk

slim 2.4からroutingでクラス形式のコントローラーを呼び出せるようになっていたらしい

slim 2.4からroutingでクラス形式のコントローラーを呼び出せるようになっていたらしい。

http://uzulla.hateblo.jp/entry/2014/01/11/040335

なるほどと思って、早速試したらできたので、おおーとなっていたのだけど、

上の例は特にパラメータを渡さない呼び出しだったので、パラメータを渡すときはどうするのかというと

  • routing
<?php
$app->get('/:greeting/:name', '\App\Controller\HelloController:index');
  • controller
<?php
namespace App\Controller;

class HelloController
{
    public function index($param1, $param2)
    {
        var_dump($param1, $param2);
    }
}

みたいな感じで取れるらしい。

ところで、これくらいシンプルなコントローラーだったら別に構わないのだけど、コンテナとして使っている$appはどうしてもコントローラで参照したいところなので、なんとか上手い渡し方ができないか調べた。結論としては良いやり方がないっぽい。

例えばこんな感じにできたらいいなーとなんとなく思った。

<?php

namespace App\Controller;

class HelloController
{
    private $app;
    public function __construct($app)
    {
        $this->app = $app;
    }
    public function index($param1, $param2)
    {
        var_dump($param1, $param2);
    }
}

調べていたら、おんなじようなことを考える人はいるもので、既にPR送っている人がいた。

https://github.com/codeguy/Slim/pull/755

このPRの結論としてはslim3に持ち越しとのことで、切ない感じになりました。slim3いつ出るの...

MySQL WorkBenchで日本語を使う

だいぶ今更感あるけど、メモ。

とりあえずざっくりER図を書きたいときにMySQL WordBenchを使うのだけど、テーブル名に日本語が表示できないのでざっくりかけない。悲しい。

調べたら設定を変えるだけで使えるらしい。

http://qiita.com/snaka/items/dc1d104ccda608156a71

便利。

そういえばMySQL WorkBench 6.0が出ていた。起動時の画面がナウでヤングな感じになっていて、おーってなったけど、あとはそんなに変わっていなかった。まぁこの手のやつはそんなに凝っていても使いにくいだけなので別にいいか。

phpenvで作ったphp環境にpeclのライブラリをインストールする

phpenvでつくったphpの環境にpeclのライブラリをインストールした時のメモ。

pearのライブラリなんかはcomposerでプロジェクトローカルにインストールしてしまうんだけど、peclってsystem php?な環境にpeclコマンドでpecl install hogehogeみたいにインストールしたことしかないし、peclコマンド自体みつからなかったので、そういえばphpenvで作った環境毎にインストールする時ってどうやるんだろうかと思ってしらべた。

結論phpizeでビルドする。らしい。

Memcachedでもいれてみる

僕の中ではメジャーなMemcachedモジュールを入れてみる。

http://pecl.php.net/package/memcached

※わけあってbeta版を入れる。

$ cd /tmp
# 適当なディレクトリにダウンロード
$ wget http://pecl.php.net/get/memcached-2.2.0b1.tgz
# 解凍
$ tar zxvf memcached-2.2.0b1.tgz
$ cd memcached-2.2.0b1
# phpizeを使う
$ phpize
# ビルドする
$ ./configure
$ make
$ make install
Installing shared extensions:     $HOME/.phpenv/versions/5.5.8/lib/php/extensions/no-debug-non-zts-20121212/

これでホームディレクトリ以下のphpenvの環境にmemcached.soというファイルを作ってくれる。

$ ls $HOME/.phpenv/versions/5.5.8/lib/php/extensions/no-debug-non-zts-20121212/
... memcached.so ...

ただ、これだけだと使えないので、php.iniで読み込んであげる必要があるけど、php.iniに書くものアレなので$HOME/.phpenv/versions/5.5.8/etc/conf.d/memcached.iniというファイルを作って読み込ませるようにする。

ファイルの内容は

$ cat $HOME/.phpenv/versions/5.5.8/etc/conf.d/memcached.ini
extension=memcached.so

これだけ。

あとはphp -iで確認

$ php -i | grep memcached
Additional .ini files parsed => $HOME/.phpenv/versions/5.5.8/etc/conf.d/memcached.ini,
memcached
memcached support => enabled
libmemcached version => 1.0.17
memcached.compression_factor => 1.3 => 1.3
memcached.compression_threshold => 2000 => 2000
memcached.compression_type => fastlz => fastlz
memcached.serializer => php => php
memcached.sess_binary => 0 => 0
memcached.sess_connect_timeout => 1000 => 1000
memcached.sess_consistent_hash => 0 => 0
memcached.sess_lock_expire => 0 => 0
memcached.sess_lock_max_wait => 0 => 0
memcached.sess_lock_wait => 150000 => 150000
memcached.sess_locking => 1 => 1
memcached.sess_number_of_replicas => 0 => 0
memcached.sess_prefix => memc.sess.key. => memc.sess.key.
memcached.sess_randomize_replica_read => 0 => 0
memcached.sess_remove_failed => 0 => 0
memcached.sess_sasl_password => no value => no value
memcached.sess_sasl_username => no value => no value
memcached.store_retry_count => 2 => 2
memcached.use_sasl => 0 => 0
Registered save handlers => files user memcached

なんかいろいろ設定されたみたい。

php5.4からデフォルトのtimezoneの扱いが変わっている件

結構今更感あるんだけど、php5.4からデフォルトのtimezoneの扱いが変わっている。

php5.4以上をインストールしてデフォルトのphp.iniのままphpを実行したりすると以下のようなメッセージが出る。

PHP Warning:  Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0

なんとなく読んでみると、とりあえずUTCタイムゾーンを設定しているけど、date.timezoneでうまいこと設定してねって話。

で、その辺りの話がdate_default_timezone_get()関数のマニュアルに書いてあった。

http://www.php.net/manual/ja/function.date-default-timezone-get.php

要は

  • 5.4以前はTZ環境変数とかみてくれたり、ホストOSに問い合わせてタイムゾーンを設定してくれていたりしていた。
  • 5.5からは明示的にdate_default_timezone_set()関数で設定するか、php.iniのdate.timezone に設定してくれ。

とのことらしい。

php.iniを見てみるとdate.timezoneはコメントアウトされているので

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Asia/Tokyo

とか設定したらおk

nkfでファイルの文字コードを確認する

nkfはファイルの文字コードを変換したりするもんだと思っていたけど、文字コードを確認するのにも使えるらしい(そりゃそうか)

nkf--guess or -gというオプションを使う。

そういえば僕のmacにはnkfが入っていなかった。
$ brew install nkf
まずはutf8のファイルを作って文字コードを見てみる
$ cat utf8.txt
ほげほげ
ふがふが
$ nkf --guess utf8.txt
UTF-8 (LF)

おお

いろんな文字コードのファイルを作って文字コードを見てみる
$ nkf -s utf8.txt > shiftjis.txt  # shift_jis
$ nkf -j utf8.txt > jis.txt          # jis
$ nkf -e utf8.txt > eucjp.txt     # euc-jp
$ ls * | xargs nkf --guess
eucjp.txt: EUC-JP (LF)
jis.txt: ISO-2022-JP (LF)
shiftjis.txt: Shift_JIS (LF)
utf8.txt: UTF-8 (LF)

便利。

findとかで下の階層も再帰的にチェックしたら便利そう。

そういえば

僕のmacに入れたnkfだと-gだと改行コードなし。--guessだと改行コードありだった。

grep結果に色を付けるとなんだか捗る

grepで検索した時にヒットした文字列の色を替えるやり方をmonmonさんに教わったのでメモ。

--color=autoというオプションをつけると良いらしい

$ grep --color=auto 'hogehoge' access.log

のようにするとgrepの検索結果画面のhogehogeという文字に色がついて見やすい。

  • 使用前

f:id:tadasy:20140106234710p:plain

  • 使用後

f:id:tadasy:20140106234703p:plain

ちなみに

GREP_OPTIONSという環境変数を設定しておくと、常に設定したいgrepのオプションを設定しておけるので、

export GREP_OPTIONS='--color=auto'

みたいなやつを.zshrcとか.bashrcに書いておけば、もろもろ捗る。