さいどうにっき

趣味や日常などを不定期で書いていきます

パソコン甲子園2015参加記 -2日目-

この記事は11/7、PCK初日です。

目が覚めたのは6時過ぎだったと記憶してます。

今までで「1日だけなら3時間睡眠でも大丈夫」ということが分かっていたので一応は安心していましたが、まさか二度寝して朝食に遅れるとは思いませんでした…申し訳ない。

会津大学では、食事中に久留米のらて、うぃんじーを見つけることができました。 記憶が正しければJOIぶりのはずなのですが、全く顔を覚えてなかったのでパンフレットを見ながら確認してました。 プロコン生放送ではさっちーを見つけられたのにこの2人はサッパリ見覚えがなかったです。どういうことなの…

開会式が終わってブースの設営も(一応)終わり、教授に連れられて控室で開発しました。 ここでリーダーから話を聞いていたにへさん*1に会うことができ、無事Twitterを抑えることに成功しました。

時は流れて交流会。 バイキング形式で結構な量があったはずなのですが、開始10分くらいで一気になくなりました。 すぐ狙ったチャーハンと春巻きにはありつけましたが、その後唐揚げを取りに行ったらなくなってるって減るの速すぎ。

その後、会津大学のボランティア学生の方からバグの報告(そこそこ重症なやつ)がありました。 うちのリーダーとボランティアの方が仲良くて助かりました。

報告を受けた後は、「バグなんぞ知らねえ俺は遊びに行くぜ」と気合入れて他のところに絡みに行きました。 せっかくの機会だし、できれば鳥羽商船の人たちにガンつけて媚び売っておきたい、ということで鳥羽商船の皆さんがいる場所へ。 コミュ障しないかと不安でしたが、思ったよりまともに話せて、結構仲良くなりました。 同じく鳥羽の人たちと話してた福島高専の人からはTwitterの垢を聞くこともできました。 …なんだかんだ一番仲良くなったのこの人ではなかろうか。

しばらくして、教授から「バグは直さなくていいが自分達の端末では動くようにしろ」と指示を受けて開発に戻りました。 この段階で一部に致命的な問題が発生しており、そこの変更*2もしてます。

やること自体は簡単だったのですぐに作業が終わり、パンフレット折り部屋ことマテ茶の部屋に行きました。 そこでエクスペンダブルズをやってたことを思い出して良かった。とても良い映画だった。やっぱりドンパチ映画最高。

そんなこんなで、この日は1時に就寝できました。

*1:腕にベルト巻いてました。胸の下あたりにもベルト通せばいいのに

*2:アルゴリズムAからBにしてたのをまたAに戻すみたいな単純作業

パソコン甲子園2015参加記 -1日目-

ドーモ、コーヤ・ロードアゲインです。 この土日はパソコン甲子園2015に参加しました。 ちょっと長くなりそうなので、全4日の旅程を1日ごとに分けて書くことにします。

この記事は1日目(11/6)です。

6:45に空港集合とのことで、5時位に起きました。眠い。

また、今回は残念ながらA&Wでご飯を食べる時間がなく、コンビニのおにぎりになってしまいました。 スーパーフライ食べたかった…

飛行機の中では開発するぞ!と意気込んでいましたが、離陸直後から1時間くらいスヤァしてました。 その後はお目々パッチリで開発してましたが、充電が持たずに途中で中断せざるを得なかったのが残念です。

ちょっと端折って新幹線に移りますが、ここでは一目惚れした駅弁*1を食べました。 お肉最高。

M教授に言われておりさの先輩へリプを飛ばしました。また食べたいです。

郡山に着いた後は念願の(?)郡山アイスしました。ちゃんと半袖で。普段寒がりなので結構キツかったです。 その後冷えた手をホワイトに当てて楽しんでました。やっぱりホワイトはコンテンツ力高い。

会津若松に到着した後、喜多方ラーメンを食べに電車に揺られました。Suica使えて良かった。

