31 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 1 2 3 4 5

ここは Web や Android アプリのプログラマでありチェスやバイク、株式投資を趣味とするコジオンこと Hideyuki Kojima の日記です。 毎日何かしら欠かさず書いています。

この Blog の他に Qiita にもいくつか技術系の記事を投稿しています。 YouTube のチェス実況チャンネル に毎日 lichessChess.com の 10 分レート戦の実況動画を投稿しています。

連絡はメールでお願いします。kojionilk あっとまーく gmail どっと com です。

最近のコメント

何年か毎に「英語勉強したい病」にかかるのだが、今回もその病にかかったようだ。

私が高校の時に英語を勉強していた時は網羅的な文法書として「ロイヤル英文法」が定番だったのだが、 今の定番は「Forest」というものだという事を知った。 高校生だけでなく大学生や社会人も英文法はこれ 1 冊で OK らしい。 早速本屋で立ち読みしてみたが、確かに記述が平易で分かりやすい。しかも専用の問題集もあって勉強が捗りそうだ。

しかし、大学受験の英単語などは依然として英単語ターゲット 1900 や速読英単語なのか。 これは私が高校生だった時と変わらない……。 あと「英文問題精講」「英語長文問題精講」などもそうだ。 英文を読む系統の問題集であれば社会人でも使えそうだ。 妙に受験にフォーカスした英文法問題集などは今解くこともないだろう。

