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

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

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

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

卒研メモ:Tensorflowの話題

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

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

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

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

星陵高等学校講演:オープンデータとWebアプリケーション

「オープンデータとWebアプリケーション」
静岡理工科大学 情報学部 コンピュータシステム学科
幸谷 智紀(こうや とものり)

0.【宣伝】静岡理工科大学情報学部について
静岡理工科大学情報学部のWebページ

1.オープンデータとは?
 「オープンデータ(Open Data)」とは,誰でも閲覧できる状態で広く公開されているデータのことです。今の時代はデータを扱う主体はコンピューターですので,オープンデータと言っても紙媒体ではなく,電子化されているもの,即ち,コンピューターが直接読み書きできるファイルの形式になっているものを指すことが殆どです。
 電子化されたデータは,コンピューター同士が繋がっているインターネット(The Internet)の上でやり取りしやすい形式ですので,公開するにしても,インターネット上で誰しも読める状態になっている方が,読む方としても都合が良いわけです。インターネットでは様々なサービスが展開されていますが,現在ではWeb(World Wide Web)を通じたサービスが普通になっていますので,オープンデータもWeb上で,つまり,データを持っている会社,行政組織,個人,各種団体のWebページ(ホームページ)上に置き,誰でもブラウザを通じて読むことができるようにしています。こうしたオープンデータを活用したWeb上のサービス,いわゆるWebアプリケーションが様々な形で展開されています。

 以下,オープンデータとは,Web上で誰でもブラウザから閲覧できるようになっている電子ファイル状態のデータである,と定義します。最近では,行政機関が積極的にデータを公開するようになっています。静岡県も積極的にオープンデータの活用を後押ししていますし,静岡県内の市,例えば富士宮市,静岡市,浜松市では下記のところでオープンデータにアクセスできるようになっています。

 オープンデータは,単なる公開情報という存在を超えるものです。コンピューターで利用しやすいファイルの形式になっているということは,そのままソフトウェアで加工できることになります。これをうまく活用することで,より便利なWebアプリケーションを作ることができます。

2.オープンデータをどのように活用するか?
 ここでは,簡単なオープンデータの活用方法を具体例で示します。

 皆さんは,「国民の祝日」,例えば正月,成人の日,建国記念日,春分の日,がどこでどのように決まっているか,ご存知ですか? 検索すればすぐに分かりますが,これは政府が法律に基づいて決めているもので,内閣府に解説ページがあります。ただ,これは情報を人間に見やすく表示しているだけで,余り使い勝手の良いものではありません。そこで,近年の国民の祝日を表計算ソフトで扱いやすい形式で公開しています。これが国民の祝日のオープンデータです。この形式であれば,表計算ソフトだけでなく,様々なソフトウェアに利用することができるようになります。例えば,下記の図は,FullcalendarというJavaScriptで構築されたスケジュール帳に,国民の祝日を上のURLからファイルを読み取り,自動的に挿入したものです(サンプル)。

 但し,これはあまり使い勝手の良いものではありません。元々の国民の祝日ファイルは,単なるテキストファイルなので,データそのものを使いやすい形で形成し,流し込む処理が必要になります。例えば,上記のFullcalendarに取り込むためには,次のようなPHPスクリプト(プログラム)の手助けが必要です。

 このように,直接データを取得して自動的に加工できるようになると,人間を介しての作業が不要になります。

 オープンデータの利用のためには,もう少し,利用者の立場に立って,使い勝手の良い形式で必要な分量のデータを受け取れるようにする必要があります。最悪な形式は,いわゆる「ネ申Excel(三重大学・奥村晴彦)」と呼ばれる,書類をそのまま表計算ソフトウェアで成形しただけのシロモノで,人間が手作業でチェックするには便利かもしれませんが,コンピューターにとっては最も加工の難しいものです。オープンデータは人間よりも,コンピューターにとって使い勝手の良いシンプルな形式であることが望まれます。

 しかし,もっと使い勝手の良いオープンデータは,情報を加工したい側が欲しいデータだけをいつでも取得できるようになっているものです。そのためには,上記のFullcalendarに祝日データを渡すプログラムのように,オープンデータと利用者の間で仲介し,利用者の要求に応じた返答を返すような仕組みを作らなくてはなりません。これを実現しているのが,Web API (Application Programming Interface)と呼ばれるものです。

3.Web APIの実例
 最も良く知られたweb APIは,GoogleやYahoo! Japan,Bingといった検索エンジンです。

 どの検索エンジンも,URLの中に検索すべき単語を埋め込んであります。例えばGoogleの場合は

https://www.google.co.jp/#q=星陵高等学校

となっています。このように,ブラウザからアクセスする際に,利用者が欲しいデータの範囲(この場合は「星陵高等学校」を含むWebページの一覧)を指定することで,必要のないデータまで取り込むことがなくなります。

 現在では様々なデータを,Web APIを通じて取り込むことができるようになっています。Google map(地図情報)やぐるなび(グルメ情報)なども,細かくデータを指定して取り込むことができるようになっています。

 その他,下記のようなWeb APIもあります。

4.openBDを基盤とする書誌データの活用
 オープンデータとWeb API活用の事例として,現在本研究室で取り組んでいるopenBDについて紹介します。
 2017年初めに広く公開された本のオープンデータ化を進めるプロジェクトで,2017年6月現在では約90万件の本のデータが取得できます。今のところ,本のISBN番号一覧と,ISBN番号に紐づけされた書誌データ(表紙画像も含む)を取得できるWeb APIが提供されており,基本的にはユーザーがダウンロードして使用する全データを提供することを主目的としています。
 本研究室でも,簡単なWebのインターフェースを提供しています。

openBD API

本一冊一冊ごとに異なるISBN番号が振られており,それが分かればその本のデータだけを入手することが可能です。しかし,普通本を買うときにISBN番号で指定することはありません。普通は,本のタイトル,著者名,出版社名,定価等で探すものです。

 それを可能にするため,本研究室では全件検索ができるような仕組みを作り,公開しています。使い勝手はまだ改良の余地がありますが,これも改良されたopenBDのWeb API化の一つと言える仕事になっています。

5.おわりに
 インターネットが当たり前になった今では,様々なデータを自由に取得でき,もっと便利に使うためのWeb APIの利用が盛んになっています。今後は,これらのオープンデータやWeb APIを通じてより高度なデータ解析を自動的に,例えばAIを使って行うことが普通になっていきます。
 人間の側はもっと賢く,これらのオープンデータやWeb API,そしてその分析結果を使って高度な知を使いこなしていくことになります。プログラミングを行うだけでなく,それをより良い方向に生かす技術を,今後の大学生活で身につけて下さい。

卒研メモ: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が若者に強いのは意外でした。年と共にだんだん離れていくのかしら?

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

情報学概論:高性能計算研究室の紹介

幸谷 智紀(こうや とものり)

  1. 概要
  2. [研究1] 多倍長数値計算の応用
  3. [研究2] GPU Computingの応用
  4. [研究3] Webアプリケーション開発
  5. [実験] スマートフォンによる歩数計
  6. 今後の展開

1. 概要

多倍長計算のサンプルアプリ: Try! MPFR





[研究2] GPU Computingの応用





5. [研究3] Webアプリケーション開発

Webアプリケーション開発入門

MPFRgraph(jqPlot)


6. [実験] スマートフォンによる歩数計


7. 今後の展開

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

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

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

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

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