2014年9月30日火曜日

iPhone 6を3日間使ってみた感想

SIMフリーiPhone 6を入手して3日経ったところで、使ってみた感想。

まずは最も変化したポイントであるサイズについて。Plusでない6でも画面が大型化したインパクトは大きい。頭では分かり切っていたはずのことなのだけれど、表示可能な情報量が増えたのは嬉しい。特にSafari。6の画面に未対応のアプリだと拡大表示されるだけだけど、かなり綺麗にスケーリングしている。ただ、片手持ちして親指1本で操作するのは難しくなった。割と手が大きい自分でも、親指で自然にホームボタンを押せる持ち方をすると、ホーム画面最上段のアイコンには親指が届かない。Touch IDに親指以外も登録しようかな。

画面に合わせて大きくなった本体だけど、まだ胸ポケットには入れられる。これ以上大きくなったら厳しいだろうけど。薄さに関しては、もっと薄いiPod touchを使っていたので、正直感慨も薄い。

電池の持ちはいいね。でかい電池を持ち歩いている人をよく見かけるので、スマートフォンと言うモノはさぞ電池が持たないものなのだろうと思っていたら、丸1日使っても60%残っていた。それも昨日は、久々に電車に乗る機会があったのにも関わらず。普段は徒歩通勤で電車の中の暇つぶしが不要なので、自分の使い方なら2日は持ちそう。iPod touchと比べると電池容量が2倍あるとは言え、LTE/3G通信機モジュールを載せてSoCをパワーアップさせているのに、大したもんだ。

あと、iPhone 6に限った話ではないのだけれど、LTEって普通に使えるようになってたのね。LTE対応端末を持ってなかったから知らなかったけど、IIJmio(docomo)なら生活圏内は余裕でカバーされているようだ。

高い買い物だったけど、総じて満足。

2014年9月29日月曜日

悪魔の優しさ

今週のキン肉マン。

ニンジャ「こんな攻撃がおぬしらにできるのかーっ」
ラーメンマン「…」
カーメン「…」

それはさておき、これまでは利害が一致しているから、表立ってぶつかることがなかった正義超人と悪魔超人のイデオロギーだけど、いよいよ違いに目を瞑っていられなくなるのかな。単なる勝ち負けを越えた、正義・悪魔・完璧のイデオロギーの対立こそが今シリーズの主題だと思っているので、悪魔超人の配慮を知った正義超人が、その思いを受け止めた上でどんな答えを示すのか。来週、再来週あたりが非常に重要な回になるかもしれない。

…とは言え、単なる勝ち負けも気になるわけで。う〜ん、何となくニンジャが死に様で正義超人を感化する流れのような…。

2014年9月28日日曜日

IIJmioでSIMフリーiPhone 6使用開始

遅ればせながらSIMフリーiPhone 6を入手。

これでも当初の予定より早く届いたのは、中国の転売市場が落ち着いてきたからか、それとも中国の工場が必死に稼働したからなのか。まあ、手に入った今となっては何でもいいや。立ち上げ時の波乱を実体験できなかったのは、少し残念。

さて、今更SIMフリーiPhone 6のセットアップ情報に需要があるとは思えないが、備忘録として作業ログを残しておく。

箱を開けて真っ先に行ったのは保護シート貼り。今回は別途購入しておいたカバーに付属していたシートを貼ったが、早くも近所のダイソーでiPhone 6の保護シートを見かけたので、特にこだわりがなければそれで十分かもしれない。

次はnanoSIMカード挿入。家の中でクリップを探しても見つからず、何で代用しようかと悩んだのだが、よくよく見たらSIMカードのトレイを引き出すピンはちゃんと付属しているではないか。数分を浪費してしまった。

SIMカードを装着したら、いよいよ電源投入。今回はiPod touchからバックアップを引き継がず、完全に新規設定してみた。基本的には道なりで特に悩むところはなかったが、Wi-Fi設定時に相変わらずMACアドレスを表示してくれない。どうせそんなことだろうと思って、今回は事前に無線APのMACアドレスフィルタリングを無効化しておいたから躓かなかったけど、Wi-Fiの設定をさせるときはMACアドレスを教えてくれ。来月のNew 3DSも、どうせそうなんだろうなぁ。

IIJmioの設定は、iPhoneのSafariでこちらのページを開き、APN構成プロファイルをインストールするだけ。…と書いたけど、そう言えば今日は外出せずにずっと自宅のWi-Fi圏内にいるから、実は3GやLTEの通信を試していないことに気が付いた。家の無線APはハブを兼ねていて、こいつの電源を落とすと家の中の全ての機器がネットワーク的に孤立するから、面倒なんだよなぁ。まあ、明日は会社に行くので、そこで試そう。

