2012-03 << 2012-04 >> 2012-05

2012-04-30 (月)

昼過ぎまで寝る.

そういえば,28日はCode Jamだったのか.5/5,6もあるから,そのときできるかな.

まだ疲れていてやる気がでないので,アニメ見たり普段使ってるスクリプト類のバグを取ったり,Google Driveためしに色々遊んでみたりして過ごす.docsがドライブに統合されたけど,Google Driveのデータとしてはdocsへのショートカットなんですね.あとはpicasaの写真もファイルとしてアクセスできるようにならないかなぁ.

2012-04-29 (日)

*ニコニコ超会議2日目

幕張メッセ.

5時半に起きる.

結構余裕がある時間に出たのに,着いたのはギリギリ.気づいたら幕張本郷に向かっていたので,バスで海浜幕張へ.千葉の電車の乗り換えは難易度高くて無理…….

昨日,ルンバの電池残量がかなり怪しかったので,無操作時はこまめにスリープモードにするように.ルンバ側の5番ピンをGNDに落とすと電源入るようなので,配線を一本追加.

再度操作するときの反応が少し悪くなったけど,これだけで電池の消耗がかなり減った.

基本的に立ちっぱなしだったので足が痛い.帰ってすぐ寝る.

2012-04-28 (土)

*ニコニコ超会議1日目

幕張メッセ.

朝5時に起きた.眠い….

八丁堀で電車待ってたら,横に居たひとに超会議に行く人かと聞かれた.まぁ,間違いではないのだけど,なんでそう思われたのかだけがまったく腑に落ちないです.こんなに早く行く人居るんですねーとか話した気がするけど,幕張ついたらそれらしい人がもうたくさん居た.

IMG_20120428_073911.jpg (※写真はイメージです)

ニコニコ動画(闇)という展示をしていたけど,ほかのブースと比較してお金のかかってなさがやばい気がする.ホワイトボードとダンボール箱で看板作ってるブースは絶対に他には無い自信がある.パンフレットには展示名が書いてある以外には一切説明無い上,幕張メッセ的に本来はスタッフの控え室に使われる部屋でとても行きにくい場所にある.それでも,来てくれた人がいてよかった.ありがとうございます.

ルンバが走ってるのを眺めたり,色々話をしたり.

sang0が東京来てるらしいので終わった後中目黒でピザとか食べる.

気づいたら帰って寝ていた.

2012-04-27 (金)

*ニコニコ超会議0日目

幕張メッセ.

明日と明後日,ニコニコ超会議とかいうイベントがあるのでその準備.

ルンバを設置してきた.あとは一回りして様子を見る.

ラーメン食べた.

浜町に戻って普通に仕事.

2012-04-26 (木)

まだ色々準備できて無いので,仕事の後色々やる.眠い.

2012-04-22 (日)

Galaxy NexusuにAndroid 4.0.4のアップデートの通知が来ていた.っと思ったけど,もともと4.0.4だった気が.良くわからない.

会社へ.久しぶりに半田付けする日.時間無い.色々足りないものあったので秋葉原行く.

2012-04-21 (土)

色々やっておきたいので会社行く.

2012-04-17 (火)

頭と首と肩と腰が痛い...

眠い.

2012-04-16 (月)

Galaxy Nexusのテザリングできるようにしておいて色々正解だった.

*北海道三日目

さすがに疲れている.目が覚めたら,9時過ぎだった…….朝ごはん食べてゲレンデに.

IMG_20120416_115522.jpg

天気はよい感じに曇っている.

今日は平日だけど,それなりに人はいるな….派手に転んで,頭打った…….痛い.そして眠い.

温泉入ってバスの時間までだらだら過ごす.

19時くらいに空港に着いたので,21時の飛行機までラーメン食べたりお土産探しつつうろうろする.

IMG_20120416_201115.jpg

24時頃に帰宅.

2012-04-15 (日)

仕事の電話がかかってきたりしたけど,明日も北海道だし仕方ない.

*北海道二日目

スキー二日目.

朝からプリキュア見ている.

朝ごはん食べた後スキー場へ.今日は暖かいというより暑い.

