もじばけおなう

個人的なメモ

phpenv と php-build で複数の PHP を Mac のローカルで管理する

おはようございます。もじばけおでございます。
先日カッとなって MacBook Pro の Retina モデルを購入してしまいました。
カッとなった理由については深く突っ込まないでください(真顔)

というわけで、複数の PHP をビルドして管理するわけなんです。
インターネッツ社会な昨今、ググればすぐに情報出てくるわけなんですが、
既存の素敵な記事を読んでも詰んでしまうわたくし向けにまとめをば。

事前準備

Homebrew 必須ですよ、アザゼルさん

  • Xcode 入れてから以下で
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
brew doctor
brew update

アパッチ先生召喚

  • nginx もいいけどとりあえず Apache をね!
  • libphp5.so の作成に apxs 使うのでこのタイミングで httpd いれちゃうよ!
brew install httpd

phpenv

インストール

  • brew でかんたん!
brew tap josegonzalez/homebrew-php
brew install --HEAD phpenv

せってい

export PATH=$PATH:$HOME/.phpenv/bin
eval "$(phpenv init -)"
  • zsh なひとは .zshrc だね!

php-build

インストール

  • brew install はしない
  • phpenv の plugin として追加しましょ
git clone https://github.com/CHH/php-build/ ~/.phpenv/plugins/php-build
cp ~/.phpenv/plugins/php-build/bin/phpenv-install ~/.phpenv/plugins/php-build/bin/rbenv-install
sed -i -e "s/# Provide phpenv completions/# Provide rbenv completions/g" ~/.phpenv/plugins/php-build/bin/rbenv-install

せってい

  • ビルドオプション設定しましょ

vi .phpenv/plugins/php-build/share/php-build/default_configure_options

--with-pear #without になってるので with にする
--with-apxs2=/usr/local/sbin/apxs #これ追加

phpenv install

  • とりあえずここでは 5.5.0RC3 あたりをいれてみましょうか
phpenv install 5.5.0RC3
  • Preparing の段階で、やれ re2c がないだの mcrypt がないだの言われるので、都度 brew install hoge しましょ
  • こんなのでるかも(でないかも)
-----------------
|  BUILD ERROR  |
-----------------

Here are the last 10 lines from the log:

-----------------------------------------
  "_sk_shift", referenced from:
      _load_all_certs_from_file in openssl.o
  "_sk_value", referenced from:
      _zif_openssl_csr_new in openssl.o
      _zif_openssl_pkcs7_verify in openssl.o
      _php_openssl_parse_config in openssl.o
      _php_openssl_sockop_set_option in xp_ssl.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libs/libphp5.bundle] Error 1
-----------------------------------------
  • 以下で解決するんじゃなかろうか
brew install openssl
brew link openssl --force
exec $SHELL -l
  • 作成された libphp5.so を cp
# httpd が2.2.23前提なので適宜読み替えてくだしあ
sudo cp /usr/local/Cellar/httpd/2.2.23/libexec/libphp5.so ~/.phpenv/versions/5.5.0RC3/
  • phpenv を更新
phpenv rehash
  • これで追加したものが表示されればおk
phpenv versions

phpenv-apache-version 導入

  • phpenv で切り替えるたびにごにょるのが面倒なので導入します
git clone https://github.com/garamon/phpenv-apache-version ~/.phpenv/plugins/phpenv-apache-version

ためしに切り替えてみる

  • とりあえずデフォルトの version 確認
bko@:~$ php -v
PHP 5.3.15 with Suhosin-Patch (cli) (built: Dec  9 2012 19:32:02)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
  • 切り替えてみる
phpenv global 5.5.0RC3
  • どや
bko@:~$ php -v
PHP 5.5.0RC3 (cli) (built: Jun 26 2013 01:58:06)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0-dev, Copyright (c) 1998-2013 Zend Technologies
    with Xdebug v2.3.0dev, Copyright (c) 2002-2013, by Derick Rethans
bko@:~$ phpenv apache-version 5.5.0RC3
copy /Users/bko/.phpenv/versions/5.5.0RC3/libphp5.so to /usr/local/opt/httpd/libexec
Restarting apache...
Password:


以上!!

2012年の物欲まとめ

物欲で満ち溢れていることに定評があるかは定かではございませんが、多少の自信があるわたくしです。

今更感があまりにも強い中ではございますが、昨年買ってよかったなぁというものをまとめてみもす。

Kindle Paperwhite / Amazon