今回もちゃんとおりさの先輩にリプ飛ばすのは忘れてません。 ラーメンを頼んで久々にスープまで飲んだのですが、結構お腹に来ました。流石に食べ過ぎっぽかった…

その後リア充神社とやらに行きました。今回はリア充がいませんでしたが、案外暗くてリア充がイチャついてそうな場所でした。

ホテルに戻ってからは開発です。 この日は基本的にデバッグとかマージ作業してました。

2時位に仮眠をとった後、3時位には本格的に寝たのですが、買い出しで勝ったモンスターエナジーを飲まずにやっていけたので、 体力がある状態だとそこそこいけるっぽいことが分かりました。 集中してたのも原因の1つだろうけど。

*1:その名も「牛肉重」

提督始めました

昨日は僕の誕生日でした。もう18です。実感ない。

日付が変わってからしばらくTwitterに出没した後、「そうだDMMのネトゲ登録しよう」と思い立ちました。
ネトゲの方は18歳以上でないと登録できず(DMM.comそのものは18歳未満でも登録可能でした)、 めちゃめちゃやりたかった艦これが始められずにいたからです。

これで艦これできる…と思いながら登録を済ませ、どうせならと艦これを開いてみました。 そしたらなんとなんと、サーバーに空きがあったのです。

今までTwitterで見たり知人友人に話を聞いたりした限りでは、「まず着任までに運が必要」とのことだったので、 非常にラッキーというか、渡りに船でした。

こうして僕の鎮守府ライフが始まりました。初期艦は見た目が一番カッコよかった叢雲です。

その後もTwitterで実況をしていたのですが、リーダー殿に「ゲームされるとイラつくから黙るか進捗生やせ」と叱られたので黙って進捗してました。
テザリング回線でQiita行けないの本当クソ。

そして遂に。

念願の響をゲットしました。
一番欲しかった艦娘なので、本当に嬉しかったです。深夜に一人でガッツポーズしました。

今は1-3まで攻略し、眼帯の2人組を第1艦隊と第2艦隊の旗艦にしてレベリングを頑張ってます。
ブロンズによると1-5でゴーヤがドロップするとのことなので、早くお迎えに行きたいでち。

android-caffe-demoを動かす時につまづいたこと

こういう類のアプリでは珍しく(?)助け舟がなかったので自分が助け舟になれればと思って書きます。

android-caffe-demoを使えるかどうか検討していたのですが、 そこで躓いたこととその解決法を幾つか書いていきます。

動したはいいけど写真を撮ったらぬるぽ出て落ちる

これはSONYのExperia Z4を使っていた時のバグです(しかもモデルを入れ忘れていた)。 確かfileUrinullだったと思います。 なんとか回避する方法を探していたのですが、いつの間にか出なくなってしまったので解決策は分かりません。 また、原因も分からないまま問題が解決してしまいました。

モデル入れたら画面が黒くなったり復活したりして最終的に落ちる

これもExperia Z4でのバグです。 どうやらモデルの読み込みをしているようなのですが、何故か失敗しているらしく画面がいつまで経っても描画されませんでした。 その時は思いつきもしなかったのですが、別スレッドで動かすと上手くいくかもしれません。 また、Nexus5を使うとうまくいったので、ここからはそれでデモアプリの実行をしています。

ぬるぽは出なくなったけど撮り終わった後とか画像選んだ後になぜか落ちる

これはモデルを入れていないのが原因です. android-caffe-libUsageを実行すれば動くようになります。

DeadObjectExceptionが出て落ちる

これも最初の躓きと同様、いつの間にか直っていたので原因も解決策も分かりませんでした。 ただ、DeadObjectExceptionメッセンジャーのホストまたはクライアントが死んでる(多分GCに持って行かれてる)時に出るようなので、 もしかしたらそれが原因かもしれません。

最後に