iOS 8.0.2へのアップデートも早々に行った。当初はMacのiTunes経由でアップデートしようとしたのだが、先日iOS 7から8にしたときの2倍くらい、2GB弱のファイルのダウンロードが求められてしまい、さすがに中断。結局、8.0.2へのアップデートはiPhone単体で行った。容量から察するに、iTunesだと差分ではなくフルで、しかもiPad 2からiPhone 6まで全機種に対応できるバイナリをダウンロードしようとしているのかな。32ビットの機種がサポート外になればサイズが半分くらいになるのかもしれないけど、それはずっと先の話だろう。

ところで今回、iPod touchを引き継がずに新規設定した最大の動機は、何となく入れたものの使っていないアプリを、この機に仕分けようと思ったからだ。が、とりあえずiCloudの設定を済ませたら、それだけで結構使えそうな感じになってしまった。さすがにもう少しアプリを入れるつもりではあるけれど、そもそもiPod touchやiPad Airの32GBを持て余している自分が、64GBも何に使うのだろうか? まあ無理に埋めなくても、フラッシュメモリの寿命の観点からは空きブロックが多くて悪いことはないだろうが。

2014年9月27日土曜日

Rubyistが歩んでみる蛇の道はPython その7

Dive into Python 3に戻って、chapter 7と8からイテレータの話。

オブジェクトobjをlistやtupleのようにforでぶん回せる(iterableである)ようにするには、

  1. objが__iter__()メソッドを持っている
  2. obj.__iter__()が返すオブジェクトが__next__()メソッドを持っている
ようにすれば良い。大方の想像通り、iter(xx)するとxx.__iter__()が、next(yy)するとyy.__next__()が実行される。__next__()は、呼ばれる度に列挙される値を1つずつ返すようにする。また、列挙し終えたならStopIteration例外を投げる。端落ちしてもNoneが返されるので、列挙の終了とはみなされない。

では、generatorはどうしてiterableだったのか。別に特別扱いされていたわけでも何でもなく、generatorも上の条件を満たしていたのだ。

>>> def gen():
...   yield 0
...
>>> g = gen()
>>> g.__iter__
<method-wrapper '__iter__' of generator object at 0x10a88cf78>
>>> g == g.__iter__()
True
>>> g.__next__
<method-wrapper '__next__' of generator object at 0x10a88cf78>
>>> g.__next__()
0
>>> g.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
generatorは実は、自分自身を返す__iter__()と、yieldした値を返す__next__()を持っていたのだ。なおgeneratorは、StopIterationを明示的にを投げなくてもreturnするときに投げてくれるようだ。普通の関数と違って、yieldとreturnを区別できるからだろうね。

ちなみに、普通のlistやtupleも例外ではなく、__next__()を持っているオブジェクトを返す__iter__()を持っている。

この緩い条件を満たしたiterableなオブジェクトから、別のiterableなオブジェクトを生成するitertoolsというライブラリが、Pythonには標準で付いている。chapter 8ではitertoolsの中からいくつかの関数を使って見せているけど、詳しくはhelp()で調べてみれば良いだろう(きちんとdocstringが用意されているって、地味に凄いことだよなぁ)。…と、これだけで片付けるのはあんまりなので、iteratorのありがたみを3行で表す(パッと見2行だけど、printの次の空行を含めて3行)。

for p in itertools.permutations(range(10000)):
  print(p)
順列を列挙するコードを自前で書かずに済むのはありがたいけど、それ以前にこのコードが動くこと自体がありがたい(実行に何年かかるか知らないが)。ちょっと考えれば分かるように、10000要素の整数リストを10000!個持つリストを作ってからループを回そうなんて思ったら、どう考えてもメモリが足りない。それでもこのコードが延々と順列を表示し続けてくれるのは、いきなり10000!通り全てを生成しようなんて馬鹿げたことをせず、next()の度に1つずつ列挙してくれているからだろう。ここらへんのケアをおまかせできるのは美味しい。

2014年9月26日金曜日

iOS 8.0.2をiPad AirとiPod touchに入れてみた

巷ではiPhone 6にiOS 8.0.1を入れると大変だとかなんとかで騒ぎになっていたようだけど、まだ届いていない自分はすっかり蚊帳の外。Apple Online Storeで今から注文しようとすると7〜10営業日で出荷予定となるので、当初の予定よりは早く届くかもしれないけど…。そんな中、iOS 8.0.2が急遽リリースされたと聞いて、早速iPad AirとiPod touchに入れてみた。

iPadのSafariでググるとき、入力途中でGoogleがサジェストしてくる候補を選択するとSafariが落ちる問題は、まだ直っていないみたい。MacのiTunesが同じネットワークにあるiOS 8デバイスを見失ってWi-Fi同期ができない問題は、とりあえず今のところ解消されてるっぽい。8.0.2へアップデートする際に再起動したばかりだから調子がいいだけかもしれないけど。

しかしまあ、この調子だと8.0.3が出るのも遠くはなさそうだ。

2014年9月25日木曜日

