今時のpythonにはデバッガーが内蔵されているためブレークポイントを設定したりステップ動作を行いつつ変数の中身を調べるなどということを簡単に行うことが出来ます。たまにしか使わないためすぐコマンドを忘れてしまう自分のために覚書としてエントリーしておきます。
起動方法は簡単で
python -m pdb hoge.py
などとしてコマンドラインで起動します。同時にhoge.pyを行番号表示の出来るエディターで開いておくと分かりやすいです。
コマンドを自分で使う最低限のものだけ紹介します。
| ブレークポイント設定 |
b 100
|
行番号100にブレークポイントが設定される |
| ブレークポイント |
b
|
ブレークポイントが設定されていれば、その一覧が表示される |
| ブレークポイントの解除 |
cl 1
|
1番目のブレークポイントが解除される。番号を省略すると全てのブレークポイントを解除できる |
| 実行 |
c
|
ブレークポイントに遭遇するまで実行する |
| ステップ動作 |
s
|
一行だけ実行してデバッガーに戻ります>/td> |
| 変数の表示 |
p hoge
|
hoge変数の内容が表示される |
この本にはデバッガーについての解説は無いと思いますが、私がpythonを始めるにあたって購入した唯一の書籍です。
結果としては何という事も無いものでしたが、ひとつの事例として記録しておきます。
[ 現象 ]
Mac miniの電源を上げると風車が回り続けてMac OS X Lionが上がって来ません。
USBに用意したRecoveryDiskAssistantを立ちあげてリストアしようとするとデータが消せないというようなメッセージが出ます。
別HDDに入れているWindows 7からMac OS X Lionが入っているSSDは認識しているけれどもフォーマットされていないと言っています。
ということで、とりあえずWindows 7からフォーマット、テストでファイルをいくらかコピーするとうまくコピー出来ています。
再度、RecoveryDiskAssistatntのディスクユーティリティから消去、パティショニングを行うとフォーマットの途中でエラーします。どうもパティションは切れるけど、それ以上の操作が出来ないように見えます。表示されるエラーは何種類かありますが一例をあげると以下のような物でした。
Partition failed with the error:
Wiping volume data to prevent future accidental probing failed.
[ 背景 ]
このMac miniはHDDを二台搭載してRAID-0で動かしていましたが、やはりSSDの速さが魅力的なので一ヶ月ほど前にSSDに換装したばかりでした。最初はSSDの故障かとも思いましたがエラーメッセージを頼りにぐぐってみると海外の掲示板でSATAケーブルの緩みが原因であった事例が紹介されていました。私のMac miniもSSDを強く押すとケーブルが浮いてしまうことを思い出しました。
[ 修理 ]
ということで分解してみると、やはり基板上のSATAケーブルが浮いていました。SSDは正しい位置に入っているのですが、押さえるとかなり動きます。そのため簡単にSATAケーブルが基板上から浮いてしまう状態です。
SSDを外して厚みのある両面テープを裏側に貼り、SSDが簡単に動かないように組み立てました。
RecoveryDiskAssistantを起動しTimeMachineからのリストアでシステムは障害の発生する前の状態で復活しました。(TimeMachineバンザイ!)
因みに使っているのは、このSSDです。