英英辞典 (Oxford Advanced Learner's Dictionary) がネットから検索できたりするし、いい時代になったものだと感じる……。 その代わり、勉強の気が散る要素が周りに沢山あるというのが困ったものだとも言えそうだが。

正確には昨日の日記だがハンバーガーの記事と分けたいので便宜上次の日に書く。

シャネルの日本における旗艦店

前から妻に xx 歳になる時にシャネルのバッグを買う約束 をしていたのでそれを果たす為にシャネル銀座店に赴いた。 シャネルの店自体は表参道や他の場所にもあるが銀座店が旗艦店 (フラッグシップ) らしい。

シャネル銀座店は 12 時開店なので先に食事を済ませてから向かった。 実際に銀座に行ってみるとシャネルの店の近くにルイヴィトン、カルティエ、ブルガリ等のブランドショップが立ち並んでいる。 そこかしこから中国語 (普通話) が聞こえてくる。

ビル全体シャネルだが通常見ることができるのは 3F まで

入ってみると当然だが非常に華美な雰囲気が漂っている。 1 階から 3 階まで見ることができるようで、バッグや財布、コスメの他に服や腕時計も置いてあるようだ。 興味本位で服の値札を見てみたら 30 万とか書いてあった……。

店内を適当に見ていたら程なくして店員がやってきて「何をお探しですか?」ときた。 バッグを探している事を話すとカタログアプリがインストールされた iPad で見ることを案内された。これは便利だ。 妻が検討している所の横に座り何か聞かれたら返事をすることにした。

購入

シャネルのバッグ

最終的に候補が「いつでも売っている定番モデル」と「今年の新作で在庫がもう無いモデル」の 2 種に絞られた。 アドバイスを求められたので以下のように答えた:

とりあえず値段は考えずに自分が後で後悔しない選択をするべし。

ケチるのは普段の消耗品を買うときにすべきで、こういった本当に欲しいものを買うときにケチるのが一番良くないと思うからだ。

というわけで「今年の新作で在庫がもう無いモデル」の方をお買い上げということになった。 値段は書くと辛いところなのでまぁ伏せておく……。まぁ本人が嬉しそうなのでめでたしということにしておこう。

ちなみに私から見てモノの品質が値段に見合っているかいうところだが、流石というべきか確かに手にとって見てみても品質は高いとみる。 が、まぁ果たしてこの値段で……と、やはり「ふるいにかけられている」気分ではある……。

しかし余談だが、店内には 40, 50 万もするのに割とペラペラなバッグだったり中がナイロン生地のモデルがあったりして正直全く理解できないものもあった。 私が「分かってない」だけなのか、それは結局分からなかった。

ブラザーズといえばグルメバーガー界ではファイヤーハウスと並んで古参でありグルメバーガーブームの火付け役として有名な名店と言われているようだ。 ブラザーズは人形町の店が本店なのだが新富町にもある。スペルが英語の brother's ではなく BROZERS' なので知らないと書けない。

それで今回ちょっと銀座に用事があったので新富町に寄って行ってきたというわけだ。

ロットバーガー

ブラザーズ ロットバーガー

実は人形町のブラザーズには行ったことがあるのでこれで 2 回目の来訪となる。 土曜の昼時に行ったにも関わらず席は意外と空いていた。超有名店だと思うのだが、グルメバーガー店は割と並ぶことがないので快適だ。

念願のロットバーガー (いわゆる全部入り) を注文。1,500 円。ソースはスイートチリにしてみた。

正直何か物凄い特徴を感じるバーガーというわけではないのだが、 パインの甘さの上にスイートチリソースで更に甘辛くなっているので若干甘さが強い不思議な感じになった。 スイートチリソースが食べた瞬間には辛さを感じないが食べてる間に結構口の奥が熱くなってきた。 辛いものが苦手な人は厳しいかもしれない。

何気に付け合せが多いのも嬉しいポイント。ポテトにピクルスにオニオンリングまで付いてくる。 これならグルメバーガーにあまり馴染みがない人でも 1,000 円オーバーのランチとして満足な内容なのではないか。

というわけで普通に美味しかった。近くに来た時はまた来ようと思う。

子供たちがマリオがとても好きなので、マリオトランプを買ってみた。楽しく遊んでいるようだ。

大人になってみると、子供の頃にやっていたトランプのルールを結構忘れていることに気づく。 大富豪とかスピードとかセブンブリッジとか覚えているだろうか?

ネットで検索して「思い出す」作業が必要だ。

Knot スモールセコンドモデルとカンパノラ天満星

Knot スモールセコンドモデルが届いたのでカンパノラと一緒に撮影してみた。 2 月 21 日に注文したので 4 日で届いた。もう注文殺到で発送が遅れていた事態は解消されたという事だろうか。

専用の箱に入ってきたが、高級感のカケラもなくなんだか安っぽい……。 今時のスマホに購入時についてくる箱のほうが高級感があるように思えてしまう。

現物を見ずに通販で購入したので以下良かった点と悪かった点をまとめる。 Knot の楽天店には割と購入者の生の声が書かれているので若干の不安があったが、 やはり届いてみると「なるほど」と思ってしまうところはあった。

良かった点

  • 薄い。とにかく薄い
  • 軽い。カンパノラと比べると差が歴然
  • 安い (14,000 円 + バンド代)
  • スモールセコンドの腕時計は持ったことがなかったので新鮮

悪かった点

  • 栃木レザーが意外と安っぽい
  • 噂通りスモールセコンドがずれていることがある
  • 少なくとも高級感は感じない

総括

あくまで 2 万円弱で購入できる腕時計としては「値段なり」という感じがする。 少なくとも「とても 2 万円弱の腕時計とは思えない」という印象はしない。 ただ、試さないがサファイヤガラスで引っ掻き耐性が強いというのは利点だろう。 それは確かにこの価格帯では搭載している腕時計は無いだろうから。

変に革バンドを選ばすにナイロンバンドあたりにしておくのが良い気もしてきた。 もう少し使ったら別売りのバンドを頼んでみようかと思う。

ともかく、せっかく買ったので仕事で使い倒してみる。

カンパノラが修理……というかバンド交換されて戻ってきた。39,000 円ほどかかった。かなり痛い。 バンドが痛むので、少しでも汗をかきそうな時期はつけるのを止めたほうがいいと思った……。

こういったプレミアムなものは買って満足するのではなく、その後のメンテナンスも見据えて買わなければ持たないのだと改めて思った。 まぁ、カンパノラなんてまだ安い方なんだろうな……。

バックギャモンで遊んでみた。 今の時代は YouTube に説明動画などあがっているので簡単にルールを学んで実践できるし、 道具が無くてもタブレットにアプリをインストールすればすぐに遊べるのでこういった新しいゲームを学ぶのには有利だ。

バックギャモンは世界ではメジャーだと思われるが日本ではマイナーなゲームの為 私は名前だけ知っておりどういうゲームかは知らなかった。 端的に言えば戦略的なすごろくという事だった。

チェスもそうだが、ちゃんとルールを学んで遊んでみると結構面白い。

カンパノラのバンド交換代は高かった

先日カンパノラ天満星のバンドが切れてしまったのでシチズンのサポートに宅配便で送り修理をお願いした事を書いたが、 どうもバンドの価格が間違っていたらしく約 40,000 円という結果になってしまった。 まぁ元々かなり高額なバンドであることは聞いていたのでそれほどの驚きは無いが、やはり痛い。

カンパノラはとても格好いい時計なのだが、普段使いとして気になるのが以下の欠点である:

  • デカくて分厚いので袖に引っかかる
  • 重いので重さが気になることがある
  • 革バンドなので夏着けられない

上記の為、実は仕事をしている殆どの時はキーボードを叩いている為、カンパノラは外して机の上に置いている。 まぁそれでも良いのだが、もう少し普段使いに適した時計は無いかと思いいろいろ探してみた、という話である。

要件から見るとスカーゲンが適任

今回の購入動機から要件は大体カンパノラと真逆で以下となる:

  • 薄いこと
  • 軽いこと
  • 安いこと
  • 革バンドであること (個人的な好み)
  • 白文字盤であること (同上)

上記で探してみるとほぼスカーゲン一択となる。 スカーゲンはデンマークの時計ブランドらしいが、フォッシルに買収されたので事実上アメリカのブランドという事だろうか。 アウトレットなどでもたまに見るブランドだが、非常に薄くて悪く言えば「のっぺりした時計」という印象。

さて、私の要件からこのモデルに候補を絞り込んだ。 本体重量 45g と軽く素晴らしい。しかしよく見るとケース厚 10mm と分厚くはないがそんなに薄くもない。 後、サファイヤガラスでなくミネラルガラスというのも少し気になる。値段もそんなに安くもない。

Knot という吉祥寺発の腕時計ブランド

何となくネットで探していたら Knot というブランドを見つけた。 何でも吉祥寺発の腕時計ブランドで比較的安価でしかもサファイヤガラス、薄くて軽くシンプルな時計を出していると。 その上、時計本体とバンドが別々に組み合わせ可能との事。 更に、ここの時計は簡単にバンドを付け替えられるのも特長の一つで、 例えば夏になって革バンドがキツくなってきたらナイロンバンドに付け替えて快適に使うこともできるようだ。

これはすごい!……と早速 Knot のサイトでいろいろカスタマイズして遊んでみた。

時計としては丸くてベーシックなモデルとクロノグラフ (ストップウォッチ) がついたモデルと四角いモデルがある。 四角いモデルもまぁ悪くはないが今回は普通のが欲しかったのでベーシックなモデルにした。 クロノグラフにすると少し見た目が豪華になるが、ストップウォッチは絶対使わないのと、その分少しだけ厚くデカくなるので却下。

丸いベーシックな時計のスペックが凄くて直径 36mm, 厚さ 6.5mm, 重さ 25g というコンパクトさ。 しかも 14,000 円と格安。デザインも良い感じ。 これはいいぞ!と革バンドの方も見繕ってネット上から注文してしまった。 どうも注文が殺到しているらしく、ネット上からだと売り切れのバンドがとても多い。 本当に好みのものが欲しいのであれば吉祥寺のショーケースまで足を運ぶ必要がありそうだ。

届いたらまた実物を見てレビューを行ってみようと思う。

草加駅近くにある有名店

アンチェインファームといえば埼玉県の草加駅近くにあるグルメバーガーショップである。 ファイヤーハウスで修行を積んだとのことで、ハンバーガーのテイストもそれに近いものになっているのが特長。

いわゆる全部盛りであるブギーバーガーやダブルチーズバーガー、アボカドチーズバーガーなどの定番どころ、そしてテックスメックスバーガーや明太クリームバーガーなどの変わりどころも抑えている。

あまり席数が多くない店だが、土日行く感じでも並んだことはない。 まぁ、グルメバーガーの店で並ぶというのがかなりレアな体験ではあるが……。

印象がイマイチ良くない点として、いつも常連の人が居座っており店員さんとタメ口で喋っていたりするところが挙げられる。 仲良くなるのはいいのだが、カウンターに陣取って常に喋っているような状態だとどうも居辛い。

ダブルチーズバーガー

アンチェインファーム ダブルチーズバーガー

そんなわけでダブルチーズバーガー。パティが 2 枚にチェダーチーズが 3 枚入っているらしい。 1,450 円と東京で食べるより遥かに安い。 ポテトと写真では隠れているがピクルスが 1 本ついてくる。 手前のケチャップで顔文字が書いてあるのがこの店の特長だ。

まぁ普通にファイヤーハウスの味をイメージしてもらえば大体合っていると思われる。普通に美味しい。 ビールもハートランドにサミュエルアダムスと揃っており、カクテル類も豊富なのが嬉しいポイント。

草加に用事がある事はなかなか無いと思うが、近くに来た際には割とお薦めなお店となっている。

四六時中 海鮮賑わいおひつごはん

本日はアテンザの 2 年半点検の為にマツダのディーラーまで行ってきた。 前もって料金を払っているので半年ごとに無料でメンテナンスを受けられる。 まぁ、車に関する知識に乏しい私にはちょうどいいサービスというわけだ。

メンテナンスの待ち時間の間にイオンに行ったので、写真はその中の四六時中の海鮮賑わいおひつごはん。 正確には 2 人分のセットでサラダ、唐揚げ、おひつ、デザートと付いてきて手軽な料金で食べられるというものだった。 海鮮物がこの値段で食べられるのは良い。見た目も宜しい。

やってる企業がイオンイーハートでイオンの子会社なのは知らなかった。だから殆どの店がイオンに入っているわけか。

ゲームをやると確実に目が疲れて仕事に支障が出る。歳を感じる。 が、何故か Android タブレット (Nexus 9) でゲームした場合はそんなに目が疲れない。 MJ モバイルだが、静止画が多いからだろうか。 PC や Wii U で連続でゲームをプレイすると目が霞む。

3DS や PS Vita など更に目が疲れるのでやりたいゲームがあっても購入できない。残念だ。

何だか目が痒い。今年も花粉の季節がやってきたようだ。 私は 30 代になるまでは花粉症とは無縁だったのだが、ここ 2, 3 年で突然やって来た。 去年 Zoff で花粉症用の眼鏡を作ったので、今年もそれを使うことになりそうだ。 凄く効果があるかというと微妙だが、まぁ無いよりはマシだろう。

代々木公園の ARMS の新宿ルミネ支店

ARMS といえば代々木公園近くの店内犬 OK のグルメバーガーショップである。 私も以前一度行ったことがあるのだが、犬が普通に店内にいてドキッとした。 が、吠えるようなことはなく行儀よくしている犬ばかりだったが。

そんな ARMS なのだが、少し行きにくい位置にある。 小田急線で代々木八幡駅に行くか千代田線で代々木公園駅に行ってそこから歩く必要があり、普段そちらに用事がある人でないと行きにくい。 しかし新宿ルミネにも支店があるという事で、私はそちらを愛用している。

ランチセットが非常にリーズナブル

ARMS PICNIC アボカドチーズバーガー

グルメバーガーをランチで食べると最低でも 1,000 円かかるのはザラだが、 ここのランチセットは非常にリーズナブルで 1 つトッピングを加えたハンバーガー (チーズ、アボカド、照り焼き、フィレオフィッシュの中から選択) とポテト、そしてドリンク付きで何と 860 円 (税抜) である。これは安い……。

私はそれにチーズトッピングをしてアボカドチーズバーガーにしてみたがそれでも 1,000 円 (税抜) である。 グルメバーガーを食べない人から見ると 1,000 円は高いと思ってしまうかもしれないが、これは相場から見るとかなり安い。

しかもグルメバーガーショップでは珍しくクレジットカードが使えるし Suica も使える。 これは嬉しいポイント。

さて、安いとはいえ、味はしっかりと ARMS のハンバーガーで、 バンズが香ばしい。ハンバーガーは若干小ぶりでトッピングが少ないとボリューム感に欠けるかもしれない。 そういう人はトッピングを追加して対応すれば良いだろう。 パティの主張もあまり無いので、肉をガッツリ食べたいのであれば肉をダブルにするか、他の店を検討するのが良い。

会社の近くにあったら毎日のように通いたいというか、モス並の値段でこのクオリティは驚異的だと思う。

ただ、ランチタイムでない場合は普通の値段なので少し価格は上がるようだ。 今度はランチ以外の時間帯にセロリ&ハニーマスタードソースバーガーを食べてみたい。

Qiita で Bundle を少しだけ簡単に書くという記事を書いた。今回はそれの Kotlin バージョンとなる。

ソースコード

/**
 * Bundle オブジェクトを作成する utility method.
 *
 * @param args key と value の pair
 * @return Bundle
 */
fun bundle(vararg args: Pair<String, Any?>): Bundle = Bundle().put(*args)

/**
 * すでにある Bundle オブジェクトに key と value を複数追加する utility method.
 *
 * @receiver Bundle
 * @param args key と value の pair
 * @return Bundle
 */
fun Bundle.put(vararg args: Pair<String, Any?>): Bundle = args.fold(this, { bundle, (key, value) ->
    when (value) {
        null -> bundle.putString(key, null)
        is Boolean -> bundle.putBoolean(key, value)
        is BooleanArray -> bundle.putBooleanArray(key, value)
        is Bundle -> bundle.putBundle(key, value)
        is Byte -> bundle.putByte(key, value)
        is ByteArray -> bundle.putByteArray(key, value)
        is String -> bundle.putString(key, value)
        is Char -> bundle.putChar(key, value)
        is CharArray -> bundle.putCharArray(key, value)
        is CharSequence -> bundle.putCharSequence(key, value)
        is Double -> bundle.putDouble(key, value)
        is DoubleArray -> bundle.putDoubleArray(key, value)
        is Float -> bundle.putFloat(key, value)
        is FloatArray -> bundle.putFloatArray(key, value)
        is Short -> bundle.putShort(key, value)
        is ShortArray -> bundle.putShortArray(key, value)
        is Int -> bundle.putInt(key, value)
        is IntArray -> bundle.putIntArray(key, value)
        is Long -> bundle.putLong(key, value)
        is LongArray -> bundle.putLongArray(key, value)
        is Parcelable -> bundle.putParcelable(key, value)
        is Array<*> -> {
            if (value.size > 0 && value.all { it is String }) {
                bundle.putStringArray(key, value.map { it as String }.toTypedArray())
            } else if (value.size > 0 && value.all {it is CharSequence}) {
                bundle.putCharSequenceArray(key, value.map { it as CharSequence }.toTypedArray())
            } else if (value.size > 0 && value.all {it is Parcelable }) {
                bundle.putParcelableArray(key, value.map { it as Parcelable }.toTypedArray())
            } else {
                throw IllegalArgumentException("$key の配列における型パラメータが Bundle で扱えない.")
            }
        }
        is ArrayList<*> -> {
            if (value.size > 0 && value.all { it is String }) {
                bundle.putStringArrayList(key, ArrayList(value.map { it as String }))
            } else if (value.size > 0 && value.all {it is CharSequence}) {
                bundle.putCharSequenceArrayList(key, ArrayList(value.map { it as CharSequence }))
            } else if (value.size > 0 && value.all {it is Int}) {
                bundle.putIntegerArrayList(key, ArrayList(value.map { it as Int }))
            } else if (value.size > 0 && value.all {it is Parcelable }) {
                bundle.putParcelableArrayList(key, ArrayList(value.map { it as Parcelable }))
            } else {
                throw IllegalArgumentException("$key の ArrayList における型パラメータが Bundle で扱えない.")
            }
        }
        else -> throw IllegalArgumentException(key + "に対応する値が解釈できない.")
    }
    bundle
})

使用例

以下の様な感じで使える:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // Bundle オブジェクト生成 {hoge: "fuga", hage: [1, 2, 3]}
    val b = bundle("hoge" to "fuga", "hage" to arrayOf(1, 2, 3))

    // Bundle にあたかも put メソッドがあるかのように {hehe: "ouie"} 追加
    b.put("hehe" to "ouie")
    println(b)  // Bundle[{hage=[Ljava.lang.Integer;@a0250eb, hehe=fufu, hoge=fuga, hoho=ouie}]
}

