2020年4月28日火曜日

アフリカの新型コロナウィルス対応の一端を知る

【要旨】新型コロナウィルス関係のニュースにおいて、例えばアフリカに関する具体的な情報は少ないようです。でも、今は、"SNSで個人がメディアとして発信"の時代。アフリカの各地からのツィートによって、現地の状況を知るためのスマホアプリです。

アプリ(Android版)はここにありますので、よろしければお使いください。

動機は何か
 新型コロナウィルスのニュースを聞きながら、Google Mapsでアフリカの地図を見ていました。どこでも気になった地点をタップすると、その辺りで発信されたツイートが表示されたらいいなあと考えました。それらのツイートは、すべてが正確な情報とは言えないでしょうが、一般のニュースには出ない、現地ならではの有用なローカル情報もあるのではないでしょうか。

地図をタップしてツイートを得るためのアプリ
 と考えていたら、ありました!参考資料[1]にあるチュートリアルがそれです。これは、元々は、米国の若者たちが、続発した銃乱射事件の情報を共有し、なんとかこれを食い止めたいとして起こした活動が原点にあるようです。全米各地から、Twitterのハッシュタグ#NeverAgainで情報を発信し共有していました。このチュートリアルで作るものは、そこで使われたアプリをもとにしているようです。これに習って、今回作成したのが、図1左側のアプリです。以下のように使います。
  • 地図上で気になる対象地点、地域をタップする。
  • ハッシュタグとして、指定の#Coronavirusに加えて、#(地域名)が自動生成される。
  • その地域でツィートされた新型コロナウィルスに関する情報が得られる。
以下の例は、ガボンでツィートされた筈のものです。例えば、"首都リーブルビルでの2週間前のコロナ封鎖を緩和しました..."というツィートがありました。一般のニュースにはない現地の情報です。


 さらに、セネガル、ウガンダ、マダガスカルをタップして、図2のようなツイートも得られました。現地の生の情報に触れることができたように思います。
  • ガボン:首都リーブルビルでの2週間前のコロナ封鎖を緩和しました...
  • セネガル:コロナの最高の検査キットを発明してくれた母国セネガルに誇り...
  • ウガンダ:さらに4名のトラック運転手が検査で陽性になった...
  • マダガスカル:ウィルスに効く?という伝統的お茶を求めて長い列...


 国内も見てみました。ハッシュタグは、"#新型コロナウィルス"に変更。

このスマホアプリの作成上の要点
 このアプリは、MIT App Inventorで作成しましたが、その要点を簡単に示します。まず、今回は、OpenStreetMapを使いますので、そこから、API経由で得られたレスポンスの一例を図3に示します。JSONファイルが返ってきますので、これをデコードして、地点の名前(都市名、州名、国名など)を得る処理がポイントです。すなわち、これによって、上記のハッシュタグ#(地域名)が作られます。


 JSONフィルのデコード処理は、以下の図のようになります。図4では、明示的に多重のリストを処理するためのLook up in pairsの機能を使い、図5では、(キー、バリュー)のペアをDictionary機能で処理しています。どちらでもよいです。今回は、JSONファイルが単純な構造であるため、両者に大差は見えませんが、もっと複雑なJSONになると、図5のDictionaryを利用した方が簡潔になると思います。



(注)図3よりも幾分複雑なJSONのデコードについては、こちらの記事をご参考にして戴きたく。

 小生は、普段Twitterは特に利用していませんが、今回の経験から、その有用性を改めて感じた次第です。

参考資料
[1] Map the Movement (Advanced) in App Building Guides for the Youth Mobile Power Series
https://appinventor.mit.edu/explore/app-building-guides

2020年4月23日木曜日

社会的ジレンマに対する実験用スマホツール(リアルタイムDB利用)

【要旨】「社会的ジレンマ」における各人の行動とその影響を考察する巧妙な実験があります。その実験を手軽に行うためのスマホツールを作ってみました。ですが、畑違いのせいで、(本筋から離れて)リアルタイムDBの話題になってしまいました...

 最終的に、このようなデザインのスマホアプリを作成しました。これを各自のスマホにインストールしてもらう。利用者間のデータのやりとりは完全自動化!

