InnoDB Deep Talk #1 をやります

久しぶりですが MySQL 系のイベントやります。軽いトークが流行っていたようなので、深いトークもやりたいなと思い開催することにしました。

豪華講師陣は以下の皆様です:

んで、あともうちょい時間ありそうなんで、LT とかがっつり喋りたい人募集中です!

mysqlbinlog なんてやめて show binlog events を使おう

夜中に眠いのに master のディスク容量がいっぱいで、でも binlog 用のスペースがない slave たちはまだ明日起きてから対応するんでも間に合うとき。よくありますよね。

  • ほっといてエラーになるよりかはその場しのげる方がマシ
  • 多少サービス止めるなり i/o 負荷が高くてもいいから何とかしたい
  • 根本的には master 切り替えるしかない
  • だが、そこまで元気がない

そんなとき、いままで mysqlbinlog と格闘しながら pos のコピペに注意しつつやってたんですが、 show binlog events という便利コマンドがあることを今更知ったメモです。

基本的な方針

master から絶対に読み込みがないデータを消して、延命することにします。しかし innodb だったりするので単に delete しても容量は減りません。

そこで、えいやとアプリを止めて (or table lock して) 以下のようにすることにします。

CREATE TABLE hoge_history_new LIKE hoge_history;
INSERT INTO hoge_history_new SELECT * FROM hoge_history WHERE date >= '2012-01-01';
RENAME TABLE hoge_history TO hoge_history_bak, hoge_history_new TO hoge_history;
DROP TABLE hoge_histroy_bak;

ほんとに無停止でやりたいなら trigger で hoge_history_new に double write するとか。しかし trigger 仕込むのでミスするくらいなら、停止した上で停止時間短い方針考えるほうがいい時もあるかかも。

slave は drop してほしくない

これでなんとか master は 10 分停止くらいで drop したぶんの容量が稼げた。しかし slave はまだ容量に多少余裕あるので、できたらこんな drop して欲しくない。と言うよりデータ消しちゃだめじゃん!!

なので、データ消さない slave を 1 つ狙いを定め、上の sql を流す直前に master で show master status を実行し確認した pos まで replication を進めて止めておきます。

slave> STOP SLAVE;
slave> START SLAVE UNTIL master_log_file='hoge-bin.000123', master_log_pos=456789;

drop table だけ skip しよう

さて、次は drop table の直前まで replication を進めた上で stop slave し、 sql_slave_skip_counter=1 して drop だけ飛ばしてやりたい。

こんなとき、 pos をどこまで進めればいいかを今までは mysqlbinlog コマンドで調べていました。しかし以下の理由で、絶対もっといい方法あんだろ、と思っていた。

  • pos が境界の意味でどっちに含まれているのかよくわからん
  • skip_counter は event 単位で、 pos との対応が明確でない
  • だいたい出力多すぎで夜中にやると絶対ミスる

なんでドキュメントぷらぷら眺めてたら show binlog events という最強に見やすいコマンドがあったんですね!

つかいかた

まずは slave が何処まで replication しているか調べます。この例では pos=456789 の位置まで実行済み、ということになります。

slave> SHOW SLAVE STATUS\G
...
              Master_Log_File: hoge-bin.000123
...
          Exec_Master_Log_Pos: 456789

次に pos=456789 からのイベント内容を master で調べます。

master> SHOW BINLOG EVENTS IN 'hoge-bin.000123' FROM 456789 LIMIT 2; 
+-----------------+--------+------------+-----------+-------------+----------------------------------------+
| Log_name        | Pos    | Event_type | Server_id | End_log_pos | Info                                   |
+-----------------+--------+------------+-----------+-------------+----------------------------------------+
| hoge-bin.000123 | 456789 | Query      |       100 |      456901 | use `aho`; drop table hoge_history_bak | 
| hoge-bin.000123 | 456901 | Intvar     |       100 |      457005 | INSERT_ID=91187051                     | 
+-----------------+--------+------------+-----------+-------------+----------------------------------------+
2 rows in set (0.00 sec)

お、なんとも運がいいことにちょうど次のイベントが drop になってるじゃないですか! ということで slave で 1 イベントをスキップすれば ok。

