読者です 読者をやめる 読者になる 読者になる

git logをltsvにする

コミットの情報をもとにファイルチェックとかしてみよう、という感じからgitだとどうしようということでログから情報を取り出す。

subversionで、svn ls -v <URL>してとれるような情報のイメージ。

ついでにプログラムから加工しやすいようにLTSVにする。

git log -n 1 --format="hash:%H%x09author_date:%at" <file>

分解して理解

git log : 省略

-n 1 : とりあえず今回は、指定したファイルに対する最新のコミットを取得できればいいので、1つだけ。

--format : ログのフォーマットを指定する。続く引数内で、%なんとかみたいにすると情報を埋め込めたりする。くわしくは、git help log内のPRETTY FORMATSを参照。

hash: : ここまでは単なる文字列。LTSVのキー。

%H : コミットハッシュ。 %hにすると省略形(7桁くらいになってるやつ)のコミットハッシュ。

%x09 : %xはあとに続く16進数のコードに対応した文字を埋め込む。09はタブ。故にLTSVの区切り文字。

author_date: : ここも単なる文字列。LTSVのキー。

%at : author dateをunix timestampで表示する。rubyからなら、Time.atを使えばTimeオブジェクトに変換できる。comitter dateを使うかどうかみたいな話はここの主題ではないので省略。

使用上の前提条件というか、現在のこの記事の状況。

  • リモートリポジトリの情報をfetchしたりするのは別途必要ということで。
  • コミットメッセージ内にタブが含まれてたらどうしようとか思って、まだLTSV化するログの中にコミットメッセージを入れることは試していない。

Dockerを使って、AWS Lambda用のPhantomJSとfontconfigをビルドする

dockerを使ってみる。 やりたいことはこれ

AWS LambdaでPhantomJSを使ってあれこれしたいけど、日本語フォントを扱えるようにしないと、キャプチャがうまくできない。 日本語フォントを扱える夜にするのはリクルートさんの記事のとおりにできるけど、じゃあそのためのfontconfigのビルドは?

さらに、npmのphantomjs(現在はphantomjs-prebuilt)macの環境でインストールしてしまうと、lambdaの環境では動かない。

ということで、Linux環境であれこれして、Lambda用のパッケージのビルドする。

そのための簡易環境としてdockerを使ってみようという魂胆。

fontconfigやらPhantomJS自体のビルドの時間はそこそこかかるけど、それを待ちさえすれば、がっつり自動化できた。

dockerの設定

Dockerfile

Linux環境にはCentosを使いたいのでDocker HubのCentosのページを参考にする。