拡張関数

Kotlin だと何が有利かというところで 1 つめ。 拡張関数という仕組みがあり、既存クラスにあたかもそういうメソッドを持っているかのように関数を追加できる。 上記例の fun Bundle.put(vararg args: Pair<String, Any?>): Bundle がそれである。 この仕組のお陰で別途ユーティリティクラスを作成してそれを呼ぶようなことをしなくても直接オブジェクトから呼べて自然な実装となる。

第一級関数

Java だと必ずクラスを作ってその中にメソッドを書かなければならないが Kotlin は一番外側に関数を記述可能。 上記例の fun bundle(vararg args: Pair<String, Any?>): Bundle がそれである。 しかもこの外側の関数をそのまま import できる (Java だとちょっと違うが static インポートに当たるか) のでソースコードがスッキリする。

to は custom operator

"hoge" to "fuga"to って何だろう。言語仕様だろうか。などと思ったかもしれないが、これは custom operator でビルトインのライブラリに以下のように定義されている:

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

この infix というのを付けると自由な演算子が追加できるらしい。 この例だと任意のクラス A, B に対し to 演算子を適用すると Pair<A, B> インスタンスを生成して返す、というところか。

以前 Kotlin にはタプルがあったらしいが、これがあるので廃止されたらしい。

Hello World が短い

