Midnight Express

daily life of an enthusiast about rock music, skiing, football/futsal, mac, solaris and so on...

iPhone が壊れたよ

24 日 11 時頃、仕事をしながら iPhone で音楽を聴いていたら、iPhone が突然再起動していた。りんごマークが出て普通に起動してくるだろうと思っていたのだけど、iTunes に接続せよと表示され、そのまま使用不可能な状態に。しばらく画面を見ていると、復元する必要があるとのシートが表示されてた。(今思い返せば、このときに表示されてた IMEI の番号をメモっておくべきだった。)
オフィスにいたのでどうしようもなく、とりあえず、帰宅するまで放っておいた。

帰宅して、とにかく iPhone の復元作業を開始したが、iTunes がファームウェアを復元しているという状況を表示しているところでエラーダイアログを表示する。iPhone の画面では、プログレスバーがあと少し!というところ。iTunes が表示したエラーメッセージは以下の通り。

iPhone"iPhone"を復元できませんでした。原因不明のエラーが起きました (1002)。

このエラーを表示しているダイアログには、「詳しい情報を表示」(だったかな?)というボタンがあり、それをクリックしたら、アップルのサポートドキュメントが web ブラウザに表示された。

エラー 1002 の説明はこんな感じ。

エラー 23、28、29、1002、1011、1012、1013、1014、1611:これらのエラーは、お使いのデバイスにハードウェアの問題があることを示している場合があります。問題の原因がデバイスにあることを切り分けるため、動作確認済みの 30 ピン Dock コネクタケーブル、コンピュータおよびネットワークにデバイスを接続して、この記事の手順に従い復元を試してください。MAC アドレスがない か、IMEI がデバイス値 (00 499901 064000 0) になっている場合も、ハードウェアに問題があります。

「動作確認済みの 30 ピン Dock コネクタケーブルを使え」ですか。前日にこのケーブルを使って iOS 4.2 にアップデートしてますよ。

この時点で、これ以上自分にできることはなく、ハードウェア障害なんだろうと思うことにした。念のため、同じケーブルでもう一度、さらに充電用に買ったサードパーティのケーブルでも試してみた。合計 3 回復元を試みて、全部結果は同じ。

さっさと直したいので、寝る前に 25 日 10 時過ぎからの Genius Bar を予約。

で、今朝、Genius Bar へ行って来た。以下、そのときの様子。

予約をしていたのでスムーズに担当の人が割り当てられ、再起動したときの状況、復元を試みたときの状況、メモして行ったエラー、アップルのサポートドキュメントを見たことを伝えた。

担当してくれた人は、MacBook Pro を出して、すぐに復元作業を開始。と、同時に、交換品となった iPhone と MacBook (white) を出してきて、そちらも復元作業を開始。そのまま手元の Mac で、俺が持ち込んだ iPhone のシリアル番号を確認したりしながら、カタカタと情報を入力していた。

結局、後から始めた交換品となった iPhone の復元作業が先に終わった。その時点で、俺が持ち込んだ方の iPhone の復元作業も中止し、「交換します」と告げられた。

今回は、AppleCare に入っておいて良かった。

Apple Store を出たのは 10 時半前。たぶん対応にかかった時間は 15 分程度だったと思う。さっとハードウェア障害と認めてくれて、さっと交換して終わってくれたのは、本当に満足している。ハードウェアのどこが壊れていたのかは分からないけど、Genius Bar でそこまで調査できないだろうし、それにつきあってる時間ももったいないしね。

今思い返せば、17 日深夜頃から、自動的に時刻を合わせる設定にしていると iPhone の時刻がおかしくなるという問題に見舞われていた。たぶん、このときからハードウェアに問題があったのかもしれない。

iPhone が交換になって、うれしいことがいくつかある。細かいキズがなくなってきれいになったこと。若干へたれてきた感じのあったホームボタンがいい感じになったこと。同じくへたれてきた感じのあったバッテリーの持ちが良くなるであろうこと。

あー、さくっと交換してもらえて良かった。

Base64 エンコードをするコマンドラインフィルタプログラム

ひょんなことから Base64 エンコードをするプログラムを C で書くことになった。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <strings.h>

char *command_name;
void usage(void);

int fio_b64enc(FILE *in, FILE *out, int mime);
int enc(unsigned char *ibuf, char *obuf, int);

