まもなく今のAndroidが2年に経って月額費用が大幅アップになるので、MNP前に使っていたiPhone 3GSに格安SIMを挿して使ってみようと思い、SIMロックを解除しました(途中)。

使ったツールは「redsn0w 0.9.15b」です。
手元に保存してあったSHSHは、5.0.1と6.1.3でした。

①6.1.3 => 5.0.1
Extras:Even More:Restore
新しいiPhoneとして設定
→5.0.1(9A405) BB 05.16.08
参考:http://www.iclarified.com/25226/how-to-downgrade-your-iphone-3gs-from-ios-6x-to-ios-5x-mac

②5.0.1脱獄
Jailbreak:Install Cydia & Install iPad baseband
→5.0.1(9A405) BB 06.15.00

③BB 06.15.00 => 05.13.04
Extras:Even More:Select IPSW:5.0.1
Jailbreak:Downgrade from iPad baseband
→5.0.1(9A405) BB 05.13.04
参考:http://www.iclarified.com/entry/index.php?enid=22653

C++のプログラムが次のメッセージを出して強制停止することがあります。

 pure virtual method called

原因は単純にコーディングの間違いなのですが、大きく2種類の間違い方があります。
今日はそのうちの1つで、ちょっとややこしい方を説明してみます。

といっても実は、削除したオブジェクトに対してメンバ関数を呼び出すという、よくある失敗をしているだけです。

この現象を起こす手順は、
1) 純粋仮想関数を持つクラスを
2) 最上位の基底クラスとしている派生クラスのオブジェクト(インスタンス)を
3) 削除した後に
4) そのオブジェクトに対して最上位の基底クラスの純粋仮想関数を呼出す
5) ただし、削除したオブジェクトはメモリ上に残った状態になっている
(スタックに確保したオブジェクトの場合、この状態になりやすい)


現象が発生する仕組みは次のとおりです。

オブジェクトを削除すると、そのクラスのデストラクタが実行されます。
すると、vptr(仮想関数テーブルを指すポインタ)は基底クラスのvptrへ書き換えられます。デストラクタは最上位の基底クラスに到達するまで順に実行され、最終的にvptrは最上位の基底クラスのものになります。 => 手順3)が終了した状態

ここで、確保したメモリ自体が破棄されていなければ、オブジェクト(の残りカス)にアクセスすることができます。
手順4)で最上位の基底クラスの純粋仮想関数を呼出すと、メモリに(たまたま)残っていた最上位の基底クラスのvptrを使って関数にアクセスします。すると、まさに純粋仮想関数を呼出してしまい「pure virtual method called」となります。

確保したメモリが破棄されていると、手順4)を実行したときに一般的には「Segmentation fault」が発生するのですが、同じ間違いでも「pure virtual method called」が起きるとなじみがないので、デバッグが難しくなります。


実際に現象を起こすコードのサンプルです。

 1 #include <iostream>
 2 using namespace std;
 3
 4 #define PRINT(arg) cout << arg << endl
 5 #define PRINTFUNC() cout << __PRETTY_FUNCTION__ << endl
 6
 7 class Base {
 8 public:
 9     Base() {PRINTFUNC(); /*start();*/}
10     virtual ~Base() {PRINTFUNC();}
11
12     void start() {
13         PRINT("same proc at start.");
14         doAnything();
15     }
16     virtual void doAnything() = 0;
17 };
18
19 class Proc1 : public Base {
20 public:
21     Proc1() {PRINTFUNC();}
22     virtual ~Proc1() {PRINTFUNC();}
23     void doAnything() {
24         PRINT("uniq proc by Proc1");
25     }
26     void NonVirtual() {PRINTFUNC();}
27 };
28
29 int main(int argc, char **argv)
30 {
31     Proc1 *pointer;
32     {
33         Proc1 p1;
34         p1.start();
35         pointer = &p1;
36     }
37     pointer->NonVirtual();
38     pointer->doAnything();
39     return 0;
40 }


(34423)

auへMNP

2012年2月25日 コンピュータ
iPhone3GSの更新月がやって来たのでauへMNPしました。
iPhoneは5が出るのを待つため今回はAndroidです。

auのスマホMNPはキャンペーン多数ですごいキャッシュバックでした。
平和堂枚方店での購入です。

INFOBAR A01×2台(わたしと奥さん同時MNP)
・一括で本体価格 0円、毎月割り 1750円 => 実質マイナス1750円/月
・平和堂商品券 45000円/台 => 2台でなんと9万円!、おつりも出ます

子供がauケータイを持ったので、学割とかで月々の割引もたくさん。
・学割 980円
・auスマートバリューの割引 1480円
・U25とその家族のキャンペーン割 1050円 (重畳適用は5月利用分まで)

月2500円+通話料です。