社会的ジレンマの簡単な例と実験
 社会的ジレンマとは、山岸俊雄氏(北大名誉教授)の著書[1][2]によれば、「互いに協力し合えば皆が利益を得られるのに、各自が自分の利益だけを考えて行動すると誰もが不利益を被る状況」ということです。これに関する研究(考察や実験)は古くから行われています。ここでは、これらの著書にある有名な実験の再現を試みます。但し、以下は、小生の理解にもとづく説明です。
  1. 互いに見知らぬ学生4名(ひと組当たり)が参加。実験中も、互いに接触せず。
  2. 参加者は以下の仕組みを完全に理解している。
  3. 各自に最初100円が与えられる。このうちからd円を寄付できる。
  4. 寄付者の所持金は、その時、(100 - d)円になる。
  5. その寄付金d円を基に、寄付者以外の各々に(2d/3)円が与えられる。
上記項目(1.)〜(5.)を1セットとして、12回実験を実施した。この実験アルバイト時間を約1時間とした。実際に、その額のお金がもらえるので、真剣にやってくれた。ある回で、自分だけが100円全部を寄付し、他には誰も寄付しなければ、自分は0円、他の人は167円を得ることとなり、自分だけが損をする。もしも、12回とも誰も寄付しなければ、各自の取得額は1,200円である。逆に全員が協力して毎回、100円全部を寄付すれば各自が合計2,400円(これが最高額)取得できる。これはかなり高額な時給となる!

 各自の寄付行動は、その人の持つ「対人信頼尺度」が大きく影響する。すなわち、「他の人は寄付すると思えるかどうか、すなわち、他人を信頼する程度」により、自分の寄付行動が決まることを実験で確かめた。この実験参加者には、この信頼尺度が高い人と低い人が混じっている。(この尺度は、別途用意したアンケート5項目の回答得点による。)

 実験結果では、各回で与えられる100円に対して、参加者は平均44円を寄付した。そして、信頼尺度の高い人は平均55円を、信頼尺度の低い人は平均33円を寄付したという。なるほど。いずれにしても、「他の人がどのくらい寄付するか分からないので、自分の寄付はこの程度にしておこう」という意識がかなり働くようです。

社会的ジレンマ実験用スマホアプリ
 これ以降は、スマホアプリのお話しになります。
 上記の金額計算自体は簡単ですが、スムーズに実験を進めるにはアプリが欲しい。参考文献[1]では、PCを使ったとありますが、詳細は不明です。ここでは、各自がスマホでこの実験を行うためのアプリを作成しました。互いに接触なしに進めるには、各自のスマホを使うのが望ましいと考えました。これを4人(4台のスマホ)で実行した例を以下に示します。図1は開始時であり、それぞれの学生がいくら寄付するかを決めています。図2はそれらの寄付を反映させた第1ラウンドの結果です。



スマホアプリの造り- CloudDB(リアルタイムデータベース)の利用
 このスマホアプリの特徴は、図2に示したとおり、明示的な通信も管理者の介入も無しに各人の寄付が他の人の収入に直ちに反映できることです。それは、MIT App InventorにあるCloudDB(リアルタイムDB)を利用することで簡単に実現できました。主要部は以下の図のみです。図3は、寄付金額を寄付者IDとともにCloudDBへ格納します。格納があると、リアルタイムに自動的に、各スマホのアプリの図4のブロックが呼び出されて、寄付金額から付与金額が計算され、配分されます。




このように、リアルタイムDBのおかげで、プログラムはとても簡潔になりました。

(注)デフォルトでは、誰でも直ぐに使える、CloudDB用の共通のidとトークンが与えられています。しかし、自分のデータがいつまで存続するか保証されません。そこで、独自のidとトークンを申請することもできます。無料枠の容量は小さいですが、これを利用すれば、安定的であり重宝します。

参考文献
[1] 山岸俊男:安心社会から信頼社会へ 日本型システムの行方 (中公新書)、1996年6月発行(ただし、今回はこのKindle版で講読した)
[2] 山岸俊男:社会的ジレンマ 「環境破壊」から「いじめ」まで (PHP新書)、2000年7月発行

2020年4月17日金曜日