関係ないが Kotlin の Hello World が短い。以下で良い:

fun main(args: Array<String>) = println("Hello Kotlin!")

Java は以下:

public class Java {
    public static void main(String...args) {
        System.out.println("Hello World");
    }
}

今日は 2 月 15 日なのだが 3 月 31 日で第四四半期が終了するのでその半分が終了したことになる。 つまり 1/4 の半分で 1/8 が終了したことになる。

まだ今年始まったばかりじゃないか、と思わないだろうか。私は思う。だが、もう 1/8 が終わってしまった。 こんな感じで今年 1 年も終わってしまうのだろうな……。

バレンタインデー

本日はバレンタインデーだった。あの有名な女性が男性にチョコレートを贈る日だ。 恐らく全国各地で多くの男女がはにかみ、顔を綻ばせ、そして嘆いたことだろう……。

私はといえば毎年妻と職場の方から頂くのが鉄板になってしまった。 まぁ私は人付き合いが悪いので、毎年のこの貰い方に変化が出ることはないだろう。

というわけで写真は妻から貰ったとても有名なベルギーのチョコレートである。 チョコレートとはいえ、やはりゴディバともなると一粒一粒が複雑な味わいがして美味しい。

今日は暖かかったので若干溶けかかってしまった……。

シェイクツリーといえば食べログのハンバーガーで常に上位に入ってくるかなりの有名店で、 実は私は以前 1 回行ったことがあるのだが、今回スカイツリーに行ったついでに再訪してみた。