(30140)
ほぼ2ヶ月半振りの日記ですがメモ程度です。

iPhone for everybody キャンペーン最終日の1/31に
ついに iPhone を買ってしまいました。

作ったアプリを実機で動かしてみたかったので。
じつは携帯電話を持つのは初めてです。

(22604)
4年ぶりに情報処理技術者試験を受けてきました。

「情報セキュリティスペシャリスト」です。

今年の春に制度が新しくなったところだったのでその感想も含めて。

<午前試験>
午前1(高度共通)と午前2(科目ごと)の2つに分かれました。

午前1は範囲が広く知らない言葉もいくつかあって、大丈夫かな?
とちょっと不安になりました。
逆に午前2のほうは範囲が狭くなったせいなのか知ってることばっかりで
落ちる人いないのでは?と不安になりました。

<午後試験>
午後1試験が、時間90分のまま回答数が3問から2問に減ったのでかなり楽になりました。その分ミスすると大きそう...。
午後2試験はいつもどおりという感じです。

全体的に見ると、以前より楽になったという感触です。
ただし、そのぶん勘違いやケアレスミスは命取りになりそうです。

とはいえ、ほんとに1日がかりで、終わると頭痛(知恵熱?)ガンガンでぐったりとなるのはいつものことです。

夜には試験センターに午前試験の正答が載っていたので自己採点。
不安だった午前1も大丈夫のようなので、あとは12月の発表待ちです。

(20215)
NAS用に買ったばかりの外付けHDDがマウントできなくなってしまい、
なんとか復旧したので手順をメモしておきます。

構成の概略はこんな感じ。

HDD--[USB]--無線LANルータ--[Ether]--ONU--[光ファイバ]--アクセス網


実は6月に MacBook Pro を買ったのを契機に壊れていた無線環境を再構築しました。
おかげで、DS の Wifi配信もうちで受け取れるようになりました。

NASのほうはせっかくルータに機能が付いていたのでオマケ的に入れました。
使えるフォーマットがFATかXFSだったのでファイルサイズ上限からXFS選択となりました。

・無線LANルータ:バッファロー WZR-HP-G300NH 9450円
・HDD:アイオーデータ HDC-EU1.0 8170円


では本題の復旧メモです。
XFSの(軽い)復旧だったので実は簡単にできました。

1. KNOPPIX DVD を入手する(ダウンロード&DVD焼き)
 ※CD 6.0.1 には必要なコマンドが入ってませんでした。
 http://www.rcis.aist.go.jp/project/knoppix/

2. 問題のHDD を PC に繋いでから、PC を KNOPPIX DVD で起動する

3. KNOPPIX が起動したら、ターミナルを開いて次のコマンドを実行

 su
 xfs_check # 一応確認しておく。おそらくsuperblock異常
 xfs_repair

これで復旧完了です。
今回はまだ使い始めたばかりのHDDだったこともあってか
全てのファイルが復旧できたようです。

ちなみに障害自体の原因は、ルータのHDD自動電源OFF機能が
絡んでいるのではないかと睨んでます。

(17925)
買ってしまいました。

教育用レゴマインドストーム
ホーム スクーリング デスクロボ NXT-SW二足歩行セット
59,800円

以前から欲しいと思っていたのですが、

・来年のETロボコンからRCXに加えてNXTも走行体として利用される
・まもなく値上げされる →65,100円!

ということで「自分へのお年玉だ!」と云って買いました。

そういえば年末には「自分へのクリスマスプレゼントだ!」と云って
「時の果ての絆」とバトスピ第2弾「激翔」を買ってました...。


去年の夏に会社の機材を借りてETロボコンに参加したときは
結局ひとりでいじるだけでこどもはほとんど関わらなかったので、
今回はロボコンにこだわらず、こどもといっしょにいじっていきたいなぁと思っています。

さいわい届いた大箱を見て「何これ?」「ロボット!?」「作りたい!」と
こどものほうが先にいじり始めて、説明書を見ながらWALL・Eのような
ロボットを作って動かしていたので幸先のよいスタートになりました。

(7831)
LPIC(エルピック)というLinux(リナックス)の認定試験を受けてきました。

組み込みLinuxの仕事をしていたときに勉強をかねてレベル1を受けて、
ついでにそのころ最上位レベルだったレベル2まで受けたのですが、
まもなく5年間の有意性(有効期限みたいなもの)が切れてしまうため
それを避けるため現在最上位レベルのレベル3を受けることにしました。

レベル1はLinuxの基本的な使い方を覚えるのに結構役に立ちましたが、
レベル2はサーバ系の問題になったのでちょっと仕事からずれてしまいました。
今回のレベル3にいたってはOpenLDAP(オープンエルダップ)の話しオンリーで
全く役に立たない勉強です。

