Initial content
$ CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.2.1
debianだと2.1.2から2.2.1にアップデートするのに必要なpackageにlibffi-devが増えてるので注意。
Initial content
$ CONFIGURE_OPTS="--with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`" rbenv install 2.2.1
debianだと2.1.2から2.2.1にアップデートするのに必要なpackageにlibffi-devが増えてるので注意。
rails4.2系にアップグレード中に嬉しい情報が。
~/code/kowabana[upgrade-to-rails4.2.1]% rake test:all
DEPRECATION WARNING: rake test:all is deprecated and will be removed in Rails 5. Use rake test to run all tests in test directory. (called from mon_synchronize at /usr/local/var/rbenv/versions/2.1.2/lib/ruby/2.1.0/monitor.rb:211)
$ rake
で済むところが$ rake test:all
って書かなきゃいけないのクッソうざかったんですよね。デフォルトテストスイートの嬉しさ減的な。
CIの設定でも$ rake
で済んだら素敵なのにと思ってたんです。
CloudFlareで無料SSLが使える今日び、本物の証明書もStartSSL.comで無料でもらえるんすね。下記を参考にさせていただきました。
無料のSSL証明書StartSSLを活用する - Qiita
怖話で部分的に必要になったため取得・設定しました。
ただ、Google AdSense以外の広告ってほとんどSSLで表示できないんすね。広告ネットワークにとっては情報が取れないSSLは推進してくメリットがないんだろうから(ユーザーにとってはたまったもんじゃないが・・・)HTTP/2はどう進んでくのか気になりました。
素のTerminal.app、
出る。
screen、
出ない。
tmux、
で、出ますよ・・・。
ざっとscreenのmanを見てググった感じ出し方がわからなかった。
こんなかんじで絵文字をSQLに含めたりする必要があるので表示できないと普通に困るんですよね。(素のTerminal.appで撮影)
(関係無いけど、このテーブルコメント用なのに絵文字受け付けないCHARSETになってるやんけ!)
tmuxに移行しなきゃかなあ・・・。
正確にはAndroid Wear搭載のSamsung Gear Live。
発売日ちょっと過ぎに買ってから今まで半年以上毎日着けてた感想です。
Google信者の義務として取り敢えず発売されたガジェットは買っていくスタイルで、あんまりいじり倒してないですが、普通に時計として使ってたら半年以上立っていました。
まず悪いところですが、電池が2日持たないのはヘボいですね。僕は最近まで四分の三日ぐらいしか持たないスマホのGalaxy Nexus αⅢを使っていたのでスマホと時計は毎日充電するのが日課になっており、そこまで気にならなかった。(Nexus6に変えてからはバッテリーが持つので時計の持たなさが気になる)
UIも今現在の状態がONなのかOFFなのか、それともONにするボタンなのかOFFにするボタンなのか、わかりづらかったり、スワイプを画面を全部横断させないとダメだったりと直感的じゃないところは嫌ですね。しかしこれもアップデートされるごとにちょっとづつ改善されているのを感じてます。
良いところはウォッチフェイスを変えて読みやすいものに出来るところですね。
「バカでかくデジタルで表示されていて、日付と曜日も知りたい」
とか、
「こじゃれたアナログっぽいのがいい」
とか時々気分が変わって変えたりします。
最近お気に入りで設定してるのは、時間をコミック風にザックリ教えてくれるしてくれるRelaxing Thoughtsです。
(96っていうのはバッテリーが96%ってことです。)
「2時20分すぎ」とか「大体5時」とか時間に追われてる感を減らしてくれます。
これ面白いので怖話Watch Face作りたいなと思いました。
あとは自転車通勤時にStravaで距離などを記録してるんですが、スマホアプリは記録開始までにプルダウンメニューとか選択する必要があってタップ数が多くて若干面倒臭いのですが、
「OK Google, サイクリングを開始」
でスタートさせられるのはちょっと楽です。
これ、発売されて最初の方は認識してくれなかったんですが、いつだかのアップデートでできるようになりました。
その他は、Facebook Messengerやメールなど、連絡待ちをしてる時にすぐわかるのもちょっとだけいいですね。
アプリは他にいくつか入れてますが全然使ってないです。
結論としてはGoogle信者かガジェットオタクの我々のおもちゃとしてはそこそこ使えるけど高いかね出して買うほどじゃないかなと思います。スマホあるしね。
Apple Watchも全く新しいキラーアプリがでてこないと似たようなもんじゃないかって気がしました。
PHPでハマったことをPHPの落とし穴と題して逐次書いていきたいと思います。
ログインができない!動いている環境とPHPのバージョンも合わせたのになぜ!?
$_REQUEST
に$_COOKIE
の値が入ってないぞ。
$_REQUEST
の中身はphp.iniのrequest_order
ディレクティブの値に依存する。デフォルトではCookieのCが含まれてない。
PHP: コア php.ini ディレクティブに関する説明 - Manual
php.iniのrequest-order
ディレクティブにCを追加する?
そうではなくCookieを使いたい場合はこういった環境依存のある$_REQUEST
ではなく$_COOKIE
を使うべき。コードの意図も伝わりやすい。
しかし、一度大量に混入したcookie用途の$_REQUEST利用を全て修正するのは難しそうだ。単純にreplaceはできないので$_REQUEST
でgrepして、文脈から判断するしかなさそうだ。
明確な理由がない限り$_REQUESTはおすすめできない。
$_GET
, $_POST
, $_COOKIE
を使うべきだ。
PHPのスーパーグローバル変数($_から始まるやつ)の扱いは名前が表す通り注意が必要だと思いました。
以前書いた下記を使ってport forwardしといてhttp://foo.lvh.me:8080/
とかにアクセスする。
Macに複数サイトに対応したPHP環境を簡単に作る - komagata
virtualboxでprivate networkを使うとスマホ確認ができないし、public networkだとboxのポータビリティが下がるし、port forwardだとsslの確認ができないし(rootで起動して443で立ち上げらればいいけど非推奨だし)痛し痒しな感じ。
synced folder遅い問題も、docker使った場合も同じだけどみんなどうしてるんだろう?
週1日のペースで出社して作業してるんですが、なかなか手強いですね。
でかいレガシーシステム一個と戦うのではなく、30個ぐらいのサイトがあって、それをメンテしなきゃいけないので大変です。
システム的には殆ど同じなので、大元があってそれをコピーして使っています。コピーしたあとはそれぞれのサイトでカスタマイズが入るので分岐していきます。
これは壮大なコピペと同じことなのでメンテ対象のコード行数が増大していきます。一刻も早くこれをしないですむように設計しなおさないといけません。
社内サーバー上に共通開発環境が一つあって、そこに上記の30近くのサイトが並んでます。そこをみんなでいじって、誰かが代表としてsvnにコミットします。
共通開発環境には、誰か一人が開発環境を作ればいいという利点がありますが、二つの問題点があります。
とにかくまずはテストを書かないことには変更もできないのでテスト環境の作成を進めています。しかし、固定のパス設定などポータブルになっていないのでローカルやCircleCIで動くようにするまでが一苦労。
最近のPHPだと動かない機能を使っていたら修正。最近のMySQLだと動かない書き方を修正。結局、まずは共通開発環境と全く同じOSをVirtualBox上に用意して動作させることにしました。
これでphpunit + seleniumのテストはなんとか動きそうです。
テストが動き、コードレビューを機能させるには各自が自分の環境を持つ必要があります。Windowsでは動かない機能も使っているのでVirtualBoxに環境を作ってそこで各自が上記の30超のサイトを開発しなければなりません。
VirtualBoxのSynced Folersは遅いのでWindowsの場合はsmb、Macの場合はnfsを使って・・・など、僕は構わないですが結構敷居が高くて、
「みんなホントにこれで開発してるのかな?」
と不安になってきます。
共通開発環境問題の問題点を解決しつつ、環境構築の手間を少なくする方法は何かないもんでしょうか・・・。
みんなどうしてるのか気になって仕方ないので次回のPHP勉強会東京に参加登録しました。
下記でVirtualDocumentRootを使ってPHP環境を作りましたが、apacheの環境変数的には変わってないようで、デフォルトの値が入ってしまいます。(CentOS 6.6に入っているapache 2.2.15で確認しているので新しいのでは治ってるかも)
Macに複数サイトに対応したPHP環境を簡単に作る - komagata
すごく困るんですが、下記のようにPHPで無理やり書き換えればOK。
<virtualhost *:80>
VirtualDocumentRoot /srv/%0
# Ref: http://joshbenner.me/blog/quick-tip-get-proper-document-root-when-using-mod-vhost-alias/
php_admin_value auto_prepend_file /srv/set_docroot_hack.php
</virtualhost>
<directory /srv/*>
Order allow,deny
Allow from all
</directory>
/srv/set_docroot_hack.php:
<?php
$_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['SCRIPT_FILENAME']);
なんか危ういですね。
ApacheのVirtualDocumentRoot
とlvh.me
を使うと簡単。
Yosemiteデフォルトを想定。
$ sudo vi /etc/apache2/extra/httpd-vhosts.conf
<virtualhost *:80>
VirtualDocumentRoot /Users/komagata/Sites/%0
</virtualhost>
<directory /Users/komagata/Sites/*>
Require all granted
</directory>
上記設定で~/Sites
にドメイン名の名前のディクレクトリを作れば動くようになる。(phpとvhostを有効化する設定は各自やっておいてください。)
そのディレクトリ名ですが、foo.lvh.me
やunk.lvh.me
などlvh.meのサブドメインにすればOK。
VirtualDocumentRootだけだと/etc/hosts
にサイトを追加するごとに追記する必要があります。hostsファイル
はワイルドカードに対応してないので辛い。
# /etc/hosts
127.0.0.1 *.localhost
こんな風にかければよかったんだけどねぇ。かといってローカルにDnsmasqのようなDNSサーバーを入れるのも億劫です。
ところが127.0.0.1にlvh.meというドメインを割り当ててる傑物がいるとの情報を入手。(名前のLevi cookの略でlvhなのかな?)
% host lvh.me
lvh.me has address 127.0.0.1
% host foo.lvh.me
foo.lvh.me has address 127.0.0.1
Levi神のお陰で適当にlvh.meのサブドメインを使えばOKになりました!
~/Sites/foo.lvh.me
や~/Sites/unk.lvh.me
のようなディレクトリを作るだけで追加の設定なしにPHPアプリがどんどん作れます。
$ vi ~/Sites/foo.lvh.me/index.php
Hello, <?= $_SERVER['HTTP_HOST'] ?>
$ vi ~/Sites/unk.lvh.me/index.php
Hello, <?= $_SERVER['HTTP_HOST'] ?>
公式Wikiで懇切丁寧に書いてあります。