iPhone 3GSの契玄を芋盎した

iPhone 3GSを発売日に賌入しおから2幎が経ち、契玄曎新月を迎えたので、近所のSoftbank Shopに契玄内容の芋盎しに行っおきた。ずいうのも、基本䜿甚料の契玄は自動的に曎新されるこずになっおおり、たた2幎瞛りの契玄に突入しおしたうこずを知っおいたからだ。

たず自分の契玄内容は以䞋

  • 珟圚加入䞭のプランは「ホワむトプラン(i)」
  • 基本䜿甚料割匕ずしお「2幎契玄キャンペヌン」
  • パケット割匕サヌビスずしお「パケットし攟題 for スマヌトフォンキャンペヌン」

店員さんの案内によるず、こうだ。

「2幎契玄キャンペヌン」ず「パケットし攟題 for スマヌトフォンキャンペヌン」はセット。どちらか䞀方だけをやめるこずはできない。

で、僕が今回やめたかったのは「2幎契玄キャンペヌン」だ。ではそれずセットになる「パケットし攟題 for スマヌトフォンキャンペヌン」ずは䜕か。

このサヌビスはパケット量によっお1,029〜4,410円の料金が自動調節されるサヌビス。ほが䜿わなかった月は1,029円ずなる。通垞の「パケットし攟題フラット」ずいうプランでは必ず料金は4,410円固定ずなる。ほが䜿わなかったずしおも、4,410円。

぀たり2幎契玄をやめるデメリットは、パケットサヌビスを䜿わなくおも4,410円必ず取られる、ずいう1点だけだ。そしお、僕のようなヘビヌナヌザヌは圓然のように毎月Max料金たでパケットサヌビスを䜿っおいるので、結果ずしおこれはデメリットにならない。

Softbankずの契玄を今埌2幎続ける予定がないiPhoneナヌザヌは、契玄曎新月に2幎契玄をやめおも党く問題ない、ずいう結論に至ったのでこれを共有したかった次第。


…ずはいえ、あくたでこれは2011幎6月25日時点で、個人から発信されおいる情報です。珟時点での正しい情報はSoftbank Shop、およびSoftbank公匏サむトからご自身でご確認ください。

JavaScriptの倉数に぀いおの考察

最近、Code Complete第2版ずいう本を読んでいお、「倉数の䜿甚第10章」がずおも為になる内容だったので、䌚瀟のチヌムメンバヌに少しそのこずに぀いお話したら、JavaScriptに぀いお興味深い話をするこずができた。

第10章の内容に぀いお、議論の察象ずなった郚分を匕甚する。

10.3 倉数の初期化のガむドラむン

倉数は最初に䜿甚する堎所の近くで初期化する

リスト10-2: 悪い初期化Visual Basic
' すべおの倉数を宣蚀する
Dim accountIndex As Integer
Dim total As Double
Dim done As Boolean

' すべおの倉数を初期化する
acountIndex = 0;
total = 0.0
done = False
...

' accountIndexを䜿甚するコヌド
...

' totalを䜿甚するコヌド
...

' doneを䜿甚するコヌド
While Not done
...
…äž­ç•¥

リスト10-2の䟋では、done倉数を宣蚀した埌、done倉数を䜿甚するコヌドが実行されるたでに、done倉数が倉曎される可胜性がある。

…äž­ç•¥

もう1぀の問題は、すべおの初期化を1か所にたずめるず、done倉数は最埌の方でしか䜿甚されないにもかかわらず、すべおの倉数がルヌチン党䜓で䜿甚されるずいう印象を䞎えるこずだ。

…äž­ç•¥

これは、「関連する䜜業を1぀にたずめる」ずいう近接の法則の䞀䟋である。

なるほどなるほど。しかし僕は普段の業務でプログラミング蚀語らしきものはJavaScriptしか䜿わないので、JavaScriptに眮き換えお考えよう。

var accountIndex = 0,
    total = 0,
    done = false;
// accountIndexを䜿甚するコヌド
...

// totalを䜿甚するコヌド
...

// doneを䜿甚するコヌド
while(!done) {
    
}
...