slave> SET GLOBAL sql_slave_skip_counter=1
slave> START SLAVE;

これで、めでたく master だけデータが欠損した状態に出来ました。後はちゃんと寝てからこの slave に孫を作ってそのまま master に昇格させればよい。

pos と event

改めて考えてみれば、 pos は境界の場所であって、そこに対応する event があるわけじゃないんだよね。

1234567890123456789012345678901234567890
| event1 | event2       | event3       |
^pos=1   ^pos=10        ^pos=25        ^pos=40

たとえば pos=10 のときに 10 に対応する event はなく、前に event1 があって後ろに event2 がある、と。

おや?

https://twitter.com/#!/nslope/status/164802160524136448

なんかひっそりと Solaris11 のソースが公開されてるのかな?? あんまり「キタ━(゚∀゚)━!」と盛り上がってないけど...。

とりあえず du.c 探したけど見つかんない。 2 つめの zip に coreutils や ./osnet/usr/src/lib/libcmd/common/find.c とかは見つかったが。

[追記] まあ

https://twitter.com/#!/syoyo/status/165142247371845632

前からあったらしいですorz

[solaris][zfs][memo] compression と recordsize

Solaris 11 11/11 (5.11 11.0) での話。

中身は MySQL の MYD と MYI と frm です。やっぱ InnoDB とか忘れて、基本は bs=128k で生きてたほうが良いような気がする。

send/receive と rsync を状況に合わせて使い分ける場合、 recordsize を設定してたのを忘れてメンテナンス後に変わっちゃう危険があるので、ちまちま分けたくはない。なので公約数的な値を取りたいわけですが、 16k にするかどうかくらいは意識して分けておいたほうがいいかな。

