aramsanのブログ

八方塞がりの年にあえて挑戦し始めるエンジニアリングブログ

週間アスキー 2013/9/10号付属のNFC ディスクを速攻で試してみた

週アスNFCタグの付録がついてくるという情報を得たので早速買ってみました。

f:id:aramsan:20130806011616p:plain

 

そして、愛用のNXPタグ読み込みソフト、NFC Taginfo by NXPで読んでみました。

NFC TagInfo by NXP - Android Apps on Google Play

 

f:id:aramsan:20130806011615p:plain

 MIFARE Ultralightとは、Type Aの一番安いタイプのNFCタグで、メーカーはNXP(フィリップスの半導体部門)のものですね。

週刊誌のおまけなので、妥当なレベルで、予想通り。

 

NDEFタグが書かれているとのことなので、みてみると以下のとおり。

 

f:id:aramsan:20130806011621p:plain

 

NDEFとは、NFCの規格標準団体であるNFC Forumで作成した国際標準規格のひとつで、いくつかあるNFC Deviceを超えて、共通にデータが触れるよう規格されているデータフォーマットです。

中身は、URIフォーマットで、週間アスキーのURLが記録されています。

 

よって、NFCの規格的には、このタグをかざすとURLが読み込まれるように、設計されています。

紙面上にはいろいろな使われ方が書かれていますが、それはこれとは違ったところを参照し、アクションと紐付けて使用しています。

 

f:id:aramsan:20130806011628p:plain

 

上記のモザイク部分に、ユニークIDが記載されています。

ここには、それなりにユニークな値で、おおよそタグごことに異なる値が記録されています。ちょっと歯切れ悪い書き方になっていますが、完全にユニークであるかどうかは、?な部分があります。

このIDとアクションを紐付ければ、かざしただけで、○○が起こるといったことが可能になります。

 

時間があったら、もうちょっといじってみたいと思います。

plenv + cpanm + cartonな環境で、crontabでハマった

plenv + cpanm + cartonな環境で、crontabでハマったので、そのときの記録を残しておきます。

 

Cent OSは、サポート期限が長く使いやすいOSなのですが、個人的には標準で組み込まれる、システムperlのバージョンが古いのがいまいちでした。

その解決方法として、plenvがあります。仮想環境上で、新しいバージョンのperlを使え、とても便利です。その使用方法はいろいろな所で紹介されています。

自分が参考にしたのはこれ

plenvを使ってみた. - Masteries

そして、次に課題になるのが、cpanモジュールの管理。

plenvを使えば、

$ plenv install-cpanm

で、簡単にcpanmをインストールできとても便利です。しかし、cpanモジュールのバージョン管理や可搬性を考えると、このままではちょっと物足りません。

そこで、登場するのが、Cartonです。

Install自体は、

$ cpanm Carton

で、簡単に行えます。

モジュールの管理については、

1.3 Cartonによるアプリケーションの実行環境の構築 : Practical Modern Perl (仮)

にわかりやすく書いてありましたので、こちらを参照にしました。

 

そして、最後に、悩んだポイント、crontabから、この環境を使用しようとした時、一筋縄では行きませんでした。

plenvは、ディレクトリごとにperlの仮想環境を構築します。

Cartonは、cpanモジュールの管理をディレクトリごとに行います。

よって、crontabから、perlのスクリプトを実行する際、意図したバージョンのperl、モジュールを実行するにはディレクトリを意識して、実行しなくてはなりません。

 

例えば、plenvというユーザーを使い/home/plenv というディレクトリに、plenv + Cartonの環境を構築して、/etc/crontabを編集し

*/1 * * * * plenv /home/plenv/carton exec -- perl test.pl 

と記載しても動く動きません。

contabから実行される環境では、ホームディレクトリが引き継がれていなかったり、パスが通っていなかったり、plenvの初期化も走らずうまく動きません。

そこで、以下の様なバッチをかませてやると、うまく動きました。

kick.sh

#!/bin/sh

export HOME=/home/plenv

export PATH="$HOME/.plenv/bin:$PATH"

eval "$(plenv init -)"

cd $HOME

 

exec carton exec -- "$1"

※2013.08.06 追記

crontabの記載

*/1 * * * * plenv /home/plenv/kick.sh "/home/plenv/test.pl"

 

同じバッチをかませてやることにより、daemontoolからの起動もスムースに出来るようになります。