Kindleちゃん。旅行しまくってた期間のお友達。
旅行期間だけで結局10冊以上読んでるんだけど、紙で持ち歩いてたら重くて泣いてただろうなぁって。
iPad miniならともかくiPadで本読んでると肩凝るし、寝ながらとか通勤時間とかも快適になりました。ここ2ヶ月通勤してないけど。

MacBook Air 11inch 2012 / Apple


某犬がトレードマークの会社がFacebookで提供しているゲーム、Ruby Blastに業務の一環を言い訳としてのめり込んだ時期があって、2010年モデルだと頻繁にFlashがカクカクしすぎて悲しすぎて買い替え。
見た目の違いがほとんどないけども、CPUをi7の2.0GHzにしたりメモリを8GB積んだので超快適に。
Xcodeでビルドすることもないし、Adobe製品使うこともないから不満に思ったことは一度もないかなー。

SE535LTD / SHURE


ぶっちゃけこれなんですよ。これ。
純正のケーブル使ってると高音耳に刺さり気味だし音場が狭かったんだけど、リケーブルしてあげたら大化け。
Luneやら各社SHURE用ケーブルを試した中で、Audio TrackのRe:Cable が一番好みだなぁとおもって満足してます。
元から化け物クラスなんだけど更に化けた。
ドドリアさんフリーザ様になったくらいの違い(大袈裟)。
SE535LTD買うまでは、Ultimate Earsの

TripleFi 10(通称: 10pro) + Null AudioのLuneちゃんだったんだけど、もう10proには戻れない。

若干高音よりなんだけども解像度超高くて耳が幸せすぎる。
もうなんか文章で書いても伝わらないと思うから家電量販店とかで試してくるといいとおもう。
あまりコスパという言葉は好きじゃないんだけども、あえて使うならばコスパは決してよくない
完全にコスト度外視でつくってるっしょこれ状態。
逆にいうとSHUREの本気が聴こえるイヤホンっていうことなんだろうけどね!

コスパとか気にするなら10pro買えばいいとおもう。
発売当初から2万円くらい値下げされてるし気持ちいい音を楽しめるはず。
SHUREなら1万切ってるSE215もおすすめ。


影にはイヤホンスパイラルさんが待機してるけどね


NW-A867 / SONY

もう死滅してしまったSONY WALKMANのAシリーズ。
ちっこくって意外と問題ないレベルのタッチパネルを搭載しております。
さくさく動くし音よいしで満足しまくってる。けど128GB欲しかった。

Zシリーズは大きすぎて興味なかったわたくしですが、小振りなFシリーズが登場したので購入してみたものの、
明らかに音の抜けが悪すぎて絶望
楽曲リストの読み込みを都度やってるのか、ガーーーーっとスクロールするとしばらく何も表示されないとかまじ糞ちょっといただけない。

結局Aシリーズ最高っすわーっつってA867にもどしてしまいました。色はピンク。
家電量販店とかで売ってないし、壊れた時のためにもう一台買っておいてしまおうか絶賛なやみ中。

ちなみにこの子はフルデジタルアンプ積んでるので中途半端なヘッドホンアンプ使うと逆効果
そういう意味でも身軽にいい音を楽しむための選択肢でございます。
iPhone or iPod + アンプとかになると重いしね。
ただ、唯一気をつけるべきはSONYが配布しているXアプリ()なる音楽同期用のアプリケーション。
すっっっっげーー重いから音楽50GBくらいあると同期させるのに24時間以上かかるレベルなので完全な害悪
サクっとrsyncしてフォルダごとまとめてコピーしてあげればいいと思う。

ていうかまじでAシリーズ復活してくれないと泣く。


と、まぁこんな具合で昨年の購入品をまとめてみたわけです。
他に買ったものはないのかと言えば断じてそんなことはないのですが、自信をもっておすすめするのはこれくらい。


つぎにイヤホン買うとしたら自分の耳の型をとってUltimate Earsに送りつけるこれくらいしか選択肢ないなぁ。

愛しさと切なさと部屋とワイシャツとおれ

皆さんは「優しさは時として人を傷つける」というフレーズを聞いたことがあるでしょうか。

私はありません。

そんな私ですが、クリスマスである本日、ニコレットを買うべく薬局へ赴きました。
女性の店員しかいない、まさに私にとってのパラダイスがそこには広がっていたのです。

コミュ障疑惑のある私が「に、に、ニコレットください」と、若干どもりながら懇願したところ、
「4種類あるんですけどどれにしますか?」というよりどりみどり感を発揮してくれました。
言われたことを従順にこなすことしかできない私ですが、この時だけは「クールミントでおねがいします」と自ら主張することができました。ありがとうございます。