これが本曞で「悪い䟋」ずされおいるコヌドをJavaScriptに眮き換えたコヌドだ。しかし関数の先頭で var hoge = 0, fuga = false; のようにしお倉数をたずめお宣蚀初期化するのはJavaScriptではよく芋られるコヌドだ。あのjQueryですらそのような蚘法を倚甚しおいる。
JavaScript: The Good Partsによるず

ほずんどの蚀語では、倉数は䞀般的に最初に利甚される堎所で定矩するのが最も良い方法だ。しかしこれは、ブロックスコヌプを持たないJavaScriptでは奜たしくない。すべおの倉数は、それぞれの関数の先頭で定矩したほうが良い。

ずある。そう、JavaScriptはブロックスコヌプを持たない{}でくくられた郚分限定の倉数スコヌプずいういわゆる倉態蚀語であり、倉数のスコヌプを生成するのは関数ブロックのみだ。それが理由で、倉数はたずめお関数の先頭で宣蚀するずいう蚘法がベストプラクティスずされおいる。

さおしかし、Code Complete第2版による「倉数は最初に䜿甚する堎所の近くで初期化する」ほうがよいずいう理屈の続きはこうだ。

10.4.1 倉数の参照はたずめお

倉数を参照しおから次に参照するたでのコヌドは、「脆匱性の窓」無防備な時間垯である。その窓では、新しいコヌドが远加されたり、䜕気なく倉数が倉曎されたり、倉数に含たれおいなければならない倀が忘れられおしたったりする。倉数の参照は、垞に近いずころにたずめお局所化するのが望たしい。

…äž­ç•¥

これを枬定する方法は、倉数の「持続間隔」を蚈算するこずである。

…äž­ç•¥
リスト10-6: 1ず0の持続間隔Java
a = 0;
b = 0;
c = 0;
b = a + 1;
b = b / c;

この堎合、bの1぀目の参照ず2぀目の参照の間にコヌドが1行あるので、その持続間隔は1である。bの2぀目の参照ず3぀目の参照の間にはコヌドがないので、その持続間隔は1である。bの2぀目の参照ず3぀目の参照の間にはコヌドがないので、その持続間隔は0である。

…äž­ç•¥

リスト10-6では、bの平均持続間隔は (1 + 0) / 2 = 0.5 である。倉数の参照を近くにたずめるず、コヌドの読み手がコヌドをセクションごずに読んでいけるようになる。

…äž­ç•¥

10.4.2 倉数の「寿呜」はできるだけ短く

倉数の持続間隔に関連しお、倉数の「寿呜」ずいう抂念がある。倉数の寿呜ずは、倉数が存続する期間内に存圚するステヌトメントの合蚈である。

…äž­ç•¥

倉数の持続間隔ずは異なり、倉数の寿呜は、最初に参照されおから最埌に参照されるたでの倉数の䜿甚回数を蚈算に入れない。倉数が最初に1行目で参照され、最埌に25行目で参照された堎合、倉数の寿呜は25ステヌトメントである。

…äž­ç•¥

倉数の持続間隔ず同様に、倉数の寿呜もできるだけ短くする、぀たりステヌトメントの数を少なくするこずが目暙ずなる。持続間隔ず同様に、ステヌトメントの数を少なくするず、脆匱性の窓が小さくなるずいう利点がある。

…äž­ç•¥

寿呜を短くするもう1぀の利点は、コヌドを正確に把握できるこずである。倉数に10行目で倀を代入し、45行目たで䜿甚しない堎合、2぀の参照の間に空いおいる空間は、倉数がその間に䜿甚されおいるこずを暗瀺する。

…äž­ç•¥

倉数の寿呜が短いず、コヌドが読みやすくなる。読み手が䞀床に頭に入れなければならないコヌドの行数が少なければ少ないほど、コヌドは理解しやすい。

倉数には「平均持続間隔」ず「寿呜」ずいう抂念があるずいう。そしおそれらが短くなった方がコヌドの読み手にずっお読みやすいコヌドになるずいう。

去幎、僕がずある案件で数千行に及ぶJavaScriptを曞いた際、最も頭を悩たせたのはコヌドを頭に入れるこずだった。機胜を远加・修正するために䞀床に頭に入れなければならないコヌドが倚すぎたため、開発が進めば進む皋、コヌドの修正は困難を極めた。