% for i in 2 3 4; do time rsync -av --progress test1/* test$i >/dev/null; done
rsync -av --progress test1/* test$i  83.51s user 57.11s system 103% cpu 2:16.36 total
rsync -av --progress test1/* test$i  87.93s user 58.11s system 100% cpu 2:25.67 total
rsync -av --progress test1/* test$i  79.15s user 49.77s system 99% cpu 2:09.13 total
% zfs list -o space,recordsize,compression,compressratio -r tank
NAME        AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD  RECSIZE  COMPRESS  RATIO
tank        20.8T  26.5G         0    123K              0      26.5G     128K       off  1.28x
tank/test1  20.8T  8.09G         0   8.09G              0          0     128K       off  1.00x
tank/test2  20.8T  4.45G         0   4.45G              0          0     128K        on  1.82x
tank/test3  20.8T  8.77G         0   8.77G              0          0      16K       off  1.00x
tank/test4  20.8T  5.15G         0   5.15G              0          0      16K        on  1.76x
tank/test5  20.8T  8.05G         0   8.05G              0          0       1M       off  1.00x [追記]
tank/test6  20.8T  4.37G         0   4.37G              0          0       1M        on  1.84x [追記]

cf. http://www.c0t0d0s0.org/archives/5865-SSD,-ZFS,-L2ARC-and-mysql.html

du

余談ですが、 /usr/bin/du のオプション無しって何を表示してるんだろ?

それ以外については、ファイルサイズの合計ではなく、そのディレクトリ以下に含まれるファイルたちの disk usage を出してくれてるみたい。

% /usr/bin/du test*   
16957022        test1
9331071         test2
18395314        test3
10803173        test4
% /usr/bin/du -h test*
 8.1G   test1
 4.4G   test2
 8.8G   test3
 5.2G   test4
% /usr/gnu/bin/du test*
8478511 test1
4665536 test2
9197657 test3
5401587 test4
% /usr/gnu/bin/du -h test*
8.1G    test1
4.5G    test2
8.8G    test3
5.2G    test4

Solaris11 リリースおめでとう!!

だいぶ間があいちゃいましたが、とうとう Solaris11 がリリースされました。

私が Solaris の世界に足を踏み入れたきっかけは、ふだん扱うデータが多くて困ってたときに「いいファイルシステムないかなー」と 2ch を漁っていたところ、http://logsoku.com/thread/pc8.2ch.net/unix/1146631270/ というスレに出会ったことでした。

しかし ZFS はじめすごい便利な機能が盛りだくさんな OS なのに、 ksh とかキモくていやでたまりませんでした。しばらくして OpenSolaris に /usr/gnu/bin なディレクトリができたあたりから「やべえこれしかなくね」なんて思ってましたけど、業務で使うにはサポート契約などの関係でなかなか難しかった。

そんなガマン大会ももう終わりです。存分に新しい ZFS と暮らしやすいユーザランドで暮らすことができるようになりました。が、残念なこともあります。タダで業務に使える便利な OS ではなくなってしまったかもしれません。

さまざまな改善・変更点とか

Debian も Sarge が出るときに大変だったような気がしますが、次期バージョンのリリースまで時間がかかると、改善と共に変更も多く、移行も大変です。 ``the First Cloud OS'' なんて言ってるくらいで、ほんとに変わりました。

営業的な目玉や細かいところは Oracle の方がちゃんと営業活動をしてくださるので、 Transitioning From Oracle Solaris 10 to Oracle Solaris 11 から気になるところをピックアップしつつ、とりあえず触ってみたいけど live CD だと裏でいろいろやってくれすぎてよくわからん、という人向けに「私はこうやってインストールした」のメモを書いておきます。

とりあえずつかってみようの例

DebianSolaris10 ならなんとなくインストールできる人が、デスクトップなどではなくサーバ向けのセットアップをしたいときの例です。

インストール

まずは http://oracle.com/solaris11 からインストーラをダウンロードします。いくつか種類がありますが text install のイメージを使います。

インストーラで設定することはそんなに多くないですが、ポイントとしては以下。

  • 起動ディスク(?)は UFS ではなく ZFS になる
    • ミラー設定はあとでやります
  • ネットワークは ``Automatic'' ではなく ``None'' を選び、あとで手動で設定
  • タイムゾーンをちゃんと選びつつ、そのタイムゾーンでの時刻を設定
    • RTC は UTC になるようです。
  • インストール終了後 reboot すると一瞬インストーラがまた起動したように見えますが、おとなしく待ちます。
最初のログイン

インストール時に作ったアカウントでログインし、 su または sudo で作業をします。

  • root は role です
    • ubuntu と同じく、インストール時に作ったアカウントで sudo できます
    • pfexec のことはいったん忘れましょう
    • su - すると bash が起動します (!)
ネットワークまわりの設定

/etc にあるたくさんのファイルは、かなりのものが自動生成で SMF 管理に移行しました。

  • ホスト名
    • /etc/nodename は消えました
    • これはすでにインストーラが設定してくれます
root@oscar:~# svccfg -s svc:/system/identity:node describe config
config           application        
    Properties that control the configuration of the node
config/nodename astring     oscar
    Network name of the computer
config/loopback astring     oscar
    Hostname mapped to loopback
root@oscar:~# svccfg -s svc:/system/identity:node listcust
config/loopback                                 astring     admin                 oscar
general/enabled                                 boolean     admin                 true
  • ホスト名を変える場合
    • 以下で "# setprop config/nodename = astring: oscar" の # (コメント) を外し、astring: 以降を編集します
root@oscar:~# svccfg -s svc:/system/identity:node editprop
  • 編集を反映するには、以下のようなかんじで試せばどれか当たるはず
root@oscar:~# svccfg -s svc:/system/identity:node validate
root@oscar:~# svccfg -s svc:/system/identity:node refresh
root@oscar:~# svcadm refresh svc:/system/identity:node
root@oscar:~# svcadm restart svc:/system/identity:node
  • NIC の設定
    • /etc/hostname.* も消えました
    • ifconfig は存在しますが使いません (linux なら ip addr show だよね的な)
    • dladm (datalink adm) と ipadm (IP adm) を使います
    • e1000g0 ではなく net0 みたいな名前をふだん使うようになりました
  • NIC 一覧
    • e1000g ドライバで認識された device e1000g0 が link net0 と認識されている
    • vlan, link aggregation, vnic なども dladm の範疇です
root@oscar:~# dladm show-phys
LINK              MEDIA                STATE      SPEED  DUPLEX    DEVICE
net0              Ethernet             up         1000   full      e1000g0
root@oscar:~# dladm show-ether
LINK              PTYPE    STATE    AUTO  SPEED-DUPLEX                    PAUSE
net0              current  up       yes   1G-f                            bi
root@oscar:~# dladm show-link 
LINK                CLASS     MTU    STATE    OVER
net0                phys      1500   up       --
  • IP 設定
    • create-ip が ifconfig plumb 相当
    • -ip なんだか -if なんだかは紛らわしい
root@oscar:~# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
root@oscar:~# ipadm create-ip net0
root@oscar:~# ipadm show-if
IFNAME     CLASS    STATE    ACTIVE OVER
lo0        loopback ok       yes    --
net0       ip       down     yes    --
  • IP address 設定
    • net0 という link に IPv4 のアドレス 192.168.1.10/255.255.255.0 を設定します
root@oscar:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
lo0/v6            static   ok           ::1/128
root@oscar:~# ipadm create-addr -T static -a 192.168.1.100/24 net0/v4
root@oscar:~# ipadm show-addr
ADDROBJ           TYPE     STATE        ADDR
lo0/v4            static   ok           127.0.0.1/8
net0/v4           static   ok           192.168.1.100/24
lo0/v6            static   ok           ::1/128
  • default route 設定
    • ここは今まで通りのようです
root@oscar:~# route -p add default 192.168.1.1
  • NSS 設定
    • /etc/inet/hosts は存在しますが /etc/hostname.* がないので、あまり書くことはないかも。
    • /etc/resolv.conf, /etc/nsswitch.conf も存在しますが自動生成されるので手で編集してはいけません
  • resolv.conf に server 192.168.1.1 を設定する相当
    • ほぼドキュメント通りに丁寧に書くと以下のようなかんじ。
    • 最初は config/nameserver というエントリが無いので、ホスト名みたく editprop とはちょっと変わります
root@oscar:~# svccfg -s svc:/network/dns/client
svc:/network/dns/client> setprop config/nameserver = net_address: 127.0.0.1
svc:/network/dns/client> select dns/client:default
svc:/network/dns/client:default> refresh
svc:/network/dns/client:default> validate
svc:/network/dns/client:default> quit
  • nsswitch.conf に dns を設定する相当
root@oscar:~# svccfg -s svc:/system/name-service/switch
svc:/system/name-service/switch> setprop config/host = astring: "files dns mdns"
svc:/system/name-service/switch> select system/name-service/switch:default
svc:/system/name-service/switch:default> refresh
svc:/system/name-service/switch:default> validate
svc:/system/name-service/switch:default> quit
  • ついでに mdns も有効にしちゃう
    • ちなみに "svc:/network/" は部分一致で省略できます
root@oscar:~# svcadm enable svc:/network/dns/multicast
  • なお nwam という言葉をご存じの方は、もうこの名前は使わなくなったと考えて下さい
    • svcs -a | grep nwam で出てくるやつはダミーです
ブートディスクをミラー設定
  • ブートディスクは EFI ラベルじゃなくて SMI ラベルが必要です
    • 簡単にいえば同じフォーマットされてないとダメってこと
  • ミラー追加
    • うまくいったかは zpool status -lv とかで見てみてください
root@oscar:~# format -L vtoc c4t1d0
Searching for disks...done
selecting c4t1d0
[disk formatted]
c4t1d0 is labeled with VTOC successfully.
root@oscar:~# prtvtoc /dev/rdsk/c4t0d0s2 | fmthard -s - /dev/rdsk/c4t1d0s2
fmthard: Partition 2 specifies the full disk and is not equal
full size of disk.  The full disk capacity is 33511590 sectors.
fmthard: Partition 2 specified as 33511590 sectors starting at 0
        does not fit. The full disk contains 33511590 sectors.
fmthard:  New volume table of contents now in place.
root@oscar:~# zpool attach -f rpool c4t0d0s0 c4t1d0s0
Make sure to wait until resilver is done before rebooting.


再起動あたり
  • x86 なら grub で起動します
    • menu.lst は /rpool/boot/grub/menu.lst にあります
kernel$ /platform/i86pc/kernel/amd64/unix -B $ZFS-BOOTFS,console=force-text
  • デフォルトで fast reboot というのが有効になっています
    • たんに sudo reboot すると BIOS 画面を飛ばしてすぐに reboot になります
    • 変えるときは svccfg -s boot-config:default editprop で config/fastreboot_default を編集
    • refresh 忘れずに

で、 shutdown なのか init なのか halt なのか。みたかんじ poweroff と reboot でよさそうですね。

エラー検知

Solaris10 時代からそうですが FMA (Fault Manager?) という仕組みがあって、たいていの OS 的エラーはこれで検知できます。

  • つかうコマンド
    • fmadm faulty, fmdump, fmdump -e
    • とりあえず打ってみてなんか出たら残念でした
  • 検知したエラーを通知
    • 以下コマンドで何か見つかったときに root 宛てにメールが来ます
    • problem-diagnosed 以外にも updated, repaired, resolved とかがあります
root@oscar:~# svccfg setnotify problem-diagnosed mailto:active
  • メールの例
    • kernel panic で自動的に reboot してた場合に来たメールです
Date: Sat, 10 Dec 2011 18:47:50 +0900 (JST)
From: No Access User <noaccess@localhost.localdomain>
X-FMEV-HOSTNAME: oscar
X-FMEV-CLASS: list.suspect
X-FMEV-UUID: a7085088-582a-4aef-bf74-9d0d5cf3818d
X-FMEV-CODE: SUNOS-8000-KL
X-FMEV-SEVERITY: Major
Subject: Fault Management Event: oscar:SUNOS-8000-KL
To: root@localhost.localdomain

SUNW-MSG-ID: SUNOS-8000-KL, TYPE: Defect, VER: 1, SEVERITY: Major
EVENT-TIME: Sat Dec 10 18:47:50 JST 2011
PLATFORM: i86pc, CSN: -, HOSTNAME: oscar
SOURCE: software-diagnosis, REV: 0.1
EVENT-ID: a7085088-582a-4aef-bf74-9d0d5cf3818d
DESC: The system has rebooted after a kernel panic.
AUTO-RESPONSE: The failed system image was dumped to the dump device.  If savecore is enabled (see dumpadm(1M)) a copy of the dump will be written to the savecore directory /var/crash.
IMPACT: There may be some performance impact while the panic is copied to the savecore directory.  Disk space usage by panics can be substantial.
REC-ACTION: Use 'fmadm faulty' to provide a more detailed view of this event. If savecore is not enabled then please take steps to preserve the crash image. Use 'fmdump -Vp -u a7085088-582a-4aef-bf74-9d0d5cf3818d' to view more panic detail. Please refer to the associated reference document at http://sun.com/msg/SUNOS-8000-KL for the latest service procedures and policies regarding this diagnosis.
ichii386@oscar% fmdump -Vp -u a7085088-582a-4aef-bf74-9d0d5cf3818d
TIME                           UUID                                 SUNW-MSG-ID
Dec 10 2011 18:47:50.083117000 a7085088-582a-4aef-bf74-9d0d5cf3818d SUNOS-8000-KL

  TIME                 CLASS                                 ENA
  Dec 10 18:47:46.4495 ireport.os.sunos.panic.dump_available 0x0000000000000000
  Dec 10 18:47:37.7837 ireport.os.sunos.panic.dump_pending_on_device 0x0000000000000000

nvlist version: 0
        version = 0x0
        class = list.suspect
        uuid = a7085088-582a-4aef-bf74-9d0d5cf3818d
        code = SUNOS-8000-KL
        ...
        panicstr = BAD TRAP: type=e (#pf Page fault) rp=ffffff001ef229c0 addr=5a occurred in module "si3124" due to a NULL pointer dereference
        ...
パッケージ
  • たとえば mysql 入れたかったら以下のようにします。
    • 175 は Solaris11 11/11 の snv 番号
root@oscar:~# pkg search 'pkg.fmri:*/mysql*' | grep 175
pkg.fmri   set    solaris/database/mysql-51                pkg:/database/mysql-51@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/library        pkg:/database/mysql-51/library@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/tests          pkg:/database/mysql-51/tests@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-common            pkg:/database/mysql-common@0.5.11-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51                pkg:/database/mysql-51@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/library        pkg:/database/mysql-51/library@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-51/tests          pkg:/database/mysql-51/tests@5.1.37-0.175.0.0.0.2.537
pkg.fmri   set    solaris/database/mysql-common            pkg:/database/mysql-common@0.5.11-0.175.0.0.0.2.537
root@oscar:~# pkg install mysql-51
...

