卒研メモ: Apache Cordova参考文献

 来年度の3年生向け実験講座のテーマを決めなきゃいかん時期になりました。久しぶりなのでOS環境から作る必要があり,3月下旬~4月上旬はこれにかかりきりになりそうな感じです。

 ということで,色々調べた結果,枯れた技術を使うのが安全なので,テーマとしては「Apache Cordovaを用いたハイブリッドアプリ開発」になりそうです。まだ作ったことないけど。他の先生方とテーマが被ることもなさそうです。

 参考文献は色々探すと,これなんか良さげなので,一冊入手しました。Webに転載されている分だけでも参考になります。とはいえ,何を作るかまでは本には書いてありませんので,いろいろ考えなきゃいかん訳です。2~3回の実習でできる範囲に留めておかなきゃいけません。この辺の塩梅が難しいところ。

 まぁ,チマチマ触りながらテーマを考えていきます。

卒研メモ:openBD全件サーチ高速化

 MySQL化に引き続き,検索の高速化を行ってみました。手っ取り早く,著者フィールドをindex化した結果,かなりの高速化ができることを確認しました。

 検索ワードを「高橋留美子」でやってみた結果です。index化前は

でしたが,index化後は

となり,1.69秒→0.00257秒で爆速となりました。このぐらいだとほぼWeb通信の遅延しか感じません。

 とはいえ,index化できるフィールドには限りがあり,出版社名,タイトル名まで一篇にはindex化できません。ということで,メインの書籍テーブルではタイトル名でindex化しておき,著者名,出版社名はそれぞれ個別にテーブルを作っておくことにしてはどうかと思案中です。これができると,ようやく最終目的である「openBD APIに著者名,タイトル名,出版社名の検索機能を追加する」ことができるようになります。予定では

  • 著者名検索 -> http://root-url/tklab_openbd/version/search?author=著者名
  • 出版社名検索 -> http://root-url/tklab_openbd/version/search?publisher=出版社
  • タイトル名検索 -> http://root-url/tklab_openbd/version/search?title=タイトル

となればいいかなぁ。マシンリソースが決定的に不足してますんで,API keyはPOSTで渡すようにして制限掛ける予定です。今月中にできればまぁ情報処理学会で話すぐらいは出来るでしょう。

 ちなみに,メイン書籍テーブルまるごとのMEMORYエンジン化は無理でした。メインメモリを山ほど積んだ,openDBの本家が展開しているような贅沢クラウド環境でないと厳しいですねぇ。
 フィールドを制限してテーブルサイズを小さくすると入ることは入りますが,1/4ぐらいの検索速度に留まりましたんで,index化の方が桁違いに速いことが分かります。

卒研メモ: openDB全件サーチMySQL化

 以前作ったOpenBD全件サーチ試作版ですが,卒研が佳境になってきたので,高速化の試みを行いました。A君の頑張りのおかげで,Memcachedをかませてコンマ000秒程度の時間で検索が可能であることが確認できました。とはいえ,一度検索を行った結果がCacheされて再利用できる場合にのみ,です。

 SQLiteからMySQLへの移行も行い(未公開),ついでにデータダウンロード用のPythonスクリプトをVersion 3対応しました。結果として,安定的に1秒台後半の検索が実現できています。

 ただやっぱり普段からGoogleの爆速サーチに慣れ切った身としては,1秒以上待たされるというのは「もったりすったり」感が拭えません。

 現状では検索対象データは100万件程度,1GBぐらいで収まってますので,このぐらいならどうにか全部On memoryで可能と考えています。とりあえずMySQLのMemory storage機能を使ってみたいところです。

 これで初手から検索が高速になるようなら,Memcachedも不要となるはずですが,データの肥大化にどこまで対応できますやら。

卒研メモ: Wordcloudを描いてみる

 Word Cloudとは,テキストマイニング結果を可視化する技法の一つで,重要度の高い順に単語のサイズを大きくすると共に,中心から周辺へと配置するというものです。WebサービスとしてWord cloudを作る機能を提供しているところもあり,例えば,こちらのサイトを使って情報学部のトップページをWord cloudにすると次のようになります。

 同様に,MATLABでもWord cloudを描く機能が最新版の2017bから追加されたようです。wordcloud関数一発で描けるということなので,早速やってみました。次の1行で十分です。

これで生成した図が下記のものになります。

 形態素解析を使っておらず,助詞が混じってしまっていますが,そこそこまともなものができています。きちんとやりたい人は,MeCabYahoo!のサービスを使ったりして助詞を省く必要があります。

卒研メモ:.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の情報を入手して,さっさと取り組んでみて下さい。