卒研メモ:.NET Coreファミリの分類

 どうもMicrosoftが主導する.NET Frameworkから.NET Core,そしてXamarin買収という流れが理解できずにいたのですが,このASCII.jpの記事を読んで疑問が氷解しました。

 現状,Windows OSの上で動作することが前提の.NET Frameworkから,Linuxを含めた.NET Coreへの注力がなされており,Xamarinはその一翼としてiOSやAndroid上でモバイルアプリ開発用として活用される見込みということだそうです。この記事にもある図を,自分なりの解釈も入れて書き直してみました。

 .NET Coreも良さげですが,Linux環境下での実績がイマイチ良く分からんので,当面はXamarinを中心にWebとのハイブリッドサンプルアプリを作ってみるぐらいでお付き合いしていこうと思っています。

卒研メモ:W3C Payment Request API

 通販サイトや金融分野でのWebの利用が活発な昨今,金銭のやり取りのための標準APIであるW3C Payment Request APIが,主要ブラウザで実装されているようです

 仕様をざっと見たところ,JavaScriptで支払情報,支払い完了情報等のオブジェクトが定義されており,オブジェクトに情報を突っ込んでJavaScript関数を呼び出すだけで支払いが可能になるという便利なAPIになっています。勿論,現在でもクレジット情報のやり取りは普通にWeb上で行われていますが,全く標準化されておらず,旅行業者や通販業者ごとにバラバラの取引ツールを使わざるを得ない状況になっていました。

 今後はAmazon BusinessのようにB2Bでも標準的なAPIで金銭のやり取りが行われるようになっていくでしょう。巨大なプラットフォームに依存しないW3CでのWeb APIの標準化と実装の勧めは自由競争社会を維持する上で重要な活動です。

卒研メモ:MATLABによるランダムシミュレーション

 「Rで楽しむ統計」著者の奥村先生が次のようなTweetをRTされてました。

 なるほど,確かにP.53~55に,ランダムなやり取りによって,かえって平等性が失われ,極端な貧富の格差が出るという数学的な説明がありました。元の論文ではRスクリプトの例がありましたが,MATLABの練習問題にはちょうどいいので早速作ってみました。

 粗削りですが,上記の例を実行するためのMATLABスクリプトを下記に張りつけておきます。

perms関数を使っているので,動作的にはずいぶん遅くなってしまっていますが,大体の雰囲気はつかめるでしょう。平等に出会ってその都度支払い&受け取りが発生したとしても,貧富の格差は大きくなるばかり,という現象が視覚的に理解できます。

 高機能計算ツールMATLABが入手できた暁には実行してみて下さい。

卒研メモ:GNU MPで素数日を調べる

 GMP(GNU MP)の機能として,整数が素数であるかどうかを確認する機能があります(数論関数のmpz_probab_prime_p関数)。詳細はマニュアルかソースプログラムを読んでいただくとして,本日(20170627)も素数日でした。

 ということで,本日が素数日かどうか,次の素数日(mpz_nextprime関数)がいつになるのかを教えてくれる機能をGMPサンプルプログラムに追加しました。

 ということで,この応用問題として「素数日でない時にはその数を素因数分解せよ」を出題しておきます。結構面倒なので,効率的な素因数分解方法を探求して下さい。

卒研メモ:Tensorflowの話題

 DeepLearning界隈の進化のスピードはとても速く,悠長に査読の結果を待つ余裕はないので,arXiv等のプレプリント投稿サイトにガンガン新しい成果が放り込まれていきます。これもその一つですね。

 この論文はちゃんと読む必要がありますが,単純に複素数化するのではなくて,計算量が節約できるユニタリ行列(実行列だと直交行列)を使うあたりが工夫なのかなと。いずれ遠からず実装されて公開されるんでしょうね。

 もう一つ,GoogleがTensorflow用のツールTensor2Tensorを公開しました(Blog記事)。機械翻訳で利用されているSequence2sequenceの改良がやりやすくなるようです。

 この界隈の進化は本当に速いですが,成果をすぐにプログラムで確認できるのはありがたいですね。

卒研メモ:XamarinとC#

クロスプラットフォームでネイティブアプリが開発できるApache Cordovaについての記事を以前書きましたが,オープンソース・マルチプラットフォーム戦略を展開するようになったMicrosoftもXamarinという.NET環境下における開発が可能なツールを出してきました。日本語の翻訳本も出版されているようです。

 .NETでの開発にはC#, C++/CLI, VBScript等が使われますが,現在ではどうやらC#が多いように見受けられます。LAMPスタック的には,PHP + JavaScriptに相当する機能を持つ広範な開発環境です。個人的な研究ではC, C++でガシガシ機械語コードを直接吐き出すプログラミングをやることが多いので,.NETだと遅くなりそうでなるべく避けていたのですが,node.jsの利用が盛んになった昨今ではもう毛嫌いする理由はなくなったように感じます。たまに古手のオープンソース主義者にはM$の利己主義的クローズド戦略姿勢を毛嫌いする向きもいますが,CEOが代替わりした今のMicrosoftは過去とは決別した別会社のようです。

 ということで,Cordovaの勉強が終わってから,.NETとC#,そしてXamarinも触ってみたいところですが,ロートルゆえに着手は早くても次年度以降ですね。急ぎ取り掛かりたい人はWebの情報を入手して,さっさと取り組んでみて下さい。