郊外の小さな水辺で見つけた野の花

 緊急事態宣言発令中の生活のなか、近くへ散歩に出かける人は少なくないようです。対策は心掛けながら、小生もそのひとりです。別世界で咲く野の花たち。しばし、心を和ませてくれます。小さな水辺に咲いていた2輪のこの花、名前はなんて言うのだろう?


 持参していたスマホで撮影、さっそくGoogle Lensで調べてみました。すぐに答えがでました。「シャガ」という名前らしいです。下図左側にそれが表示されています。同時に、右側の図にあるとおり、関連画像がいくつか表示されました。


 これらのうち、赤枠で示した画像に着目します。そこには、そのサイトのURLも示されています。それは、以前なんどか訪問したことのある、デジタル植物写真集[1]でした。さっそく、そこへ行ってみました。以下のような、詳細な説明といくつかの画像が含まれています。素晴らしい!書かれている花期、花の色や特徴など、小生の撮影した写真と照合してみるとぴったりです。まさに、持ち運べるデジタル植物図鑑です。今後も、時折、利用させていただくことになると思います。



 他に3枚の写真とその名前を掲載します。


参考資料
[1] 渡辺 坦:植物の名前を探しやすいデジタル植物写真集
http://plantidentifier.ec-net.jp

2020年4月15日水曜日

じゃんけん機械学習スマホアプリ(古典的マルコフ過程) - 高校生向け(advanced)

【要旨】機械学習を学ぶためのチュートリアルがあります。モダンAIではなく、古典的(マルコフ過程に基づく)機械学習によって、スマホを「じゃんけん」に強くします。K12(高校生)向けですが、難易度はAdvancedですから、学生諸君にも取り組んでもらえればよいと思います。

このチュートリアルのねらいと内容
 米国MITによるAI関係チュートリアルのひとつ[1]です。古典的(マルコフ過程に基づく)機械学習というものを、「じゃんけんに強くなるスマホ」 の作成を通して理解します。同時に、MIT App Inventorを用いて、現実的なスマホアプリの作成能力を高めます。

 マルコフ過程を、ジャンケンの学習を題材に丁寧に説明しています。「あなた」と「コンピュータ」が連続ジャンケンするのですが、「コンピュータ」側は、「あなた」の出す2回連続のパターンを記憶していき、次第に、「あなた」の次の手を予測して勝とうする戦略をとります。それをスマホアプリとして実現する方法をきめ細かく述べています。与えられているのは、図2に示すような、プログラムの作成案内と画面設計例です。自分で案内に従って作成していきます。完成プログラムは提供されていません。ただし、行き詰まった場合を考慮して、ステップ毎にヒントやプログラムの断片を見せています。


 小生がこれに従って作成した完成版プログラム(ブロック図)を図3に示します。小さくて詳細は見えないと思いますが、プログラムの複雑さの程度は分かると思います。小生はApp Inventorでの一定の開発経験があるのですが、完成までに約1.5時間を要しました。ですから、これを高校生あるいは大学1,2年生を対象とした講座で行うとすれば、半日〜丸1日の時間を要するものと思われます。


マルコフ過程を利用した効果
 早速ですが、この完成版プログラムを実行させました。図1に示すように2つのケースで実験しました。いずれのケースでも、「あなた」と「コンピュータ」で連続1,000回ジャンケンしてみました。
(a)「あなた」が人間らしく人手でジャンケンした場合
(b)「あなた」が乱数となってジャンケンした場合


 図1(a)のケースでは、「あなた」は、行動をコンピュータに悟られないようにと、できるだけランダムに手を出しました。いや、出したつもりです。でも、3つ並んだボタンを完全にランダムに次々と打つことは難しいです。実際、最終的に例えば、"パー"を出した後に続けて"パー"を出した回数は24回であり、他のパタンよりもかなり少ないです。逆に、"チョキ"の後に"パー"を出した回数は170回とかなり多いです。そういうパターンを、ゲーム進行中に随時、コンピュータに悟られてしまいました。その結果、「コンピュータ」の勝ち数は、「あなた」勝ち数の1.69倍になりました。Markovにやられてしまった!

 一方、図1(b)は、「あなた」は、自分で手を選択するのではなく、乱数におまかせして手を出した場合です。すなわち、「あなた」の行動パターンが把握されないようにしました。こうすると、さすがのMarkovもお手上げのようです。「コンピュータ」の勝ち数は、「あなた」勝ち数の0.98倍であり、ほぼ互角という期待どおりの結果になりました。(この(b)は、このチュートリアルにはありませんでしたが、少しの変更で可能です。)