当時はレベル3でカーネルやデバイスドライバなどのテストも作るとアナウンスされて
いたのですが、結局完全にサーバ系のテストになってしまったので、今回は完全に
趣味の受験となりました。

実務経験ゼロで本での勉強だけで受けたのでかなり危険な状態でしたが、
合格ライン500点、得点550点というスレスレのラインで合格できました。

さて、5年後にまた受験?

(6407)
PSoC(ピーソックと読む)というプログラマブルなデバイスのワークショップに行ってきました。
会社の仕事との関連性が説明しにくいので、年休・自腹での参加です。

組込み系のソフトウェア技術者なのでもともとデバイス系にも興味はあるのですが、
3000円という破格の費用で実習用のボードが付いてくる、なんとお昼ご飯も付いてくる、
梅田なのでアクセスもよい、ということで衝動的に申し込んでしまいました。

PSoCがどんなものなのかは下のURLを参考に正しい情報を探してもらったほうが
よいと思いますが、簡単に云うと「動的に構成を変更できるアナログ周辺回路および
デジタル周辺回路を内包するワンチップマイコン」になります。

http://techon.nikkeibp.co.jp/go/bp.jsp?s=teo&n=cypress0811131

じつはこのワークショップとは別に「PSoCマイコン・トレーニング・キット」というものも
購入していて(こっちのほうが1万ちょっととぜんぜん高いです!)、
PSoCをネタにアナログ回路などの勉強をしようと思っているのですが、
果たしてどれだけ取り組めるのか...。

ちなみに近所だったので帰りにポケセンオーサカに寄ってみました。
まだゼニガメを配布していないかな?と期待していたのですが、終了とのことでした。

(4896)
私はソフト屋になって以来15年近くトラックボールを愛用していて、
特にロジクールの親指で転がすタイプのものが気に入っています。
うちではワイヤレスを、会社ではワイヤードを使ってます。

が、なんとロジクールがトラックボールから撤退とのこと。
(CT-100という高級機種だけは残すようですが)

あわててネットを探したのですが、たしかにどこも在庫なしで売っていません。
もしくはすでにプレミアが付いて高値状態に。

ということで店頭在庫を求めてあちこち巡り、なんとかワイヤードのものを
1つ入手できました。ワイヤレスのものも1つ入手しておきたいです。

(4516)
ETロボコン関西地区大会の最終成績が発表されました。

http://www.etrobo.jp/kansai/information.html#923_Total

わがチーム「ほのたかたい」は、といっても最終的にはひとり参加でしたが、
モデル40位、競技34位ということで総合では34位という結果でした。
ちなみに参加チームは48チームです。

もともと子供にプログラミングを教えてみよう&自分でやってみたい
ということで参加したので、「初級組み込みソフト開発者の育成」というETロボコンの目的には合ってないのですが、今回の参加でいろいろ改善点が見えたので、来年はチャンピオンシップ大会への出場を目標にしてまた参加しようと思います。
ETロボコン関西地区大会に出場してきました。

レゴマインドストームというレゴのロボットキットで作ったロボットの開発コンテストです。

ロボットといっても2足歩行するようなものではなく、床に書かれた黒い線をたどって走る「ライントレーサー」という車で、ロボット(ハードウェア)自体は全員同じものを作って、ソフトウェアの優劣を競うというコンテストです。

もう少し説明すると、次のように「設計内容」と「実際の性能」の2つが評価されます。

「モデル審査」
ソフトウェアの設計のよしあしを評価する。UMLなどで書いたモデル図(ふつうに言うと設計図)を事前に提出しておいて評価される。

「競技会」
実際に作ったソフトウェアでライントレーサーを走らせて、規定のコースの周回タイムを競う。コースには難所が設けられていて、そこをクリアするとボーナスタイムとしてタイムが軽減される。INコースとOUTコースがあってそれぞれを2周する。


今日は「競技会」があったのですが、私の結果は、

1走目(INコース):120秒 ※最遅タイム、失格よりはマシ
1周目途中でコースアウトしてリタイア(リタイアタイムは120秒になる)
ボーナスタイムなしだったので →120秒

2走目(OUTコース):110秒
コースアウトはしなかったものの、慎重に走りすぎて2周目途中でタイムアップ(120秒)。
ボーナスタイム(計10秒)があったので →110秒

ということで、今回は最遅でなかったということで良しです。
チャンピオンシップ大会には(もちろん)進めませんが、個人的にもう少しプログラムをいじってみます。
もともとの目的だった「こどもにプログラミングを教える」というのも少しずつやっていきたいなと。

明日は「モデル審査」のほうの説明会と成績発表があるのでまたまた京都です。
熊本玩具にも行ってみます。

お気に入り日記の更新

最新のコメント

この日記について

日記内を検索