int
main(int argc, char *argv[])
{
	FILE *in, *out;
	int iflag, oflag, mflag, errflag;
	char c;

	if ((command_name = rindex(argv[0], '/')) != 0)
		command_name++;
	else
		command_name = argv[0];

	in = stdin;
	out = stdout;
	iflag = oflag = mflag = errflag = 0;

	while ((c = getopt(argc, argv, "hmi:o:")) != -1) {
		switch (c) {
		case 'm':
			mflag++;
			break;
		case 'i':
			if ((in = fopen(optarg, "rb")) == NULL) {
				perror(optarg);
				exit(1);
			}
			iflag++;
			break;
		case 'o':
			if ((out = fopen(optarg, "w")) == NULL) {
				perror(optarg);
				exit(1);
			}
			oflag++;
			break;
		case 'h':
		case '?':
		default:
			errflag = 1;
			usage();
		}
	}

	if (errflag)
		goto quit;

	if (fio_b64enc(in, out, mflag) == -1) {
		fprintf(stderr, "error happened while encoding...\n");
		errflag = 2;
		goto quit;
	}

quit:
	if (iflag)
		fclose(in);
	if (oflag)
		fclose(out);
	exit(errflag);
}

void
usage(void)
{
	fprintf(stderr, "usage: %s [-m] [-i input_file] [-o output_file]\n", command_name);
}


#define IBUFSIZE 3
#define OBUFSIZE 5
#define MIMELINEMAXLEN 76

int
fio_b64enc(FILE *in, FILE *out, int mime)
{
	int loop_count;

	loop_count = 0;
	for (;;) {
		int count;
		int ret;
		unsigned char ibuf[IBUFSIZE];
		char obuf[OBUFSIZE];

		memset(ibuf, '\0', sizeof(ibuf));
		memset(obuf, '\0', sizeof(obuf));
		count = 0;
		while (count < IBUFSIZE) {
			int c;
			c = fgetc(in);
			if (c == EOF) {
				break;
			}
			ibuf[count] = (unsigned char) c;
			count++;
		}
		if (count == 0)
			break;
		ret = enc(ibuf, obuf, count);
		if (ret != 0)
			return ret;
		fprintf(out, "%s", obuf);

		/* MIME? */
		loop_count++;
		if (mime && !(loop_count % (MIMELINEMAXLEN / 4)))
			fprintf(out, "\n");
		if (feof(in))
			break;

	}
	fprintf(out, "\n");
	return 0;
}

const char b64enc_table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                            "abcdefghijklmnopqrstuvwxyz"
                            "0123456789+/";

int
enc(unsigned char *ibuf, char *obuf, int count)
{
	int i0, i1, i2, i3;

	if (count <= 0 || count > IBUFSIZE)
		return -1;

	i0 = ibuf[0] >> 2;
	i1 = ((0x3 & ibuf[0]) << 4) | (ibuf[1] >> 4);
	i2 = ((0xf & ibuf[1]) << 2) | (ibuf[2] >> 6);
	i3 =  0x3f & ibuf[2];

	obuf[0] = b64enc_table[i0];
	obuf[1] = b64enc_table[i1];
	obuf[2] = count >= 2 ? b64enc_table[i2] : '=';
	obuf[3] = count >= 3 ? b64enc_table[i3] : '=';

	return 0;
}

使い方はこんな感じ。

imac:b64enc yusuke$ echo -n "ABCDEFG" | ./b64enc
QUJDREVGRw==
imac:b64enc yusuke$ cat > data
ABCDEFG
^D
imac:b64enc yusuke$ ./b64enc -i data
QUJDREVGRwo=
imac:b64enc yusuke$ ./b64enc -i data -o out
imac:b64enc yusuke$ cat out
QUJDREVGRwo=
imac:b64enc yusuke$ echo -n "ABCDEFG" | ./b64enc -o out2
imac:b64enc yusuke$ cat out2
QUJDREVGRw==
imac:b64enc yusuke$ 

ホントは C++ on Windows で書くのがスジってヤツなのかも。。。

USE_NATIVE_EH has an invalid value, change it to 1

Advanced Windows Debugging 読みはじめた。

サンプルコードをビルドするところで早速つまずいたのでメモしておく。サンプルコードをダウンロードして c:awd に展開したあと、それぞれのチャプターごとのフォルダに移動し、"build /ZCc" と入力してビルドをするのだが、WDK 7.1.0 をインストールして Chapter1 のコードをビルドしようとしたら、以下のエラーが出た。

