2018年4月13日金曜日

BBCのmicro:bitで暗号仮想通貨の基礎を知る

------------------------------------

本稿をYouTubeに登録しました。12台のmicro:bitを使った場合です。
https://youtu.be/YCZV_FoEeTI
------------------------------------

 英国BBCがIT企業の協力を得て開発したmicro:bitですが、日本の技適を取得したこともあって、子供向けのコンピュータサイエンス、プログラミングに活用する動きが次第に高まっているようです。

 以下のサイトをご覧になると分かりますが、これは、とても奥深いマイクロコンピュータボードであることを強く印象づけられます。子供向けとしておくのはもったいないです。私自身も使ってみたい、プログラミングしてみたい、という気にさせられます。

http://microbit.org/ja/guide/


 小さい、デザインが美しい、Bluetooth、無線(BLE以外の)、加速度、照度、温度のセンサ、USBインタフェース等があり、5x5のLEDマトリックスがついています。そのほか、3つの端子があって外部機器との接続も可能。そして、ご覧のとおり、ボダン電池(これはオプション)で電源を取れます。

 子供向けには、初歩の電子工作を、プログラミングと共に行うのがメインのようです。プログラミングは、ブロックを組み合わせるというScratchと同様のインタフェースで行います。しかしながら、このブロック形式のプログラムは、メニューの切り替えでJavaScriptのソースコード編集に行けます。さらに、Pythonでもプログラムできます。

 もうちょっと大人向けの使い方はないのかな、と思っていたらありました!
現在話題の仮想通貨ビットコイン(Bitcoin)の基本的な仕組みを実現したJavaScriptによるブロックがありました!ビットコインの仕組みについては、私は素人ですが、要するに、「分散データベース」のような基盤の上にあるものと思っていました。最近、よく聞くブロックチェーンがその基礎にああるようです。Crypt Currency, Blockchains.


これだけで、Bitcoinの基になるブロックチェーンの一端を知ることができる

 詳しいことは、別途検討することにして、私がこれを試行した結果を以下に示します。6台のmicro:bitを使っています。Block chainには、スマートコントラクト、コンセンサス、P2Pネットワークなどの技術も含まれますが、ここでは、micro:bitの間の「分散データベース」としての、コヒーレンス(整合性、一貫性)を主に扱っているようです。Radio Block-chainというmicro:bitのブロックを使っています。

 今、各micro:bitが、それぞれ、下図のような個数のコインを得ているとします。

12時から時計回りに、各micro:bitが、3個、0個、0個、1個、3個、2個のコインを得ています
ここで重要なことは、各micro:bitが見ているブロックチェーン(ブロックとは、コイン情報を指してしており、チェーンはそれらのブロックをすべて連結したもの)は、(常時ではなくても、リアルタイムではなくても)必要な時には、最新の状態であることです。つまり、時間遅れはあっても、ブロックチェーンはこの世界で唯一の正しいものが維持され続ける必要があります。それを、非集中制御で維持することがポイントの一つです。

各micro:bitのBボタンを押すと、現在のブロックチェーンの長さ9が表示された
これを確認するため、各micro:bitのBボタン(右側のボタン)を押すと、全てのmicro:bitが、ブロックチェーンの長さを表示しますが、すべて9となっています。すなわち、この仮想通貨の世界の通貨量が正しく保持されていることを示しています。

 ブロックチェーンについては、まだまだ検討すべきこと(述べるべきこと)が残っていますが、本稿ではここまでです。とにかく、このmicro:bitを利用した教育的なアプリの可能性を示すものと考えたいと思います。

2018年4月6日金曜日

新たに個人研究所を設立

 24年間勤めた大学を定年退職しました。2018年4月より、個人的に研究所を設立しました。といっても、もちろん、何ら公的なものではありません。以下のようなことをやって行こうというための、心の引き締めみないなものに過ぎません。


 昨年夏に亡くなった母が育てていた胡蝶蘭を家で引き継いで置いておきました。定年退職となった数日前に、上の写真のように綺麗な花が咲きました。

これ以外にもあるが、これからやってみたいこと

2018年3月11日日曜日

IBMクラウドで桜の開花日予測


 間もなく桜の季節ですね。全国各地の桜の開花日予測もすでに出ていますが、これらはどのようにして予測しているのでしょうか。実際にそれをやって見ましょう、というチュートリアルが以下にあります。つい最近(2018-2-26)のIBM Developer Worksの記事です。

 Data Science Experience で始めるデータ分析