Rubyistが歩んでみる蛇の道はPython その6

Dive into Python 3のchapter 7を読んでみたのだが、Classes & Iteratorsなんて章の名前を付けている割に、そんなにクラスについて詳しく書いていない。具体的な継承の話なんか、まるで無いし。そこでググってみたところ、こちらの公式チュートリアルが良さそうなので、ざっと読んでみた。

多くの人が真っ先に面食らうのは、Rubyを含む多くのオブジェクト指向な言語ではimplicitに渡されるのが当たり前のselfやらthisやらが、Pythonのメソッド定義ではexplicitに第1引数として、インスタンス自身が渡される点だろう。この第1引数はselfという名前を使うことを推奨されているようだけれど、selfは単なる仮引数の名前であって予約語でも何でも無い。

そしてメソッド定義の中でさえ、インスタンス変数にはselfを介さないとアクセスできない。言い換えると、インスタンス変数はスコープに入らないのだ。Rubyだと

def method
  @member1 = 100
  print(@member2)
end
のようにアクセスできるところが、Pythonだと
def method(self):
  self.member1 = 100
  print(self.member2)
のようにせねばならない。

地味に嫌らしいと思うのが、Pythonではクラスのインスタンスを介してクラス変数にアクセスできる点。Pythonだと

class Foo:
  x = 100

foo = Foo()
print(foo.x)
こんなことが出来てしまう。Rubyでクラス定数を参照しようと思ったら
class Foo
  X = 100
end
print(Foo::X)
print(Foo.new.X) # error
のように、インスタンスではなくクラス名の修飾が必要。

他にも、public, protected, privateと言ったアクセス制限の機能がPythonにはない。_memberみたいに'_'を付けたメンバはprivate扱いしてね、みたいなコーディングルールで凌いでいるようだ。まあLLならそれくらいの緩さでも許されるだろう。

問題は継承。ずばり、Pythonは多重継承が出来る。これだけでもう、Rubyで言うところのmix-inだの、Javaで言うところのinterfaceだの、そんな細かい話は吹っ飛んでしまう。属性の検索が基本的に深さ優先探索で行われるというのも要注意だろう。A, Bの順に多重継承した場合、BよりAの曾祖父の方が先に探索されるのだ。実装を考えればそりゃそうなんだろうけど、普段から多重継承が制限された世界で過ごしていると違和感を禁じ得ない。

2014年9月24日水曜日

Time Machineでバックアップ除外されるディレクトリ

New 3DSへの引っ越しに向けて、そろそろフルサイズのSDHCからmicroSDHCに移行しておこうかと思い立つ。32GBのmicroSDHCは調達したので、後はただコピーして、10/11までは変換アダプタを噛まして3DS LLで使っていれば良いのだが、ここで微妙な問題。15〜16GB程度のデータのコピーを一時的にMac miniのHDDに置いている間にTime Machineのバックアップが入ったら、うざそうだ。

…と言うわけで、今まで完全に初期設定で使っていたTime Machineに初めてバックアップ除外指定を追加しよう思ったのだが、よくよく考えてみれば、あからさまにどうでもいい場所は最初から除外しておくくらいの気をAppleが利かせてないはずがない。で、ググってみたところ、 /System/Library/CoreServices/backupd.bundle/Contents/Resources/StdExclusions.plistに列挙されているパスは標準でバックアップから除外されているそうな。中身を見てみると、いかにもテンポラリとかキャッシュみたいなところは概ね既に除外されている。

…と言うわけで、やっぱりTime Machineの設定はそのままで、3DSのデータ移行には/tmpあたりを使おう。一応、MacやPCを介さずに3DS間の無線通信でSDカードの中身をコピーすることも可能だそうだけど、どう考えても遅いよなぁ。

2014年9月23日火曜日

Rubyistが歩んでみる蛇の道はPython その5

Dive into Python 3のchapter 6をざっと読んでみた。

Pythonの関数はオブジェクトである。これはRubyの関数(メソッド)と非常に大きく異なる点だ。Pythonだと

>>> def foo():
..  print('foo')
..
>>> f = foo
>>> f()
foo
のように変数に直接関数を代入したり、代入した変数経由で元の関数を呼び出したりできる。…と言うか
>>> foo = 1
>>> foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> foo = f
>>> foo()
foo
こんなことができてしまうということは、fooは定数ですらないようだ。Pythonのdef文は、JavaScriptのfunctionと同じように関数オブジェクトを作って、それを何の変哲も無い普通の変数に代入しているだけみたい。

とにもかくにも、関数がオブジェクトであるということは、100やら'abc'やらと同じように普通に受け渡しが出来る。ここは正直Rubyの弱いところで、基本的に最大1つのブロックをメソッドに渡すことしかできない。一応:funcのようなシンボルでメソッド名を渡したり、lambda等でProcオブジェクトを作って渡したり、呼び出し先でevalしてもらうコードを文字列で渡したりすることはできるのだけれど、自然に関数を扱えるとは言い難い。まあ、Rubyではメソッドが特別扱いされているが故に