アボカドチーズバーガーセット 1,300 円

シェイクツリー アボカドチーズバーガー

ランチ時間に行ったので割とベーシックなメニューしかなかった代わりにそこそこ安かった。 アボカドチーズバーガーセット 1,300 円。ポテトとドリンク付き。

ここのハンバーガーはあまり大きくないのだが、今更どうこう言う必要がない位完成度が高い。 バンズが香ばしい。食べていて安心する感じだ。 とはいえ、この店には凝ったハンバーガーが幾つかあるので、そちらも食べてみたかった。それは夜か祝日に行かないと駄目なのか。

この店はカクテルも非常に凝っており、妻はミリッサ (パッションフルーツ、ライチ、グレープフルーツ、パイナップル) を頼んだのだがとても美味しかった。 私は本日のビールを頼んだのだが、本日のビールがレーベンブロイだったので意外と普通だった……。もう少し凝ったのが良かった。

地味にポテトやピクルスも美味しい

個人的にイマイチな店はサイドメニューの手抜きにそれが出ると思っているが、シェイクツリーのポテトはとても美味しい。 アンチェインファームもこういうテイストのポテトだった気がするが、若干太めの「芋感」を感じるポテト。揚げ加減も絶妙。 こういう店だとサイドメニューも食べたくなるから困ったものだ。

スカイツリーに初めて登った

スカイツリー外観

スカイツリーに関しては Wikipedia に以下のように記載がある:

東京スカイツリー(とうきょうスカイツリー、英: TOKYO SKYTREE)は、東京都墨田区押上一丁目にある電波塔(送信所)である。観光・商業施設やオフィスビルが併設されており、ツリーを含め周辺施設は「東京スカイツリータウン」と呼ばれる。2012年5月に電波塔・観光施設として開業した。

ということは、開業してから 3 年半が経過したわけだ。 スカイツリーの来場者数が伸び悩んでいるらしいが、やはり土日は混雑するだろうから今日有給休暇を取得し行ってみた。 これはまさに今入ろうとした所の下で撮影したものである。

個人的には、確かに高いのはいいのだが、外観がどうも味気が無い気がする。 見た目だけを言うと東京タワーの方が好きだ。

今日はあまり天候が良くなかったし、平日なのもあってか当日チケットはほぼ並ぶことなしに購入できた。

まず展望デッキ

スカイツリー展望回廊の看板

まず展望デッキの料金を支払い、エレベータで展望デッキまで登った。 350m が 50 秒で到達するらしい。体感的には 50 秒もかかったとは思えないほど早かった。すごい。

スカイツリーは展望デッキ (350m) と展望回廊 (450m) でそれぞれ料金を徴収される。 これが大人料金でそれぞれ 2,060 円と 1,030 円で合計 3,090 円である。 東京タワーなどと比べて高いと揶揄される理由であるが、展望デッキからの眺めは非常によく、下を走っている電車や車がまるでミニチュアのように見える。

天気が良いと富士山なども見えるらしいが、残念ながら天候が悪くそこまでは見えなかった。

休みの間日とはいえ平日なので人はそんなに多くなく、割と快適に見ることができた。 展望デッキは 3 階に分かれており、それぞれお土産や幾つかの喫茶店があったりする。 お土産を覗いてみたが、スカイツリー内限定という名目で売られている幾つかの商品がボッタクリ価格に設定されていて閉口した。いくらなんでも高すぎる。 これでも限定という言葉に弱い方々は買ってしまうのだろうか……。

展望デッキからは更に展望回廊へ登るエレベーターがあり、そこでチケットを購入して登った。ここでも待ち時間はほぼ無かった。 エレベーターで登った先には地上 450m の世界が待っていた。写真は登ったすぐ先にあった展望回廊の看板である。

展望回廊

スカイツリー展望回廊からの眺め

展望回廊の方は展望デッキのようにカフェや土産物屋があったりすることはなく、純粋に更に高い位置からの眺めを楽しむだけのようだった。 とはいえ 350m と比べて劇的に変化するかというとそんな事も無く、まぁそれなりに高くはなったかな、程度で然程感動はない。 「せっかく来たのだから展望回廊も登ってみよう」という人が多いように思う。こだわりがないのであれば展望回廊はパスしても良い気がする。

写真は展望回廊から撮影したものである。天候が悪いがそれなりに良く撮れている。Nexus 5X のカメラ性能はなかなか気に入っている。

記念にと展望回廊のトイレなども行ってみたが、かなり狭く特別展望回廊だから豪華にとかそういったことはなくて少々残念だった。 そういえば展望デッキの方のトイレは行かなかったが、そちらはもう少しマシなのかもしれない。

カフェで小休止

スカイツリーのカフェ

展望デッキの方にはカフェが 2, 3 店舗存在した。我々が行ったのは展望デッキ最下層 (340m) のカフェである。 このカフェはカウンターだが窓側に向かって取り付けられており外の眺めを楽しみながらスイーツを頂くことができる。

写真はそこで注文したバレンタインパフェとテッペンペンサンデーである。 スカイツリー価格なので少々高いが、場所代も含まれていると思えば悪く無いかもしれない。 店舗自体は新しいのもありとても綺麗で清潔感があった。パフェも美味しかった。

割と朝早くに行ったので、出るときにはお昼の時間になっていたが、その頃になるとさすがに人がそこそこ増えてきた。 やはり早めに行ったほうがいいようだ。 混んできてなかなか窓際に寄れず外の眺めが見れない……というのでは何のために 2, 3 千円も払って行ったのかわからない。

