SRM579 Div2 Easy

すっごい久しぶりにSRMのぷらくてぃすしてた
SRM580が今日かと思ってたら明日であれみたいな感じになった

SRM579 Div2 Easy

問題

数字バトルで戦わせようぜ的な感じ
とりあえず昇順そーとして見てけばいいだけだった

int maxWins(int initialLevel, vector <int> grezPower) {
    int result = 0;

    SORT(grezPower);
    for(int i=0; i < grezPower.size(); i++) {
      if(initialLevel > grezPower[i]) {
        result++;
        initialLevel += (int)(grezPower[i] / 2);
      }
    }
    return result;
}

色々忘れててひどかった
やばい

Parse Hosting触ってみた

Parse Hosting | A powerful web presence without all the hassle.
Parse Hostingがリリースされましたね!!

html,css,javascriptが簡単に公開出来る的な感じで、githubのアレだったりfluxflex的な感じで楽しそうだったので触ってみました

使い方的な

  • parseにログイン
  • Dashboardにアクセスして新しくアプリ作る
  • アプリ設定画面のWeb hostingってところでdomain適当に決める
  • 端末からparseコマンド使えるようにする
  • コマンド打ちまくる
$ parse new henteko-test
#=> ログインする
#=> アプリリストが出るから番号で選択
#=> henteko-test/が作成される
  • henteko-test/public/以下をいい感じに弄る
    • 初期ではpublic/index.htmlのみ
    • public/javascript/main.jsとか作って遊ぶ
  • デプロイする
$ parse deploy
  • アプリ設定画面のWeb hostingってところできめたdomainにブラウザでアクセスする
  • 作成したindex.htmlが表示された!!

簡単ですね
github連携とかしたいけどどうやるんだろうか

今回作成したテストサイト(いつの間にか消えてるかも)

MOONBlock弄ってみた

enchantMOON予約開始しましたね!!
僕は当然当日に予約を完了して、5月末に届く予定です。
楽しみすぎますね。

MOONBlock

販売に先駆けて、enchantMOONで使われる予定のプログラミングツール(?)であるMOONBlockのソースコードが公開されました。
enchantMOON向けMOONBlockプログラミングの紹介(かなりざっくりと) - UEI shi3zの日記
enchantMOON向けプログラミング(MOONBlock SDKのαプレビューを配布) - UEI shi3zの日記

MOONBlockの詳細は上記エントリ見てください。
てことでちょっと弄って、簡単なBlockを作ってみました。

PostBlock

任意のURLに任意のパラメータを付けてpostが出来るブロックです。
別になんもうれしくないかもですが、作れたので作りました。

enchant.block.blocks.javascript.PostBlock = enchant.Class.create(enchant.block.Block, {
    initialize: function() {
        enchant.block.Block.call(this, '#3399cc');
        this.setConnectTarget('evalable');
        this.addLabel('Post');
        this.addTextForm('', 'url')
            .prompt('URLを入力してください');
        this.addBlank(9, 1);
        this.addFoldButton('+', '-', [ 'thenDo' ]);
        this.addBR();
        this.addMultipleReceptor('evalable', 'thenDo');
        this.addBR();
        this.iteratize();
        this.script = 'var form = document.createElement("form");' +
                      'form.setAttribute("method", "post");' +
                      'form.setAttribute("action", "<% url %>");' +
                      '<% thenDo(\n) %>' +
                      'document.body.appendChild(form);' +
                      'form.submit();';
    }
});

enchant.block.blocks.javascript.ParamBlock = enchant.Class.create(enchant.block.Block, {
    initialize: function() {
        enchant.block.Block.call(this, '#15fd02');
        this.setConnectTarget('evalable');
        this.addLabel('Param');
        this.addTextForm('', 'key')
            .prompt('keyを指定してください');
        this.addBlank(9, 1);
        this.addTextForm('', 'value')
            .prompt('valueを指定してください');
        this.iteratize();
        this.script = 'var hiddenField = document.createElement("input");' +
                      'hiddenField.setAttribute("type", "hidden");' +
                      'hiddenField.setAttribute("name", "<% key %>");' +
                      'hiddenField.setAttribute("value", "<% value %>");' +
                      'form.appendChild(hiddenField);';
    }
});

上記のコードを、MOONBlockのjs/blocks.block.enchant.jsの、

enchant.block.blocks.javascript = {                                                                                                                                                                                                                                       
    desc: {
        blockCategory: 'JavaScript'
    }
};

より下に書けば大丈夫そう。

こんなんになります。

f:id:henteko07:20130428023326p:plain

実行してpostすると何故かsandboxの画面が消えます。
謎ですね。

MOONBlock感想

正直まだα版なので不安定だしよくわからなかったので苦労しましたが、面白かったです。
でもBlock作るのに、this.script='hoge'みたいに文字列でjavascript書かないといけないのつらい。
あと、Block置いたりする所で、ゴミ箱的なBlockを1個だけ削除みたいなの欲しいです。

Androidの実機テストを簡単にする「Spoon」を使ってみた-Sample編-

Androidの実機テストを簡単にするSpoonを使ってみました。
まだ日本では認知度はそれ程高くないですが、良いOSSだと思います。

