株価を検索するツール #3

細々と作っていました.

GitHub - nk5jp/StockAnalyzer

とりあえずタイトル画面はこんな感じ.
f:id:bob_l_s:20180521000310p:plain

「Stock」ボタンでこの一覧に検索表示する銘柄を編集.
上の画面は,コード7974(任天堂)だけ設定した状態.
「Save」ボタンを押すと,現時点の価格を保存できる.

保存した価格情報は銘柄のリストを押すと一覧表示できる.
f:id:bob_l_s:20180521000733p:plain

ここで価格情報を手動で追加・修正・削除することも可能.
保存し忘れた情報とかはここでポチポチ修正する運用イメージ.
(削除は0円で保存するという若干面倒な手順)
ちなみに現時点で「Add/Edit」以外のボタン押すとフリーズします.


次はグラフ表示だけど,良いライブラリないかなぁ.

ゼロから作るDeep Learning 感想

とりあえずディープラーニングについて
最低限語れるようになっておきたいという,
非常にシンプルな動機による購読.

AI絡みの話題で頻出の「ディープラーニング」について,
概念を説明しつつ,Pythonによる実装例も併記することによって
実践の足掛かりも与えてくれているのが,この書籍.

ディープラーニングを頑張って説明すると,
何かしらを判断させる演算マシンの内部パラメータを
自動的に最適値に調整させる技術,という感じ.
最初はポンコツな判断しかできないマシンが,学習を繰り返すことで
最終的には人間以上の判断能力を備えたマシンになる.

この技術の要となる行列演算は膨大な計算リソースを要するため,
昔はそれほど注目されていなかったわけだけど,
技術向上によってリソースのハードルが下がったこともあり,
色んな分野で応用しましょうというトレンドが,最近発生している.

AlphaGo(アルファ碁)が世界王者をフルボッコにした,
なんてニュースが以前話題になったけれど,あれもその一例.
人間には想像だにできない「最良手」を,膨大な「学習」の上に
「認識」した,という形となる.

話をこの本に戻すと,
「畳み込み」をはじめとする,ディープラーニング関連の
キーワードは,概ねこの本の中で網羅されている.
行列演算についても基礎のレベルから説明されているので,
あまり数学は得意じゃないという人にも十分読めるかと.

第5章の「誤差逆伝播法」が唐突すぎて「?」だったけれど,
ここはぶっちゃけ読み飛ばしても良い.
連鎖律の説明に特化しすぎていて,本質を捉えていない感がある.
誤差逆伝播法の意図するところについては,ググるなりして
ネット上で適当に調べた方が遥かに速い.たとえば以下.
誤差逆伝播法を宇宙一わかりやすく解説してみる - ロボット・IT雑食日記

今後もAI技術は進歩し続けるだろうから
この本に書かれていることも数年後には陳腐化しているかもだけど,
ある程度の前提知識を押さえておきたいという目的は
十分達成できたかなと思う.


株価予測モデルとかで応用してみたいなぁ.

ロックマン ゼロ コレクション 感想

ロックマン ゼロ コレクションNEW Best Price! 2000

ロックマン ゼロ コレクションNEW Best Price! 2000

縛りプレイ動画に触発されて購入.
ゲームボーイアドバンスで発売されたロックマンゼロ1~4を
この1つのソフトで遊ぶことができる.

イレギュラーと認定された無実のレプリロイドを救うべく
レジスタンスを統率していた人間の少女シエル.
彼女は窮地を打開するため,封印されし伝説の英雄ゼロを覚醒させる.
シエルに協力することを決意したゼロは,
かつての親友エックスが統治するネオアルカディアとの闘いに赴く.

X6の某ENDからの続編とか言われたりしているけれど,
後付けの設定が色々加わったりして,その辺りは曖昧になっている.
設定を流用した別作品,くらいの解釈が妥当だと思う.

本家のエックスはイレギュラーハンター,つまり「狩る側」だけど,
本作ではゼロたちがイレギュラーであり,「狩られる側」となる.
さらに悩み続けていたエックスに対して
「悩まない」ゼロの立ち振る舞いが強調されていたりと,
色んな面で,本家とは対極に位置する作品となっている.

細かいエピソードはツッコミどころ満載なんだけど(特に2),
アクションゲームとしては十分なストーリー設定じゃないかな.

肝心のアクション部分は非常に良い.
Xシリーズ独自のスピード感溢れるアクション性が再現されており,
かつ,ゴリ押しは返り討ちに遭うのがオチなので,戦略性も高い.
※「サイバーエルフ」という救済措置を駆使すればゴリ押しも可能