print 'ruby'
のように()を付けなくてもメソッド呼び出し出来るのは、ちゃちゃっと使い捨てコードを書くときに楽は楽なんだけど。

もう1点。RubyのProcにはないけどPythonの関数オブジェクトにはある機能に、中断/再開がある。

>>> def gen():
...   v = 0
...   while v <= 50:
...     yield v
...     v += 10
...
>>> g = gen()
>>> type(g)
<class 'generator'>
このように、内部でyield文を使った関数はgeneratorクラスのオブジェクトを返す。そして
>>> next(g)
0
>>> next(g)
10
>>> next(g)
20
>>> next(g)
30
>>> next(g)
40
>>> next(g)
50
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
このようにnext文でgeneratorを呼び出す度に、関数オブジェクトがyieldした値が呼び出し元に返され、また関数オブジェクトの方はyieldしたところで中断する。ノンプリエンプティブなスレッドと言えなくもない。このgeneratorの嬉しいのは、リスト等と同じように
>>> for i in gen():
...   print(i)
...
0
10
20
30
40
50
こんな感じでイテレータとして使えるところ。イテレータの話は次の章で深追いするのかな?

2014年9月22日月曜日

始祖と正義超人の初対面

今週のキン肉マン。

ザ・ニンジャが2手3手先を読んでカラスマンを罠にはめたってのは、2週間かけて仕込んだ業火羽輪の術をあっさり返させ、カラスマンを油断させたところで、火口に落とす本命の攻撃を繰り出したってところが罠だったってことなのか? 防戦一方に見せてながら実は思惑通り試合を進めていたのは、カラスマンも認めた通り見事なのだろうけど、結局は地力の差で逆転してしまうのが始祖の強さか。

さて、そんな銀閣寺にとうとう正義超人軍、特に血盟軍の同志ブロッケンJr.が到着。普通の超人ならこれが逆転勝ちフラグになりそうなんだけれど、戦う度に死亡しているザ・ニンジャだと…。ポール君の声援を受けたアトランティスのように、何とか相打ちに持ち込めれば上出来な気がする。

2014年9月21日日曜日

ジャガカレー饅頭

実家から送られてきた大量のジャガイモを使おうシリーズ。今回はジャガイモの生地で饅頭を作った。餡はドライカレー。

まずはドライカレーの準備。そんなに特別なものではないが、今回はドライと言いつつも汁っぽくして、とろみも付けたりしない。その理由はこうするから。

冷凍庫で一晩冷やせば、ドライカレー改めフローズンカレーの出来上がり。これを餡にする

外身の方は、こしを強くしたニョッキみたいなもの。今回は生のジャガイモに対して4割程度の重量の強力粉を使った。ジャガイモの方は電子レンジで蒸かして皮を剥くので、実際は5割くらいになるのかな。そんなこんなで、蒸かして潰したジャガイモ、強力粉、塩少々をこねる。今回はジャガイモの水分だけではまとまらなさそうだったので、少しだけお湯を足した。

そうして作ったジャガイモ生地を30分くらい寝かせてから、餡の個数(=製氷皿の穴の数)にちぎったら、いよいよ包み方開始。

で、こうなる。生地は良く伸びるので包むのは簡単。

ここまで出来れば、後は蒸すだけ。カレーもジャガイモも一度は火を通しているので、真面目に時間を計らなくても生っぽくはならないだろう。適当に洗い物でもしている間に蒸し上がり。

箸でつついてみると、中から出てくるのは、あえて汁っぽくしたカレー。

自分で言うのもなんだけど、思いつきの割には結構上手く、美味く出来た。まあ、思っていた形になりそうになかったら、普通のニョッキにしてカレーソースで食べればいいやと思ってたんだが。

2014年9月20日土曜日

nanoSIMゲットだぜ!

サイズ変更を申し込んでいたIIJmioのnanoSIMが届いた。

…って、早いよ! そもそも1週間程度かかるという話だったから、iPhone騒ぎで多少遅れても来月頭頃には届くだろうと読んで申し込んだのが昨日の昼のこと。それが、たった1日で届いてしまうとは。当然ながら今まで使ってきたフルサイズの古いSIMは使えないので、手持ちのモバイルルータを使えなくなってしまった。SIMサイズ変換のアダプタを用意すればいいんだろうけど、どうせ仕事場には持ち込めないモバイルルータのためにコストをかけるのもアホらしいし…。

結局、何だか余計にiPhone 6が待ち遠しくなってしまった。早く届けてケロ〜。

2014年9月19日金曜日

低価格SIM戦争、IIJmio倍増で新たな局面へ…?

https://www.iijmio.jp/info/iij/20140918-1.html