(クラウド上で使える分析環境を用いて、データの可視化や予測を行う方法)
https://www.ibm.com/developerworks/jp/analytics/library/ba-data-science-experience/

 この記事での注目点は、IBM Cloudから無料で、Data Science Experience (DSX)というデータ分析、予測、可視化に必要な環境が使えることです!機械学習のためのscikit-learnや、それに必要なデータ形式を作成するpandas、可視化のためのBrunelなど含まれています。

 このチュートリアルでは、開花のモデルを、全国53都市における過去10年間の気象情報(温度等)と桜の開花日の記録を利用して作成し、scikit-learnで学習と予測のやりかたを丁寧に説明しています。私も実際に追試行してみて、たいへんよい題材でありすばらしい解説だと感じました。

 開花のモデルが、予測精度を決めると言ってもよいでしょう。開花を促す条件としては、「春先に気温が高くなっていること、冬の間に低い気温にさらされていたこと」などが知られています。それを具体化するため、一定期間の最高気温の移動平均、2月と3月の平均気温の累積値、1月の平均気温等を求めます。それらと実際に開花した月日との対応をつけたモデルを作ります。2007年〜2016年までの期間、それらを学習させます。約10万件のデータです。そして、その学習結果に、2017年のデータを入れて、2017年の桜の開花日を予測しています。

 まず、2017年の全国の桜の実際の開花日をマップ上に示しています。
2017年の全国の実際の桜の開花日(拡大して見て下さい)

 そして次に、上記方法で予測された開花日と実際との差違を示しています。
2017年の桜の開花日の予測と実際との差(拡大して見て下さい)
(正の日数は予測が実際よりも早かったことを示す)

拡大すると分かりますが、前橋、名古屋、室蘭、富山、熊谷、新潟、広島などは差はゼロ、つまり、どんぴしゃ予測が当たっています!一方、全体的に、北へ行くほど、実際よりも遅く開花する予測となっています。逆に、南西部では実際よりも早く開花する予測となっています。

 上記の開花モデルは、かなり妥当と言えますが、それでもひとつのモデルに過ぎません。上記の差違の状況から、さらに修正した開花モデムルも検討できるのではないでしょうか。

 このData Science Experience (DSX)は、自分で高性能PCを持っていなくても、また、機械学習やAIの具体的なことを知らなくても、十分なしっかりしたデータを持っていれば、自分に必要な分析や予測を、容易に行える素晴らしい環境だと言えるでしょう。

2018年3月2日金曜日

教授会で定年退職のご挨拶

 昨日(2018-3-1)の教授会で定年退職者挨拶があり、該当の5名の先生方からご挨拶がありました。小生もその一人でした。(正確ではないかも知れませんが)ほぼ以下のような短いご挨拶をしました。皆様方にあらためて感謝申し上げます。

-------------------------------------------------------
 情報工学科の山本でございます。私は、大学を出てからこれまで48年間の職業人生があったわけですが、前半の24年を民間企業の研究所で、そして後半の24年間を本学でお世話になってきました。ちょうど半分ずつになります。本学では全般に大変良い職場環境で勤務させていただいたことに感謝致します。
 仕事の分野は、ずっと、コンピュータの基本ソフトウェアと応用ソフトウェアの研究開発をやってきましたが、会社時代とにくらべまして、本学へ来てからの方が、より幅広く、柔軟にいろいろなテーマに取り組みことができました。
 それは、いろいろなタイプの同僚の先生方との交流のおかげであると感謝しております。また、教えていた学生諸君からも、思わぬ指摘や示唆を得たことも少なくありませんでした。これも非常に大きいことでした。さらに、本学の組織を支えておられる事務系技術系の職員の方々にも大変お世話になりました。
 今後は、どの大学も、昨今の社会情勢のため、より厳しい環境に置かれることになると思いますが、本学がそれを克服して有為な志願者を多く獲得してさらに発展して行かれることを祈念致します。
 皆様、長い間、ほんとうにありがとうございました。
-------------------------------------------------------

 下記英文は、和文からのGoogle自動翻訳の結果です。多少違和感があるかも知れません。


