かれ4

かれこれ4個目のブログ

やたらmds_storesがCPUを喰っている時に確認すること

f:id:tottokug:20151110103508p:plain

gitを使っている場合、大きめのcommitをしたり、大きめのリポジトリをcloneしてきたりすると.gitの中がspotlightの検索対象になってしまう。
このせいでmds_storesがCPU喰ってしまう事がある。


心当たりがあれば、以下の方法でspotlightのindexから.gitを除外すると良いと思う。

spotlightの除外の設定は

/.Spotlight-V100/VolumeConfiguration.plist

に書いてある

        <key>Exclusions</key>
        <array/>

が対象になる。

plistファイルなので、直接書き換えてもいいが、
defaults で

$ sudo defaults write /.Spotlight-V100/VolumeConfiguration.plist Exclusions -array-add 'path/to/exclude'

これで設定が可能になる

まずは今の設定の確認をすると空っぽなことも確認出来る。

$ sudo  defaults read /.Spotlight-V100/VolumeConfiguration.plist Exclusions
(
)

一個一個設定するのも大変なので、

$ sudo locate .git |grep "/.git$"  | xargs -I {} defaults write /.Spotlight-V100/VolumeConfiguration.plist Exclusions -array-add  {}
$ 
(
    "/Users/user/repos/github.com/OurCompany/tools/.git",
    "/Users/user/repos/github.com/OurCompanylab/OurCompanylab-sdk-java/.git",
    "/Users/user/repos/github.com/OurCompanylab/commons/.git",
    "/Users/user/repos/github.com/OurCompanylab/master-db/.git",
    "/Users/user/repos/github.com/OurCompanylab/matching/.git",
    "/Users/user/repos/github.com/env-OurCompany-router/.git",
    "/Users/user/repos/github.com/machine-learning/.git",
    "/Users/user/repos/github.com/OurCompany/OurService/.git",
    "/Users/user/repos/github.com/OurCompany/OurService/OurService_kaizen_batch/.git",
    "/Users/user/repos/github.com/OurCompany/OurService/OurService_learn/.git",
〜略〜

無事に.gitディレクトリがExcludeに入った。

リセットしたいときは

$ sudo defaults write /.Spotlight-V100/VolumeConfiguration.plist Exclusions -array

S3経由 codedeploy でデプロイするスクリプト

#!/bin/bash

APPLICATION_NAME= #codedeployのapplication name
DEPLOYMENT_GROUP= #codedeployのdeployment group
DEPLOYMENT_CONFIG=CodeDeployDefault.OneAtATime # codedeployのdeployment config
BUCKET= # ソースコードをおいておくS3のバケット
PROFILE=default #aws cli のprofileを指定する場合

## ===========================================
PROJECT_NAME=$(cd $(dirname $0); pwd | perl -pe "s|.*/(.*?)/?|\1|" )
VERSION=$(date '+%Y%m%d%H%M%S')
echo "Project Name = $PROJECT_NAME"
FILENAME=${PROJECT_NAME}-${VERSION}.tar.gz
KEY=${PROJECT_NAME}/$FILENAME

tar zcf  /tmp/${FILENAME} ./
aws --profile ${PROFILE} s3 cp /tmp/${FILENAME}  s3://${BUCKET}/${KEY}
ETag=$(aws --profile ${PROFILE} s3api head-object --bucket ${BUCKET} --key ${KEY} | jq -r .ETag |perl -pe "s/\"(.*?)\"/\1/g") # jq < 1.5対策
echo "uploaded ETAG = ${ETag}"

aws --profile ${PROFILE} deploy \
create-deployment \
--description "deploy with shell. --  ${VERSION}" \
--application-name ${APPLICATION_NAME} \
--deployment-group-name ${DEPLOYMENT_GROUP} \
--deployment-config-name ${DEPLOYMENT_CONFIG} \
--s3-location '{ "bundleType":"tgz", "eTag": "'${ETag}'","bucket": "'${BUCKET}'", "key": "'${KEY}'"}'

MacとiPhoneでなかなかテザリングがつながらない時の対処法

外でMaciPhoneでなかなかテザリングがつながらない。
よくあるのが、実は裏でWi2とかに接続されているのに、メニューバーではWifiに接続されていないように見えていたりする。

WifiのOff ,Onを行っても、結局裏でwi2等に繋がってしまっている為、なんかうまくいかない。

そんな時には
SystemUIServerを再起動する事で解決することがよくある。

再起動の方法は

ps -ax |grep /SystemUIServer | perl -pe "s/^\s*(\d+).*/\1/g" |head -n 1  |xargs kill

これをファイルとして保存しておいてSpotLightから呼び出すと結構楽

SORACOM Airで色々と検証してみる。

はじめに

ついに今まで謎にされてきたSORACOMのサービスが明らかになりました。

今までIoTのサービスだということだけを聞いていましたが、それ以外のことは一切謎に包まれていました。


ラッキーなことに事前に使わせて貰っていたので、公開しても良い9/29が過ぎた今日このブログを公開します。

SORACOMって?

SORACOMのサービスは簡単にいうと、IoTのための世界で一番柔軟な通信回線を提供するというサービスだと思ってます。
そんなSORACOMに対して一番興味を惹かれたのはこの一枚のスライドです。

f:id:tottokug:20150930215716j:plain
提供:SORACOM

正直AWSでIoTということで、L4以上のレイヤーを想定していたので、まさかL2で!?というのには胸が熱くなります。

柔軟な通信環境と通信料金を設定出来るようになっている事がビジネスの肝になっていそうで、これは今までの通信の世界では破壊的で、CTOの安川さんらしいなという感じがしました。

料金は?

ちなみに料金プランを見てみると
https://soracom.jp/services/air/price/soracom.jp

料金を見るとUPの方が安い事がわかります。
SIMフリースマホとかタブレットにさして使うとかも考えられますがそういった使い方であれば、正直IIJmioの方が安いと思います。

IoTのための通信回線というのがここの料金からも読み取れますね。

アップロードは安いのでセンサーなどのデータのアップロードや、カメラの映像を飛ばすとかであれば非常にありがたいことになります。

料金プランもs1.とかあるので、
たぶんそのうち、アップロードだけ早いu1.とかダウンロードだけが早いd1.とか出てくるのでしょう。

触ってみる

スピードテスト(
SORACOM Airのスピードテストをしてみた。 | DevelopersIO
)とか、使い勝手とか、APIの話とか、UIの話しは別の人が多分書いてくれるので今回はおいておいて、今回はそのネットワーク周りを探っていきたいと思います。

端末側のIPアドレスは?

まずはSIMをさして、自分のIPアドレスを確認するとどうなっているのかを確認してみます。
今回いろいろと検証に利用したのはこの端末

http://amzn.to/1M1r3Qpamzn.to

まずは単純にipconfigの値を
モバイル ブロードバンド アダプター モバイル ブロードバンド:

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::ad68:fe85:f4cc:20c3%11
   IPv4 アドレス . . . . . . . . . . . .: 10.173.101.69
   サブネット マスク . . . . . . . . . .: 255.255.255.0
   デフォルト ゲートウェイ . . . . . . .: 10.173.101.1


SIM経由でふられたIPアドレスは10.173.101.69/24というプライベートIPアドレスが振られました。
ここでふと思った事が二つ。
1つ目はプライベートIPだという事です。
もう一つは /24?ということでした。
とは言え、L2でAWSまで接続されているので、マスクは端末が適当に設定していて、正直どうでも良いことなのでしょう。
それかもしかしたら、接続するごとにネットワークアドレスが変わるんじゃないかという事で試してみました。

2回目、10.173.101.69
3回目、10.173.101.69
4回目、10.173.101.69
5回目、10.173.101.69

何回やってもアドレスが変わらないので、楽しくなってきました。

次に速度を変えてみます。
s1.standardだった所からs1.fastに変えてみます。そして切断、接続を繰り返してみます。
やはり変わりません。

次はステータスを休止にして開始にし直してみます。
ちなみに休止のステータスにした途端にネットワークは切られました。素晴らしい速さです。


休止から使用開始とまたステータスを変更しましたが、ここでもIPアドレスが変更されませんでした。
もしかしたら、MSISDN、IMSI当たりとIPアドレスを紐付けているのかもしれません。
そうなると、SORACOM AirのSIMはたった16,581,375枚しか発行出来ない事になってしまいます。
良い風に捉えると、SORACOM AirIPアドレスが固定されるという事であれば、SORACOM Air同士の通信が出来るんじゃないかなんていう夢も広がります。蟻です。蟻のネットワークが作れます。
しかし、もしIPアドレスが固定されているのであれば、consoleや、APIでそれが見れるようになっていてもおかしくないはずです。
ここはただアドレスを割り振ったキャッシュが数時間残っているというのが一番可能性として高そうです。
(きっと、APIでSIMに対してなにか送信できるサービスができてくるに1票 SORACOM controlみたいな)


参考までに:IIJmio

 接続固有の DNS サフィックス . . . . .:
 IPv6 アドレス . . . . . . . . . . . .: 2001:240:2401:9bfa:ad68:fe85:f4cc:20c3
 一時 IPv6 アドレス. . . . . . . . . .: 2001:240:2401:9bfa:1847:8bce:a8b8:2a30
 リンクローカル IPv6 アドレス. . . . .: fe80::7:3a43:1401%11
 リンクローカル IPv6 アドレス. . . . .: fe80::ad68:fe85:f4cc:20c3%11
 IPv4 アドレス . . . . . . . . . . . .: 100.92.169.196
 サブネット マスク . . . . . . . . . .: 255.255.255.0
 デフォルト ゲートウェイ . . . . . . .: fe80::7:3a43:1402%11
                                        fe80::7:3a43:1440%11
                                        100.92.169.1
外側のIPアドレス

次にこのSIMからインターネットにアクセスした時のGlobal IPをしらべてみます。
What Is My IP Address - Online Privacy and Safety Experts

141.0.9.62
でした。
このIPアドレス

$ dig -x 141.0.9.62
〜略〜
62.9.0.141.in-addr.arpa. 79173	IN	PTR	s20-16.opera-mini.net.

まさかのここでOperaTurbo

外側のIPアドレス(テイク2)

次にこのSIMからインターネットにアクセスした時のGlobal IPをしらべてみます。
What Is My IP Address - Online Privacy and Safety Experts

54.65.46.149
でした。
このIPアドレス

$ dig -x 54.65.46.149
〜略〜
149.46.65.54.in-addr.arpa. 300	IN	PTR	ec2-54-65-46-149.ap-northeast-1.compute.amazonaws.com.

EC2の東京リージョンのIPアドレスがアクセス元のGlobal IP として出てきました。
一安心です。
AWSIPアドレスからBANするのが好きなサイトとして有名なiTownpageも見てみましたが、無事に見れました。(OperaTurboもOff)


Traceroute

続いてTracerouteで、どのようなネットワーク経路を通ってインターネットに接続されていくのかを見ていきます。

 PS C:\Users\ope> tracert google.com

google.com [173.194.126.227] へのルートをトレースしています
経由するホップ数は最大 30 です:

  1   502 ms   454 ms   556 ms  ec2-175-41-192-130.ap-northeast-1.compute.amazonaws.com [175.41.192.130]
  2   308 ms   231 ms   125 ms  27.0.0.154
  3   608 ms   530 ms   623 ms  27.0.0.136
  4   241 ms   294 ms   423 ms  15169.tyo.equinix.com [203.190.230.31]
  5   582 ms     *      579 ms  72.14.236.82
  6   426 ms   570 ms   585 ms  72.14.232.109
  7   550 ms   387 ms   546 ms  nrt04s08-in-f3.1e100.net [173.194.126.227]


1hop目からいきなりEC2きました。AWSまでL2で来ている事が確認出来ました。

その次のHOPも見てみましたが、
http://www.speedguide.net/ip/27.0.0.154
http://www.speedguide.net/ip/27.0.0.136
http://www.speedguide.net/ip/203.190.230.31
http://www.speedguide.net/ip/72.14.236.82

このTracerouteを何回か取ってみることにことにしました。

$ tracert -h 1 amazon.co.jp
  1   559 ms   612 ms   697 ms  ec2-175-41-192-230.ap-northeast-1.compute.amazonaws.com [175.41.192.230]
$ tracert -h 1 hatena.ne.jp
  1   559 ms   612 ms   697 ms  ec2-175-41-192-232.ap-northeast-1.compute.amazonaws.com [175.41.192.232]
$ tracert -h 1 www.soracom.jp
  1   559 ms   612 ms   697 ms  ec2-175-41-192-234.ap-northeast-1.compute.amazonaws.com [175.41.192.234]

なんかコンプリートしたくなってきました。

$ tracert -h 1 google.com
  1   559 ms   612 ms   697 ms  ec2-175-41-192-236.ap-northeast-1.compute.amazonaws.com [175.41.192.236]

色々なドメインに対してのtracerouteを試してみましたが、今ここを書いている時点では第4オクテットが230,232,234,236が出てきました。

tracerouteの先がs3-website.****の時には少し変わって、12とか20、130が出てきました。

  1   498 ms   467 ms   629 ms  ec2-175-41-192-12.ap-northeast-1.compute.amazonaws.com [175.41.192.12]
  1    35 ms    44 ms    56 ms  ec2-175-41-192-130.ap-northeast-1.compute.amazonaws.com [175.41.192.130]
$ 
  1   559 ms   612 ms   697 ms  ec2-175-41-192-20.ap-northeast-1.compute.amazonaws.com [175.41.192.20]

とはいえ、ドメイン200個程試してみましたが、この7個しか見つける事しか出来ませんでした。

さいごに

今回はSORACOM Airについて色々といじってみましたが、私としては手元にAWSIPアドレスを引き込める事に非常に魅力を感じました。
さらにSORACOM Beamという別サービスとしてL3以上で付加価値をつけるというのも非常に興味津津です。最近はレイヤーの高い技術ばかりだったので、久しぶりのL3以下の技術にふれられて今日は興奮で寝れないかもしれません。



昨日ははてなのCTO 田中さんでした。
blog.stanaka.org


明日以降もSORACOM リリース記念リレーブログは続きます。
blog.soracom.jp

マナカナの画像からProejctOxfordとimagemagickで顔を切り出す。

前回マナカナの画像をBingAPIを使って収集しましたが、
今回はマナカナの画像から、顔だけを切り出して行きます

顔の切り出しをするには、顔の位置を特定してとか色々必要層ですが、
今回はまとめてProjectOxfordのFaceAPIを使います。

f:id:tottokug:20150731062146p:plain

Microsoft Project Oxford Face APIs

使うためにはAzureのPortalからMarketplace

f:id:tottokug:20150731063229p:plain

FaceAPI
f:id:tottokug:20150731063234p:plain

後は必要そうな情報をいれて数クリックで使えるようになりました。

Sign Upが完了したら
https://dev.projectoxford.ai/Developer
にアクセスして、Keyを取得します

f:id:tottokug:20150731063627p:plain



Keyが取得出来たら後は使うだけで、顔の切り出しが出来るようになります。

カレントディレクトリに写真があるとして、
以下のスクリプトを実行です。
(実行にはjqimagemagickが必要です)

APIKeyにはFaceAPIのKeyが入ります。PrimaryでもSecondaryでも良いと思います。

#!/bin/bash
IFS='
'
APIKey=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[ -d face ] && mkdir face
for f in $(find ./ -type f); 
do
  curl -X POST  -H "Content-Type: application/octet-stream" --data-binary @${f} \
  "https://api.projectoxford.ai/face/v0/detections?subscription-key=${APIKey}"   \
  | jq '.[].faceRectangle | "\(.width)x\(.height)+\(.left)+\(.top)"' 
  | xargs -I{}  convert -crop  {} ${f} face/$(uuidgen)-{}-${f##*/};  
done


face/というディレクトリに顔の部分だけを切り出した画像が出来上がって来ます。
f:id:tottokug:20150731064415p:plain

なんだか、明らかにマナでもカナでも無い人がいる。。。

マナカナを集める

機械学習をやっていると、どうしても、マナカナの画像を集めないといけない時があります。

マナカナの画像を効率的に集めるために、BingのSearch APIを使って画像のURLを取得し、
ダウンロードするようにします。

Bing APIAPIキーを取得する

Bing Search API | Microsoft Azure Marketplace


月間5000トランザクションであれば、無料で使えるので、これをつかいます。
f:id:tottokug:20150716083912p:plain

5000トランザクションもあれば十分だと思うので、右側にある、0円のものにサインアップします。

f:id:tottokug:20150716084053p:plain

次の画面で、「前述の公開元のオファー条件とプライバシーポリシーを読み、内容に同意しました。」
のチェックを入れて、サインアップを押せばサインアップは完了です。
(microsoftのアカウントを持っている事が前提です。)

サインアップが完了したら、

サービス エクスプローラー | Microsoft Azure Marketplaceを開きます。

f:id:tottokug:20150716084417p:plain
ここで
「プライマリ アカウント キー 表示する」の”表示する”をクリックすると、APIのキーが表示されるので、それをとっておきます。

画像を収集する。

APIキーが手に入ったら、実際に画像を収集します。
画像の収集は下のシェルスクリプトで、行います。

$ cat image_download.sh
#!/bin/bash

# 検索ワード
SEARCHWORD="マナカナ"
# Bing API のAPIKey
APIKEY="*************************************************"

#===================================
#===================================
[ -d images ] || mkdir images
QUOTEDKEY=$(echo $APIKEY | nkf -wMQ| tr = %)
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36"
QUERY=$(echo "'${SEARCHWORD}'"| nkf -wMQ | tr = %)
URL="https://${QUOTEDKEY}:${QUOTEDKEY}@api.datamarket.azure.com/Bing/Search/v1/Image?Query=$QUERY&Market=%27ja-JP%27&\$format=json"
for i in ` seq 1 15 10000 `
do
  curl --basic $URL'&$top=15&$skip='$i | jq  . | grep MediaUrl |grep -v bing |perl -pe "s/.*: \"(.*?)\".*/\1/g" |xargs -P 15 wget -T 5 -U "$UA"  -N --random-wait -P ./images
done
$ ./image_download.sh

これで、imagesというディレクトリの中にマナカナの画像が集まってきます。

f:id:tottokug:20150716090548p:plain

次は顔を切り出す
blog.tottokug.com

HosterをYosemiteで使う

Hoster (RedWinder::MacApp::Hoster) がYosemiteになってInstallできなくなった。

できなくなった原因は、
Contents/distribution.dist
に書かれているVersionチェックの問題。


10.10.x に対して >= '10.4'となっているので、10.10 は10.1扱いで、インストール出来なくなっている。

というわけで、
Contents/distribution.distの7行目のVersionチェックを正規表現でのものに書き換えてあげれば、Yosemiteでも無事にインストール出来る。

-  if(!(my.target.systemVersion.ProductVersion >= '10.4')) {
+  if((my.target.systemVersion.ProductVersion+'').match(/10.[1-3]\./)) {