うぉっ! IIJmioのバンドルクーポンが来月から倍増とな。ミニマムスタートプランですら2GB、ライトスタートプランは4GB、そしてファミリーシェアプランに至っては7GB!

当然、他のMVNOも慌てて追従してくるだろうけど、今回の倍増に関しては3大キャリアも無視できないんじゃないか? 自分は2GBのミニマムスタートプランに留まるけど、3大キャリアと遜色無い7GBが2,764.8円というのは、深く考えずに毎月\5〜6k払っている一般人の目を大きく引きつけそう。

高止まりどころか実質値上げ傾向の3大キャリアに対して、値下げやSIMロック解除の圧力が増すのは確実だろう。さっさと土管化しやがれ。

さて、倍増が嬉しいのはもちろんのこと、IIJmioは普通にSIMフリーiPhone 6で使えているようなので、来月届くiPhone 6用にはちと早いけど、nanoSIMへの変更を申し込んでおいた。混雑してSIM変更が遅れたら嫌だからね。

2014年9月18日木曜日

iOS 8をiPad AirとiPod touchに入れてみた

iPhone 6より一足、いや二足三足は早くiOS 8がやってきた。

Apple自らがこれまでで最も大きなリリースと言っているのは本当で、ダウンロードするファイルサイズは1GB近くある。これは自宅のWi-Fi環境でないと厳しい。ダウンロードが終わっても、その後のインストールにもかなり時間がかかるので、寝ている間にダウンロードして起きたらインストール開始するくらいが丁度いいかな。

さて、時間をかけてiPad AirとiPod touchにiOS 8を入れたわけだが、最も期待しているOS Xとの連携はYosemiteまでお預け。Yosemiteは10月21日という噂が出てきたけど、まあ当たらずとも遠からずなんだろう。iOSデバイス間のHandsoffはなかなか良く出来ているので、ここにOS Xが加わったら便利であろうことは想像に難くない。

そんなHandoffだけど、連携できるのは「今まさに起動している」アプリだけ。例えばiPod touchでメールを見ている最中であれば、iPad AirがHandoffで同じ状態を引き継げるのだけれど、メールを見ていたiPod touchをスリープさせてからiPad Airを起こしても、引き継ぐことは出来ない。引き継げるのはあくまで「今」だけなのだ。まあ、スリープ直前の状態を引き継げるようにしようと思ったら、スリープする前にその状態をどこかに保存しておかないとならないから、妥当と言えば妥当な仕様だろう。

iOS 7.1で復活すると思ったら復活しなかったiPadのカレンダーのリスト表示は、残念ながらiOS 8でも復活せず。

2014年9月17日水曜日

カレーコロッケ

実家から送られてきた大量のジャガイモを使おうシリーズ。今日はカレーコロッケ。

そんな特別なレシピではないけれど、スタンダードな美味しさ。強いてポイントを挙げるなら、隠し味の醤油かな。今日は、最終的に7個になったコロッケの具に対して大さじ1。まあでも、何よりも美味しさに直結するのは、揚げたてであることだ。確実に揚げたてを食べられるのは、自炊派の特権だね。

iPhone 6のアクセサリ

帰り道に何気なく電気屋に立ち寄ったら、もうiPhone 6のカバーやら保護フィルムやらは普通に売っているのか。しかも結構な種類。今まで真面目にiPhoneの発売を追いかけたことが無いから知らなかっただけで、毎回こんなもんなのかな?

折角飛びついたのに発売日に届かないのを、アクセサリ類が揃っていないであろうことを理由にどうにか正当化していたのに…。こんなことなら、12日は予約のために早退しておけば良かった。

まあ、後悔はしてもどうにもならないけど、今回の反省は2〜3年後の買い替えに活かそう。

2014年9月16日火曜日

続・Raspberry Pi

ようやく肉体的に回復したので、溜まった家事の合間にRaspberry Piを弄り始めてみた。

何と言うか、割と普通にDebianな感じ。DebianベースのRaspbianを入れたのだから当たり前と言えば当たり前なんだけど。性能はそれなりだけど、家の中で気軽にサーバを立てるにはいい感じかな。microSDを差し替えるだけで、まるっとシステムを入れ替えられるのも良い。余ったmicroSDで気楽に実験できるし、バックアップも簡単に取れるし。

とりあえず直近の課題は、コンセントの空きを作ることと消費電力を見てみることかな。いい加減、たこ足をどうにかせねば。

2014年9月14日日曜日

Raspberry Pi Model B+入手

注文していたRaspberry PiのModel B+をゲット。

そして開封。

今更も今更だけど、こうして実物を見ると本当に小さいね。比較対象としてフルサイズのSDカード(アダプタ)を並べているけれど、Model B+はmicroSD(HC)しか物理的に挿入できないので注意。

昨日のダメージが抜けてないので、今日はRaspbianを入れただけでサスペンド。