さらにステージ毎に採点制度が設けられており,
全ステージ満点(俗称:アベ100)を目指すと,完全な鬼畜ゲーと化す.
ハードモードのアベ100に挑戦したが,何度も気が狂いそうになった.

GBAってぶっちゃけ音質が酷いイメージしか無いんだけど,
この作品のBGMはかなり頑張っている方だと思う.
「Crash」「Esperanto」をはじめ,印象に残る曲が多かった.

難点として,大味な難易度設定のステージがたまに出てくること.
特にゼロ1の最終ステージやゼロ2の爆撃機ステージはトラウマレベル.
あと,ところどころのイベントが長いのも評価を落とすかな.

ともあれ,非常にクオリティの高いゲームであることは間違いなく,
面白いアクションゲームを求めている人には非常にオススメ.
年甲斐もなく,ハードのアベ100達成のために
5か月近く頑張ってました.以下がそのキャプチャ.

f:id:bob_l_s:20180415222210p:plain

続編のゼクスをやるかは検討中.

ゆるキャン△ 感想

www.nicovideo.jp
2018年1月~3月の間に放送されていたアニメ.ニコニコ動画で視聴.

山梨への引っ越し直後に富士山を眺めに行った結果,
キャンプ場近くで路頭に迷ってしまった各務原なでしこは,
ソロキャンプを趣味とする志摩リンによって助けられる.
その日を境にキャンプに興味を持ったなでしこは,
転入先の高校にある「野外活動サークル」へと足を運ぶ.

「冬のキャンプ」というマイナーな娯楽をターゲットとして,
ソロキャンプとグループキャンプの双方の楽しさを丁寧に描いた作品.
夜景や日の出といった背景描写がとてもキレイなのが特徴的.

また,それと同じくらいキャンプ飯の描画にやたらと力が入っており,
特に第1話のカップ麺のシーンは凄まじい飯テロだったと思う.
ある意味ではグルメアニメ(漫画)と言えるのかもしれない.

主要キャラ5名は割とバラバラに活動しているのだが,
(ラストのクリスマスキャンプまで本格的な全員集合シーンが無い)
スマホSNSでコミュニケーションをとっているので,
そういった物理的距離を感じさせない作りになっているのも興味深い.

タイトルどおり,シリアスな展開はほとんどなく,
ゆるゆるとした時の流れでエピソードが進むので,
のんびりと鑑賞できる良いアニメだと思う.


原作コミックスがやたらと品薄で買うのに苦労しました.

株価を検索するツール #2

とりあえず検索対象を設定する画面を簡易で用意.

GitHub - nk5jp/StockAnalyzer

既にいくつかバグは見つけているので,
次はそれらを潰していくところかなぁ.

DAO周りは毎回同じものを描いてるので,
そろそろライブラリ化したいかも.

株価を検索するツール

1年くらい前に作ろうとしてペンディングしていたツール.
本当は情報をタンキングしたり分析したいんだけど,
現状では検索のみ.

GitHub - nk5jp/StockAnalyzer

web上で検索してきたものを表示している感じ.
対象サイトは一応,スクレイピングNGとは明記してなかったけど
怒られたら止めます.

使うとこんな感じ.今は対象銘柄をハードコーディングしているので
この3つしか検索できません.

f:id:bob_l_s:20180212183132p:plain


暇なときにでもコツコツと作っていきたいなぁと.

AsyncTaskを勉強し直す

前に以下の記事でAsyncTaskを使った通信処理の記事を書いたけど
細かいを毎回調べ直すのが不毛なので,ここに整理し直すことにした.
Androidにおける通信処理の整理 - NK5のノート

まず公式リファレンスはこれ.
AsyncTask | Android Developers
公式のサンプルをそのまま以下にパクってきた.

 private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { //(1)
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100)); //(2)
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize; //(3)
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]); //(4)
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded " + result + " bytes");
     }
 }

補足点は以下のとおり.

(1)
拡張時点で3つのジェネリクスが登場するけど,これらは順番に
・Params:doInBackgroundの引数(サンプルのURLに相当)
・Progress:onProgressUpdateの引数(サンプルのIntegerに相当)
・Result:onPostExecuteの引数(サンプルのLongに相当)
となる.
PraramsとProgressは可変長引数となる.

(2)
ここでonProgressUpdateを呼び出している.

(3)
ResultがVoid以外の場合は,
doInBackgroundの最後に必ずResultと同じ型のインスタンス
returnする.

(4)
可変長なので例え1つでも配列として扱う必要がある.


呼び出すときは

 new DownloadFilesTask().execute(url1, url2, url3);

でOK.この場合はdoInBackgroundの引数urlsが
3つの要素からなる配列となる.


Activityと上手く役割分担したいときは元記事のとおり.