特にお土産などは何も買わずにスカイツリーを後にした。

カンパノラ (天満星) の革バンドが切れてしまったのでシチズンの修理受付係に連絡して修理に出した。 足立区の修理受付係に宅配便で出した。

バンド交換に幾らかかるのかビクビクしていたが、どうも 14,000 円弱らしい。思ったより安くて良かった。 無理して夏に付けて汗が染み込んだ状態にしてしまうと革バンドが傷んでしまう。次からは気をつけようと思った。

それにしても、今のカンパノラは機械式のものも出ているが、そちらの値段が相当高い。これは庶民には買えない……。

マリオテニス ウルトラスマッシュを買ってみた。 面白いが左手が疲れるのであんまり長時間プレイするとキーボードが打てなくなりそうだな……。

あちこちで言われているが隠しキャラのクッパ Jr. が強すぎる。 適当に打ち返しているだけで殆どの球を拾えてしまう。 強いが使っていて面白くない……。

後キャラやボールが大きくなったりするメガ何とかは大味すぎて面白くない。

アボカドチーズバーガーをチョイス。 いつもの味で安心して頂けた。 味付けはシンプルな感じで素材の味を大事にしているハンバーガーで、 トッピングを増やすと目に見えて味わいがゴージャスになるのが良い。 これは Reg-On Diner 等にも通じるところで、グルメバーガーの魅力の 1 つだと思っている。

昨日から楽天のお買い物マラソンが始まっている。10 店舗買いまわりで最大ポイント 10 倍といういつもやっているものだ。 ちなみに以前このお買い物マラソンで買いまくっていたらポイントが付きまくって一気に 20,000 ポイントも付与されて 20,000 円分の買い物がタダになったことがあった。 買いたいものをメモっておいてこういうセールでまとめて買うのがお得。

DVD プレーヤ

子供が学習教材の DVD を観るのにいつも PS3 を使っていたのだが、 流石に買ってもうすぐ 10 年になるような初期型なのでいろいろ辛くなってきたところもあった。 コントローラが電池がすぐ無くなるのだが、今更大して安くもない PS3 のコントローラを買うのもどうかというところ。 あと初期型 PS3 の電力消費量が半端じゃない。何と 380W なので下手したらエアコン並である。

普通に DVD プレーヤを買うことにした。 価格コムなどを見てみると HDMI 接続できる DVD プレーヤが 4,000 円足らずで売られているのを見つけた。 こんなに安かったのか……と思いつつ注文。

電気ケトル

我が家ではよくある電気ポットを 10 年ほど使用していたが、 やはりそろそろ古くなってきたのと待機電力が気になるということで電気ケトルに買い換えようという話になった。 昨日実家に帰った時に父が電気ケトルを使用していたのもいいきっかけになったようだ。

DUALSHOCK 4

iMac にゲームパッドを繋いでちょっとしたゲームをやりたいと思ったのだが、 今や Mac に最適なゲームパッドは Logicool なのかと思いきや DUALSHOCK 4 (PS4 コントローラ) なのは知らなかった。 Mac に合わせてホワイトを買っておく。

本日は亡祖父の一周忌だった。 実家に多くの親戚が集まったが、話しているのは天気が良かったですねとか、知人にも同様の葬式があったとか、 インフルエンザが流行っているとか、北朝鮮がどうのとか、要するに世間話だ。 祖父の話をしているところはほとんど見受けられなかった。

勿論生きている人間が大事だ。それは分かる。だけどそれなら一周忌とは何故行うのか。

項目 22: 辞書やタプルで記録管理するよりもヘルパークラスを使う

長いけど要するに mutable な辞書や要素を位置で指定するタプルを複雑な情報保持に使用するのは止めてクラスを使おうという事だろう。 でも namedtuple は知らなかった。クラスを作るほどでもないけど辞書や tuple だと心もとない場合に使えそうだ。

項目 23: 単純なインタフェースにはクラスの代わりに関数を使う

他の言語だと、フックが抽象クラスで定義されます。

Java の事を言っているのだろう。まぁ Python を始めとした昨今の LL 言語は大抵関数をファーストクラスオブジェクトとして関数の引数に直接渡すことができるが、

状態を保守するために関数が必要な場合、状態を持つクロージャを定義する代わりに、__call__ メソッドを提供するクラスを定義することを考える。

なるほど。クロージャを使っていたかもしれない。

項目 24: @classmethod ポリモルフィズムを使ってオブジェクトをジェネリックに構築する

内容が難しくて若干辛みが……。ともかく、Python はクラスに対して __init__ メソッドという 1 つのコンストラクタしかサポートしていないので、代わりのコンストラクタを定義するために @classmethod を使うこと。

項目 25: 親クラスを super を使って初期化する

親クラスのコンストラクタを単純に (親クラス名).__init__() で呼び出すと、特にダイヤモンド継承時に親のコンストラクタが不当に 2 回呼びだされてしまい意図しない動作となることが書かれている。こういう場合は組み込み関数 super() を使うとダイヤモンド継承の頂点の __init__ は 1 回しか呼び出されない。

項目 26: 多重継承は mix-in ユーティリティだけに使う

まぁ多重継承は宜しくないのであまり使わないが mix-in 的要素だったらアリということだろう。

項目 27: プライベート属性よりはパブリック属性が好ましい

Python のプライベート変数 (頭に __ をつける) は厳密には特殊な構文で普通にアクセスできてしまう。

なぜ、プライベート属性の構文は、厳密な可視性を強制しないのでしょうか。最も単純な回答は、よく引用される Python のモットー「みんないい大人なんだから。」です。

Python はそういうところがある言語なのは認識している。定数が無くて UPPER_SNAKE_CASE で書いた変数を定数をみなすところとか。

プライベート属性は、コントロール外のサブクラスによる名前衝突を避けるためだけに使用する。