正直ニコレットの話はどうでもいいんですが、本題は帰り道です。
烏龍茶がないと生きていけないことに定評のある私ですので、皆様のイメージを壊さないためにも帰り道にあるファミリーマーツで1リットルのパックを購入しておくことにしました。
嬉々として店内に潜入し、ターゲットを発見する私。きっとニヤニヤしていたでしょう。気持ち悪いですね!


レジに向かおうと振り返った瞬間、彼女がいたのです。


そう、

イチゴのショートケーキです。


一瞬、何が起こったのか理解できない私ですが、直感的にこの子は家に連れて帰らねばならないと悟りました。
挙動不審な様で彼女を抱き寄せ、レジに向かったのです。


しかし。


しかし!



そこに待ち受けていたのはイケメン。
なぜお前のようなイケメンがクリスマスの日にバイトをしているのだ…。
私は驚き戸惑いつつも、彼女を彼の前に差し出しました。
長年付き合った彼女を一晩にして寝取られたかのような錯覚に陥りました。

動揺を隠せずにいる中でふと気づいてしまったのです。私はニヤリと笑いました。

そう、彼はまだ研修期間中。ペーペーなのです。

プロのニートである私がペーペーのバイトをディスるのもアレですが、勝機が見えたかのように思いました。


だがしかし!

そんなにイケメンは甘くなかった!


こともあろうか私のレジ袋に投入したフォークが1本だけだったのです。

なんということでしょう。

見ず知らずのただのイケメンに「おまwwどうせ独りもんやろwww1本だけくれてやるよwwww」みたいな扱いを受けたのです。

絶望する私、(きっと)勝ち誇っていたであろうイケメン。
私の中で何かが弾け、一触即発ニトログリセリン野郎として覚醒する寸前でした。

戦場のように張り詰めた空気を切り裂いた人物が現れたのです。


そう。


ファミリーマーツの店長でした。


「こんなおっきなケーキ一人でたべるわけないっしょ。ちゃんと考えてよ。」


フォークが2本になったのです。天使です。まさに天使。
普段はあまりイケてないオッサンの皮をかぶっているのでしょうか。なんて勿体ないことをするのでしょう。
神々しいオーラと白い翼が私には確かに見えました。


無事に帰宅ミッションを完了した私は、たばこに火を灯し肺を煙で満たし心を研ぎ澄ましました。

優しさは時として私をどん底に突き落とします。

無言でフォークをゴミ箱にダンクシュートしました。

ウノウとは一体なんだったのか

どうもプロニートです。今回はUnoh Advent Calendar用の記事でございます。

わたくしが入社したのは2010年3月。
ジンガジャパンへと生まれ変わったのはその年の夏。
つまり後期のウノウに入社したわけで、CTOの尾藤さんは既に退社してましたし、
ソーシャルゲームに集中していたので既に"広く"手がけている段階のウノウではございませんでした。たぶん。サノウはあったけど。

そんな僕が"ウノウとは〜"云々っていうのもアレだなーっていう気持ちが非常に強いわけで、
思い出を振り返るにしても数ヶ月しかないし、何を発信すべきかは悩ましいところです。

とか言ってると何も書けなくなってしまうので、
僕が感じた/見えていたウノウの素敵さを1点だけ書き残しておこうかなとおもいます。

ウノウの人はみんなインターネット大好き

インターネットというよりはWebサービスでしょうか。

みんなWebサービス大好きなので自身が手がけているサービスへの愛情であふれています。
例えば悲しいことに終了ということになってしまったClipp.inは、
ユーザーの皆様へのせめてもの対応として超バタバタしてる間を縫ってTumblrへの移行サービスを提供してたりします。
http://clipp-info.clipp.in/entry/1165848
# まだ移行してないかたはなるべく早めにどうぞ。
利用者数とか売上とかじゃない部分でエンジニアさんが自発的に動く環境って素敵だとおもいませんか。どうすか。

みんなWebサービス大好きなので何かを作るときは本気です。
企画の人間が適当に書いたドキュメントには全力でツッコミいれて「ないわー」とか言いますし、いけると思ったら団結して一気に作り上げます。
僕みたいな豆腐メンタルの企画職にはあまりやさしくないですがね!