上海の南京東路にあるNokia旗艦店にPureVIew808を見に行ったついでに、ちょっと気になっていたUSBバッテリーDC-16を購入しました。お値段は278元でした。バッテリー本体に短いUSBケーブルが付いてきます。携帯電話への給電も本体の充電も、このケーブルで行うことが出来ます。ちなみに、このケーブルは充電専用ではなくデータが通るものです。
細かな仕様などについてはデータシート(PDFへのリンク)を御覧ください。私はThinkPadを思い出させるシックな黒を選びましたが他に白、シアン、明るい赤紫色(fuchsia)があります。カラバリを揃えたいくらいです。
使い方はとても簡単。携帯電話を充電する場合もチャージャー本体を充電するにも単純にケーブルを接続するだけです。試しにGalaxy Noteを充電してみたところ50%程度は充電可能でした。DC-16の容量は2200mAhに対してGalacy Noteの電池容量は2500mAhですので、こんなものでしょう。
本体には4個のLEDが付いています。マイクロUSBコネクターの下にあるバッテリー・マークの所を押すとLEDによりバッテリー残量を確認できます。また充電中はLEDが点滅し充電の状態も確認できます。
軽いので非常用の電源としてカバンの中に常備しています。滅多には使わないのですが、備えあれば憂いなしです。
今時は中華なバッテリーも性能的には問題ないようですし値段もかなりこなれています。敢えてノキアを選んだのは、デザインが気に入ったことと、やはり「愛」(© by 山根博士)ですかね。
Galaxy Noteは大画面が特徴ですから当然動画再生にもトライして見なければなりません。
以前Androidで動画を見ようと思ったこともありますがフォーマットなどの制約からあまり使い勝手はよく有りませんでした。それであまり期待はしていなかったのですが、どうやら随分と動画再生環境が良くなっているようです。
ドコモ版Galaxy Noteの動画再生用のアプリケーションは「メディアプレイヤー」と「動画」の2つがあります。通常使用を縦画面固定にしていても横画面で動画が再生出来るので「メディアプレイヤー」を主に使用しています。
とりあえずは日本で借りた映画をAndroid用に変換したものを視聴してみます。変換にはお馴染みのHandBrakeを使用しました。
HandBrakeにあるプリセットからAndroid Highというのを選べば概ねOKです。ただし、そのままでは縦横比が正しく表示出来ませんでした。我慢出来ないほどでは無かったので最初の映画REDは、そのまま見ました。2つ目にアジャストメントを作成する際に何気なくFramerate (FPS)を”29.97 (NTSC)”から”Same as source”に変更したところ縦横比が正しくなりました。FPSと縦横比ではあまり関係がないような気もしたので別ソースで二通り作成して確認しました。
手持ちの他のファイルもいくつか試してみました。
[ iPad 用ファイル ] 拡張子がm4vだったためか最初メディアプレイヤーのリストに現れませんでしたがフォルダーからファイル名を選んで再生できました。これも縦横比が変です。元はDVDからHandbrakeでエンコードした物でおそらくコーデックはAndroid用の設定と同じでH.264だったと思います。
[ DivX ] 昔存在していたDivXがスポンサーをしていた公式サイトからダウンロードしたものも難なく再生出来ました。縦横比も問題なし。
[ 謎のAVI ] かなり昔にエンコードしたAVIファイルなので詳細不明。これも問題なしです。これも縦横比問題なしでした。
[ FLV ] 最近はあまり使っていないのですが動画共有サービスからダウンロードしたフラッシュな動画も問題なく再生出来ました。縦横比も問題なし。
ということで、手持ちの動画は何でも再生出来そうです。Androidが進化しているのかSAMSUNGが偉いのかは不明ですが、VLCプレーヤーなどを待つことなく十分に動画が楽しめる事が分かりました。
大きな画面のGalaxy Noteで小説を読んでみようと思いたちました。
手軽に名作を楽しむ事の出来る青空文庫関連のアプリを2つ試してみました。ほぼ画面の好みで選べば良い感じです。
[ 縦書きビューワ ]
アプリ内からIPA明朝フォントをダウンロード出来るのが特徴です。また背景に古い文庫本を思わせる画像を配置するととてもよい雰囲気が出ます。
本のダウンロードには「青空プロバイダ」から入手するようになっていますが、都合によりまだ試していません(中国SIMだと使わせてくれないのかな?)。青空文庫のwebページからダウンロードしたデータもzipのまま指定すれば簡単に表示できました。
最初、栞を自動で記録してくれなくて今ひとつと思いましたが以下の設定により使いやすくなりました。
設定/起動時 = 「最新のしおりを開く」
設定/終了時 = 「常にしおりをはさんで終了する」
[ 青空読手 ]
設定項目が少ないアプリです。その代わり何も考えなくても十分に使いやすくなっています。大きなゴシック体フォントでゆったりと表示されるので読みやすいです。
本のダウンロード機能も内蔵されています。ランキング500位までならば手軽にダウンロード可能です。
上海に戻り、早速Galaxy NoteをChina UnicomのSIMで使い始めました。以前の記事でも書いた通り、日本に滞在している間にドコモ・ショップにてSIMロック解除をしてもらっていましたので特別に事は一切無く普通に使えます。
手持ちのChina Unicom SIMは通常サイズの物でしたのでハサミでバリバリと切っていきます。特別、型紙なども用意せずにDocomoのマイクロSIMを見ながら目分量で切りました。
無駄にLTE電波を探すことが無いように *#2263# の手順でWCDMAだけに構成して準備万端。
APNは自動的にはセットされなかったのでAPN名3gnetを設定しました。
いやー、快適です。テザリングも出来ますし、言うことなしです。そう言えば日本でもテザリング出来ていたし(Xi SIMの性?)、MoperaはAPNに秘密は無いし、SIMロックの解除は出来るしドコモってとても自由になったのですね。
これからアプリをぼちぼちと整備していけば当面はメイン・データ端末の座は揺らぎそうにありません。
ルート化や流出ICSの誘惑もありますが、当面はこのままで問題なさそうです。SSH Tunnelのためだけにルート化する可能性はありますが、しばらくは様子を見ます。
Galaxy NoteはマイクロSIMを使用しているためSIMを使いまわすためにはアダプターが必要です。
最初、ドコモSIMをHTC Desire Zで試すために秋葉原で二種類のSIMアダプターを購入しました。どの店で売っているかTwitterで教えて下さったみなさまありがとうございました。それぞれ200円ほどで満足して購入したのでしたが、試すこと無く出張も最終日。一度はスーツケースに入れたものの空港での待ち時間に使用してみようと取り出したのが失敗で、そのままホテルに忘れて出発してしまいました。
上海に戻って改めて写真のSIMアダプターをtaobao.comで購入しました。なんと一元(13円くらい)です。5個+送料で11元でした。ひとつひとつが帯電防止みたいな袋に入っているのは過剰包装では無いかと思えます。断面はざらついていますが精度的には問題なさそうです。因みに夕方注文して翌日には到着しました。日本のアマゾン並ですね。
同様の物が無いかと日本のアマゾンを調べてみたらおそらく同じと思えるものが75円で出ていました。まずまず良心的価格と思います。
既に多くの方々が使用されているGalaxy Noteなので、私の内容の薄いインプレッション・ノートでは役には立ちませんがともかく何か書いてみます。
画面の大きさは本当に素晴らしいです。胸ポケットに難なく収まるギリギリ大画面でweb画面も動画もとても見やすいです。特に老眼気味な私の目にはとても優しいです。
LTEの凄さは良く分かりませんでした。普段はツイッターの画面しか見ていないので差が分からなかったのかも知れません。時折ベンチマークを走らせても見たのですがスゴイ数値にはお目にかかれませんでした。
LTEオフにすると電池が良く持つとのことで以下の手順で試してみましたが、使用時間が毎日まちまちなのでLTEオンの日とオフの日で差を感じる事は出来ませんでした。使い込むと半日で電池終了、そうでも無い日は寝るまでOKなので今時のデバイスとしては合格点です。
ダイヤル画面で*#2263#, [2]WCDMA Band Preference/[6]WCDMA ALLを選択
片手操作は、画面の大きさ故、ちょっと難しいです。端の方のボタンは押せないしATOKのフリックもかなりしんどい。純正の入力ソフトでは片手を考慮した出来になっていますが、何か慣れないのでやはりATOKを使用しています。
フリックのミスタッチ。これも画面の大きさ故と思いますが、フリックの必要の無い文字がフリックされてしまいます。ATOKのフリック感度を徐々に低くして、少しマシになった気もします。
液晶保護シートはちょっと高めでしたが気泡ゼロを売り文句にしているものを貼りました。見事に一発で綺麗に貼れて大満足です。
一部で絶大な人気を誇るGalaxy Note、一度は使ってみなくてはなりません。ということで、ドコモ版(SC-05D)を入手しました。まずは、必要最低限のカスタマイズで使用中です。
マイクロSDカードは2GBのものが付属しています。やはり、2GBではすこし寂しいので秋葉原でClass10 16GBの物を購入して入れました。KINGMAXというメーカーの物は初めて買いましたが、問題なしです。
[ SIM Unlock ]
何はともあれ、中国でも使用するのでSIMアンロックです。料金はかかりますがSIMロック解除を行なっているドコモさまは偉いと思います。
窓口に行くと30分もかからずにSIMロック解除が完了しました。専用のSIMカードを入れた上で端末を見ながら何やら解除コードを入力していました。詳しくは分かりませんがSIMカードを入れ替えるのは解除コード入力画面を出すためかと思います。窓口のお姉さんに尋ねたところ端末リセットでSIMロックが再びかかってしまう現象はGalaxy Noteでは確認されていないとのことでした。
SQLite3というサーバー要らずのDBエンジンはパーソナルにSQLを使用するのに手軽です。また、最近の多くのモバイル・デバイスの内部でも使用されています。
ということでMac OS X上でもiOSアプリ内(最近はCoreDataに移行中ですが)でも多用しています。単純な単語の場合は問題ありませんが特殊文字も含めてqueryする場合には文字のエスケープを行わなればなりません。iOSアプリの内部で多様な文字列のqueryを行う必要が出てきたために文字列のエスケープについてまとめてみました。
[ LIKE operatorの場合 ]
標準的なSQLで使用されるLIKEと同じです。ワイルドカードとして%(0個以上の任意の文字に一致)と_(任意の一文字に一致)が使用できます。そのため%と_自身をマッチさせるためにはエスケープ文字の指定が必要です。 エスケープ文字の指定にはESCAPE節を使用します。
SELECT * FROM hoge WHERE key LIKE '% test^_case %' ESCAPE '^';
という具合に使用します。ESCAPEで指定した文字自体もエスケープ対象になります。
引用符の扱いはperlと同様です。
– シングルクォート ‘ で囲まれた文字列の中ではダブルクォート ” は自由に使用できる。
– ダブルクォート ” で囲まれた文字列の中ではシングルクォート ‘ は自由に使用できる。
– シングルクォートとダブルクォートが混在する場合には囲み文字自体でエスケープ出来る。
SELECT * FROM hoge WHERE key LIKE 'I''m reading the "SNOW WHITE"';
[ GLOB operatorの場合 ]
GLOBはSQLiteに特有なオペレーターです。正規表現的な表現を使用しLIKEより柔軟なパターンマッチングが行えます。またLIKEは大文字小文字の区別がありませんがGLOBでは大文字小文字を区別します。
ここではエスケープについてだけ書きます。エスケープしなければならない文字は [ ] * ? です。エスケープの方法は、それぞれを[]で囲みます。
SELECT * FROM hoge WHERE key GLOB 'How are you[?] *';
といった具合になります。'[Y/n]’のように[]自体が含まれる文字列のマッチングも同様です。
SELECT * FROM hoge WHERE key GLOB '[[]Y/n[]]';
引用符の扱いはLIKEと同じです。