それが Python 流ということか。プロテクテッドの方がまだマシというのが驚いた。

項目 28: カスタムコンテナ型は collections.abc を継承する

abc は Abstract Base Class (抽象基底クラス) だ。Python でもこれを使えば抽象クラスが使えるということ。

項目 14: None を返すよりは例外を選ぶ

このあたりは Java と同じだ。null を返すより例外を選ぶ。

項目 15: クロージャが変数スコープとどう関わるかを知っておく

外側の関数の変数が内側の関数のスコープ内で参照できるのは知っていたが、外側の関数の変数への代入の挙動は知らなかった。 コードを見てみるのが早い:

def sort_priority(values: list, group: set):
    def helper(x: int):
        return 0 if x in group else 1, x  # group が helper 関数内で参照できる
    values.sort(key=helper)

numbers = [8, 3, 1, 2, 5, 4, 7, 6]
sort_priority(numbers, {2, 3, 5, 7})
print(numbers)  # [2, 3, 5, 7, 1, 4, 6, 8]

が、以下は正しく動かない:

def sort_priority2(values: list, group: set):
    found = False
    def helper(x: int):
        if x in group:
            found = True  # 外側の関数の変数に代入しているように見えるが, 実際は新たなローカル変数の定義, 代入
            return 0, x
        return 1, x
    values.sort(key=helper)
    return found

numbers = [8, 3, 1, 2, 5, 4, 7, 6]
found = sort_priority2(numbers, {2, 3, 5, 7})
print(found)  # False (想定どおりではない)
print(numbers)  # [2, 3, 5, 7, 1, 4, 6, 8] (これは合っている)

こういう場合 Python 3 だと nonlocal を使うらしい。上記コードの def helper(x: int): の下に nonlocal found とすれば動く。 ただ何か global 変数定義と似た危うさを感じるのでなるべく使わないほうがいいように見える。

ちなみに PyCharm だと nonlocal を使う前のコードで外側のローカル変数名と同じだと警告を出してくれる。

項目 16: リストを返さずにジェネレータを返すことを考える

その通りとしか言いようがないが、内包表記からジェネレータに変えるのは []() に替えるだけなので楽だが、 普通の関数の場合はなかなか思考が働かなかったりはする。

項目 17: 引数に対してイテレータを使うときには確実さを尊ぶ

いきなり内容が難しくなった気がする。イテレータは結果を一度しか生成しないので以下の様なことが起きる:

def f():
    for x in range(10):
        yield x

r = f()  # イテレータを変数に代入
print(list(r))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(r))  # [] になる. 既にイテレートは終了してしまっているがエラーは発生しない