プログラム作成のポイント
 いかがでしょうか?やってみたい気になったでしょうか?このチュートリアルの説明は平易な英語であり、丁寧に書かれていますので、特に補足する必要はないかも知れません。それでも、なお、初心者には多分ここは少し分かり難いのではないか、と感じた点もあります。その一部を、図4〜図7で補足しますので、ご参考にしてください。






参考文献
[1] Rock Paper Scissors tutorial
https://appinventor.mit.edu/explore/resources/ai/rock-paper-scissors
https://appinventor.mit.edu/explore/ai-with-mit-app-inventor

2020年4月12日日曜日

MIT App Inventorでも、きらり光るUNIXシェル

【要旨】スマホアプリ開発環境であるMIT App Inventorに、UNIXシェルコマンドが使えるextensionが開発されました。ブロック型プログラミングにおいて、UNIXコマンドを使えるならば、応用範囲がさらに広まると考え、これを試行してみました。

AWKコマンド(言語)について
 まず、古い話から始めます。小生が大学教員となった1994年に、初めての私の3年生ゼミで学生と一緒に勉強したのが、テキスト処理のためのAWKです。3名の開発者による著名な下図の書籍[1]をテキストとしました。このゼミは、UNIXに親しもう!を旗印に始めたものです。

約25年前(1994年)の3年生ゼミで使っていたAWKの教科書

 この本は、訳者の足立高徳氏が序に書いている「... より一般的な原理や教訓をもわかりやすく提示していく筆の進め方はまさに絶品である」との言葉どおり、読者に深い感銘を与えました。

AWKの基本的な例題
 AWKは、同じUNIX上のfind、sed、grepといったテキスト処理系ツールと同じく、奥深いソフトウェアです。ここでは、上記の書籍にあった、以下のようなテキストファイルを対象にして検討します。「国名、面積、人口、大陸名」を記したテキストファイルから、下図の右側のような人口密度でソートされた結果を得たいとします。

テキストファイルから、人口密度でソートされた結果を得る

MIT App Inventorでテキスト処理する
 小生は、近年はMIT App Inventorを多用しています。上記の問題も、App Inventorでもちろん解けます。多様な、テキスト処理のためのブロックが用意されていますから、それはできます。しかしながら、App Inventorにおいて、AWKなどのUNIXコマンドが使えるとなれば、それは非常に有効と思います。UNIXの方が格段に短いスクリプトで効率的にプログラムが作れるはずだからです。

 それは、参考文献[2]に示したJuan A. Villalpando氏が開発した、App Inventor用のextensionで実現できます。もちろん、通常のUNIXと比べて、機能的に不足している点はあるようですが、基本的なコマンドが使えれば十分です。

 早速ですが、このextensionを使って、上記の問題(人口密度でソート)を解く、デモアプリケーションを下図のように作成しました。下図の中央にあるawkコマンドで実現されています。コマンド入力後にAWKボタンを押すと実行されます。なお、上辺にあるAWKのロゴは、入力ファイルを表示するボタンになっています!

App Inventorでawkコマンドを使う

 このextensionのおかげで、このアプリは、以下に図示するように非常に小さなプログラム(ブロック)で完結しています。

上記アプリのソースプログラム(ブロック)

AWK以外のUNIXコマンドも使ってみる
 このアプリでは、awkだけでなく、UNIX一般のコマンドも使えるようにしています。下図は、コマンドfind、grepをパイプで連結しています。この場合は、Othersボタンにより実行させます。この例では、スマホの外部記憶にある画像(.png)のうち、2020年04月がファイル名に含まれるものを列挙しています。このように、App Inventorのブロックでは少しやりにくいテキスト処理を、極めて簡潔に実行できる場面が多いと思います。

コマンドfind, grepも使ってみる

(注1) 本記事では、Android OS 10.0(Pixel 3a)で実行しました。他のOSバージョンでは不具合があるかも知れません。
(注2) printfでの桁揃えが一部、期待通りになりませんでした。
(注3) これはUNIXの問題ではありませんが、プログラムからテキストボックスに改行(\n)を含むawkコマンドなどを設定すると、そこで改行が実行されてしまいますので、注意が必要です。人手で直接テキストボックスへコマンドを入れる場合は問題ありませんが。

