SIMフリー版iPhone5sのアクティベーションに、iPhone3GSのSIMカードで成功した

先日、端末を iPhone 4Sから Nexus 5 に乗り換え たのですが、Android端末のあまりの使いにくさ、手に馴染まなさに数日でめげてしまい、SIMフリー版のiPhone 5s を買ってしまいました。

日本語の入力はどっちもATOKを買って利用しているんですが、Android版の使いにくさは何なんでしょうかね。フリックの微妙な感覚をはじめとして、iPhone の方は見なくても文字を打てますが、Androidの方は注視していないと誤入力が多くて、ちょっと使い物になりませんでした。

オンラインのアップルストアで iPhoneを発注してから数日、奇しくも Nexus 5 を受け取ってからちょうど一週間後に受け取ることが出来ました。

SIMフリー版端末にも、SIMは必要なことを知った

SIMフリー版の端末は今回が初めてで、常識なのかもしれませんが、端末のアクティベーションの時にはSIMが必要になるんですね。SIMフリーというのは「どのSIMでも使える」ということであって、「SIMが必要ない」という意味ではないとは思っても見ませんでした。電源を入れてWi-Fiの設定が終わった後、「SIMが無いのでアクティベーションができない」というメッセージを見た時にはじめて、そのことが理解できました。

どうにか回避する方法がないか調べた所、(さすがにSIMフリー版だけあって)キャリアのSIMだったら何でもいいから挿せば、認識してアクティベーションを実施できるということがわかりました。

さっそく iPhone 4S の SIM を抜いてみると、、、サイズが違います。iPhone 4SのSIMはmicro simで、iPhone 5s のはnano simという最小のものでした。SIMのカットの事例もいっぱいありましたが、失敗事例も同じぐらいあります。 どうしようかしばらく悩んでいたんですが、どこかに昔使っていた iPhone 3GS があったということを思い出しました。

部屋をあさりiPhone 3GSを見つけて SIM を抜いてみると、ソフトバンクの通常サイズのSIMでした。ただ、どうせ使いものにならない iPhone と解約済の SIM です。失敗してもまったく痛くないため、はさみでのカットにチャレンジしてみました。

micro sim の写真を見ながら、見よう見まねで切りまくり。はまるサイズまで刈り込み、はセットして起動をしてみると、見事に認識。アクティベーションに成功しました。まさかSIMフリー端末でSIMが必要になるとは。いい経験になりました。

2013-1214-01

2013-1215-02


Excel VBA で foreach

もの凄く久々に(かれこれ15年ぶりぐらい?)、VBAでプログラムをする機会がありました。

配列に文字列を格納しておいてそれをforeachする、という現在一般的な言語なら絶対に持ってる構文のような書き方ができないのか探してみたところ、やっぱりありました。こんな感じで書けばいいみたいです。

久々のVBAですが、昔は結構洗練されていたように感じていましたが、いま触るとちょっと古い感じがします。配列への文字列格納のあたり、もう少し何とかならないのかと思いますが、無理みたいですね。残念です。

dim names(0 to 2) as string
dim name as variant

names(0) ="あああ"
names(1) ="いいい"
names(2) ="ううう"
  
for each name in names
  ' name で何らかの処理
next name

WLAE-AG300Nをブロードバンドルータとして使う

もう何年も、コレガの古いBBルータをずっと使ってきました。当然802.11nに対応しているわけもなく、速度は調子がいい時で8Mbpsぐらい。別に使えるんならいいやと思い、これまで気にもしていませんでした。

ただ最近は、動画などを見る時など負荷がかかると急に接続できなくなったり、また iPad Air が無線が 802.11n の場合には MIMO 対応しているという話を聞いて、そろそろいい加減どうにかしようと思い BBルータを買い換えることにしました。

とは言えしょせんはBBルータ。別にどんなものでも構わないと思って、ググって最初に出てきた BUFFALO の WLAE-AG300N をAmazonでポチッと購入しましたが、これが不幸の始まりでした。

今日届き、早速設定してみたんですが、無線自体はすぐに繋がったんですが、どうにもインターネットに出ていけません。どうやら IP アドレスを拾えていないみたいです。tcpdump してみると DHCP Discover を送っても DHCP Offer を返しません。「DHCP 機能が OFF になってるのかな?」と考え、ON にする方法をマニュアルで探してみても、「機器自体の IP アドレスを、手動設定/DHCP からもらってくる」という設定はありましたが、DHCP サーバに関する記述がまったくありません。