まとめ

前提知識の置き方が、Solaris 知らない人、10 なら知ってる人、OpenSolarisSolaris 11 Express 知ってる人とかなりバリエーションあるので、公式の移行ガイドにしてもキレイにまとめるのはかなり大変そうです。

最初の設定でよくつかうのは dladm, ipadm, svcadm, svccfg, svcs, pkg ってとこでしょうか。どれも Linux にはないコマンドですが、 MacOS の launchctl 同様に慣れてくればきっと便利に感じると思います。これを機に Solaris 派になってみてはいかが??

『Git によるバージョン管理』

献本で頂いたわけでもないんですが、かなりヒットな本。

Gitによるバージョン管理

Gitによるバージョン管理

仕事でしかたなく git をちょいちょい使い出したんですけど、 id:sotarokgit-daily 使えば全く理解しなくてもうまくいくように整備してくれてて、なかなか理解が進まなくいくつか本を眺めたりしてました。

この本は最初の例が dotfiles の git 管理とか、もうど真ん中じゃないですか。ちゃんと「こういうときに失敗して、なぜ失敗して、どう頭を切り替えなきゃいけないのか」が説明されているのもありがたいです。思えば git の由来からして、 Debian の人たちが書く本がわかりやすいのは必然なのかもしれません。

ということで、よく使う数パターンが問題なく回るぶんには使えるけど、細かいとこはよくわかってないんだよな、というひとにオススメです。