IMG_20120415_141319.jpg

天気が良すぎた.

疲れたので帰りはバスでホテル戻る.

ここ2日間の食費がすごいことになってる.リゾート地は怖いな…….

IMG_20120415_194905.jpg

*Google Code Jam 2012 Qualification Round

A,B,CとDのsmallだけやる.Dのlargeは結構実装に時間がかかりそうな問題.解きたいけどQualification Roundだし,まぁいいか.20pt取ればよいらしい.

A,B,Cは飛行機の中と空港でバス待ってる間にやる.3Gk回線が遅くて提出も一苦労.Dは放置しようと思ったけど,スキーの後で見たら,smallだけ簡単だったのでやっておく.

B,Cはlargeとsmallの違いが良くわからないし,Dはもう別の問題と言って良いし,Aに至ってはsmallしか無い.largeとは何なのか.

A

Aはsmallしか無いっぽい.sampleのデータセットから変換テーブル作ると,qとzが含まれて無いので注意.問題文に出てくる.

確認は,smallのデータを食わせた結果を読んでみると安心できる.

#include <iostream>
#include <string>
using namespace std;

int main() {
    int N;
    string g;
    cin >> N;

    char map[128] = {0};
    string gg = "qz ejp mysljylc kd kxveddknmc re jsicpdrysi rbcpc ypc rtcsra dkh wyfrepkym veddknkmkrkcd de kr kd eoya kw aej tysr re ujdr lkgc jv";
    string en = "zq our language is impossible to understand there are twenty six factorial possibilities so it is okay if you want to just give up";
    for (int i = 0;i < gg.size(); i++) {
        map[gg[i]] = en[i];
    }
    for (int i = 'a' ; i <= 'z' ; i++) {
        if (map[i] == 0) {
            cerr << "NOT FOUND " << (char)i << endl;
        }
    }
    
    cin.get(); // skip LF
    for (int i = 0; i< N; i++) {
        char g_[1024];
        cin.getline(g_,sizeof(g_));
        g = g_;
        
        string ans;
        for (int j=0; j < g.size(); j++) {
            ans.push_back(map[g[j]]);
        }
        cout << "Case #" << (i+1) << ": " << ans << endl;
    }
    return 0;
}

B

英語の読解問題?ただ,条件に合うやつを数えるだけ.

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int T;
    cin >> T;
    
    for (int i = 0; i< T; i++) {
        int N,S,p;
        cin >> N >> S >> p;
        vector<int> tt;
        int sup = 0;
        int ans = 0;
        for (int j=0 ; j< N ; j++) {
            int t;
            cin >> t;
            tt.push_back(t);
            if (t >= p*3-2) {
                ans ++ ;
            } else if (sup < S && t > 1 && t<=28 && t >= p*3-4) { // min: 0 0 2 max: 8 10 10
                ans ++;
                sup ++;
            }
        }

        cout << "Case #" << (i+1) << ": " << ans << endl;
    }
    return 0;
}

C

桁を入れ替えて別の数作る.これもただ数えるだけか.桁数も少ないので全部見るだけ.

#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;

int main() {
    int T;
    cin >> T;

    for (int i = 0; i< T; i++) {
        int A,B;
        cin >> A >> B;
        int ans = 0;
        for (int n = A; n <= B; n++) {
            int dd = 1;
            while(dd<=n) {
                dd*=10;
            }
            dd /=10;
            set<int> ss;
            for (int d=10; d <= B; d*=10) {
                int m = n/d + (n%d)*dd;
                if (m > n && m <= B && ss.find(m) == ss.end()) {
                    ss.insert(m);
                    ans++;
                }
                dd/=10;
            }
            
        }

        cout << "Case #" << (i+1) << ": " << ans << endl;
    }
    return 0;
}

D(smallだけ)

smallの制約を見てみると,ただの長方形の部屋しか有り得ない設定なので,もう問題文とまったく別の問題になってる.反射の仕方とか深く考えず,合せ鏡で無限に繰り返されているパターンの中から条件に合う点を探していくだけ.どうせ最大の視界が50しか無いので,100*100の範囲の点全部に対してやる.