今どきそんな機器あるのか? そう思い仕様書などを読んでみると、どうやらこの機器はブリッジでした。つまり、古いPCやTVなどの有線LANしか無い機器を無線化するような用途を想定したものみたいです。

つまり、こういう使い方です(—:有線, ===:無線)。

PCやTVなど無線化したい機器 — [この機器] === 無線 === ブロードバンドルータとか

これがわかった瞬間、正直、失敗したなーと思いましたが、まあしょせんはブリッジなので、こんな構成でつなぐようにしました。

無線でつなぐ機器 === 無線 === [この機器] — BBルータ — VDSL

まだ負荷をかけていないのでわかりませんが、不安定なのは解決していません。ただ、MIMO の威力は凄いです。有線で接続した機器でも40Mbpsぐらいしか出ない環境ですが、iPad Air だと、ぶっちぎりの 24Mbps がコンスタントに出ます。その他の機器では依然として、8Mbps も出ればいいところです。

iPad Air のネットのアクセスが PC よりもちょっと遅いのは、Safari もしくは iPad の性能的にどうしようも無いんだと思っていました。全然違いました。MIMO 環境になると、体感でもハッキリ速度が違います。

Safari あるいはアプリ内ブラウザでサイトにアクセスした際に、特に画像は表示されるまで少し待たされる感じだったのが、まったく無くなりました。

こんなことならもっと早く 802.11n にすれば良かったです。ブロードバンドと間違えてブリッジを買っちゃったのは残念ですが、そんなことが吹っ飛ぶぐらい、感動の速度でした。もし iPad Air/iPad Mini(Retina)なのに 802.11n 環境で使ってないなんてことがあったら、即 802.11n 化することをおすすめします。絶対に感動すること間違いなしです。


Nexus5を買ったら荷物状況=調査中で止まっていた

iPhone, iPad をずっと使ってきていたので、これまで Android を触ったことも無かったんですが、いい加減まったく Android の経験がないのもヤバイだろうと思い、格安SIMとの組み合わせも魅力的だったので、ついついポチッとNexus5を買ってしまいました。

購入したのは12/4の夜中だったんですが、香港からの発送にもかかわらず早いですね。翌々日の12/6(つまり昨日)には、もう日本のクロネコヤマトに引き渡されていました。それからちょこちょこと荷物問い合わせサイトを見ていたんですが、地元の配送センターに着いた所で荷物状況が「調査中」になりました。

「海外配送の場合はステータスが取れないのかな?」と思って、あまり気にもせずに待っていたんですが、何時間か待っても動きがなく、だんだん何だか不安になってきました。調べてみると、荷物状況が調査中になるのは

  • 明らかに荷物が破損していた
  • システム障害
  • 住所不明

など、客にステータスを公開しない/したくない状況の時は、ぜんぶ「調査中」になるようでした。また、この状態になってしまうと「このまま何日も待たされてしまうからサービスセンター(0120-118-010)に電話をして原因を聞いた方がいい」というアドバイスも見つけました。

早々にセンターに電話して荷物の伝票番号を伝えた所、調べて原因がわかったらコールバックしてくれるとのこと。

それからしばらく待っていたら・・・電話してからおよそ30分後ぐらいでしょうか。荷物状況が「配達中」に変わっていました。

2013-1207

結局何が原因だったのかはわかりませんが、電話で住所、氏名、電話番号を伝えたので、宛先不明だったのかもしれません。

何はともあれ、もうあとは受け取るだけです。
楽しみです。


atコマンドの書式

久々に使おうと思って書式を調べてみたら、えらく明確な形式で日時を指定できるようになっていました。昔の at コマンドはもうちょっと非直感的だったような気がするんですが。

echo ‘ls /tmp/ > /tmp/z.txt’ | at 15:00 11/30/2013


AWS CLIでELBのCross-Zone Load Balancingを有効に設定

先日リリースされた ELB の Cross-Zone Load Balancing ですが、Enabledに設定することで確かに、配下のノード1つにアクセスが寄ってしまうことを防ぐことが出来ました。