print(list(f())  # 常に新たなイテレータを使うようにすれば OK
print(list(f())  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

クラスで __iter()__ を定義したものを使った場合は挙動が違うのか。知らなかった:

class A(object):
    def __iter__(self):
        for x in range(10):
            yield x

r = A()  # インスタンスを変数に代入
print(list(r))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(list(r))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

内部的には list() が新たなイテレータオブジェクトを作成するために A.__iter__() を呼び出すのだということが書いてある。 ただ、これだと複数回イテレートしてしまうことになるので、そうしたくない場合は結果を変数に代入して再利用するのがよい。

項目 18: 可変長位置引数を使って、見た目をすっきりさせる

これは Java にもある機能ではある。特筆すべきことはない:

def f(x, *args):
    return x + ': ' + ', '.join(args)

print(f('hoge', 'fuga', 'hage'))  # hoge: fuga, hage

項目 19: キーワード引数にオプションの振る舞いを与える

Python のキーワード引数は非常に有用だと思う。これのお陰で可読性が高まる:

def location(name, lat=35, lng=139, bearing=0):
    return '{}: ({}, {}) / {}'.format(name, lat, lng, bearing)

print(location(name='家', lat=35.1829, lng=139.8237))  # 引数の意味が明確なので読みやすい
print(location('家', 35.1829, 139.8237))  # これでも呼べるがどれが何の引数なのかがパット見わからない

特に関数定義が離れていた場合引数の位置と意味を調べるのが非常に面倒なので、キーワード引数にすることにより意味が明確になり読みやすい。

項目 20: 動的なデフォルト引数を指定するときには None とドキュメンテーション文字列を使う

関数の引数のデフォルト値が mutable なインスタンスだった場合に値が関数の初回呼び出し時の 1 回しか評価されないので 2 回目以降の呼び出しで前回の値が残っており奇妙な動作になってしまう、というのは Python では有名な話だと思う:

def log(message, when=datetime.now()):
    print('{}: {}'.format(when, message))

log('hoge')  # 2016-02-06 09:04:39.305342: hoge
log('fuga')  # 2016-02-06 09:04:39.305342: fuga

現在時刻をロギングするはずが、常に最初の log() 呼び出しの日時が出力されてしまう。 これを避けるためにデフォルト引数に None を使用しドキュメンテーション文字列に文書化せよとある:

def log(message, when=None):
    """タイムスタンプを使用したログメッセージを出力する.

    :param message: 出力するメッセージ
    :param when: メッセージ出力時の datetime. デフォルトは現在時刻
    """

    when = datetime.now() if when is None else when
    print('{}: {}'.format(when, message))

log('hoge')  # 2016-02-06 09:09:36.333739: hoge
log('fuga')  # 2016-02-06 09:09:36.333805: fuga

項目 21: キーワード専用引数で明確さを高める

Python 3 にキーワード引数を要求する構文があるとは知らなかった。普通の引数とキーワード引数の間に *, を挟むというもの。これは使いたい:

def log(message, *, when=None):
    when = datetime.now() if when is None else when
    print('{}: {}'.format(when, message))

log('hoge')
log('fuga', datetime.now())  # キーワード引数を使用していないので TypeError
log('fuga', when=datetime.now())  # OK

Python 2 にはこの構文が無いので **kwargs を使用せよとの事。

私が MVNOで Nexus 5X を安く運用しているのを見て妻が自分も MVNO にしたいとお願いされた。 ただ、私のように Android で良ければ安い SIM フリー端末は幾らでもあるのだが iPhone であることは譲れないという要件があった。 アップルストアから iPhone 6S の 64GB とか買うと 10 万オーバーする。リセールバリューが高いとはいえ結構勇気がいる値段ではある。

どうも 3 月 15 日のアップルの発表会で iPhone 5se という新しい端末が発表されると噂されているのでそこまで待ってみてはと提案した。

何故 iPhone が良いのか

何故だろうか。私には理解できなかったが、やはり iPhone のブランド信仰はまだ健在という事なのだろう。 個人的にはスマホの使い勝手は既に Android の方が優っていると思う。タブレットだと iPad 一択だが。

ただ一つ、多くの有料アプリを購入している場合別 OS に移行しにくいというのはあった。 だから例えばスマホが Android で有料アプリをそれなりに購入している場合タブレットを iPad にしてしまうとそれが有効利用できない。 まぁ私がスマホとタブレットを Android で統一しているのはその理由と Android アプリケーションの開発者だからだが。

今日は節分だ。小さい頃は豆まきなどよくやったものだ。

恵方巻きを食べたことがないが

今日はもうコンビニやらスーパーやらあちこちで恵方巻きが売られている。 米が主なので原価が安い割に高く売れるから儲かるのだろう。

私は北関東生まれだが、恵方巻きなど食べたことがないし、別に食べようとも思わない。 恵方巻きって何なんだろう、と思ってウィキペディアで調べてみたら以下の様な記述が見つかった:

>恵方巻、恵方巻き(えほうまき)とは、節分に食べると縁起が良いとされている「太巻き(巻き寿司)」、および、大阪を中心として行われているその太巻きを食べる習慣。「恵方巻」という名称は、1998年(平成10年)にセブン-イレブンが全国発売にあたり、商品名に「丸かぶり寿司 恵方巻」と採用したことにより広まったとされている。それ以前は「丸かぶり寿司」「節分の巻きずし」「幸運巻寿司」などと呼ばれていたことが文献で分かるが、「恵方巻」と呼ばれていたという文献類は見つかっていない。

つまり関東では私が大学生になる前から始まった習慣というわけだ。そういえば、大学にいた時に周りが「恵方巻きが云々」と言い出して「???」と思った事があった気がした。

ただこれも今の子供からすると、小さい頃からこの習慣に慣れ親しむことによって「節分にはその年の方角を向いて恵方巻きを齧るのが日本人として当然である」ということになってしまうのだろう。習慣を起こしたのがセブンイレブンなのが気にはなるが、そんなことを言ったらバレンタインやハロウィンやらクリスマスも結局ルーツは同じなのだろうから、今更どうこう言う事もないだろうし。

節分だから何を食べるのか

昨日妻に半分冗談で「明日は節分だから夕食はパエリアにして欲しい」などと訳の分からないことをお願いした。 ただ、これも世の中がそういう雰囲気で煽り立てていたら恐らく何もおかしくないということになってしまう。 世の中の人が恵方巻きを食べているから自分も食べるのが日本人らしいのだろうか。 こういうのは人と合わせておけば間違いない、つまり無難ということだろうか。 個人的にそういう「思考停止」をするのは嫌いだ。

バレンタインとかクリスマスも同じで、別に誰かに何かあげるのはその日でなくてもいいと思ってはいるが、 結局人は「きっかけ」がないとなかなか行動が起こせないもので、 そういった記念日がダシに使われている節があるので特に悪いとは思わない。 恵方巻きはそういう「誰かに何かを」的な要素が無くてただ単に消費活動を促進させようとしているだけに見えるから抵抗したくなってしまうのかもしれない……。

可愛いことは可愛いんだけど

2 ちゃんまとめサイトに載っていた。ミスヤングチャンピオン・潮田ひかる「初めてTバックをはいた」だそうだ。 初見、可愛い!と思って動画の方で見てみたら、うん、まぁ、その、なんだ……。

AKB とか好きな人だとまた感想が違うのだろうか。私はもうなんか冷めた目で見てしまうのでちょっと、といった感じだ。

そもそも「好きな芸能人は?」という質問に対して答えられないな……。

日曜の深夜の乃木坂 46 の番組も暇つぶしに見てたが

日曜の深夜に乃木坂 46 の番組やってるのだが、全く興味が無いがたまたまテレビを付けていたので観ていた。 14th シングルの選抜メンバーとやらの発表会をやっていた。誰がどの位置でどうのとか発表していたが、生駒里奈しか知らなかった。 やはりそれも同様で、可愛いことは可愛いんだけど、それ以上どうこうという気は起きない。 キャラが立ってれば別かもしれないが。

やっぱり若干老成してきたのだろうか……。

先月までは Java EE 開発で今月からは Android + PHP

先月までは出向して Java EE (Spring Framework) 開発に携わっていたが今月からは Android アプリに戻った。 Android に関してはいろいろと忘れており思い出すのが辛い。 Android だけやっていられればいいかもしれないがそういうわけにもいかない。

最も 1 つの技術のみやっていると思考パターンがそちらに傾倒してしまうので幅広くやるのは悪くはない選択肢だとは思っている。

やはり近くに安い飯屋があるのはいい

多くの社会人は昼休みの時に外に食事に行くものだが、前の職場だと近くに安い飯屋が無かったのでかなり苦労した。 というのも駅から遠かったからだ。 その点今の会社は近くに松屋や日高屋、てんやなど揃っている。 ワンコインで食べられるところが数箇所あると毎日ローテーションで続けていける。1 箇所だけだと辛い。

食事は「食べて終わり」なので高々 100 円 200 円の差でもそれが積み重なると大きい。