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自動翻訳)

2017年12月6日水曜日

iPhoneでもApp Inventor!(その3)

 iPhoneでもApp InventorThunkable)の第3弾です。今回は、Thunkable for iOSに備えられたAssistantというブロックを使った簡単な例です。これは、音声(またはテキスト)で、iPhoneと会話するものです。AssistantはGoogleのDialogflowの仕組みを使って音声応答するものです。

 そのアプリの使用例を示します。音声で、「学科忘年会」とか「卒論提出日」とか、iPhoneに向かって問うと、「2017年12月26日です」とか「2018年1月25日です」という答えが表示されます。

個人用 SiriのようなiPhoneアプリ


 日付に限らず、「外部資金課の〇〇さんに謝らなくては」、とか「教務課の△△さんに伝えなくては」という場合の電話番号取得などにも使えます。

 このような音声検索には、AppleのSiriGoogleの音声検索(OK Google)等があります。でも、例えば、本物のSiriに「卒論提出日」と問いかけても、まともに答えは返ってきません。本学科のローカルな情報ですから当然ですね。そこで、上記のような言わば、「私の個人的Siri」のようなものがあってもいいですね。

Siriに「卒論提出日」を聞いてもだめです

さて、このiOSのアプリは、以下のような僅かなブロック(処理)の組み合わせて作れます。Assistantという名のブロックを使っています。

ThunkableのAssistantブロックの利用


 そして、音声の問い合わせと日付の対応は、以下のようにGoogleのDaialogflowで定義します。それを、Assistantに接続しています。

Dialogflowによる会話のためのデータの定義


 このDialogflowは、クラウド上で設定されており、以下の特徴があります。
  • iPhoneアプリケーションを変更することなく、このDialogflowのデータを追加、修正でき、段階的に、実際に役に立つものに仕上げることができる。
  • 類似語「忘年会」、「学科忘年会」 ... などもsynonymsとして、思い付いたらどんどん追加できる。
  • 下記のように、ユーザが音声で問い合わせた場合の状況を示し、Dialogflowの学習状況を改善することができる。例えば、「卒研発表」と音声で問い合わせたつもりが、かなりの場合、「卒検発表」と誤認識された様子が分かる。学習改善に繋がる。
  • と思っていたら、いつの間にか例えば「卒論の提出」でも正しく日付が提示されるようになりました。「の」を含んだものは上記Dialogflowには自分では設定していませんでした!

「卒研発表」のつもりが「卒検発表」と誤認識された状況も分かり、学習を改善できる

2017年11月30日木曜日

20年前も人工知能や並列分散を学生諸君と学んでいた...

 ちょっと変わったタイトルになってしまいました。人工知能並列分散処理は、ここ本学ではどのくらい前からやっていたのか?自分でも忘れかけています。そんな時、書類整理をしていたら、実に20年前の「次年度卒研配属募集」の際に使ったと思われるカラーOHPが出てきました。

 今と比べると以下のような感じです:

  • こんなに簡単な募集案内で良かったのか、おおらか。
  • 本学としては、現状に比べて大学院生が多かったのではないか
  • 並列分散は指導教員が元々専門にしていたのであがっている
  • 人工知能とあるが、そのころはDeep Learningはありませんで、GAなどが先端的
  • Javaが急速に普及しはじめたようだ

 以下のOHPのコピーは、平成10年度募集の際のものと思われます。つまり、映っている15名(教員含む)は平成9年度の皆さんです。