設定方法は Enable or Disable Cross-Zone Load Balancing for Your Load Balancer にあるんですが、ここには ELB の CLI の設定しか載っていないんですね。自分の環境では AWS CLI しか使っておらず、また引数が微妙に違うので、設定方法を見つけるのにちょっと苦労してしまいました。

現在の設定の確認


aws elb describe-load-balancer-attributes --load-balancer-name ELBの名前

Enableの設定


aws elb modify-load-balancer-attributes --load-balancer-name ELBの名前 --load-balancer-attributes '{"CrossZoneLoadBalancing":{"Enabled":true}}'

AWS CLIの場合、ELBの設定は –load-balancer-attributes オプションで指定しないといけない、というのがハマリポイントでした。


zphoto を Ubuntu 10.04.4 で使う

お手軽にフォトアルバムを作る必要があったので、ものすごく久々に zphoto を Ubuntu で使ってみました。

libming-dev, libpopt-dev, libimlib2-dev をインストール後に configure, make してみると、下記のようなエラーで止まってしまいました。

make[2]: Entering directory `/home/xxx/tmp/zphoto-1.2'
g++ -DHAVE_CONFIG_H -DLOCALEDIR=\"/usr/local/share/locale\" -DZPHOTO_TEMPLATE_DIR='"/usr/local/share/zphoto/templates/default/en"' -DZPHOTO_FONT='"/usr/local/share/zphoto/fonts/EfontSerifB.fdb"' -DZPHOTO_TEMPLATE_DIR_RELATIVE='"templates/default/en"' -DZPHOTO_FONT_RELATIVE='"EfontSerifB.fdb"' -I. -I. -I. -I.        -O2 -Wall -Wunused -Wuninitialized -c -o image.o image.cpp
image.cpp: In function 'int convert_needed_p(const char*, const char*)':
image.cpp:557: error: invalid conversion from 'const char*' to 'char*'
image.cpp:558: error: invalid conversion from 'const char*' to 'char*'
make[2]: *** [image.o] Error 1
make[2]: Leaving directory `/home/xxx/tmp/zphoto-1.2'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/xxx/tmp/zphoto-1.2'
make: *** [all] Error 2

このエラーを調べてみると、Getting Invalid conversion from const char* to char* on gcc 4.4.1 にもある通り、gcc(g++)のバージョンが 4.4 なのが問題のようです。g++のバージョン4.1を下記のようにしてインストールしました。

 % sudo aptitude install g++-4.1

後はMakefileのCXXをg++-4.1に変更することで、無事にコンパイルが通るようになりました。

% diff -u Makefile.org Makefile
--- Makefile.org     2012-03-26 22:39:09.413993750 +0900
+++ Makefile     2012-03-26 22:41:33.549992947 +0900
@@ -138,7 +138,7 @@
 CFLAGS = -g -O2 -Wall -Wunused -Wuninitialized -Wmissing-prototypes -Wmissing-declarations -pedantic
 CPP = gcc -E
 CPPFLAGS =
-CXX = g++
+CXX = g++-4.1
 CXXDEPMODE = depmode=gcc3
 CXXFLAGS = -O2 -Wall -Wunused -Wuninitialized
 CYGPATH_W = echo

コンパイルが必要なアプリを入れたのは何年かぶりですが、gcc4.4で同様の問題にハマっている人は結構多いみたいです。有名な問題(?)なんですね。

 

 


PukiWiki Plus! を Ubuntu にインストール

Wikiはずっと Pukiwiki を使ってきたんですが、その後継版(?)の PukiWiki Plus! というものがあると知ったので、Ubuntu にインストールしてみました。

PHP5.3 対応やHTML5+jQueryUIポートを行なっている PukiWiki Advance というものもあるようですが、7-zip形式という良くわからない形式でアーカイブされているので試すことはできませんでした。

PukiWiki Plus! のインストール方法は普通の Pukiwiki とほぼ同じようで、多少 locale の設定で迷った位で簡単にインストールできました。

まずは /etc/locale.alias に utf-8 の設定を追加して、ロケールを作り直します。

ja_JP           ja_JP.utf8

% sudo locale-gen

その後、Apacheを再起動すれば前準備は完了です。ロケールが正しく設定されていないと、英語表示となります。詳細に関しては PukiWiki Plus! の質問問箱/247 が参考になるかと思います。

あとは PukiWiki Plus! をインストールするだけです。まずはgitからファイルを持ってきます。