僕もWebサービス大好きで、常日頃まじめじゃないツイートだったりポストばかりしているのですが、
入社直後くらいのどうでもいいツイート(もはや内容すらおぼえてない)に対して
社長の山田進太郎氏から「ちょww」という草が複数生えたリプライをいただきました。
すごくフラットでフランクでファンキーな会社だなーと最も強く感じた瞬間でした。
入社初日に進太郎氏に言われたのは「Facebookのアカウントおしえて」だった気もします。

僕が見てきたウノウやジンガジャパンは、最も"ウノウっぽい"時期と比べてしまうと雰囲気やら何かが違ったのかもしれません。
がしかし確かにそこにはウノウの素敵な文化が残っていたわけで、そんなジンガジャパンが解散というのは大変悲しいことでございます。

まとめ

やることやった上での結果だし、まぁしゃーないんじゃないかな!
最終的に残っていたのはエンジニア勢を中心に優秀な人ばかりで、皆さんのことは全然心配してません。
むしろ僕みたいなミジンコ野郎が心配するのは失礼くらいのレベルです。

結局会社は人で構成されてるわけで、その中にいた人たちがそれぞれパワフルならば、
どこにいようが、何をしてようが、また別のどこかでパワフルにやっていくんだと思います。
寂しくはありますが、まぁ生きていればそういうこともあるんじゃないかなということで僕は明るく1月末くらいを目処にニートしてます。




コマネチ

ターミナルを地獄のミサワで満たして非モテ力を上昇させるライフハック

※終始やっつけ仕事

くだらないことしかやらないことで定評のあるわたくしですが、またくだらないことに力を注ぎました。

インターネッツをサーフしてたら horesase-boys というリポジトリを発見しまして。

rake fetch と rake build で地獄のミサワの名言jsonを生成するRubyなのですが、
jsonにする前のテキストはすべて手でがんばって管理しているという非常に漢らしいプロジェクトでございます。

これをどう遊びに使おうか悩みに悩んだ結果、
tail -f hogehoge みたいな感じでずらっとミサワが流れてきたら楽しいかもしれないと。
思ってしまったわけですね。


というわけでピーエッチピーでやってみました。

#!/usr/local/bin/php
<?php

$path = 'meigens.json';  // rake buildしてつくられたやつ
$meigens = json_decode(file_get_contents($path, 'r'), true);

while ($meigens) {
    $rand = array_rand($meigens, 1);
    echo "* ".$meigens[$rand]['title']."\n";
    echo $meigens[$rand]['body']."\n";
    sleep(1);
}


うん。つまらん。
これはつまらない。どうしよう。
なにがつまらないんだろうと四苦八苦。
よくあるRPGなゲームのセリフみたいに1文字ずつ表示されると少しはマシになるんじゃないのだろうか。

やりました。

<?php

$path = 'meigens.json';
$meigens = json_decode(file_get_contents($path, 'r'), true);

while ($meigens) {
    $rand = array_rand($meigens, 1);
    echo "* ".$meigens[$rand]['title']."\n";
    say($meigens[$rand]['body']."\n");
    sleep(1);
}

function say($txt, $duration = 0.8) {
    $words = mb_str_split($txt);
    foreach ($words as $word) {
        echo $word;
        usleep(sleeptime($word, $duration));
    }
}

function sleeptime($word, $duration) {
    $sleeptime = 100000;
    $punctuations = array(
        ',','.','','','','','','','!','?','','',''
    );
    foreach ($punctuations as $punctuation) {
        if ('' == trim($word, $punctuation)) {
            return $duration * $sleeptime * 5;
        }
    }
    return $duration * $sleeptime;
}

function mb_str_split($txt, $encode = 'UTF-8') {
    $result = array();
    while ($str = mb_strlen($txt, $encode)) {
        array_push($result, mb_substr($txt, 0, 1, $encode));
        $txt = mb_substr($txt, 1, $str, $encode);
    }
    return $result;
}

イメージ画像
f:id:mojibakeo:20121118153112p:plain

前よりはまだマシか…っていうレベル。
1文字ごとに分割するだけだとふいんき(なぜか変換できない)が出せなかったので、
句読点とか!とか?とか☆、★の場合はさらにちょいと間を置かせると、それっぽさが出るんですね!ははは!


なんだか結局むなしさだけのこったけど、これでニヤニヤできたら人生ハッピー!
これを tail -f してるエラーログのとなりに置いたりして仕事中にニヤニヤしてると
「あらやだなにあのひときもちわるい…」ってなって、よりいっそう非モテ力アップですね!


あ、今回の研究結果としては、
「ミサワは画像つきじゃないと、あんまりおもしろくない」ということでした!てへぺろっ☆彡