角度をもう少しうまく表現すれば綺麗にかけたな.

というわけで,smallだけやっておく.largeになってもどの点で反射するかが複雑になるだけで同じ方法でいい気はする.

#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <cmath>
using namespace std;

int main() {
    int T;
    cin >> T;
    for (int i = 0; i< T; i++) {
        int w,h,d;
        int px,py;
        cin >> h >> w >> d;
        cin.get();
        for (int y=0;y<h;y++) {
            char s[256];
            cin.getline(s,sizeof(s));
            for (int x=0; x<w ; x++) {
                if (s[x]=='X') {
                    px = x; py = y;
                }
            }
        }
        vector<double> degs;
        for (int y=-55; y<55; y++) {
            for (int x=-55; x<55; x++) {
                if (x == 0 && y == 0) continue;
                int tx = (w-2)*x + ((x%2)?((w-2)-(px)):(px-1)) + 1;
                int ty = (h-2)*y + ((y%2)?((h-2)-(py)):(py-1)) + 1;
                
                if ( (tx-px)*(tx-px) + (ty-py)*(ty-py) <= d*d ) {
                    double d = atan2(tx-px*1.0,ty-py*1.0);
                    for (auto it=degs.begin(); it!=degs.end(); ++it) {
                        if (abs(*it-d) < 0.00000000000001) {
                            d = 99;
                            break;
                        }
                    }
                    if (d < 10.0) {
                        degs.push_back(d);
                    }
                }
            }
        }

        cout << "Case #" << (i+1) << ": " << degs.size() << endl;
    }
    return 0;
}

2012-04-14 (土)

雪山.スキー.

北海道行ってきます.

*北海道1日目

7時に家を出る.

家出る直前で,今日Google Code Jamの予選だったことに気づいた.時間があったらやろうと思ってPCを持っていくことに.

IMG_20120414_083843.jpg

羽田に8時集合という話だったけど,当たり前のように集まりは悪かった.

飛行機待ってる間に問題が公開されたので,飛行機の中で読んでおく.新千歳空港でバス待ってる間にA,B,Cはやる.3G回線なのでlargeのファイルサイズがでかいとヤバなと思ったけど時間内にsubmitできた.

その後,バスでキロロリゾートへ.ホテルに荷物置いてシャトルバスでスキー場へ.

IMG_20120414_145521.jpg

IMG_20120414_153905.jpg

IMG_20120414_203619.jpg

暖かいので雪も解けてきている.16時でリフト止まってしまうのか.そしてナイターはもうやってないっぽい.残念.

帰りは歩いてホテルまで戻る.

とても眠かったのでDはやらない予定だったけど,smallだけやった.

2012-04-12 (木)

早く起きたので,読書.気づいたら日例のミーティング始まってる時間だったので会社に.毎日遅刻している甲斐もあって,日例の時間を夕方にしようという方向に.良かった.

2012-04-11 (水)

久しぶりに日付変わる前に帰った気がする.寝る.

2012-04-08 (日)

checkinstall-1.6.0でパッケージ作ろうとしたら,パッケージの作成に失敗して,ファイルが/usr/binとかに普通にインストールされてしまった.

結局,1.6.2の最新版をgitから取ってきて使ったらrpm作れた.

2012-04-07 (土)

14時間くらい寝た.洗濯とかしていたら,出かける時間になったので外に出る.

http://www.hotpepper.jp/strJ000762310/map/?vos=nhppalsa000013

たこやき食べる日.

*VPSを移行

移行のついでに,VPSのデータを整理していると,謎の巨大なファイルがたくさん出てきて分けがわからない.

何かのプログラムっぽいけど,明らかにx86のコードじゃないものとか,どう見ても乱数列にしか見えないちょうど128MBのバイナリファイルとか,何かのデータを解析しようとして途中で飽きたらしいスクリプトと一時ファイル類とか,まったく記憶に無くて,消すのが怖い.

とりあえず現時点で意味がわからないので,持って行ってもどうしようもないので,そういうファイルを除いて転送しておく.

お試し期間中は,2Mbpsに制限されるので,本登録しておく.

