bouzuya.hatenablog.com

ぼうずやのにっき

Android HttpURLConnection とか

bouzuya/bbna をつくっている。bbna: blog.bouzuya.net for Android 。いまは通信処理を書いている。よく分からないままに書いている。

Java は同期的に通信ができるので楽なのだけど、さすがにメインスレッドで通信処理はまずい。そこで別のスレッドで非同期に処理する。 Loader というコンポーネントを使う。Loader の一種である AsyncTaskLoader を使う。

Loader は Support Package の LoaderManager 経由で使っている。ひとつしかないのに LoaderManager が要るのか分からないけど、再利用がどうとか書いてあるのでうまく管理してくれるのだろう。

LoaderManager からの結果を受け取るために MainActivityLoaderManager.LoaderCallbacks を実装する。

AsyncTaskLoaderloadInBackground では HttpURLConnection を使って通信処理を書く。昔は HttpClient がどうのこうのという記述を見かけるが、6.0 で削除されたらしい ので、 HttpURLConnection を使う。サードパーティにもっと便利なのもありそうだけど、とりあえず標準で。

InputStream って懐かしいな。そして面倒くさいな。InputStreamInputStreamReader で wrap して BufferedReader で wrap して……。ああ面倒くさい。検査例外。 IOException 。面倒くさい。例外は Log.e() を使いながら、とりあえず無視する。

Stringnull が含まれている……、うーん。……いま書いていて、そういえば、もう Java にも Maybe 相当の class が備わっているような……。気にせず @Nullable@NonNull をつけつつ進める。この annotation に意味があるのか……。

明日は JSON を parse する感じかな……。


そういえば、『スーパーマリオ ラン』のスペシャルコースを除いてすべてのカラーコインを集めた。

カラーコインはピンクコイン・パープルコイン・ブラックコイン。1 コースにつき 3 種類。 1 ワールドあたり 4 コースある。 6 ワールド。 3 * 4 * 6 = 72 。

最後は 4-1 ガリガリタワーのブラックコインだった。 2 枚目の P スイッチは二個目のブロックを飛び越えて反対側に行けば良かった。1 枚目と同様に時間がギリギリなので厳しい。 5 枚目も難しいが、シャボンを十分集めていれば何回か挑戦できるので、それほどでもなかった。

2017-W14 ふりかえり

2017-W14 をふりかえる。

2017-04 の目標

2017-W14 の目標

Android の学習を進めている。

今週の記事

つくったもの

2017-04-03/2017-04-09

Androidアプリ開発について調べている。ただ何かをつくったわけではない感じ。一応 bbna : blog.bouzuya.net for Android を題材に練習していくつもりだ。

その他

スーパーマリオ ラン』はあとすこしで終わりそうだ。第一印象については 2017-04-04 に書いた。残りは次のとおりだ。

  • ワールド 4-1 (ガリガリタワー) のブラックコイン
  • スペシャルコース (パープルコイン) のクリア
  • スペシャルコース (ブラックコイン) の取得・クリア
  • すべての建物 (キノピオ) の収集

このところゲームをしているのだけど、『斑鳩』→『スーパーマリオ ラン』と遊んでいて、妻を巻き込まない形はあまり良くない気がしている。これが終わったら、みんなでできるものに回帰しようかな。

プログラミングの基礎概念』を読み終えた (2017-04-06) ので、『アンダースタンディング コンピュテーション』を読みはじめている。第一章・第二章を読んだ。 Ruby への嫌悪感から気持ちが削がれている。すこしずつでも進めよう。ただ Android のほうが優先なので、うまく進まないかもしれない。

2017-W15 の目標

  • ☐ bbna : blog.bouzuya.net for Android を公開する
  • スーパーマリオ ランを終える
  • ☐ 『アンダースタンディング コンピュテーション』を進める

雑多な日記

今日は何をしていただろう。雑多な感じだ。

AndroidMixihttps://github.com/mixi-inc/AndroidTraining をすこしだけ進めた。 Activity と Fragment でいろいろ脱線してくたびれてしまった。本当はこれを終わらせるくらいの気持ちだったのだけど、気持ちだけだった。良くない。

正座椅子が届いた。正座用の座椅子だ。足を体重で圧迫しないのは良い。正座椅子で猫背になってはまったく意味がないので、意識して伸ばす。横幅がせまいので、股関節が固まってしまいそうだ……。時間を区切って伸ばすようにしないと……。

あわせて本が届いた。『プログラム意味論』・『計算論 計算可能性とラムダ計算』・『論理と計算のしくみ』の 3 冊。パラパラと眺める。

読みはじめたばかりの『アンダースタンディング コンピュテーション』のあとに読んでいくか、あるいは『型システム入門』のあとか……。『アンダースタンディング コンピュテーション』 Ruby を見ると、やる気がなくなる。本を変えたい気持ちになってきた。

収納ケースをまた買いに行った。今度はすこし小さいものを入れられるケースを。それに肌着やらをしまって、合わせて冬物を片付けた。棚をひとつ潰してクローゼットに納めた。部屋の風通しが良くなった。良いことだ。

整理ついでに昔の書類をいくらか処分した。思い切りが足りないので、まだまだ残っている……。

スーパーマリオ ランをクリアした。クッパを倒したのでクリアだろう。ワールド 6 まではワールド 4-1 のガリガリータワーのブラックコインを除いてコンプリートした。

あとはガリガリタワーとワールド 6 とスペシャルコース。キノピオも集めないとな……。

基本的にはマリオを使い、ヨッシールイージを必要に応じて使っている。一撃は耐えられるのがマリオ・ルイージの利点で、ルイージはジャンプの高さが足りないとき、ヨッシーはトゲが嫌なときに使っている。コースはマリオを基準につくられているのか、ルイージだとジャンプの幅がわりと合わない。なので基本はマリオにしている。

