MacのPHPがぶっ壊れたときの対処
Macで、homebrewで色々とインストールをしていたら、AtomでPHPがおかしくなっているよとの警告が出てきたので、phpを叩いてみると、以下のようなエラーが出る。
$ php -v dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.7.dylib Referenced from: /usr/local/bin/php Reason: image not found Abort trap: 6
$ brew update && brew upgrade
をすると治るよという記述も見られたが、どうも治らない。
エラーが出ている、readlineも
$ brew reinstall readline
するも駄目だったが、そもそも、エラーには、libreadline.7.dylibが無いと出ている。
/usr/local/opt/readline/lib/を見てみると、確かに8はあるけど、7は無い。
brewコマンドでreadlineも確認。
$ brew info readline readline: stable 8.0.0 (bottled) [keg-only]
ということで、強引だけど、8で7の代用をして試してみる。
リンク張ってみる
$ cd /usr/local/opt/readline/lib/ $ ln libreadline.8.dylib libreadline.7.dylib
あっさり動いた
$ php -v PHP 7.0.15 (cli) (built: Jan 22 2017 08:51:45) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
以上
tailコマンドで16進数エスケープされた日本語をターミナルで表示する
Apacheにデバッグログを出すときに日本語が、16進数エスケープされた状態になるので、どうにか日本語が読める状態にならないかなと思っていましたが、perlをパイプで使うことでtailしながら日本語がしっかり表示できました。
tail -f [logファイル] | perl -nle 's/\?\\([a-f\d]{3})/chr($1)/ieg;s/\\x([a-f\d]{2})/pack("C", hex($1))/ieg;print $_;'
おそらく、nkf -wを咬ませても、うまくいくとは思いますが、それだけのために、調査したいサーバにnkfインストールするのは面倒なので、これがいいかなと。
cronで1分以下の実行をさせる方法
sleepさせてから実行するプロセスを一気に作ってしまうことで実現します。
* * * * * for i in `seq 0 15 59`;do (sleep ${i} ; /path/to/script &> /tmp/script.log ) & done;
上の例だと、15秒おきに実行となる。
sleep 0 ; /path/to/script &> /tmp/script.log sleep 15 ; /path/to/script &> /tmp/script.log sleep 30 ; /path/to/script &> /tmp/script.log sleep 45 ; /path/to/script &> /tmp/script.log
のプロセスが出来て、15秒おきの実行が実現できる。
GoogleMapApiで地名と緯度経度を相互変換する
GoogleMapのAPIで地名と緯度経度を変換するAPIがあります。
今のところこのAPIはデベロッパーキーなどの指定がなくても利用できるようなので、以下のようなPHPのコードで簡単に変換することが出来ます。
地名から緯度経度を得る
第一引数:地名
第二引数:検索結果の地名を何語で得るか(デフォルト日本語にしています)
返り値:GoogleMapGeocodeのAPIのレスポンスを連想配列にしたもの
function getGoogleGeoCode($location, $lang="ja") { $url = "http://maps.google.com/maps/api/geocode/json?sensor=false"; $url.= "&language=".$lang; $url.= "&address=".urlencode($location); $rawdata = file_get_contents($url); return json_decode($rawdata,TRUE); }
緯度経度から地名を得る
第一引数:緯度
第二引数:経度
返り値:GoogleMapGeocodeのAPIのレスポンスを連想配列にしたもの
function getGoogleGeoAddress($lat, $lng) { $url = "http://maps.google.com/maps/api/geocode/json?sensor=false"; $url.= "&latlng=".$lat.",".$lng; $rawdata = file_get_contents($url); return json_decode($rawdata,TRUE); }
file_get_contentsの関数でURLをOpen出来ないようなサーバの場合は、 cURLとかで叩いてください。
PHPでディレクトリ内のファイルをまとめて消したい
iPhoneが突然電源が切れる問題は解決するのか
AppleがiPhone6Sが突然電源が切れる問題の交換プログラムが開始されたので、早速自分のiPhoneが対象になっているかを調べてみた。
iPhone 6s が突然シャットダウンする問題に対するプログラム - Apple サポート
シリアル番号は、「設定」>「一般」>「情報」を開いて、「シリアル番号」のところを長押しするとコピーできる。
で、入れてみたものの、おめーのは対象じゃないぜ!とのこと。マジかよ。。
更に来週には、iOSのソフトウェアアップデートで診断プログラムが配布されるとのことだ。
そもそも、iPhone6Sに限定したAppleは対応をすすめているが、うちの嫁さんはiPhone5Sでも発生するし、同僚はiPhone6でも発生している。
しかも、自分含め、3人共、iOS10にアップする前には発生しなかった問題だ。
空気が原因だったという見解も出てきた。
iPhone6Sの一部の機種はもしかするとそうなのかもしれないが、他のiPhone機種でも発生しているのだから、やはりOSの問題なのではないだろうか。
もし、バッテリーがヘタっているのだとしたら、残容量が十分にあるにも関わらず、突然電源が切れるのは、どうにも納得がいかない。
あるとしたら、実はバッテリーの残容量は殆どないにも関わらず、バッテリー残容量がまだ20%や30%あるように見えているバグだろう。
iOSのアップデートで直る問題なら良いのだが、今のiOSがバッテリー周辺のモジュールをぶっ壊してしまうようなもので、世界中の新旧iPhoneをぶっ壊しているのだとしたら累計出荷台数10億台超えているから大変なことだ。
MacでEclipseが起動しなくなったと思ったらiCloudのせいやった
MacBookAirでEclipseを使っているのですが、突然Eclipseを起動ができなくなりました。
ログを見ろとことなので、見てみると
java.lang.NoClassDefFoundError: Could not initialize class jp.sourceforge.mergedoc.pleiades.aspect.resource.Translations
と出力されている。
んなとこ、触ってないがな!!
と原因を調べてみると、必要なファイルが見つからないようだ。
MacOS Sierraになってからか、利用頻度の少ないファイルをiCloudに勝手にどんどんアップして、ローカルストレージを節約していくような機能がついたようで、ローカルの実体ファイルがなくなっていたりします。
普通のファイルとかだったらアクセスしたときにiCloudからダウンロードしてくるので問題ないですが、アプリケーションでファイルチェックしているような場合は困るわけです。
私の場合は、Eclipseをダウンロードして ~/Documents/以下に展開していたので、iCloudが親切にもアップしてくださっていたようです。
EclipseのアプリディレクトリにiCloudの雲のマークがついていたので、これをクリックするとそのディレクトリ以下のiCloudにアップロードしていたファイルをダウンロードしてきてくれます。
ダウンロードが終わったら、再度Eclipseを起動してみると、何事もなかったように動く。
あーよかった。っと数日経つとまたiCloudさんが勝手にアップしてEclipseが起動できなくなっていた。
~/Documents/ 以下にアプリ置いてんじゃないよってことだろうから、Eclipseの置き場所を ~/MyApp/ とかのディレクトリ作ってお引越しします。