Digitra

LINUXサーバの設定やプログラムのことなどを中心にブログを書いています。

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とかで叩いてください。 

 

developers.google.com

 

PHP: file_get_contents - Manual

PHPでディレクトリ内のファイルをまとめて消したい

PHPでファイルを消すときにはunlink、ディレクトリを消すときにはrmdirを使いますが、ディレクトリ内のファイルをまとめて消す場合や、*でパターンで消したい場合は、

array_mapとglob関数を使って、消してあげましょう。

PHP: array_map - Manual

PHP: glob - Manual

 

例:

array_map('unlink', glob("/tmp/hoge/*.txt"));

 

とてもスマートですね。

iPhoneが突然電源が切れる問題は解決するのか

AppleがiPhone6Sが突然電源が切れる問題の交換プログラムが開始されたので、早速自分のiPhoneが対象になっているかを調べてみた。

iPhone 6s が突然シャットダウンする問題に対するプログラム - Apple サポート

 

シリアル番号は、「設定」>「一般」>「情報」を開いて、「シリアル番号」のところを長押しするとコピーできる。

 

で、入れてみたものの、おめーのは対象じゃないぜ!とのこと。マジかよ。。

 

更に来週には、iOSのソフトウェアアップデートで診断プログラムが配布されるとのことだ。

www.rbbtoday.com

 

そもそも、iPhone6Sに限定したAppleは対応をすすめているが、うちの嫁さんはiPhone5Sでも発生するし、同僚はiPhone6でも発生している。

しかも、自分含め、3人共、iOS10にアップする前には発生しなかった問題だ。

 

空気が原因だったという見解も出てきた。

japan.cnet.com

 

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/ とかのディレクトリ作ってお引越しします。

VisualStudio for Macインストールに失敗したゴミを消すよ

VisualStudio for Macのプレビュー版やて?よっしゃインストールしてやるぜ!
MacBookAir(128GBモデル)のストレージの残量18G、いけるやろ!!
と意気込んで、インストールを始めるものの、ま~サイズの大きいこと。
インストール途中でストレージが足りなくて断念したですよ。


インストーラをQuitしたものの空き容量は戻らず。
こりゃ、手動でアンインストールして上げないと駄目かな。
ということで、以下のファイルを消しまくって、なんとか元のストレージ空き容量まで戻しました。
 

~/Library/Caches/com.xamarin.universalinstaller
~/Library/Caches/XamarinInstaller
~/Library/Developer/Xamarin
~/Library/Logs/XamarinInstaller
~/Library/Preferences/Xamarin
~/Library/Xamarin
~/.local/share/MonoForAndroid
~/.local/share/Xamarin
/Developer/MonoTouch
/Developer/MonoAndroid
/Library/Frameworks/Xamarin.Android.framework
/Library/Frameworks/Mono.framework

インストールの段階にもよるかもしれないけれど、以下のディレクトリも出来ている場合があるらしいのであれば消す。

~/.local/share/XamarinInsights
~/Downloads/app-crm-master
~/Library/Preferences/XamarinStudio-5.0
~/Library/Logs/XamarinStudio-5.0
~/Library/Logs/XamarinStudio-6.0

他にもゴミがないかをfindで調べておこう

$ sudo find / -iname *xamarin*

 

新しいMacBook買おうかな。。