My dear colleagues and students, 
Thank you for your long-term cooperation.
My final lecture will be held in the 201 classroom at 15:00 
on March 19th (Monday). 
I would be happy if you could participate.

Fujio Yamamoto

2018年2月25日日曜日

お馴染みのforループですが...

 Cにも、C++にも、Javaにも出てくるお馴染みのforループですが、初心者にはその動作が分かり難い場合があるようです。英国ケント大学が開発しているBlueJというJavaの開発環境に関するフォーラムで、昨日ちょっと話題になった投稿を基に、以下に書きます。

-------------------------------------------
for(int i = 0; i<10; i++)
    System.out.println(i);
-------------------------------------------

 上記の例は、普通に使っているforループです。0〜9までをプリントするだけなのに、ローカル変数iを定義していて、しかも、それが4回も出現しています!また、その動作を確認しようと思って、各行にブレークポイントを設定してデバックしても、forとSystem.out...の2行が交互に実行(表示)されるだけで、有用な動作情報が得られません。そこで、

-------------------------------------------
for(
    int i = 0; 
    i<10; 
    i++
)System.out.println(i);
-------------------------------------------

 このように、forの中にあるローカル変数iの初期化、範囲検査、回数の増加操作を3行に分割します。そうして、それぞれにブレークポイントを設定してデバッグをすると、動作が良く分かります!という投稿でした。なるほど、確かにループ処理の動作を把握しやすい、という反応が多かったです。

 ところで(この投稿では言及されていませんが)、このようなfor文は何とも書きたくないですね。とても重苦しいシンタックスです。最近のJavaでは下記のようにも書けると知ると、従来のforは使いたくないですね。下記の例は、上記と同じことをするJava SE8 以降の書き方の一例です。ラムダ式とストリーム Lambda & Streams(ラムダ式は直接ここにはありませんが)が登場しているのです。

-------------------------------------------
IntStream.range(0, 10)
.forEach(System.out::println);
-------------------------------------------

 上のような従来型forループにあったローカル変数は全く使っていません!元々不要だったんですね。いや違うでしょう。従来に対する発想の転換の結果と言えるでしょう。よく言われることなのですが、次の違いがあります。
従来のforループ:howto、すなわち、どう処理するかの観点に立っている。ループインデックスをどのように制御して使うのか。
ラムダ・ストリーム:what、すなわち、何をするのかの観点に立っている。必要なデータを揃えて、それらに対して何をしたいのか、何を適用するのか。

2018年2月23日金曜日

JavaとApp Inventorの連携でより高度なプロトタイピング

 MIT App Inventorとその関連技術や応用については、これまでにかなり多数の記事を書いてきました。すでに、どこかで書いてことではありますが、再度、Javaとの連携について簡単にまとめます。今以上に高度なスマホアプリの素早い開発(ラッピドプロトタイピング)を行う際に思い起こして活用していただければよいと思います。

JavaとApp Inventorの連携3形態

1)App InventorのActivity Starterブロック
 これは当初からあった機能ですが、App Inventorのプログラムから任意のJavaプログラム(for Android)を呼び出してその結果を利用するためのものです。Javaプログラムを呼び出す際の引数の設定と、実行結果を取得するための設定には一定のルールがありますが、特に難しくはありません。
 例えば、App Inventor側にまだブロックが用意されていない新しいセンサーの値をリアルタイムに使いたいとします。その場合には、そのセンサ値を得るだけの小さなJavaプログラムを用意すればよい訳です。また、App Inventorには備わっていないような高度な数学ライブラリなどもJavaで作成すれば同様に利用できます。

(2)App InventorのExtensionsブロック
 これは比較的最近設けられた機能です。上記(1)と機能的には同様のことができるのですが、このExtensionsブロックには画期的な違いあります。(1)では、Javaプログラムを外部プログラムとして呼び出して使いましたが、こちらは、そのJavaプログラムの機能をApp Inventorの新しいブロックとして利用できるようにします!
 すなわち、ユーザが必要に応じて、(原理的には)誰でもApp Inventorをその言語仕様(インタフェース仕様)のなかで機能拡張することができるのです。「原理的には」と書いたのは、Javaを知っていればできるですが、かなり操作手順は入り組んでいます、という意味です。そのようにして新設されたブロックは、他の人も直ぐにそれを取り込んで使ったり、不要であれば解放することができます。
 これまでに、すでに、このExtensionsによるブロックは新たに数百個以上公開(一部は有償で販売)されています。リアルタイムDBであるFireBase人工知能関係機能、ファイルやネットワーク関係(BLE: Bluetooth Low Energy等も含む)など多彩なものがあり、現時点でも次々と発表する人が出てきています。まさに無限の拡張性を与えています!