f:id:henteko07:20130324055146p:plain

Spoonとは

Spoonとは、Squareが開発しているOSSで、Androidの実機テストの自動化ツールです。
githubソースコードが公開されています。
このツールを使うと、Androidの実機でのテストが自動化され、ちまちま指で確認しなくてもよくなります。
monkeyrunnerと被る所は結構あるかと思いますが、このSpoonはテストの結果を見やすいように自動でまとめてhtmlを吐いてくれます。
あとはテストの書き方(javaで書ける)などが違うと思います。
そこら辺まだ詳しく調べきれていないので、使い続けていきたいです。

とりあえず動かしてみる

何はともあれ、とりあえず動かしてみましょう。
動かなければどんな魅力的なプロダクトでも意味無いですよね。

下準備

今回は、githubで公開されているものをcloneしてきて、その中に入っているspoon-sampleを弄ってみたいと思います。

$ git clone git://github.com/square/spoon.git
$ cd spoon/spoon-sample

spoon-sampleの中には以下の3つのディレクトリ及びファイルが入っていると思います。

  • app/
  • pom.xml
  • tests/

mavenのセットアップ

上のpom.xmlというのから分かる通り、このSpoonはmavenを使用します(必須ではない模様)。
なので、まず使ってるPCに入ってるmavenのバージョンを確認しましょう。

$ mvn -v

ここで、自分の環境(MBA OSX 10.7.5)では、mvnのバージョンが3.0.3でした。
とりあえず現時点での最新バージョン(3.0.5)にアップデートしておきましょう。
ここら辺の記事を参考に、アップデートする。

$ brew install maven
$ vim ~/.zshrc

.zshrcに以下を追記

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_17.jdk/Contents/Home/

これでmavenのアップデートは完了です。

$ mvn -v

で最新バージョンがインストールされているか確認しましょう。

Android側の準備

テストを実行する前に、テストする端末を用意しなければいけません。
今回自分はエミュレータを起動してテストしましたが、実機でも同じだと思います。
普通にいつも通りUSBケーブルを刺して、いつもの実機デバックが出来る環境にしておきましょう。

また、注意点としてAPIレベルが16以上(Android4.1以上)じゃないと対応していないようです。
APIレベル16以上の物を用意しましょう。

テストの実行

今回の最終目標は、テストの実行をしてテスト結果を見るなので、tests/に入りテストの実行をします。

$ cd tests/
$ mvn spoon:run

これでテストが実行されます。

エラーが出た場合は、参考になるかもしれませんので、この記事のエラーについてを参照してください。

テスト結果

さて、テストが無事実行出来た場合、エミュレータ(実機の場合は実機)が自動で動き出すと思います。
それを面白おかしく観察しながら見守った後、テスト結果がtests/target/spoon-open/に出力されます。
結果はhtml形式でまとめられているので、ブラウザで開きましょう。

$ cd target/spoon-open/
$ open index.html

こんな感じになっていると思います。

f:id:henteko07:20130324053323p:plain

f:id:henteko07:20130324053412p:plain

f:id:henteko07:20130324053418p:plain

色々弄って確認してみましょう。

エラーについて

自分がはまったエラーについて紹介したいと思います。

Failed to execute goal com.squareup.spoon:spoon-maven-plugin:1.0.3-SNAPSHOT:run

[ERROR] Failed to execute goal com.squareup.spoon:spoon-maven-plugin:1.0.3-SNAPSHOT:run (default-cli) on project spoon-sample-tests: Execution default-cli of goal com.squareup.spoon:spoon-maven-plugin:1.0.3-SNAPSHOT:run failed. NullPointerException -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

エラー内容からではわかりませんが、自分の環境では環境変数ANDROID_HOMEが設定されていなかった為でていたエラーのようです。
android sdkのpathを設定しましょう。

$ vim .zshrc

以下を.zshrcに追記(個人の環境によってpathが違います)。

export ANDROID_HOME=~/android-sdks/

最後に

Spoon超coolですね。
気に入らない所あったらgithubでpull reqしましょう。
commitしてmergeされる時には、何やら申請をしなければならないようですね。

次は実際のプロジェクトに使ってみたいです。

本日のgithub活動

本日のgithub活動です
android_apkにpull reqしました
修正内容は、アイコンが設定されていないapkファイルの時に、icon_fileがnilを返すようにしました

本日のgithub活動でした
bug fix for if icon not set · 6747b17 · kyoro/android_apk · GitHub

2代目PC怪人インタビュー

f:id:henteko07:20130205151137j:plain

どうも、2代目PC怪人です。
エンジニアインターンさんのインタビュー受けました。
よかったら見て下さい。

ちなみに、初代PC怪人は@numa08です。
現在は既に3代目にPC怪人の座を引き渡しましたが、まだまだ2代目PC怪人として活躍をしていきたい所存です。
よろしくお願いします。

エンジニアインターン 理系大学生henteko07さんインタビュー | IT系の文系・理系学生向け有給インターン・アルバイト募集なら「エンジニアインターン」
IT系の文系・理系学生向け有給インターン・アルバイト募集なら「エンジニアインターン」