氣志團万博2014

氣志團万博2014の初日に参戦してきた。

いわゆる夏フェスというものは今回が初めてだったのだけれど、こういうのも楽しいね。お目当てはももクロと筋肉少女帯だったけど、こんな機会が無ければ接点が無かったであろうアーティストのライブに参加できたのは、非常に良い体験だった。正直言って知らなかったニューロティカはかなり気になる存在になったし、岡村靖幸の生Let's go!も聞けたし。

で、色々な非日常を見て聞いて思ったことは2つ。生バンドはカッコいい。そして長くやっている人達はライブが上手い。そんな当たり前のことを再認識してきた。

さて、そんな楽しかった時間の代償として、連休の残りは肉体的にガタガタな予感。もう既に足はパンパンだし、すね毛も震える大音量を全身で受けてきたおかげで、未だに耳鳴りが止まない。

2014年9月12日金曜日

SIMフリーiPhone 6に突入しま〜す

せっかく最初からSIMフリー版が用意されたのだから、iPhone 6とIIJmioの組み合わせの人柱になってみることにした。気が変わらないうちに、早速小さい方の64GBを注文。消費税高い。

…が、お届け予定日は10/8〜10/16だとさ。これでは人柱も何も、入手する頃には既にMVNO各社の動作検証結果が出揃ってるんだろうな。嬉しいような、つまらないような…。

まあ、アクセサリ類を慌てて買う必要がなくなったのは、ちょっとだけ良い話かな。1か月かけてじっくり選ぼう。

2014年9月11日木曜日

Rubyistが歩んでみる蛇の道はPython その4

Dive into Python 3のchapter 5をさらりと読んでみた。

Rubyを含む他のLLと同様、Pythonでも正規表現は使える。が、意外なことに、reモジュールを明示的にimportしないと使えない。下の例はimport reを端折ると動かない。

>>> import re
>>> str = 'abcdefg'
>>> re.sub(r'c.e', 'XYZ', str)
'abXYZfg'
>>> m = re.search(r'.{4}$', str)
>>> m.group(0)
'defg'
同じことをRubyでやろうとするとこんな感じ。
irb> str = 'abcdefg'
irb> str.sub(/c.e/, 'XYZ')
=> "abXYZfg"
irb> m = /.{4}$/.match(str)
irb> m[0]
=> "defg"

ちなみにPythonのr'...'は、正規表現リテラルではなく単なる文字列リテラル。regular expressionではなくraw stringのr。rを付けるとRubyで言うところの'...'文字列のように、\等が特別扱いされなくなる。

さて、実質定数な正規表現でも、内部的には使う度に文字列から正規表現に変換しなければならないかと言うと、さすがにそんなことはなく、re.compile()を使えば正規表現オブジェクトを作成できる。また、その正規表現オブジェクトは、subだのsearchだの、reモジュールと同名の関数を持っている。もちろん、引数に正規表現文字列は取らないけど。

正規表現のオプションは、正規表現文字列を受け取るreモジュールの関数に引数flagsとして渡してやる。このflagsはデフォルト値0が設定されているので省略可能。Rubyで言うところの

r = /ab c/ix
が、Pythonでは
r = re.compile(r'ab c', re.I | re.X)
となる。ちとクドいね。あと、Rubyの正規表現にフリーフォーマットモード(x)があることを今更知った。

2014年9月10日水曜日

iPhone 6発表

とうとう発表されたiPhone 6とiPhone 6 Plus。概ねリーク通りで、あまり驚きはなかったというのが正直なところ。強いて挙げれば、6と6 Plusのピクセル数が違ったのが意外だったかな。Android界隈に比べれば大した問題ではないだろうけど、解像度を刷新することはあっても、同時に2つのバリエーションを展開するとは思っていなかったので。現行のiPod touchとほぼ同等の薄さというのはいいね。

A7からA8は大きなジャンプではないようだけど、まあ妥当なところだろう。そもそも6 Plusよりも大きなiPad AirをA7がヌルヌル動かしているのに、2倍だの3倍だのとうたうためにダイサイズや消費電力を犠牲にして、不毛なベンチマーク争いに加わっても仕方あるまい。

…なんて思っていたら大サプライズ、Apple StoreにSIMフリー版がキター! 最初はどうせキャリア縛り版だけだろうと思っていたから、非常に嬉しい誤算。現時点では当然ながらIIJmioでの動作検証結果は出ていないけれど、特攻してみたくなってきた。ああ、その前にnanoSIMにサイズ変更しなければ。

さて、Tim Cook体制で初の目新しい製品となったiWatch改めApple Watchだけど、さすがに様子見かな。バッテリーの持ちも分からないし、そもそも今の仕事場に持ち込めるのかも怪しいし。

2014年9月9日火曜日

Rubyistが歩んでみる蛇の道はPython その3

Dive into Python 3のchapter 4をざっくり読んでみた。