わかったこと

でね、たとえば svn に比べ git って何がいいのか。

ネットに繋がらなくてもコミットできるとかほかにいくらでも代替案があるし、マージが賢いとかは言い尽くされているので、私はこの本から知ったものとして

  • hunk 単位の管理ができる

があるかな、と思ってます。副作用として空ディレクトリが作れないことはあるものの、ああ、たしかにこういうスタイルって大事だな、と思った。

ケータイの話

10月に Percona Live 2011 でロンドンに行ったときに、運良く現地のアップルストアで SIM unlocked な iPhone 4S を買うことが出来ました。もともと SoftBankiPhone 3GS を持っていて 4S は買う気でいたので、まだ日本では予約しても手に入らなかった当時、「いいオモチャ」が手に入ったわけです。

正直なところ、 SIM フリーなんて一部の携帯マニアのもので、壊れても無保証な Jail Break とかして遊んでるんでしょ、くらいなイメージを持っていましたが、これがまた超絶便利すぎる。当初ドコモショップに行って mini UIM (MicroSIM) だけを追加で買い飽きたら解約する気でいましたが、たんにオモチャからメインの携帯に昇格することになりました。

いろいろ整理した結果、

と、手数料もりだくさんだけどすっきりさせました。

unlocked iPhone with DoCoMo