ああ、雑多だ。

『プログラミング言語の基礎概念』を読み終えた

プログラミングの基礎概念』を読み終えた。

理解度はおそらく 10% ほどだ。雰囲気では分かるけど、練習問題を解いていないし、証明なども読み流しているだけなので……。推論規則・導出・帰納法。導出システムで証明していく。ペアノ自然数の扱いで練習し、 OCaml の機能の意味を順に見ていく。最後は型システム。一部で道具を揃えて、二部・三部はそれを使いながら OCaml (ML) を見ていく感じ。積み重ねという感じがする。ざっくり読んだのでざっくりとした理解しか得られなかった。気まぐれに読み返すつもりだ。

次は『アンダースタンディング コンピュテーション』を読もうと思っている。また計画を立てよう。


王子動物園の夜桜の通り抜けに行ってきた。雨で人は少なかった。桜も満開とは言えない感じ。それでもまあそこそこに咲いているし、こんなものかな。

空メールでのメールアドレス登録

今日は「空メール送信によるメールアドレスの入力」を考えていた。

メールアドレスを要するときは直接入力させるよりも空メールを送ってもらうほうが良いのではないか。たとえば、ユーザー登録のときに mailto: を使って空メールを送ってもらい、その FROM を入力とするようなイメージだ。

長所としては次のようなものがある。

  • 入力の手間を減らせる
  • 入力の間違いがない

短所としては次のようなものがある。

  • サービス側に受信メールを処理する仕組み (別の口) が要る
  • 希望するメールアドレスを登録できない可能性がある (FROM に登録したいメールアドレス以外が使われている)
  • ユーザーが手続きを理解しづらくなる可能性がある

なんとなく古くさい感じがする手続きなのだけど、入力の手間の削減と間違いを防止できるのはなかなか良い気がする。

追記: ユーザー登録に関して言うとパスワードを安全にやりとりするのが難しそうだ。

事前に https でメールアドレス・パスワードを送信する場合は、メールアドレスの存在確認のためだけのメールが漏れてもパスワードが漏れないためログインされない。

しかし、上記のフローだとパスワードを安全な手段でやりとりできない。仮パスワードなどを合わせて送れば漏れてしまい、ログインされてしまう。まあ、一般的なパスワードリマインダーも似たような問題を抱えているので、気にしないというのも手だけど……。

スーパーマリオ ランの感想とか

スーパーマリオ ランほか、雑多なことを書く。

昨日 (2017-04-03) は、追加の収納ケースを買いに行ったり、 SPA: Single Page Application について雑談しているうちに時間がつぶれてしまった。それもあってろくに何もできなかった。


Android の環境は整えたけど、内発的な動機ではないので、いまひとつ燃えない感じ。今日も https://github.com/mixi-inc/AndroidTraining を眺めたり、各種ドキュメントを眺めるばかりで、もやもやしている。どこから手をつけたら……という状態。


『プログラミングの基礎概念』は順調に読み進めていて、明日の分まで既に読んで、読み返している感じ。練習問題はやっていないんだけど。「完全に理解した(分かってない」みたいな状態。


スーパーマリオ ランAndroid で出たので、買って遊んでいる。ゲームに詳しくはないけど、適当に感想を書く。

まず値段の話。 iOS に出た当時 1,200 円という値段への文句をよく見たが、ぼくは実際に遊んでみたところ高いと感じなかった。無料で遊べるゲームが多すぎるからなのかな。買い切りだし、この程度のボリュームで 1,200 円は上々だと思う。そもそもインターネットのサービスやアプリにお金を払わない人が多すぎる……。任天堂的にはいわゆるソシャゲーみたいに運営してお金を稼ぐみたいな形じゃなくて、新しいものを出していく形にしたいのかな、そちらのほうが健全だと考えているのかな。分からないけど。

スマホという、操作に制約のある環境に合わせて、よく考えてつくってあるなあという印象。基本的にはタップのみ。タイミングや押す長さで、あとはマリオが勝手に走る。ただ進むだけではなくて、壁を蹴って逆方向に跳んだり、コースによっては方向を変えつつ上に登っていったりもする。何にせよ、操作はタップだけ。あと無駄にカッコよく、気持ちよく動く。馬跳びで敵を乗り越えたり、そこからタイミング良くタップすれば敵を潰しながら高く跳んだり……。アサシンクリードの移動しているだけなのにカッコいい、みたいのと似てるかも。

6 ワールド * 4 コース + スペシャル (?) なのかな。コース数は少なく見えるけど、各コースに難易度が三段階ある。低い難易度をクリアすることで次の難易度が選択できるようになる。この難易度はカラーコインで表現されている。5 枚のカラーコインを集めるだけなのだけど、配置が絶妙で場所を把握しても一周でそれらのすべてを集めないといけないので、意外と難しい。

カラーコインの配置だけじゃなくて仕掛けが変化するものもある。「無料だとたった 3 コース」という意見も見たけど、最初の 3 コースのすべてのカラーコインをコンプリートするだけでもなかなか面白かった。

良くないところ。キノピオチケットが割と潤沢にあって、ずっとカンストしている。もうすこし足りない感じでいいんじゃないかと思うんだけど……。キッズが他人に負けまくってなくなる想定とかなのかな……。うーん。建物、わりとどうでもいい感じ。なんとなく一個ずつ買ってみたりしているけど、そんなに楽しめてない。あとはキノピオを集めるためだけに同じコースをループさせられるのも、なんだかなあって感じ。対戦相手は変わるけど、ほとんど接戦にはならないし……。

ちなみに、まだクリアしてない。ゴールデンクリボーのイベントに合わせて、同じコースを繰り返している。うーん。