C:awdChapter1>build /ZCc
BUILD: Compile and Link for x86
BUILD: Start time: Tue Jul 06 00:10:30 2010
BUILD: Examining c:awdchapter1 directory for files to compile.
BUILD: Compiling and Linking c:awdchapter1 directory
Configuring OACR for 'root:x86chk' - <OACR on>
1>errors in directory c:awdchapter1
1>c:winddk>00.16385.1inmakefile.new(362) : error U1050: c:awdchapter1: USE_NATIVE_EH has an invalid value, change it to 1.
1>nmake.exe /nologo BUILDMSG=Stop. -i BUILD_PASS=PASS2 LINKONLY=1 NOPASS0=1 MAKEDIR_RELATIVE_TO_BASEDIR= failed - rc = 2

BUILD: Finish time: Tue Jul 06 00:10:30 2010
BUILD: Done

    0 files compiled - 2 Errors

C:awdChapter1>

makefile.new の内容を確認してみるとこんな記述になっていた。

!if defined(USE_NATIVE_EH) && "$(USE_NATIVE_EH)" != "1" && "$(USE_NATIVE_EH)" != "ASYNC" && "$(USE_NATIVE_EH)" != "CTHROW"
!error $(MAKEDIR): USE_NATIVE_EH has an invalid value, change it to 1.
!endif

ふむふむ。USE_NATIVE_EH って変数に入ってる値は、1 か ASYNC もしくは CTHROW じゃなきゃダメなのね。
ってことで、この変数に値がセットされているところを探してみると、Chapter1sources ファイルの一番下にそれがあった。

USE_NATIVE_EH=SYNC

build の出力はこれを 1 にせよというものだったので、おとなしくここを 1 にして再度ビルドをしてみたら、うまくいった。

C:awdChapter1>build /ZCc
BUILD: Compile and Link for x86
BUILD: Start time: Tue Jul 06 00:18:21 2010
BUILD: Examining c:awdchapter1 directory for files to compile.
BUILD: Compiling and Linking c:awdchapter1 directory
Configuring OACR for 'root:x86chk' - <OACR on>
_NT_TARGET_VERSION SET TO WINXP
Compiling resources - version.rc
Compiling - sample.cpp
Linking Executable - objchk_wxp_x86i386sample.exe
BUILD: Finish time: Tue Jul 06 00:18:27 2010
BUILD: Done

    4 files compiled
    1 executable built

C:awdChapter1>

USE_NATIVE_EH は C++ コンパイラに対する Exception Handling についての設定なんだそうだ。

初出社

2/14 付けで大学卒業以来勤めた会社を退職し、今日は新しい職場への初出社の日。
通勤電車は予定より遅れが発生しやすい時間帯のため、十分な余裕をもって家を出た。
9 時までに受付をして担当者を呼ぶということだったのだが、会社の最寄り駅に着いたのは 8 時半前。早すぎても仕方がないのでコーヒー休憩をしてから出社した。余裕をもてたってことで、まあ、良しとしよう。

午前中は、仕事で使うノート PC のセットアップ。席ではノート PC に、液晶ディスプレイとキーボードを接続して使う。「今日はメールを読めるようになるまでが目標だね。」と言われたのだけど、事前準備がしっかりなされていたおかげで Outlook を起動しただけですんなりとそこまでたどり着くことができた。正直 Windows の画面の魅力の無さっぷりにはがっかりするけど、これからしばらくは Windows プラットフォームで生きていくと決めた以上、慣れる他はない。

昼食は、ウェルカムランチってことで近くの中華へ。油淋鶏の定食をご馳走になった。

私のメールアドレスは少し前にはできていたようで、inbox には既に 250 通くらいのメールがたまっていた。それぞれ必要なものには目を通し、要らないものはサクサクと捨てるというのが午後の主な作業。入社日以前に届くメールなんてほとんど必要のないものばかりなハズなので、あまり時間を掛けないでさっさと片付けても良かったのだけれど、会社の雰囲気を知るためにもマメに整理していった。15 時からは部署のミーティング。製品知識がなくみんなの話題についていけず少々戸惑ったけど、まあ、これは時間が解決してくれるでしょう。

最後に、一番最初にやらなければならないハズの初期パスワードの変更作業を行って帰宅。やれやれ。

それにしても、電車通勤ってこんなに辛かったっけ?というのが今日の感想。通勤時間で人生磨り減りそうだと思った。