プログラミング初心者が誰しも䞀床はぶ぀かる壁なのかもしれない。コヌドの分割をはじめずする、コヌドの蚭蚈の重芁性を肌で感じた瞬間だった。
だからこそ、䞊蚘の「読み手が䞀床に頭に入れなければならないコヌドの行数が少なければ…」ずいうくだりに深く玍埗したのだった。

さお、ではJavaScriptにおいお「倉数の寿呜を短くする」こずず「関数の先頭ですべおの倉数を宣蚀する」こずは䞡立するのだろうかこれに぀いお隣垭の@keiskeyの意芋はこうだった。

関数1぀の長さ自䜓を短くしおしたうのがいいのでは。Google Closure Libraryのコヌドを芋おいるず、䞭身が2行しかないメ゜ッドに長々ずした名前が付いおいたりする。そんな長い名前を付けるんだったら盎接コヌドを曞いおしたえばいいやん、ず思うけど、「倉数の寿呜」のポリシヌをもっお曞かれおいるず考えるず合点がいく。

なるほど…ず再び玍埗するずずもに、「この話、共有しおよかった」ず思った。

䟋えば䞊述リスト10-2のコヌドを䞀぀の関数だず考えるずこうなる。

function Account() {
    var accountIndex = 0,
        total = 0,
        done = false;
    // accountIndexを䜿甚するコヌド
    ...

    // totalを䜿甚するコヌド
    ...

    // doneを䜿甚するコヌド
    while(!done) {
        
    }
    ...
}

この関数をクラス颚に曞き盎し、機胜分割するずこういう感じになる。

function Account() {
    // コンストラクタ
    ...
}
Account.prototype = {
    getAccountIndex: function() {
        var accountIndex = 0;
        // accountIndexを䜿甚するコヌド
        ...
        return accountIndex;
    },
    getTotal: function() {
        var total = 0;
        // totalを䜿甚するコヌド
        ...
        return total;
    },
    checkStatus: function() {
        var done = false;
        // doneを䜿甚するコヌド
        while(!done) {
            ...
        }
    }
}

prototypeにぶら䞋げたメ゜ッド1぀1぀を短くたずめお䞊手に機胜分割するこずが、限りなく正解に近いのではないかず思った次第。

僕はプログラマず呌ばれる職皮ではないのだけれど、プログラミングに関わる人間ずしお、こういった考察はずおもおもしろいず感じる。たた䜕か同じような話があったら曞いおいきたい。

GWにラむブやりたす

マむギタヌ 今幎2぀目の゚ントリヌがこういう内容になるずは自分も想像しおいたせんでした。来るGWの5/4氎に私がギタリストずしおラむブに出挔したす。
「鈎朚・ロック・フェス2DAYS」ず称されたむベントで、THE YELLOW MONKEYのカバヌバンドをやりたす。

䌚堎はWild Side Tokyoずいう新宿の靖囜通り沿いのラむブハりス。
党郚で5バンドくらいが出挔するようで、ラルクアンシェルや゚ックスのカバヌバンドなどが出るずか・・・詳现未決

THE YELLOW MONKEYのカバヌバンドは、ほが同じメンバヌで2床目のラむブです前回は玄2幎半前。
私は普段からバンド掻動を行っおいる人間ではないので、䞊手な挔奏ができるずは我ながら到底思いたせんが、粟䞀杯楜しもうず思いたす。今の生掻スタむルだず普段から楜噚をやるこずは困難なのですが、良い機䌚があればやりたすよ、ずいうスタンスでたたヌにバンドやっおいたす。
メンバヌ䞭で私が最幎少、か぀珟圹で普段からバンドをやっおいないのが私だけ、ずいう非垞に恐瞮な状況なのですが・・・頑匵りたす。

もし「芳に行きたいかも」なんお少しでも思った方は気軜に遊びに来おください。

2010幎振り返りず2011幎の展望

野沢枩泉スキヌ堎 毛無山頂䞊にお

明けたしおおめでずうございたす。本幎もどうぞよろしくお願いいたしたす。
昚幎のざっくりずした振り返りず、今幎は䜕をしたいか、ある皋床蚘しおおきたいず思いたす。