卒研メモ:WebサーバスタックとRDBMS

 Webアプリケーション開発も年数を経るにつれ,環境が固定化しつつあります。サーバ側では,WebサーバソフトとしてApacheの代わりにnginxが台頭してくるといった動きはありますが,RDBMSは定番の御三家(Oracle, MySQL, SQLServer)のシェアがほぼ不動状態になっています。(参考サイト: DB-Engines Ranking)

 時系列的に眺めても,Oracleに買収されたMySQLの代わりに完全互換のMariaDBのシェアが上がっているという動きはありますが,やはり定番の御三家の変化は殆どありません。

 この調査はWeb経由で行われているものなので,現在のWebサーバスタック,即ち,Webサーバ,RDBMS等のソフトウェア構成を反映しているものと言ってよいでしょう。本研究室では,開発環境としてはXAMPP for Windows(Apache, MariaDB, PHP)を使用しており,このサーバでもOSがLinuxであることを除けば同一の環境で稼働していますが,世界的にはOracleやSQLServerを利用しているWebアプリケーション動作環境の方が約2/3近く占めていることになる訳ですね。OracleはJava(JavaScriptに非ず)との組み合わせが多いように思えます。
 これらをまとめたWebサーバ側のソフトウェアスタックを図にしたものが下記になります。

 昨年にはMicrosoftがLinux環境向けのSQLServerのプレビューバージョンを公開し,C#を動かすための.NET core環境もLinux上に構築できるようになりました(こちらの記事が詳しいです)。こうなると,Linux上でもWindowsと同じ.NET環境で稼働するWebアプリケーションが実用になるかもしれません。

 近い将来は既存の教材をASP.NET MVCを使ったバージョンに展開していく必要が出てくるかもしれません。とはいえ,PHPとMySQLの牙城もWordPressやXoops等の有力CMSが存在するおかげで結構堅牢なので,そう簡単に乗り換える必要はないでしょうが,同じWebアプリの機能を違う環境で動作させるテクニックを知っておくのは悪いことではないでしょう。当方も一応心に留め置いております。

卒研メモ:加速度センサーとスマホ調査

 本日(2017-06-07)の情報学概論で,情報学部1年生に手伝ってもらい,JavaScriptによる加速度センサー(歩数計として使用予定)の動作確認をスマートフォンで行ってもらいました。ほぼ全員参加(140名)の同時アクセスでも問題ないことが確認でき,加速度センサーの動きも問題ないことが分かりました。

 ついでに,スマホのキャリアと機種を質問してみたところ,NTT DocomoとiPhoneのシェアが飛びぬけて高いことが分かりました。

 iPhoneは分かるとして,シェアを落とし続けていると思っていたDocomoが若者に強いのは意外でした。年と共にだんだん離れていくのかしら?

 今後も,この手の「スマホで調査」を継続していきたいところです。

卒研メモ:日本語形態素解析ツール

 日本語は英語とは異なり,単語の分かち書き(単語間にスペースを入れる書き方)をしないため,文章を解析して単語を分割する必要があります。分解する際には単語の品詞を区別するため,形態素解析(Morphological Analysis)と呼ばれるツールが,日本語のテキスト解析には不可欠のものになります。

 フリーで使える形態素解析ツールとして有名なのはMeCabです。このサーバにも入っていますので,試してみて下さい。但し,辞書の更新を行っていないため,最近の固有名詞には対応していません。適宜アップデートしてくれる機構もあるのですが,辞書が一方的に馬鹿でかくなるので,そろそろストレージに余裕のなくなってきた本サーバには組み込んでいません(多分,本学クラウドに用意することになる筈)。

 インストールしなくても使えるものとしては,Yahoo! Japanが用意しているWeb APIがあります。ここにサンプルプログラムを突っ込んでみましたので,試してみて下さい。辞書のメンテナンスがどの程度行われているのかは良く分かりませんので,調べてみる価値はあるかと思います。

 適宜,良さげなものを使ってみて下さい。

卒研メモ: UTF-8Nで保存!

 古いエディタ(TeraPadなど)を使っていると,文字コードをUTF-8にして保存したPHPスクリプトやHTML, CSS, JavaScriptでトラブルが起きるケースに頻繁に出会います。つい先日アップしたFullCalendarのPHPスクリプトでもこの現象に出会いました。

 こちらのblog記事「文字コードはUTF-8? UTF-8N?」に,トラブルの原因となるBOMについての詳細が解説されていますので参照して下さい。

 ということで,TeraPadを使ってWeb開発を行う際には必ず「UTF-8N」で保存して下さい。

 ・・・つーか,開発したいならTeraPadではなく,「UTF-8N」などというセーブ方法のない秀丸AtomVisual Studio Code, Sublime Text, Eclipse等のプログラム開発に向いたエディタの最新版を使って下さい。これらのエディタには元々「UTF-8N」などという選択肢もないので,安心して「UTF-8」で保存できます。