参考文献
[1] A.V.エイホ/B.W.カーニハン/P.J.ワインバーガー著、足立高穂訳:プログラミング言語AWK、アジソンウエスレイ・トッパン、1991年6月発行
(注)本書はすでに絶版になっていて、別の出版社が復刻版?を販売しているようである。

[2] Juan A. Villalpandoによる KIO4 Extension Terminal
http://kio4.com/appinventor/278_extension_shell.htm

2020年4月11日土曜日

NetLogoに親しむ(Desktop版とWeb版)

【要旨】NetLogoによるマルチエージェントモデリングを、ひとつの簡単な例題で説明するチュートリアルです。ただし、NetLogoの基礎知識は前提としています。通常のDesktop版に加えて、Web版のNetLogoについても小生の体験を記します。

NetLogo(通常のDesktop版)を使った基本的な例題
 まず、基本的な例題をひとつ示します。「朱に交われば赤くなる」といった感じのシミュレーションです。具体的な説明は、下記のNetLogoソースの先頭や、各ステートメントのコメントをご覧下さい。人々の交流で各人の特性(ここではそれを色で表現)が次第に均一化する状況を示しています。特性(色)の平均や標準偏差の推移も表示しています。

初期状態(左上:人の色の度数分布、右側:多様な色の人々)
反復(epoch)93回後の状態(色の度数分布がそれらしい形に)
反復(epoch)267回後の状態(ほとんど全員が同じ色に)

 人々の色の標準偏差が非常に小さくなった( 反復267回)後に停止しています。このプログラムの完全なリストを以下に示します。40行程度の小さなプログラムです。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetLogoソースプログラムリスト;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;【他人に染まれ!】  Fujio Yamamoto, 2020-4-9
;; 各タートルは、ふらふら動き回っています。行く先々で、近隣の
;; タートルの色の平均値を少しだけ取り入れ、自分の色を少し変更します。
;; 各タートルの色は、最終的にどんな色になるでしょうか
globals [color-mean color-sd fr] ;; 大域変数
to setup                  ;; 初期設置
  ca                      ;; エージェントをクリア
  random-seed seed        ;; 乱数のseed
  crt population [        ;; タートルを指定個数生成。各タートルに対して、
    set shape "person"    ;; タートルの図柄を設定
    set label who         ;; タートル番号を表示
    set label-color black ;; ラベルの色
    setxy random-xcor random-ycor ;;ランダムな位置に配置
  ]
  ask patches [set pcolor 119 - random 2] ;; パッチの模様
  color-stat              ;; タートルの色に関する統計
  reset-ticks             ;; 時計をリセット
end
to go                     ;; ボタンを押すたびに実行される
  clear-links        ;; 結線を消す
  color-stat         ;; タートルの色に関する統計
  ask turtles[            ;; 各タートルに対して以下を実行する
    rt random 30 + random -30  ;; 少しふらふらさせる
    fd 0.1                    ;; その方向へ0.1歩前進する
    ifelse N4? ;; 「近隣」の選択
      [ set fr turtles-on neighbors] ;; 近隣東西南北4カ所のタートル達
      [ set fr turtles-on patches in-cone 3 60];; コーン内のタートル達
    if count fr != 0            ;; その個数が0でないならば、
    ;; それらのタートル達の色の平均値の5%を取り入れて、自分の色を変更する
      [ set color 0.95 * color + (0.05 * sum [color] of fr) / (count fr)
        create-links-with other fr [set color black] ;;交流関係を示す結線
      ]
  ]
  tick ;; 時計を進める
  if color-sd < 0.2 [ clear-links stop]  ;; 色の標準偏差が十分小さくなるまで
end
to go-once
  go
end
to color-stat ;; タートルの色に関する統計
  set color-mean mean [color] of turtles ;; 色の平均
  set color-sd standard-deviation [color] of turtles ;; 色の標準偏差
end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 上記プログラムの簡単な説明
 人々は少しづつ動き回りますが、その先々で近隣の人々と交流します。その「近隣」の定義は、以下に示すとおり、東西南北か、またはコーン状の範囲で決めるかを選択できます。