Pythonは2から3で、文字列の扱いが大きく変わったそうな。具体的には、Unicodeで表現できる文字の並びをstringと、符号無し8ビットの値の並びをbytesを、明確に区別するようになった。

文字列の内部表現に関しては特に規定がなくて、UTF-8にするもUTF-32にするも実装の勝手なのかな。何であれ、Unicodeじゃない文字列を入力して文字列としてPythonで処理したければ、必ず文字コードの変換が入るわけだ。Rubyとの比較はるびまのM17Nの記事が良くまとまっているが、Rubyの場合は内部表現は統一していない。文字コードの変換とそれに関する問題から縁遠いのが長所だが、自分が処理系を実装するなら、面倒だからUTF-8あたりに統一するだろうなぁ。RubyはUnicodeと心中するつもりは無い、みたいなことをどこかで読んだような…。

話をPythonに戻すと、stringやbytesはimmutable。すなわち、stringやbytesのインスタンスは、何かを付け足したり削ったり、部分的に置き換えたりできない。

>>> s = 'abc'
>>> t = s
>>> s += 'def'
>>> s
'abcdef'
>>> t
'abc'
このように'abc'というインスタンスを'abcdef'に変更するわけではなく、あくまで'abcdef'というインスタンスを新たに生成するのだ。ただ、bytesに関してはmutableなbytearrayも存在するので、巨大なバイト列を扱うときなど、適宜bytearrayと使い分ければ良いのだろう。

formatは微妙。どうしてデファクトスタンダードであるCのprintfの書式を踏襲しなかったのか? 雰囲気はシェルスクリプトのpositional変数に似てるけど$記号は使わない。dictのキーとして文字列を指定するときに''で括らない等、文法的にも何となく気持ち悪い。

ソースの文字コードにUTF-8を推奨しているのはいいね。Shift_JISとCRLF改行のファイルを撒き散らすメモ帳は死ね。氏ねじゃなくて死ね。

2014年9月8日月曜日

仮面の裏の秘密

今週のキン肉マン。

なんと、30年越しに順逆自在の術の原理が明かされるとは。猛スピードで体勢を入れ替えるだけって、言うだけなら簡単だけど、がっちり極められた技ってスピードだけで返せるのかとか、ブロッケンJr.が見よう見まねでやってのけたのは何だったのかとか…。細かいことは気にしてはいけない。

さて、スピードには絶対の自信があるカラスマンだけど、こういうタイプは間違いなく打たれ弱いので、半ばまぐれだろうと1発入れば勝機はありそう。ただ問題は、ザ・ニンジャが勝つ絵が思い浮かばない。駆けつけた血盟軍の同志ブロッケンJr.に、カラスマン攻略の糸口を託して散りそうな気がしてならない。もしくは、ザ・ニンジャの遺言をブロッケンJr.が金閣寺で戦うアシュラマンに届けて勝ちフラグを立てるとか。何にせよ、わざわざ読み切りでフォーカスした血盟軍ネタをスルーはしないだろう。

今週のもうひとつの見所はウォーズマンだろう。戦闘力は優れているものの、人を引っ張るタイプではないと言うか、ぶっちゃけコミュ障タイプのウォーズマンがリーダーシップをとり始めるとは。ウギャアと冷遇されていた分だけポーラマン戦という見せ場を貰っておしまいだと思っていたけど、これはもう1戦くらい活躍するのか? ただ、さすがに因縁のネメシスに勝てるとは思えないのだが…。

仮面の裏の新ギミックも気になる。野球帽のつばみたいに「弱気は最大の敵」とか入力したのだろうか?

2014年9月7日日曜日

クール宅急便

失効しそうだったクロネコポイントを使って申し込んだ景品が届いた。

白を基調にしたクールな箱。ハイブリッド車だったのか。

中身もクール。小さい割に重量感がある。

脇の扉はスライド式で、きちんと開閉する。

もちろん、後ろの扉も開く。

最後に、去年貰ったものと並べてみた。クールじゃない方が若干長い。

2014年9月6日土曜日

スカイツリーは遠かった

AM放送局のFM中継で綺麗に聞こえるかもと期待したけれど、手持ちのラジオサーバーポケット PJ-20とその付属のアンテナでは、残念ながら辛うじてTOKYO FMをモノラル受信できる程度。出力10kWの局でもこれでは、7kWの中継局には期待できそうにない。がっかり。地デジ化してなければテレビ用のアンテナが使えたのかもしれないけど。

…で、今は少しRaspberry Piに心が傾きかけている。

2014年9月5日金曜日

New 3DS予約完了

丁度1週間前に突然発表されたNew 3DSだけど、実にあっさりとネットで予約完了。後は寝て待つだけだ。発売日の早朝から並んでゲーム機を買うようなことは、結果的に3DS LLが最後になるのかな〜。