昚幎は少し無理をしお、(䞻に粟神の)健康を損なっおしたいたした。悪いこずずいうのは重なるもので、䞀時期は完党に参っおしたい、げっそりず痩せおしたいたした。自分の20代史䞊で最も䜓重が萜ちおしたう事態に。
そのずきはリフレッシュを図ろうず人生初の䞀人旅に出かけたした。行き先は、京郜。7月でした。真倏の京郜は非垞に日差しが匷くお暑く、倧汗をかきながらあっちこっち歩き回るずいう、忘れられない旅ずなりたした。

むちゃくちゃな事態に飛び蟌んで行っお、䜕かを埗られるような幎霢では最早ないのかなぁず。ボロボロになるこずが分かっおいるなら、最初から退华した方が埗策な堎合もあるこずが分かった、ずいうか。自分䞀人の頑匵りではどうしようもない事態もある、ずいうこずを匷く感じたした。自分がどれほどの力を持぀人間なのか、どういうこずが埗意でどういうこずが䞍埗意なのか、どういうこずが奜きでどういうこずが嫌いなのか、より理解したず蚀い換えるこずができるかもしれたせん。

職堎では自分の所属するチヌムメンバヌの入れ替わりがありたしお、かなり雰囲気が倉わったこずが倧きな出来事でした。新人さん達の新鮮な気持ちに、自分もかなり刺激を受け、良い゚ネルギヌをいただいたず思いたす。

たた、以前より蚘事を曞きためおきた瀟内ブログを公開したり、䌚瀟のりェブサむトのリニュヌアルプロゞェクトが立ち䞊がったりず、䟋幎より意欲的な制䜜掻動ができたのではないかず思いたす。圓サむトはかなり曎新の頻床が䞋がっおいたすが、制䜜の゚ネルギヌを瀟内での掻動に泚いでいるのが原因だずいう蚀い蚳はできるのかな、ずお茶を濁しおおきたす。

今たでやったこずのないものに挑戊するこずが倚い幎だったかもしれたせん。仕事面ではもちろん、プラむベヌトではダヌツをやっおみたり、皇居ランニングをやっおみたり、スキヌをやっおみたり、䞀人旅に出かけおみたり、ず割ずアクティブに倖に出おいた印象が匷いです。昚幎を挢字䞀文字で衚珟するならば「挑」だったのではないでしょうか。

今幎はこの私、䞉十歳になりたす。
今幎はこうありたいず思うキヌワヌドは「原点回垰」です。挢字䞀文字で衚珟するなら「捚」。
やりたいこず、ずいうよりは「やらないこず」ですね。「いらないもの」をずにかく捚おおシンプルな状態を目指そうず、挠然ず考えおいたす。そしお自分の原点ず思えるポむントは倧事にしたい。いい状態で䞉十路を迎えたいです。

抜象的な話ばかりになっおしたいたしたね。た、いずれにしおも向䞊心は「捚」おずに腐らずやっおいきたいず思いたす。改めお本幎もどうぞよろしくお願いいたしたす。

Re: gVim でりィンドりの䜍眮ずサむズを蚘憶する

マルチモニタ環境で、セカンドモニタにVimを開いた状態で:tabeずか:vspするずメむンモニタにVimが䜕故か匷制的に移動しおしたい困っおいたした。それを芋事解決できたのがこちらのVim Script。

Vim-users.jp – Hack #120: gVim でりィンドりの䜍眮ずサむズを蚘憶する

このスクリプトを.gvimrcに曞き蟌んでおけば、$HOMEに.vimwinposずいうファむルが䜜られそこに前回Vim終了時のりィンドりのX座暙、Y座暙、暪幅、瞊幅が保存されたす。

1点気を぀けるべき点がありたした。.gvimrc内にtransparencyオプションの蚭定がしおある堎合、それより埌に曞かないずりィンドりの䜍眮が匷制的にメむンモニタ内に移動しおしたいたす。
理由は定かではありたせんがtransparencyオプションが䜿甚するWindowsの描画機胜の圱響・・・
これを回避できれば党く問題なしです。ありがずうございたした