ifelse N4?  ;; N4?はスイッチの値。frは、近隣の人々の集合(リスト)
      [ set fr turtles-on neighbors] ;; 近隣東西南北4カ所のタートル達
      [ set fr turtles-on patches in-cone 3 60];; コーン内のタートル達

 ここで、"neighbors"は、東西南北のパッチ上にいる人々のセット"fr"の取得のために、また、"in-cone 3 60"は、距離3で前方60度の範囲のパッチ上の人々のセット"fr"を取得のために使います。次に、交流関係を示すため、自分自身とこれらの人々を黒線で結びます。後者のセット"fr"には自分自身が含まれているので、これを除くため、"create-links-with other fr"を使っています。

 人々の「交流の効果」は、以下のように、自分の色(color)に反映させています。
set color 0.95 * color + (0.05 * sum [color] of fr) / (count fr)
;; それらのタートル達 fr の色の平均値の5%を取り入れて、自分の色を変更する

 色の平均と標準偏差は、それぞれ、"mean"、”standard-deviation”で得られます。そして、各色(色の値は0〜140)の度数分布グラフは、"histogram"で描くことができます。具体的には、以下のとおりです。

set-plot-x-range 0 140 ;;x軸の範囲
set-plot-y-range 0 count turtles ;; y軸の範囲
set-histogram-num-bars 35 ;; ヒスとグラムの棒の数を35とする
histogram [color] of turtles ;; 色のヒストグラムの描画

 ブラウザで利用できるNetLogo Web(ここにあります
 これまでのNetLogoは、パソコン(Windows, Mac, Linux等)のアプリケーションとして動きますが、例えば、スマートフォンでは使えませんでした。しかし、web版(NetLogo Web)が公開されているので、スマホのブラウザからも使うことができます。早速、上記の例題をNetLogo Webで動かしてみました。その結果は下図のとおりです。

iPad miniのSafari上でのNetLogo Web(上記例題は完全に動作した)

 このWeb版はまだ機能不足と言われていますが、上記例題に関しては完全に動作しました。素晴らしい!スマホでは、ボタンやスライダーは非常に小さくなってしまい(拡大はできるものの)使い難いですが、完全に動作します。また、上図右上に(この図ではみえにくいですが)、「export HTML」というボタンがあります。これを押すと、このプログラム全体を、単一のHTML/JavaScriptファイルとしてダウンロードできます。これを、自分でwebサーバに配置すれば、他のJavaScriptプログラム等から呼び出すことができて、応用が広がりそうです。

 ファイル入出力の違い(Desktop版とWeb版)
 今後NetLogo Webを使って行くにあたり、外部とのやりとりのためのファイル入出力(テキストファイルに限りますが)についても少し調べました。いくつかの理由から、Desktop版とWeb版には以下に述べるような違いがあります。

【Desktop版】テキストファイルの入出力例
file-open "input.txt"
while [not file-at-end?]
  [show file-read show file-read show file-read]
file-close

file-open "output.txt"
file-write 3.14 file-write "pi"
file-close

【Web版】テキストファイルの入出力例
●extensionを2つ宣言する。
extensions [fetch send-to]
こう書くと、自動的にextensionsが取り込まれる。最初はプロンプトが出るが。

●ファイル入力
非同期 asyncなので、ファイル入力が終わる前に、次のコマンドへ行ってしまうので注意して使う!
test-fetch-user-file-async 
to test-fetch-user-file-async
  fetch:user-file-async show
end

file名は、プログラムには書けない!上記のように書くと、file chooserが出現するので、そこで入力ファイルを選択する。「fetch:user-file-async」がファイル入力コマンドである。その後ろの「show」は、コールバック関数として指定したもの。つまり、ファイルが読み込まれた後、「show」の所に、処理すべきコマンドを書けばよい。

●ファイル出力
以下のように書く。ただし、出力ファイル”out.txt”はダウンロードされてしまうようである。
test-send-to-user-file
to test-send-to-user-file
  send-to:file  "out.txt" "result"
end

Thanks

2020年4月4日土曜日

Visualizing the progress of virus infection (No.2)

The application shown in the previous article has been upgraded as follows:

This is an enlightenment application to deal with the new coronavirus. The app simulated the spread of the infection based on what percentage of infected people moved for commuting or entertainment. You can watch the video in three cases. Watch this video and fight without loosing your defenses against the virus.


This app (.apk file) can be downloaded from here.