WWDC 2014に行ってきた

チケットは同じチームの別の人が当てたのですが、休暇取るから行けないというので、棚ぼたで行ってきました。初めてのWWDCと言う事で勝手がよくわからなかったのですが、@nakiwoさん(以下敬称略)に色々教えてもらいまして、なんとかなりました。せっかくなのでダラダラと雑感を書きます。

続きを読む

nodejs+SSEを試してみる

仕事でログを可視化したいんですけど、どうせならリアルタイムで処理したいなと思いまして、ちょろちょろ調べていると、SSE使ったら良いらしいと言うので試してみました。本当はsinatraを使いたかったのですけど、SSEと組み合わせるのが面倒そうだったので、素直にnodejsにしました。

続きを読む

Hello Rscript World

データサイエンスな人たちがRでゴニョゴニョしていろんなデータをグラフにしてくれてるんですけど、僕のいるチームからの視点だと、ちょっとカユいところに手が届いてないんですよね。

なんですけど、データサイエンスな人たちのリソースは貴重で、気軽に色々お願い出来ない雰囲気なので、まぁリポジトリも社内には公開されているし、自分でやるかっていうのでRscriptをちょっと触ってみる事にしました。

続きを読む

Google Codejam 2014 Qualificationラウンドの三問目

今日はGoogle CodejamのQualificationラウンドでしたね。

張り切って参加したもののMinesweeper Masterが、解けそうで解けなかったので書いときます。マインスイーパが1クリックで解ける条件として、空のセルは1つの領域に固まってる必要があって、それをボードのサイズで細かく場合分けして行く感じでした。

僕は「ボードの小さい方の辺が2以上の場合に、空のセルが5もしくは7の時は解けない」という条件が思いつけず、あえなく時間切れになってしまいました。サンプルを処理するまでは、結構簡単に出来たのですけど、
そのダラダラデバッグしてたら解ききれなくて悲しいです。タイムアップ後少し修正したコードを貼っておきます。

# -*- coding: utf-8 -*-

import sys


def judge(R, C, M):
    E = R * C - M # empty
    W, last_row, need_adjust = (0, 0, False)
    if E == 0:
        pass
    elif E == 1 or M == 0:
        W = C
    elif C == 1:
        if E > 0:
            W = 1
    elif C == 2:
        last_row = int(E / 2) + 1   # 1 base
        if E % 2 == 0 and E >= 4:
            W = 2            
    elif E == 5 or E == 7:
        pass
    elif C >= 3:
        for w in range(2, C+1):

            last_row = int(E / w) + 1   # 1 base
            last_row_num = E % w

            if E < = w: continue
            if last_row > R: continue
            
            if last_row == 2:
                if last_row_num == 0:
                    W = w
                    break
            elif last_row >= 3:
                if last_row_num >= 2 or last_row_num == 0:
                    W = w
                    break
                elif w >= 3 and last_row_num == 1 and R >= 3:
                    W = w
                    need_adjust = True
                    break
    return W, last_row, need_adjust



for T in range(1, int(sys.stdin.readline())+1):
    (R, C, M) = map(int, sys.stdin.readline().split(' '))
    transpose = False
    if C > R:
        (R, C) = (C, R)
        transpose = True

    E = R * C - M # empty
    W, last_row, need_adjust = judge(R, C, M)
    if W == 0:
        ans = 'Impossible'
        print 'Case #%(T)s:\n%(ans)s' % locals()
        continue

    # make board
    board = [['*'] * C for i in range(R)]
    for i in range(E):
        c = i % W
        r = i / W
        board[r][c] = '.'
    if need_adjust:
        board[last_row-1][1], board[last_row-2][W-1] = board[last_row-2][W-1], board[last_row-1][1]
    if transpose:
        board = map(list, zip(*board))
        R, C = (C, R)
    board[0][0] = 'c'

    # show answer
    print 'Case #%(T)s:' % locals()
    def show_board(board):
        for row in board:
            print ''.join(row)
    show_board(board)

今年はTシャツ欲しいです。

Google Glass買った

Google Glassはまだ一般には販売されてなくて、あらかじめExplorer Programに申し込んでおいて、枠が空いたらメンバーに招待される感じになっています。しかもアメリカに住所がないと買えません。僕は1年くらい前に申し込んで、ようやくInvitationが送られてきました。まぁ1500ドルとか笑えない金額なんですけど、せっかくアメリカに住んでるし、ウェアラブルコンピュータが次のトレンドっぽいし、Androidも覚えたいし、ボーナスも貰ったし、まぁいいかというので買いました。

続きを読む

Xcodeプロジェクト内の使われてないリソースを探す

iOS7以降、主なアプリはほぼフラットなスタイルに移行していますね。iHeartRadioでもフラット+iOS7対応は一旦完了しているものの、まだ試行錯誤の途中でバージョンアップ毎に結構デザインを変更しています。

そこで問題になるのがリソースの管理です。プロジェクトの体制にもよると思いますが、一般に新しいファイルの追加は簡単でも、古いファイルを削除するのは本当に使われてないか確認するコストが高くて面倒です。そうして気がついたらプロジェクトの中が古い画像ファイルだらけになっていて、これは良くないなというので使われてない(かもしれない)画像ファイルを列挙するスクリプトを書きました。

続きを読む