without contract もしくは unlocked, いわゆる SIM フリーな iPhone をわざわざ日本で使うメリットは何か。私には以下がありました。

ドコモ回線が選べる

国内旅行が好きな人にはとても大事です。以前種子島に遊びに行ったとき、現地レンタカーには当然カーナビなんぞ付いていないので、 iPhonegoogle map がすべての情報源でした。しかし SoftBank はほんと繋がらない。というより一部に入る集落がある、くらいでした。

なお、回線速度については、 ssh で軽く作業するぶんには全然問題ない速度が出ています。しかし EMOBILE の 42Mbps がちゃんと繋がる時と比べれば、やっぱり遅いです。

Tethering (Personal HotSpot) が使える

これにより iPad2 3G の回線契約を解約できました。もともと USB タイプの e-mobile も持っていて PocketWiFi にする案もあったんですけれど、すくなくとも WiFi が必要ならば Tethering で十分。ガッツリ作業するなら電源の意味で USB タイプは外せないので、 e-mobile が圏外のときの救済用と考えています。

ちなみに iPhone 4S での Tethering は以下の 3 通りがあります。

  • WiFi AP
    • iPhone の消費電力は多めだけど MacBook 側の電池は食わない。複数接続可能。
  • USB 直結
    • 速度はきっと一番ロスが少ない。しかし常に充電中になっちゃうので MacBook の電池が不安。
    • セットアップ等は一切不要で、挿すだけでネットに繋がりました。
  • Bluetoosh
    • 他の 2 と比べてあまりメリットが感じられない