% git clone https://github.com/miko2u/pukiwiki-plus-i18n

次に適当なディレクトリに移動して、Basic認証の設定とファイルのパーミッションを修正します。

% htpasswd .htpasswd xxxxuser
% sudo chown -R www-data *

あとは auth.ini.php でパスワードを設定したり、各種 ini で自分のお好みの設定をすれば完了です。

$adminpass = '{x-php-md5}' . md5('xxxpasswords');

2012/03/29追記:会社にあった Ubuntu 11.04 で試した場合、デフォルトの状態が変わったのか、日本語関係の設定がされてないだけだったのかわかりませんが、locale-gen の前に、言語パックなどのインストール・設定が必要でした。

% sudo aptitude install language-pack-ja
% sudo localedef -i ja_JP -f UTF-8 -A /etc/locale.alias ja_JP.UTF-8

 


PHPから任意のbacklog APIを呼び出す

最近、Backlog を会社で使うようになりました。まだベータ版とは言え APIがあるようなので、PHPからAPIへのアクセスを試してみました。

Backlogアプリケーション を見てみると PHP用のライブラリがありましたが、2009年から更新されておらず、また対応しているAPIの数が圧倒的に少ないようです。ただ中身を見ると単なるXML-RPCコールに過ぎないので、こんな感じの関数を追加して任意のAPIを呼び出せるように改造しました。

% diff -u org/Backlog.php Backlog.php
--- org/Backlog.php     2009-05-20 12:05:53.000000000 +0900
+++ Backlog.php     2012-04-08 11:46:09.434337869 +0900
@@ -75,6 +75,16 @@
         $this->client->setCredentials($user, $password);
     }

+
+    public function callAPI($method, $params = NULL) {
+               if ($params == NULL) {
+                    $message = new XML_RPC_Message(self::PREFIX . $method);
+               } else {
+                    $message = new XML_RPC_Message(self::PREFIX . $method, $params);
+               }
+               return $this->_send($message);
+    }
+
     /**
      * 参加プロジェクトを取得する
      *

APIの呼び出し自体は非常に簡単です。ID/Passwordを指定してライブラリのインスタンスを作成して、メソッドを呼び出すだけです。

<?php
require_once 'Services/Backlog.php';

define('FQDN', 'hogehoge.backlog.jp');
define('ID', 'apiuser');
define('PASSWORD', 'password');

$backlog = new Services_Backlog(FQDN, ID, PASSWORD);

echo '<pre>';

# getProjectsの呼び出し
$result = $backlog->callAPI('getProjects');
print_r($result);

# getProjectの呼び出し
$params = new XML_RPC_Value('TESTProjectKey', 'string');
$result = $backlog->callAPI('getProject', array($params));
print_r($result);

# countIssueの呼び出し(ProjectID=12345, 状態=未対応、担当者未設定)
$params = array();
$params['projectId'] = new XML_RPC_Value('12345', 'string');
$params['statusId'] = new XML_RPC_Value(1, 'int');
$params['assignerId'] = new XML_RPC_Value(-1, 'int');
$result = $backlog->callAPI('countIssue',
  array(new XML_RPC_Value($params, 'struct')));
print_r($result);

echo '</pre>';

当たり前ではありますが、管理者権限じゃない限り、任意のプロジェクトの情報などを取得することはできません(人間ができないことはAPIでもできない)。

いずれは自動投稿なども試しては見たいですが、最初はプロジェクトや課題の状態を表示するダッシュボードのようなものが作れれば十分なので、ビューアー権限でAPI用のユーザ(例えばapiuser)を作成して、全プロジェクトに追加するという運用にしました。


Mac版Evernoteからランダムにノートを選んで表示

今まではEvernoteのユビキタスキャプチャ用のノートブックからノートを定期的にピックアップして見返していましたが、偶然 Evernote からランダムにノートを選ぶ(AppleScript) という記事を見つけました。

これはイイですね。今までは適当にノートをピックアップしてたため、どうも偏りがちだったんですが、これならランダムにできる。

tell application "Evernote"
set query to query string of window 1
set notelist to find notes query

repeat 5 times
set rand to random number from 1 to length of notelist
open note window with item rand of notelist
end repeat

end tell

どうせならランダムで5つピックアップして欲しいんで、こんな感じにループするようにしました。いやー、便利になったな。