さて、明日も頑張りますよ。

iPhone の時刻を自動調整する

iPhone の時刻がちょっと進んでいるのに気付き、iPhone Safari のブックマークに入っている「iPhoneユーザガイド」を見ていたら「自動設定」なる言葉を見つけた。ユーザガイドによれば、「一般」>「日付と時刻」と選択して、「自動設定」をオンまたはオフにします。で、できるらしい。これに続いて、ご加入のキャリアによっては、一部の地域でネットワーク時間合わせに対応していないことがあります。と書かれているのが気になるが、とりあえず、実際に「設定」を起動して「日付と時刻」を出してみた。

やっぱり「自動設定」なんてみあたらない。ご加入のキャリアに因ってるってことか。がっかりだなぁ、ソフトバンク。。

この説明が「使いこなすためのヒント」っていうタイトルのページにあるんだから、泣けてくるね。。。

水餃子

IMG_0570横浜中華街の山東へ初めて行って来た。

注文したのは、水餃子、スブタ、そして豆もやしの炒め物。あとはウーロン茶。ビールも良かったけど、ガマンした。笑

水餃子はゴルフボールくらいの大きさで、皮が厚めで食べ応えがあった。中にはニラと豚肉などがたっぷり入っていて、それらから出るスープも、厚めの皮がきっちりと包み込んでいた。美味しかった。

店に着いたときには 10 人くらい並んでいたけれど、そんなに回転が悪くないのか、15 分くらいで中に入ることができた。次に中華街に来たときにも同じくらいの行列だったら、またここに入っちゃうかもな。

Nuno to play with Rihanna

Facebook の Nuno Bettencourt のページを見ていたら、Nuno が Rihanna が 2010 に行うワールドツアーのリードギタリストとして参加するというアップデートがあった。エクストリームのページにもこんな記事が出ている。

Nuno がいわゆるメジャーシーンで活躍するのはうれしいのだけど、Rihanna ってのが微妙。。

Rihanna って音程怪しい。いや、怪しいというか、おかしい。
ちゃんと歌える人と組んで欲しかったやっぱ、お小遣い稼ぎなんだろう。

J リーグも残り 3 節

今季の J リーグも残り 3 節ということで、上位 8 チームの対戦表をまとめてみた。

勝ち点得失点差32 節33 節最終節
1. 川崎58+23大分 (A)新潟 (H)柏 (A)
2. 鹿島57+15京都 (A)大阪 (H)浦和 (A)
3. 大阪54+18清水 (A)鹿島 (A)千葉 (H)
4. 清水50+7大阪 (H)横浜 (A)名古屋 (A)
5. 新潟49+13柏 (H)川崎 (A)東京 (H)
6. 東京49+13千葉 (A)神戸 (H)新潟 (A)
7. 広島49+13名古屋 (H)磐田 (A)京都 (H)
8. 浦和49+13磐田 (H)京都 (A)鹿島 (H)

パッと見た感じでは、川崎がとーっても優位に思える。鹿島と大阪は直接対決があり、こっちも盛り上がりそう。

我らが新潟は、川崎と、ナビスコの覇者東京との対戦が残っていて、ちょっと大変かな。でも、私が勝手に思っている今季の目標は「 6 位以内」。だから、今週末にはなんとしても柏から勝ち点 3 をもぎ取って、残り 2 試合を迎えたいところ。

ラーメンれんげ

b2b2ca01.jpg今日のランチは、立ち食いそばにしようと思って来てみたら、なんとラー メン屋に変わってた。お店の名前は「ラーメンれんげ」。

というわけで、ランチはそこで「らーめん (520 円 ) 」と あいなりました。

もうちょっとしょっぱくない方が今日の好みだったけど、さっぱり系の しょうゆらーめんでした。
安いのもうれしい。

¡Hola! いよいよ明日

63e38161.jpg明日、いよいよワールドカップに出場。
ポジションはボランチらしい。
がんばって、楽しむぞ!

http://sunworldcup2009.com
Amazon.co.jp
楽天
楽天で探す
楽天市場
Google
Google
My Twitter!
    My YouTube Channel
    Recent Comments
    Profile
    Yusuke
    Yusuke

    最近ハマっているもの:Futsal
    ハマりつつあるもの:辛い料理
    愛車:Honda CBR1000RR
    職業:精神的ガテン系
    mail:ym817 atmark hotmail.co.jp
     Use OpenOffice.org
    • ライブドアブログ