# https://hub.docker.com/_/centos/
FROM       centos:7
MAINTAINER "YOU" <you@example>
ENV        container docker
RUN        (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \
           rm -f /lib/systemd/system/multi-user.target.wants/*;\
           rm -f /etc/systemd/system/*.wants/*;\
           rm -f /lib/systemd/system/local-fs.target.wants/*; \
           rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
           rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
           rm -f /lib/systemd/system/basic.target.wants/*; \
           rm -f /lib/systemd/system/anaconda.target.wants/*; \

           yum install -y openssh-server openssh-clients; \
           yum install -y iproute iproute-devel; \
           yum -y install epel-release; \
           yum -y install gperf freetype-devel libxml2-devel python-lxml git-all libtool; \
           yum -y install npm bzip2; \

           passwd root -d; \
           sed -i "s/^.*PermitEmptyPasswords.*$/PermitEmptyPasswords yes/g" /etc/ssh/sshd_config; \
           sed -i "s/^.*PasswordAuthentication.*$/PasswordAuthentication yes/g" /etc/ssh/sshd_config; \

           mkdir -p /src/python; mkdir -p /src/node; \

           cd /src/python; \
           curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py; \
           python get-pip.py; \
           pip install -U six; \

           cd /src/; \
           git clone http://anongit.freedesktop.org/git/fontconfig; cd /src/fontconfig; \
           ./autogen.sh --prefix=/tmp/fontconfig --sysconfdir=/tmp/fontconfig/etc --bindir=/tmp/fontconfig/usr/bin --enable-libxml2; \
           make; make install; \

           cd /src/node; \
           npm install phantomjs-prebuilt; \
           mv /src/node/node_modules/phantomjs-prebuilt /tmp/phantomjs-prebuilt;

VOLUME     [ "/run", "/tmp" ]
CMD        [ "/usr/sbin/init" ]

RUNの部分の話を自分が忘れないようにするレベルでまとめておく。

  • 前半のrmしまくってるのは、systemdまわりの対応。Docker HubのCentosのページを参照。
  • yumでインストールしているのは2種類。
    • opensshはあとでscpでファイルを取り出したいので、sshdがほしいからくらい。clientはいらないけどついで。
    • iprouteは、困ったときのipコマンドのため。デバッグ用途なので、実際には使わない。
    • 残りはfontconfigとPhantomJSをビルドするために必要なもの(いらないもの混じってるかもだけど精査してない)。
  • passwdでパスワード消したり、sshd_configでセキュリティ弱めているのは、ファイルを取り出すときにパスワードとかいろいろ聞かれたくないから。
    • 本番環境では「ダメ、絶対」な設定だけど、今回はこれで。
  • pipsixは、fontconfigのautogenのタイミングで必要なので入れておく。
  • あとは、fontconfigとPhantomJSをビルド。
  • ファイルを取り出しやすいように、それぞれtmpディレクトリに移動させてる。

デバッグ

簡易的に接続してみるなら、attachは使わずに、ssh感覚でexec+bash-it(= interactive, tty)オプションをつけて実行。 本来の用途ではないらしいので、あくまで簡易的に。

docker exec -it {container_id_or_name} /bin/bash

実行

以下の様なシェルスクリプトを作って実行してみた。

docker pull centos:7
docker build --rm -t local/centos7 .
docker create --name phantom --privileged -p 20022:22 local/centos7
docker start phantom

sleep 2

ssh-keygen -R "[localhost]:20022";
scp -o 'StrictHostKeyChecking no' -r -P 20022 root@localhost:/tmp/fontconfig fontconfig
scp -o 'StrictHostKeyChecking no' -r -P 20022 root@localhost:/tmp/phantomjs-prebuilt phantomjs-prebuilt

docker rm -f phantom
docker rmi local/centos7

ポイントといえば、、、

  • privilegedをつけてcreateしないとうまく動かない。systemdまわりの話(+SELinuxが絡んでたっけな?)
  • start後すぐにscpしてもうまく接続できない。1秒か2秒くらいあける。
  • scpで認証周りのことをきかれたくないから、ssh-keygen -Rknown-hostsをクリアして、StrictHostKeyCheckingをしないようにする。

AWS API GatewayのBody Mapping Templateで使えるテンプレート

AWSAPI Gatewayでは、リクエストをどう受けて、どう返すか、ということが設定できる。中間処理にLambdaを使う場合は、リクエストの情報をJSONオブジェクトに変換しておいて貰わないと、情報が来ない。

ということで、Body Mapping Template(後処理に渡すデータを生成するためのテンプレート)を使うわけだけど、以前には多分なかったテンプレートが追加されていたので試している。

Method Request Passthrough

2016/05/11時点では以下のような形をしている。cognitoの情報も追加できるようになっているので、おそらく今後も変化していくのだろうと想定。

##  See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
##  This template will pass through all parameters including path, querystring, header, stage variables, and context through to the integration endpoint via the body/payload
#set($allParams = $input.params())
{
"body-json" : "$input.json('$')",
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
},
"stage-variables" : {
#foreach($key in $stageVariables.keySet())
"$key" : "$util.escapeJavaScript($stageVariables.get($key))"
    #if($foreach.hasNext),#end
#end
},
"context" : {
    "account-id" : "$context.identity.accountId",
    "api-id" : "$context.apiId",
    "api-key" : "$context.identity.apiKey",
    "authorizer-principal-id" : "$context.authorizer.principalId",
    "caller" : "$context.identity.caller",
    "cognito-authentication-provider" : "$context.identity.cognitoAuthenticationProvider",
    "cognito-authentication-type" : "$context.identity.cognitoAuthenticationType",
    "cognito-identity-id" : "$context.identity.cognitoIdentityId",
    "cognito-identity-pool-id" : "$context.identity.cognitoIdentityPoolId",
    "http-method" : "$context.httpMethod",
    "stage" : "$context.stage",
    "source-ip" : "$context.identity.sourceIp",
    "user" : "$context.identity.user",
    "user-agent" : "$context.identity.userAgent",
    "user-arn" : "$context.identity.userArn",
    "request-id" : "$context.requestId",
    "resource-id" : "$context.resourceId",
    "resource-path" : "$context.resourcePath"
    }
}

ざっくりと展開すると、以下の様な感じになる。だいたい自分でわかった範囲で説明もつけておく。雰囲気なので間違ってたらごめんなさい。

{ "body-json": [object], "params": { "path": [Empty Object], "querystring": [object], "header": [object], }, "stage-variables": [object], "context": [object] }

Key Description Type
body-json BodyをJSON.parseしたもの。 object, array, ...
params リクエスト時のパラメーター情報。 object
params.path (おそらく)基本的に空のオブジェクト。 {}
params.querystring URLクエリを処理したオブジェクト。配列クエリ、ネストされたクエリには対応されてなさそう。 object
params.header ヘッダ情報。 Host, Origin, User-Agent, などなど。 object
stage-variables API Gateway で設定したstageの情報。 object
context API Gatewayでリクエストを受けた時の状態。 object
context.http-method リクエストメソッド。GET, POST, など。 string
context.stage API Gateway でデプロイしているステージのラベル。 string
context.source-ip リクエストしてきたIPアドレス string
context.user-agent ユーザーエージェント文字列。 string
context.resource-path URLパスの文字列。基本的にAPI Gatewayのリソースに一致するはず。 string

バグ?

テンプレートにはバグっぽい挙動が含まれていて、POST時のリクエストBodyのJSONで文字列を含んでいるとエラーする。ダブルクオーテーションで囲ってしまっているため。ダブルクオーテーションを外してしまったほうが多分良いと思われる(思われるけど落とし穴があるかも)。

ref: https://forums.aws.amazon.com/thread.jspa?threadID=221749

-"body-json" : "$input.json('$')",
+"body-json" : $input.json('$'),

ちなみにエラーすると、Lambdaは起動されない。Lambdaのログを監視していてもわからない問題になるので、検証は自己責任ということで。

VMware Fusion 8.1のNATポートフォワーディングまわりのエラー対応

事象

VMware Fusion 8.1にNATポートフォワーディングまわりでエラーがある。VMware BLOGSで修正が公開されているが、2016/02/01にパッケージをダウンロードした段階では、配布されているパッケージに修正は反映されていない。

ref: https://blogs.vmware.com/teamfusion/2016/01/workaround-of-nat-port-forwarding-issue-in-fusion-8-1.html

自分の手元では、VMware Fusionのネットワークを再起動すると、1度目のアクセスはできるが、そこでVMware Fusionのネットワークが落ちる、という現象。

MacをEl Capitanにアップデートして、VMware Fusionちゃんと動くか検証していて、うまくできたと思ったら落ちる、という突き落とされパターン。

事前作業

VMware Fusionのネットワーク周りの設定ファイルを再確認。変更されていたら、同じディレクトリ内に作られているバックアップファイルから必要な部分をコピーしてくるか設定し直す。

  • dhcpの設定ファイル /Library/Preferences/VMware\ Fusion/vmnet8/dhcpd.conf
  • natの設定ファイル /Library/Preferences/VMware\ Fusion/vmnet8/nat.conf

設定周りについては、過去にもエントリーを書いてるので、よろしければご参照を。

sugilog.hatenablog.com

修正ファイルの設置

  1. こちらから、vmnet-natdファイルをダウンロード
  2. ダウンロードしたvmnet-natdVMware Fusionのアプリケーションパッケージ内に移動(置き換え)。
  3. アプリケーションパッケージ内に設置したvmnet-natdの所有者とパーミッションを変更する。
# 移動
mv -i $HOME/Downloads/vmnet-natd /Applications/VMware\ Fusion.app/Contents/Library/

# 所有者情報とパーミッションを変更。(所有者情報の部分は、環境に併せてご変更を。)
sudo chown root:wheel /Applications/VMware\ Fusion.app/Contents/Library/vmnet-natd
sudo chmod 755 /Applications/VMware\ Fusion.app/Contents/Library/vmnet-natd

ネットワークの再起動

vmnet-cliで、stop&startする。

sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --stop
sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --start

状態を確認。できれば、ポートフォワーディングしているVMを立ち上げて、ネットワーク越しにアクセスして、その後に確認してみると良い。

sudo /Applications/VMware\ Fusion.app/Contents/Library/vmnet-cli --status

正常に動作していれば、以下のようなメッセージ。

DHCP service on vmnet1 is running
Hostonly virtual adapter on vmnet1 is enabled
DHCP service on vmnet8 is running
NAT service on vmnet8 is running
Hostonly virtual adapter on vmnet8 is enabled
All the services configured on all the networks are running

正常でない時:いくつかの行がエラーを表示する。

...
NAT service on vmnet8 is not running
...
Some/All of the configured services are not running

新春座談会 このコンピュータ書がすごい! 2016年版 の勝手なまとめ

個人的なメモ。去年とは書き方を変えて、時系列で徒然にしないで、勝手に括ったりしてます。

sugilog.hatenablog.com

トークイベントのハッシュタグ#compbook

高橋さん、お疲れ様でした。(『楽しいRuby』の第5版がでる?ということで、おめでとうございます。)

読みたい本

Python言語によるプログラミングイントロダクション』

Python言語によるプログラミングイントロダクション: 世界標準MIT教科書

Python言語によるプログラミングイントロダクション: 世界標準MIT教科書

MITのテキストで、プログラミングの解説をしている本。Pythonのコードが使われているということ。

『Serverspec』

Serverspec

Serverspec

Serverspecの説明はもちろん、こんなアプリケーションをつくるなら?みたいな話も書かれている。

『理論から学ぶデータベース入門』

今まで出てたリレーショナルモデルについての本はわかりづらいものが多かった。

この本は理論と実践にまたがって説明がされていてプログラマにちょうどよいっぽい。

高橋さんいわく「RDB使ってるなら誰でも読んだほうがよい。」

『JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック』

ウェブのクローリングのみでなくその後処理までいろいろ書かれてる。

Electron使って、、、みたいな話は発想がすごいなぁと。

APIデザインケーススタディ

Rubyの実際の設計指針を使ってケーススタディしてる。どう考えてAPIをバランスよく作るか?みたいな。

気になった本&メモ

機械学習プロフェッショナルシリーズ

異常検知と変化検知 (機械学習プロフェッショナルシリーズ)

異常検知と変化検知 (機械学習プロフェッショナルシリーズ)

機械学習のための確率と統計 (機械学習プロフェッショナルシリーズ)

機械学習のための確率と統計 (機械学習プロフェッショナルシリーズ)

http://www.kspub.co.jp/book/series/S043.html

2016.01時点で29巻?まで出てる気合が入ったシリーズ。

来年くらいまでの出版が計画されてる。

コンピュータ書というよりも数式が多い研究に近い人に向いてるかもしれない。

研究に近いような書籍がこれだけシリーズで出てくるのは稀ですごいらしい。

『リーダブルコード』

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

2012年出版以降、ずっと売れてきた。

ジュンク堂のランキングでは2015年は4位に落ちたけど、売上は増えてる。

驚異的!

インフラ系

『たのしいインフラの歩き方』

たのしいインフラの歩き方

たのしいインフラの歩き方

インフラエンジニアって何するんだ?みたいな話。

『ネットワークエンジニアの教科書』

ネットワークエンジニアの教科書

ネットワークエンジニアの教科書

『インフラエンジニアの教科書』の姉妹本的な。

インフラエンジニアの教科書

インフラエンジニアの教科書

『インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン

インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン

インフラ/ネットワークエンジニアのためのネットワーク・デザインパターン

いわゆるデザインパターンではなく、ネットワーク構成(〜アーキテクチャ)について27にわけて説明してる。

ハッカーの学校

ハッカーの学校』 & 『ハッカーの学校 個人情報調査の教科書』

ハッカーの学校

ハッカーの学校

ハッカーの学校 個人情報調査の教科書

ハッカーの学校 個人情報調査の教科書

悪用厳禁だけど、みたいな情報が満載らしい。

クラッキング対策なり個人情報流出対策を立てるには必要な知識かも。

関連で、

『サイバーセキュリティプログラミング』

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考

サイバーセキュリティプログラミング ―Pythonで学ぶハッカーの思考

『徳丸浩のWebセキュリティ教室』

徳丸浩のWebセキュリティ教室

徳丸浩のWebセキュリティ教室

もうちょっとライトな内容。。

コンピュータの低レイヤー系

『コンピュータシステムの理論と実装』

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

NANDみたいな低レイヤーから入って、最終的にテトリスをつくっていく、みたいな説明。

『ハロー "Hello, World"』

例えばprintfはどうやって動いてるか?みたいな話を説明してくれる。

データ分析系(機械学習含む)

『10年戦えるデータ分析入門』

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)

10年戦えるデータ分析入門 SQLを武器にデータ活用時代を生き抜く (Informatics &IDEA)

青木峰郎さんのデータ分析についてのお話。いろんなクエリで説明されてる感じだった。

『「少し先の未来」を予測する クックパッドのデータ分析力』

「少し先の未来」を予測する クックパッドのデータ分析力

「少し先の未来」を予測する クックパッドのデータ分析力

クックパッドのデータ分析サービス「たべみる」についての本。青木峰郎さんのコラムで開発の話が書かれてる。

『データ匿名化手法』

データ匿名化手法 ―ヘルスデータ事例に学ぶ個人情報保護

データ匿名化手法 ―ヘルスデータ事例に学ぶ個人情報保護

匿名化していかに活用するか?みたいな内容。

ヘルスデータ=健康や医療に関するデータは超センシティブな個人情報。

そんな個人情報の取扱は注意が必要だけど活用したらとても役立つよね、みたいなところに取り組むなら大事な感じ。

『ニッポンの個人情報』

プライバシーフリーク3人の対話。プライバシーの難しい話まで踏み込んでるけど対話形式なので、読み込むにはパワーが必要っぽい。

『データ解析の実務プロセス入門』

データ解析の実務プロセス入門

データ解析の実務プロセス入門

データ分析業務をすすめていく時の一連のプロセス、という内容。手法についても触れられてる?

『ITエンジニアのための機械学習理論入門』

ITエンジニアのための機械学習理論入門

ITエンジニアのための機械学習理論入門

Pythonをつかって機械学習、データ分析やってみよう的な。

『レイティング・ランキングの数理』

レイティング・ランキングの数理 ―No.1は誰か?―

レイティング・ランキングの数理 ―No.1は誰か?―

データ分析系の本としてくくってしまうと雑な扱いかもしれないけど、データ分析後の活用には必要そうな話。

レイティングについての本は珍しいっぽいけど、ただ、数理系の本らしい。

アプリ関連

Unreal Engine 4 ゲーム制作超入門』

Unreal Engine 4 で極めるゲーム開発』

Unreal Engine 4で極めるゲーム開発:サンプルデータと動画で学ぶUE4ゲーム制作プロジェクト

Unreal Engine 4で極めるゲーム開発:サンプルデータと動画で学ぶUE4ゲーム制作プロジェクト

https://www.unrealengine.com/what-is-unreal-engine-4

2014年まではUnityが多かったけど、Unreal Engineも増えてきた。

『アプリビジネス成功への法務戦略』

アプリビジネス成功への法務戦略 -開発・リリース・運用に必要な法律知識-

アプリビジネス成功への法務戦略 -開発・リリース・運用に必要な法律知識-

Excel関連

2015年は『たった1日で即戦力になるExcelの教科書』が売れてたり『エクセル関数 北斗百列拳』がでてたりと、Excelの本が多く出版されてる/売れてる。

『迷惑をかけないExcel』という本はよさそう。入力と計算と出力をわける、みたいなところなんかはよい指針。ワークシートの内容が多いっぽい。

会社の非プログラマメンバーに共有しておく。

たった1日で即戦力になるExcelの教科書

たった1日で即戦力になるExcelの教科書

世紀末救世主伝説 エクセル関数北斗百列拳 (Gakken Computer Mook)

世紀末救世主伝説 エクセル関数北斗百列拳 (Gakken Computer Mook)

迷惑をかけないExcel

迷惑をかけないExcel

関数型プログラミングに目覚めた!!IQ145の女子高校生の先輩から受けた特訓5日間』

ネットで話題になったし、内容について合ってる間違ってる、みたいな話があるけど、読み進めたくなる文章。

著者さんの関数型プログラミングへの想い、文章力、が強い本。

クラウドを支える暗号技術』

クラウドを支えるこれからの暗号技術

クラウドを支えるこれからの暗号技術

PDFでダウンロードできるけど、本も出てる、みたいなのらしい。目次を見る限りもりもり。

http://blog.cybozu.io/entry/8567

たまにはプログラミングではなく、ロードバイクの話。

といってもライドではなく通販について。

ざっくり言うと、Wiggleで注文しても全然荷物が来ない場合の対処方法。ただしお問い合わせ番号(追跡番号、Tracking Code)がある場合に限る。

Sugilogのケース

  • Wiggleでの購入実績:ある。
  • 送り先の住所:前回購入時から変更なし。
  • 購入したもの:冬用ジャージ上下。2万円くらい。
  • 配送オプション:日本まで追跡番号付き配送

配達状況

  • 2015/12/13 : 注文、同日中に配送処理完了。
  • 2015/12/14 : 配達業者(Parcel Force)で受付完了、発送。
  • 2015/12/18 : 中国に到着。
  • ... その後消息を断つ。

問い合わせ状況

  • 2015/12/21 : Wiggleに荷物が来ないことを問い合わせ。確認する旨連絡がきて、その後連絡なし。
  • 2015/12/22 : Wiggleに問い合わせの返信を催促。配達業者(Parcel Force)に催促したとの連絡。
  • 2015/12/24 : 郵便局の国際郵便窓口に問い合わせ。郵便局ではわからないから税関に問い合わせして欲しいと言われる。
  • 2015/12/25 : 東京税関の国際郵便の窓口に問い合わせる。税関ではわからないから国際郵便局に問い合わせして欲しいと言われる。
  • 2015/12/25 : 東京国際郵便局に問い合わせる。確認の結果、中国に配達されて住所不明で返送処理がされていることがわかる。
  • 2015/12/25 - ... : Wiggle.co.ukに問い合わせ中。

どうして配達がされないか?

  • はっきりとした原因は不明。
  • 東京国際郵便局の人の仮説は2つ。
    1. 荷物のラベルに書かれた住所が間違っているケース。
    2. イギリスの配達業者が漢字の住所を中国宛だと思って送ってしまったケース。

問い合わせ先別でわかること

Wiggle.jp

日本語の窓口担当者が、イギリスと連絡をとってくれる感じ。

今回は、結果論ではあるが、十分な確認をしてもらえなかった。

Wiggle.co.uk

現在問い合わせ中。12/25はクリスマス休暇でガッツリ休みに入ってるらしい。

英語での問い合わせになるけど、たしかな情報が得られるはず(期待も込めて)

郵便局の国際郵便窓口

https://www.post.japanpost.jp/int/question/tel.html

お問い合わせ番号からなんとなくな情報を教えてもらえる程度。案内は丁寧。

イレギュラーなケースだと範疇を超えるっぽい。

東京税関の郵便窓口

http://www.customs.go.jp/tokyo/yuubin/yubinmadoguchi.htm

税関での状況を教えてもらえる。

東京税関でめちゃくちゃに荷物が届いて、仕事が滞っているのか、とか。

税関に入ってきたものはだいたいすぐにチェックはされるみたいなので、追跡していて東京税関が書かれていなければ、東京税関までそもそも届いてない可能性が高いらしい。

案内は丁寧にしてもらえる。

東京国際郵便局

https://www.post.japanpost.jp/cgi-shiten_search/shiten.php?id=5559

お問い合わせ番号を伝えれば、荷物の状況を確認してもらえる。

Sugilogのケースで言えば中国で返送処理がされてる、みたいなことを教えてもらえる。

1時間かけてやっと電話が繋がるレベル。根気が必要。電話がかかってしまえば、最も正しい情報にありつける可能性が高い。

なぜかホームページにはフリーダイヤルしか書かれていない。携帯電話からだとつながらない。

勝手に電話番号書くのもまずいのでここでは書かないけど、税関の窓口の人は教えてくれた。

荷物の実際の宛先がどこであったか、みたいな情報は確認できない。あくまで配達状況のみ。

今回からの学び

Wiggleは荷物の配送には責任をもっていない(と思われる)。

  • 6日で付くはずの荷物が全然届いていなくても気に留めていない。
  • 問い合わせをうけても、荷物の状況がどうなっているのかを確認していない。配達業者に催促するレベルまで。

イギリスから中国を経由して日本に配達されることはまずないらしい。

  • 中国でトランジットしてるの?変だな?と思った時点で問い合わせないといけなかった。
  • 配達は6日前後くらいかかるからまぁいいよね、みたいに思っていたことも購入者としての責任感もなかったのかもしれない。

クリスマスとか外国の人ががっつり休みそうなころの通販は危うい。

  • 問い合わせに対するレスポンスが、やばいくらい遅くなる。
  • はやめはやめのコンタクトを。

AWSのLambdaでyield(だめでした)

AWSのlambdaでnodejsを使って、並列処理&直列処理をうまく扱えないかと思ってテスト。

Promisecoを使いたい。

...

失敗。。。

正確に言うと、Promiseとcoというか、直列処理のyieldを書くときのfunction *()な構文がエラーしてる。

ということで確認。

var exec = require("child_process").exec;

exports.handler = function(event, context) {
  exec("node --version", function( _1, stdout, _2 ) {
      console.log( stdout );
      context.succeeded( stdout );
  });
};

答え:v0.10.36

だめでした。(2015.08.24の僕のアカウント)

きっとどこかにnodeのバージョンもかいてあるんでしょうね。僕は見落としが多い男です。