FaceTime が使える?

このへんは使わないのでよくわかんない。ほかにもそういうのありそうです (Skype とか?)。あとマナーモードでシャッター音が消えるとか、どうでもいい系。

海外ローミング

まだ試してないのでウソかもしれませんけど、ドコモショップの方によると「ここで保証はできないが、海外パケホーダイも含めたぶん使えるはず」だそうです。 b-mobile だと海外ローミングできないそうだし、 KDDI の回線もよくわからんので、これはかなりのポイント。

もっとも、せっかくの SIM unlocked なので、ある程度の期間滞在するならちゃんと現地でプリペイド SIM 買ったほうがいいですね :p

MMS (@docomo.ne.jp のメールアドレス) は使えない

これはデメリットです。 SMS が他キャリアに送れるようになったので、プライベートのレベルではそんなに困らなそうな予感。しかしアラート受信先でもあったので、ちょっと困っています。

そもそもドコモの MMS は転送設定ができず、また @ezweb.ne.jp のように IMAP を開放しているわけでもありません。まして @i.softbank.jp のように push 手段があるアドレスを用意してくれるわけでもない。 (まあ当然ですけどね...)

DoCoMoAndroid 端末では i-mode に変わって sp-mode というのができ、APN spmode.net だか IMEI だかによるチェックが通れば、専用アプリで i-mode のメールが見れるようになっているようです。インターネットからは月々 210 円の imode.net を契約すると、 IE じゃないとうまく動かない web アプリから見えるようになります。

imode.net は、クライアント側はかなりクソですがサーバ側の CGI は比較的素直な作りのようで、 imoten のように頑張って必要な FORM を POST するプログラムなり iOS/Android アプリの実装がありました。詳しくは 仙石さんの記事 が参考になると思います。

アラートは別のところに送って見ることにして、いったんは遅延ありで imoten で吸出し、どっかに転送しようと思っています。

DisneyMobile DM011SH

ディズニーモバイルのスマートフォン 2 世代目です。ソフトバンクで言うところの 101SH になります。

DoCoMo iPhone をメインにすることを決心し、もう1回線どうしようかなと悩み、

  • やっぱりお財布ケータイは欲しい
  • ドコモが圏外のときの救済がしたい
  • できたら Android (これを機に feature phone は卒業)
  • でも横幅でかいのはイヤ
  • というかディズニーがいいんだけど

という理由により、これを買うことにしました。

ふつうのスマフォではあるんですが、一見するとガラケーで、スライドするとハードウェアキーが付いています。正直あまり使いやすくなくて微妙ですが...。

おしらせ

ということで、私の連絡先は以下になりました。

  • メイン: docomo iphone
    • +81-90-1432-7637 (SMS/FaceTime/iMessage ready)
  • サブ: disneymobile
    • 090-3081-7637, ichii386sx@disney.ne.jp

ちなみに、たまに ichii386sx@docomo.ne.jp に英文スパムが来くる以外に、知ってる人がこれを見て電話してくるような場面すら、ほとんどないんですよね。まあそういう実験です。

むかしばなし

むかし東京デジタルホンj-phone になってインターネットからメール送れるようになり、大学のメールを perl スクリプトで分割送信していた時代が懐かしい。電話番号も 010 から始まる 10 ケタだったなぁ。そこからドッチーモとかよくわかんない端末たくさん買ってました。