とりあえず,webとデータは移したので,あとは開発環境か….

ネットワーク周り

新しいやつは,前のVPS512より少しネットワークが少し遅い.

たぶんデータセンターの立地的な問題なのだろうけど,家からping打って返ってくるのに12msかかる.いままで4ms以下だったのが良すぎたのか.

tracerouteしてみると,いままでtk.sakura.ad.jpみたいなホストしか通ってなかったのだけど,os.sakura.ad.jpが挟まるようになったので,大阪とかにあるのかな.

scpでのファイル転送速度は,前のやつが8.5MB/sくらいだったのに対して,7.2MB/sくらいになってしまった.

-旧VPS新VPS
ping<4ms12ms
locationtk.sakura.ad.jpos.sakura.ad.jp
scp8.5MB/s7.2MB/s

まぁ,十分速いし許容範囲内か.

OS

FreeBSD8とCentOS5.5のどちらをメインにしようかと比較してたのだけど,やっぱりデフォルト状態でのパフォーマンスはCentOSの方がよさそうだな.そんなに細かく比べてないけど,FreeBSDの方がIO周りが速いときと遅いときのばらつきが大きい気がする.

2012-04-06 (金)

今日は早く起きて,会社行く前にアニメを消化する.

2012-04-05 (木)

仕事が忙しくて良くない感じ.アニメ見る時間が取れない.

2012-04-03 (火)

誕生日祝ってもらった.ケーキ食べた.

風強い.

2012-04-02 (月)

とても眠い日.

2012-04-01 (日)

rosylilly誕生日会.

*[Android] b-mobileでちゃんとアンテナ表示する

DesireのHTC Senceを使っていたときもそうだったのだけど,データ通信専用のb-mobile simだと接続できているのに圏外表示になってしまって嫌な感じ.今までアンテナ表示するウィジェットとかでごまかしていた.

1年くらい前にも,根本的に直そうと思ってAndroidのソース追いかけてて途中で挫折してたのですが,今日ググったら解決できている記事を見つけた.

http://bl.oov.ch/2012/01/b-mobile-sim.html

GsmServiceStateTrackerの修正でいけるのか.もっと面倒な箇所を変更しないといけないかと思っていました.

というわけで,早速やってみる.先の記事では上手くいってるようなのでどうにかなるだろう.

smaliとbaksmaliの使い方はこの辺を見た気がする.昨日,CellBroadcastReceiver.apkを作るときにも使いました.

java -jar baksmali-1.3.2.jar -a 15 -x -d framework  -o out framework/framework.odex

ここでGsmServiceStateTracker.smali を編集する

java -jar smali-1.3.2.jar -a 15 -o classes.dex out

odexなので-xを忘れないように.Android 4.0.4なのでAPIレベルが15ですが,問題なくいけました.

で,実機にframework.jarを書き戻して起動.

…起動せず.

ログを見ると,system/framework/framework.odexじゃないとだめっぽい.だめもとで,/data/dalvik-cache/以下を見てみるとdexファイルが生成されて居るのが見えるので,こいつを,system/framework/framework.odexにする.

…まだ起動せず.

DexOpt: mismatch dep signature for '/system/framework/framework.odex'

とか言われたので諦めようかと思ったけど,ダメもとでバックアップしておいたframework.odexからヘッダの署名っぽい箇所をバイナリエディタでコピーして再度配置.

起動しないだろう……と思ったけど,起動した.

アンテナも出ている.ネギアンテナは用済みです.

ついでにフォントとかもモトヤフォントにしておく.ICSはフォントファイル置くだけじゃなくてxmlに設定書かないといけないのか.

やってみると上記のようなことが起こるかもしれませんが,逆コンパイルとか禁止されてた気もするので夢の中の話です.

PCにGalaxy Nexusつないだ状態で意味もわからずキーボード叩いてたら不思議なことにアンテナが表示されてました.パソコンとかスマートフォンとかむつかしいので,よくわかりません.

追記:

非deodex環境でやってるの記事も見つけた.やり方は合っていたっぽい.

http://blog.nunnun.jp/Technology/modify_framework_odex_on_non_deodexed_rom.html