これまで僕は、先人の方々が書いた記事にたくさんお世話になってきました。 ですが、今回に限ってはどうやら僕が先人になってしまったようです。 この記事を書いたのは、先人への憧れと、先人になりたいというぼんやりした夢があったからです なるべく分かりやすく詳細に書いたつもりではありますが、分からなかったらごめんなさい。 少しでもandroid-caffeを使う方のお力になれれば幸いです。

PCK2015プログラミング部門予選参加録

予選に参加してから多分2週間か3週間くらい経ってるのにまだ書いてないのを思い出したから頑張る。 ちなみに結果は7完、本選通過ならずだった。地域枠を久留米と鹿児島に持って行かれたのは悔しい。

問題

1問目

パートナーに解いてもらった。

2問目

パートナーと一緒に解いた。 余りの切り捨てを利用した解き方を教える。 定数オーダー最高。

3問目

同上。

4問目

パートナーと一緒に解いた。 条件設定間違えて1WA


ここからは基本的に自分1人で解いてる。

5問目

バケットで簡単にできるのにわざわざSTL使って解いてた。 この辺りが一番頭固い時間帯

6問目

差分で解くまでは思いついたけど変更のやり方が遠回りでプログラムがわかりづらくなっていた。 ここで結構WAが出たがなんとかAC。実は7問目より後に解いてる。

7問目

一度ポインタでやろうとしてミスったけど、Union-Find木を使うことを思いついて無事AC


ここからはACできなかった問題

8問目

正規表現ゲーじゃん!と思ってJavaでやったけどダメだった(当然)

9問目

ぱっと見幾何っぽかったし残り時間少なかったのもあって全然解法が思いつかなかった。

10問目

問題タイトルしか見てない。

反省点

  • パートナーの育成に時間をかけなかった
    実質1週間くらいでC++の基本とかSTLまで色々教えたからかパートナーの頭がついていけず、 僕がコーディングを手伝うことがよくあった。 1ヶ月くらいじっくりできれば、もっと余裕が持てたように思う。
    場合によっては主要なアルゴリズムとデータ構造(今回使ったUnion-Find木とか)まで教えられたかも。

  • 提出前に自分のプログラムを見直さなかった 特に6問目。WAが出てからコードを見直すとすぐにバグの原因が見つかることがよくあり、 そのせいで3つか4つはWAが出ていた。

  • 自分のプログラムが潰されるケースを考えなかった
    テストケースではカバーしていない類の入力があるのは当然だが、そのことに考えが及ばず間違えることがあった。 特に多数の入力(例えば1000文字を超えるようなもの)が与えられる問題では実際に試す余裕がないため、 そういう問題こそしっかり考えて提出すべきだった。

良かった点

  • 必要なものがすぐ思いついた(ACした問題で)
    特に6問目と7問目。 実装の段階でミスをすることもあったが、考えていた解法はだいたい想定解だったと思う(5問目は例外)。

  • 予想より多くの問題を解けた
    多分5完、せいぜい6完だと思っていたが、結果は7完と非常に喜ばしいものだった。 WAはそこそこあったが、地域枠であれば充分に狙える順位までいけたのは本当に嬉しい。 本選行けなかったけど。

最後に

PCKは今年が最後だけど、あまり得意ではなかった競技で結構いい結果を残せて良かった。 本選では惜しくも開発だけの勝負になるが、こっちは得意分野だし普通に30万とPCとお米貰って帰って来ると思う。

ハッカーズ?何それ?おいしいの?

JavaScriptでライフゲーム作った

こんばんは。

前回の更新から一週間経たずにまた更新です。実際短期間な。

タイトルにもある通り、JSでライフゲーム作りました。
コーディング欲が満たされてとても良いです。

縦横の長さを指定してボタンを押すと始まります。
停止ボタンを押すと止まります。そのうち再開ボタンつけたいです。