(3)Java Bridgeによる連携
 これは、上記(1)とは逆の関係にあります。すなわち、この機能は、App Inventorのユーザ用ではなく、Javaプログラマーのためのものです。通常のJavaに比べて、Android用のJavaは(Android SDKを用いる)、スマホ特有のリソース管理の下で作成するため、特有の制約や込み入った制御があるため、一般には敷居が高くなっています。そこで、Javaから、App Inventorブロックの豊富で使い易い機能を呼び出して使えるようにしたということです。App Inventorの各ブロックは元々Javaで書かれており、それぞれJava Classになっているわけですから、(原理的には)そのようにできるはずです。サンフランシスコ大学のProf. David Wolberのところでこれが開発されました。

2018年2月19日月曜日

昔の情報工学実験1の模様(ビデオ)

ファイル整理していて、懐かしいビデオが出てきました。
旧情報工学実験1(テーマ:サーバサイドJAVA)です。
撮影は2007年6月となっています。
たしか、この年の3月に、現在の情報学部棟が新築されたはずです。K1-301, 302の実験室をぶち抜き出使っています。

ビデオの冒頭には、その前の年の秋に撮影した情報学部棟の建築中の映像も少しあります。その頃在籍していた人には懐かしいものですね。



このビデオは、当時のiPod(今のiPadじゃありません)の小さなウインドウで見るために編集した記憶があります。約90秒です。その際、かなり画質を落としてありますので、いまPCで見たりすると綺麗に写りませんが、それでも、過去のひとこまを見るには十分です。

2018年2月11日日曜日

もっとやってみたかったこと

まだまだやってみたかっとことはあります。

少しはやりかけたが、まだまだこれから

大学は研究題材の宝庫です。
まだまだ利用できるデータや環境がある

2018年2月9日金曜日

1971年製カシオの電卓

 懐かしい電卓のお話です。

 机の中を整理していたら出てきたのが、下記の「カシオ製電卓 Pocket-mini」です。1971年くらいに、発売と同時に購入しましたので、実に、47年前のものです。学科の教職員の方の何人かはまだ生まれてなかった時代でした!

 現在のような液晶ではなく、(多分)ニキシー管という名の赤く細いワイヤーのようなもので表示されるのが懐かしい。価格は当時、確か1万5千円くらいでした。電卓は、その名のとおり、会社などで机上において使うものであり、個人が持ち歩くものではなかったですから、高価でした。

1971年の初期モデル

今も動いていることの証明:大学の住所の末尾を表示

 裏側の電池を見てください。こんな古い電卓に、最新のエネループ電池。しかも、単なるエネループじゃないです。田中博研究室開発の人力自転車による発電(正式名称が違っていたらすみません)で充電されたものです。この組み合わせがなんともいいじゃないですか。

最新の人力発電による電池との組み合わせがクール!

さらに、関連情報です。このCasio Pocket-miniの3年後の後継機で1974年発売のものは、米国スミソニアン博物館にも展示されている?ようです。そのWebページは以下にあります。


米国スミソニアン博物館のもの。私の所有型に対して緑のボタン(メモリ機能)が一つ追加されているようです。(上記URLから引用)

2018年1月25日木曜日

ありがとう、マグネットたち

残りあと僅かとなってしまった。
部屋を片付けている。
マグネットたちにも大変お世話になった。
ありがとう。

お世話になったマグネットたち

2018年1月8日月曜日

MIT App Inventorの発展

 優れたソフトウェアや開発環境は多数あるのですが、私にとってそのうちの一つが、MIT App Inventor for Androidです。この素晴らしさを、ぜひiOS(iPhoneやiPad)の上でも実現させたいという強い要望があるようです。

 MITでは、それに応えてiOS版も開発中であり、この春にリリースする予定とのことです。そのためにクラウドファンドの形で資金援助を求めていました。2016年末にその募金期間が一応終了し、その結果が以下にあります。
 世界中から、757人が献金したようです。我が情報工学科からも少なくとも3名が献金しました。目標額は10万ドルでしたが、すでに6万3千ドルほどが集まったとのことです。素晴らしさを感じて、支援したいと思う人が多かったことが何かうれしい。

 このApp Inventorはオープンソースとなっているため、原理的には、だれでもそのソースを基に独自のソフトウェアを開発できるようです。実際、以下のものが知られています。それぞれ、独特のユーザインタフェースや拡張機能を提供しています。そのうち、Thunkableでは、MITに先行してすでにiOS版もリリースしています!違いもあります。下記に私の理解していることを簡単に記します。