※わたくしが所属する Zynga Japan は解散が決定しましたので、現在絶賛転職先を探し中です。こんなことやってますけどカードバトルゲームな企画職です。

MacのiTunesライブラリとSONYのWalkmanをrsyncで同期させる

どうもこんばんは。ドライアイがひどすぎて医者にメガネすらやめろと言われました。
非モテの僕が眼鏡男子需要にあやかるには伊達眼鏡を購入せねばならないようです。

今回はすごく個人的なまとめですが、
MacのiTunesウォークマンを同期させようぜ大会を開催します。

まえがき

世の中にはXアプリなるSONY様謹製の同期&音楽ファイル管理用のアプリケーションが存在するのですが、
Appleが嫌われてしまっているのかMac OS向けには公開されておりません。
ざっとさがすとSonicTunesなるものが見つかるんですが(アプリケーション名あやふや)、
すくなくともわたくしの環境では一切動作しなかったので、その手法は諦め、
何故か我が家に君臨するLenovo ThinkPad様にXアプリをインストールし、
王道のWindows運用でやりすごしてきました。

しかし!がしかし!

非常に動作が遅いわけです。まじfuck

そりゃ初回は全部転送するわけですからね、ある程度時間かかるのはまぁよしとしますが、
27時間もかかったとなれば、ちょっと許しがたいですよね、と。

というわけでなんとかならんもんかなーと日々悶々としていたところ、
よくよく考えれば僕が愛用するSONY ウォークマン Aシリーズ NW-A867に関して言えば、
Macにマウントさせて/Volumes/WALKMAN/MUSICの中に放り込むだけで、
あとはよしなにウォークマン側で楽曲のデータベースを構築してくれるわけです。

じゃあ、あれじゃね。rsyncでなんとかなんじゃね。っていう。


というわけで実験開始でございます。

用意するもの

  • Mac
  • Walkman
  • と、USB接続用のケーブル

事前準備

Macデフォルトのrsyncは日本語表示的な意味でうんこちゃんなので、自前でインストールしましょう。

wget http://rsync.samba.org/ftp/rsync/rsync-3.0.9.tar.gz
tar -xzvf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure --prefix=/usr/local
make
sudo make install

で、ざっとしぇるすくりぷと書いた

きっとこんなかんじ。

#!/bin/sh
#Usage: sync_walkman.sh [ check | exec ]

WALKMAN='/Volumes/WALKMAN';
LIBRARY='/Users/ゆーざーめい/Music/iTunes/iTunes Media/Music/';

if [ ! $1 ]; then
  echo "Error: You must provide 1 argument.";
  echo "Usage: sync_walkman.sh [ check | exec ]";
  exit;
fi

if [ $1 == "check" ]; then
  OPTION="-un --links --delete --recursive --progress";
elif [ $1 == "exec" ]; then
  OPTION="-u --links --delete --recursive --progress";
else
  echo "Error: invalid argument";
  echo "Usage: sync_walkman.sh [ check | exec ]";
  exit;
fi

WALKMAN="$WALKMAN/MUSIC";
rsync $OPTION "$LIBRARY" "$WALKMAN";

たぶんうごくんじゃないかな。
./sync_walman.sh checkでdry-run、
./sync_walman.sh execで同期実行。みたいな。

じっけんけっか

冒頭でもふれたように、素直にXアプリつかったら27時間もかかり怒り心頭でしたが、
今回のrsyncでドーン実行時間はおよそ3時間でした。
#ちゃんと開始時間と終了時間めもってなかったごめんなさい

あとがき

たくさん曲転送するときに、ちょくちょくターミナルのぞくの超めんどくさいなーってことと、
growlnotify対応とかしたいよねー結局どんだけ時間かかったの?的なことも知りたくなったので、
あとから色々付け足しました。そっちはGithubで羞恥プレイなう。
https://github.com/mojibakeo/bko_sync_walkman

f:id:mojibakeo:20120623014647p:plain

まぁ最終的にはPATH通ってる好きなところに好きな名前で置いて使えばいいんじゃないかな!
ちなみに最初に転送するときは、ふつうにcpした方がrsyncより速いってどっかのブログにかいてあったよ!ためしてないけど!



Macつかってるのにウォークマンわざわざ使うのは少数派だけども、
iPhoneのバッテリーを節約するためにも分散処理ですよ。ねぇ。
この子結構軽いし64GBもあるしバッテリーそこそこ持つしおすすめ。