さて、画面の大きさときせかえプレートのどちらを取るか、あまり悩む間もなく予約が始まってしまったわけだが、結局きせかえプレートを選択。…が、肝心なプレートはどれにしようか迷っている。もうしばらく悩もう。

2014年9月4日木曜日

Rubyistが歩んでみる蛇の道はPython その2

Dive into Python 3のchapter 3をさっくり読んでみた。

まずosモジュール。プラットフォーム依存を極力抑えるために用意されたAPIを詰め込んだモジュールだそうな。そこらへんRubyはUnix寄りな気がするけど、Pythonは中立を目指してるってことか。まあ、chapter 3で紹介されているAPIだけでは、理想を実現しているのかどうか判断しかねるけど。

Rubyと比較すると、DirやFileクラスの特異メソッドに分散している機能が、Pythonではosモジュールに集約されている印象。それでもglobはosに含まれないようだけど。

comprehension記法は、Rubyで言うところのmap(とif clauseをつければselect)の略記法だけど、dictにも使えるところがRubyにはない点。Pythonと比較してみて、今更RubyのHash#mapがHashを返さないことに気が付いた。あと、mapとselectの略記法とは言ったけれど、selectしてからmapするよりは中間オブジェクトが作られなさそう。実装は見てないけど。

2014年9月3日水曜日

AM番組 over FM

http://itpro.nikkeibp.co.jp/atcl/news/14/090300689/

おおっ、これは大いに期待。引っ越してからTBSラジオのノイズが大きくなった上、最近更に受信状態が悪化したので、これで綺麗に聞こえるようになってくれないかな〜。

懸念点は、東京スカイツリーから7kWでしか出さないところ。予定通りに中継局が開局したとしても、果たして横浜の外れにまで届いてくれるのだろうか? FMを聞く習慣が無いのでアンテナを接続していないのだが、とりあえず試しにダイヤルを回してみたところ、NHK FMとFMヨコハマしか聞こえなかった。う〜む。

アンテナを捨ててはいないはずなので、週末に部屋の中を探して、スカイツリーから10kWで飛ばしている局の受信にトライしてみよう。それが駄目なら、7kWは無理だろうなぁ。

2014年9月2日火曜日

Rubyistが歩んでみる蛇の道はPython その1

とりあえずDive into Python 3を、chapter 2までざっくり読んでみた。

まず、Rubyで言うところのirbに相当する機能が、Pythonには標準で備わっている。

% python3
Python 3.4.1 (default, Aug 24 2014, 21:32:40)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+1
2
>>>
こんな感じで、引数無しで起動すればインタラクティブなモードになる。

Rubyistが注意しないと間違えそうなのは、if文の条件のようなbool型が要求されるところ。Rubyならfalseとnil以外はtrueと同じ扱いなのだが、PythonはFalseとNoneだけでなく、整数の0や浮動小数点数の0.0も偽扱い。0に関してはむしろRubyの方が特殊なのだが、Pythonでは更に要素数がゼロのlist, tuple, set, dictまでもが偽とみなされる。

以下のRubyの例ではどちらのifの中も実行されるが、

# ruby
if 0
  print('実行される')
end
if []
  print('実行される')
end
以下のPythonの例ではどちらのifの中も実行されない。
# python
if 0:
  print('実行されない')

if []:
  print('実行されない')

さて、まだ触りも触りだけど、言語としてはオブジェクトや属性や関数のあり方とか、JavasScriptに近い臭いがする。コードにコメントの形でドキュメントを埋め込む標準形を持っている言語は少なくないけれど、コメントではない__doc__属性を標準で持っているというのは面白い。あと、2系では基本的に整数除算だった/演算子を、3系では実数除算にしてしまったという話はビックリしたのと同時に、2系に留まる人の気持ちが分かった。そんな根源的なところを変えるか?

2014年9月1日月曜日

兄より優れた弟など存在しない?

今週のキン肉マン。

鳥形の始祖は9th、カラスマン。ド直球なネーミングだ。烏天狗のイメージなのかな。ザ・ニンジャと同等以上の身のこなしは、いい戦いが期待できそうだ。

さて、金閣寺と銀閣寺が悪魔超人と正義超人発祥の地。そしてシルバーマンが正義超人の開祖であることが明かされたわけだが、気になるのはシルバーマンの信念とやら。2ndとして選ばれたくらいだから心身ともに秀でているのは確かなんだろうけど、超人墓場出奔もシルバーキャッスル建立も、単なる兄の後追いに見えてしまう。まあ、秘めたる信念があったからこそ、あえて自分の城を立てたのだろうが。

そんな優秀な兄の陰に隠れがちだった地味な弟だけど、結果的には下等超人を間接的に善く導くという完璧超人の理想に最も近いことを実現しているわけだ。甘く見ていた地味キャラにお株を奪われたことによる嫉妬心も、超人閻魔自らが動いた切っ掛けの1つだったりして。