--------- App Inventorの仲間たち ----------

MIT App Inventor 
 
app inventor
 ユーザは、Android用にもiOS用にもほぼ同じように(共通のdesign, blockで)プログラムを作れる。ビルドする際に、どちらかのプラットフォーム向けかを指定する。となりそうです。これだと、学生や高校生にアプリを作ってもらう場合、非常にいいです。AndroidかiPhoneのどちらかはほぼ誰でも持っているはずですから。ただし、実際には、フェーズ1では、ライブテスト(iPhoneへはダウンロードしない)で使い、フェーズ2になると、ビルドしてiPhoneへ載せられるという計画のようです。それまでにやはり数ヶ月以上かかるのではないでしょうか。

Thunkable

https://thunkable.com/#/
 こちらでは、すでにiOS版もリリースしています。ただし、iOS版は、iOSネイティヴに作られています。Android版とは異なるユーザインタフェースやブロックで作るので両者の互換性はありません。もちろん、本来のApp Inventorの思想はそのまま受け継いでいるので、使い易いですが。今後、iOS版のブロック機能は次第に充実してくると期待されます。

AppyBuilder

http://appybuilder.com
 無料版と有料版がある。有料版では多数の独自ブロックも備えている。それらのブロックには先進的なものもあり、本家のMIT App Inventorにも良い影響を与えているようだ。実際、そのいくつかは本家にも採用されているようである。iOS版はやっていないが、独特の魅力がある。

Makeroid

https://www.makeroid.io
 他のものに比べて、全体にデザインが斬新的になっている。


---------  独自性はいいのだが、互換性はどうなる ----------

 それぞれが独自に開発はいいのだが、相互の互換性は気になります。もちろん、一定の独自機能はあっていいでしょう。しかし、優れた新しい機能ブロックは、上記4つのどれでも使いたいものです。それについては、ちゃんと考えられていますね。Extensionsという機能です。Javaで作成した機能ブロックを、既存のブロックと同じように使えるようにする画期的な機能が、MITによって以前から提供されているのです。
 これまでに開発された、200個を越えるExtensions用の新しいブロックが以下にリストアップされている。有料のものもある。Extensiosブロックは、少し頑張れば私でも開発できそうである。今後挑戦してみたい。
Pura Vida Apps

https://puravidaapps.com/extensions.php

2018年1月7日日曜日

懐かしき数学

 2018年が明けた。今年は私にとって特別の年なのである。年末に家の中を掃除していた。はるか昔に大学で勉強していた数学書が何冊か出て来た。出てきたのではなく保存してあったものだ。その当時は、パソコンもスマホもWebもSNSも何も無かった。情報源は、先生の講義の板書と自分で買い求めた書籍だけだった。

 ・初等リーマン幾何学(矢野健太郎著)
 ・連続群論(ポントリャーギン著、邦訳)
 ・集合論入門(赤攝也著)

 ポントリャーギンは、14歳の時に事故で失明したが、微分幾何学の大数学者となり、旧ソビエト連邦の英雄となった。

 これらの数学書の具体的な内容はすっかり忘れてしまっていて、もう今では読めない。もしも、その当時の気力と頭の状態を復元できれば可能かもしれないが。




Education is what remains after one has forgotten what one has learned in school (Einstein)
・教育は学校で学んだことを忘れてしまった後に残るものです(Google自動翻訳)
・学校で学んだことを忘れてしまった後に残るものこそが教育なのだ(より自然な和訳)

大学の数学科で学んだ経験は、その後の私の職業生活の基盤の一部を形成した。そうさせてくれた亡き父と母に感謝したい。
The experience I learned in the mathematics department of the university formed part of the basis of my career life afterwards. I would like to thank my dead father and mother for letting me do so.(Google自動翻訳)