300x300まで動くことを確認済みです。1000x1000投げたら落ちました。
とある方が10万x10万とか投げてサーバに負担を与えようとしていましたが、ローカル実行なので自分の首締めるだけです。
圧倒的な自信がある方やマゾヒスト以外はやめましょう。

興味のある方は以下のURLへアクセスしてください。
ライフゲーム -roadagain.org-

今回の苦労話

  • HTML5canvasタグを初めて触りました。絵とか図形とか描けて便利です。
  • JSLintがいちいちうるさい。他人のコーディング規約を守らされるのとても辛いです。インクリメント使わせて。
  • Bracketsのライブプレビューがちょくちょく接続エラー吐きました。でもその後10秒くらいで何故か繋がる不思議。
  • 配列のコピーにconcatを使いましたが、シャローコピーだったので世代を進めるときおかしな挙動してました。

ちなみにソースコードはこんな感じです。
変数名おかしかったりしますがご容赦下さい。

var play;

function initcell(width, height) {
    'use strict';
    var elem = document.getElementById('cell');

    elem.width = width * 10;
    elem.height = height * 10;
}

function drawcell(x, y, cellstate) {
    'use strict';

    var cellbox = document.getElementById('cell').getContext('2d');

    cellbox.fillStyle = cellstate === true ? 'Lime' : 'Black';
    cellbox.fillRect(x * 10 - 10, y * 10 - 10, 10, 10);
}

function next(x, y, cell) {
    'use strict';

    var cnt,
        i,
        j;

    cnt = 0;
    for (i = -1; i <= 1; i += 1) {
        for (j = -1; j <= 1; j += 1) {
            if (cell[x + i][y + j] === true) {
                cnt += 1;
            }
        }
    }
    if (cell[x][y] === true) {
        cnt -= 1;
    }

    if (cnt === 3 && cell[x][y] === false) {
        drawcell(x, y, true);
        return true;
    } else if ((cnt < 2 || 3 < cnt) && cell[x][y] === true) {
        drawcell(x, y, false);
        return false;
    } else {
        return cell[x][y];
    }
}

function stopgameoflife() {
    'use strict';

    window.clearInterval(play);
}

function gameoflife() {
    'use strict';
    var width = Math.floor(document.format.width.valueAsNumber),
        height = Math.floor(document.format.height.valueAsNumber),
        cell,
        i,
        j;

    stopgameoflife();

    cell = [];
    for (i = 0; i < width + 2; i += 1) {
        cell[i] = [];
        cell[i][0] = cell[i][height + 1] = false;
    }
    for (j = 0; j < height + 2; j += 1) {
        cell[0][j] = cell[width + 1][j] = false;
    }
    for (i = 1; i <= width; i += 1) {
        for (j = 1; j <= height; j += 1) {
            cell[i][j] = (Math.random() >= 0.5);
        }
    }

    initcell(width, height);
    for (i = 1; i <= width; i += 1) {
        for (j = 1; j <= height; j += 1) {
            drawcell(i, j, cell[i][j]);
        }
    }

    play = window.setInterval(function () {
        var tmp,
            i,
            j;

        tmp = [];
        for (i = 0; i < width + 2; i += 1) {
            tmp[i] = [];
            for (j = 0; j < height + 2; j += 1) {
                tmp[i][j] = cell[i][j];
            }
        }

        for (i = 1; i <= width; i += 1) {
            for (j = 1; j <= height; j += 1) {
                tmp[i][j] = next(i, j, cell);
            }
        }
        for (i = 1; i <= width; i += 1) {
            for (j = 1; j <= height; j += 1) {
                cell[i][j] = tmp[i][j];
            }
        }
    }, 100);
}

WebサーバーをApacheからNginxに乗り換えた

お久しぶりです。

 

今日はまとめpdfアップのついでに興味のあったNginxに乗り換えてみました。

 

ページのディレクトリをNginx用の場所に移して起動したら何も変わってなかったので実感が沸かないです。

これから細かく更新していけたらいいなあ…