ココロノセンリツ ~Feel a heartbeat~ Vol.1

とても良かった!

Vol.0 と比べて、ももクロ色を削ぐ方向に舵をきったのは明らかで、良い意味で振りきったなと思うところあり、歌に特別な想いを持ってる有安杏果さんにしかできないライブをまざまざと見せつけられた気がしました。

歌で魅せていく所作は、ももクロの中では有安さんが一番得意だと思うし、この方向性は本当に楽しみしか!

また、誰もが思いついていそうなアイデアである、ももクロに楽曲提供をしてくれると、すごく楽しくなる気がして良いですね。

さしあたり、前回発表されたものも含めて新曲を音源化して欲しく、購入できる形の何かを切によろしくお願いいたします🙏

Docker を使って PHP 5.2 環境を用意してみる

先日、ひょんなことから PHP 5.2 環境を用意した備忘録。

利用した Docker イメージ

Pull

docker pull tommylau/php-5.2
docker pull tommylau/nginx
docker pull mysql:5.6

Run

docker run --rm --name mysql5.6 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.6
docker run --rm --name php -v /path/to/web:/var/www/html --link mysql5.6:mysql -d tommylau/php-5.2
docker run --rm --name nginx -v /path/to/web:/var/www/html --link php:php -p 9000:80 -d tommylau/nginx

確認

cat /path/to/web/index.php
<?php
echo phpinfo();

open http://localhost:9000

ioutil.ReadAll and base64 Encoder benchmark

Streamの扱い方 by jun06t を読んだ。

ioutil.ReadAll は io.Reader や io.Writer を使ったときと比べてメモリ効率が良くなく、避けた方が良いみたい。
知らなかった。

資料を参考にしつつ、個人的に気になった base64 encoder のベンチマークを加えて、自分でも試してみた。

結果

[utahta@mbp13 bench]% go version
go version go1.8.3 darwin/amd64

# /tmp/image.jpg 300KB
[utahta@mbp13 bench]% go test -bench . -benchmem
BenchmarkRead1-4           10000            121861 ns/op         1046577 B/op         11 allocs/op
BenchmarkRead2-4           50000             37957 ns/op          311456 B/op          3 allocs/op
BenchmarkEncode1-4          3000            459245 ns/op         1130656 B/op          5 allocs/op
BenchmarkEncode2-4          3000            516458 ns/op         1455392 B/op         13 allocs/op
PASS

# /tmp/image.jpg 20MB
[utahta@mbp13 bench]% go test -bench . -benchmem
BenchmarkRead1-4             200           8519747 ns/op        67106875 B/op         17 allocs/op
BenchmarkRead2-4             500           3436382 ns/op        20480160 B/op          3 allocs/op
BenchmarkEncode1-4            50          32229327 ns/op        75104416 B/op          5 allocs/op
BenchmarkEncode2-4            50          34383885 ns/op        94418246 B/op         19 allocs/op
PASS

read は、たしかに ioutil.ReadAll を使う理由がないくらい差がある模様。
もしくは ioutil.ReadAll の中身を io.Copy を使うように書きかえたら、みんな幸せになるのでは…?

反面 base64 Encoder は、EncodeToString の方が結果が良かった。
僕の書き方が悪い可能性も大いにあるけど、少なくともこのように書いて得することはなさそう。