研究者のWebページはあまりモバイル対応できていない?

Googleが、モバイルフレンドリーかどうかを検索ランキングの要素として使い始めると発表したので、自分が管理しているWebサイトのモバイル対応を行いました。ほとんどはレスポンシブWebデザインにしてあったんですけど、見直してみると、Google Sitesを使っている自分のメインページに設定ミスがあったりして、見落としてるもんだなあと思いました。

やった作業はたいしたことなくて、自分でCSSを書いているサイトについて、Googleのチュートリアルにしたがって、viewportを設定して、600ピクセルをブレークポイントにしてmedia queryをかけ、簡単にスタイルを設定しただけなので、作業時間は2時間もかかってないです。まあ、本当はデザインを根本的に見直すべきなんでしょうけど、またそれは別の機会としました。

で、これからが本題。ついでに、自分の勤務先の大学内のページとか、同業の研究者のページとかがどれくらいモバイル対応しているか、Googleのチェックツールで調べてみたわけなんですが… ほぼ壊滅でした。大学内では、私が関係しているサイト以外どこもviewportの設定がないような気がしました。情報系やデザイン系の学部があるというのに、どういうことなんでしょう… 同業の国内研究者のページ(Webに関わる研究をやっている情報系の教員ばかりです)も同様でした。1つだけ、WordpressのWPtouchプラグインを導入しているらしきサイトがあったんですけど、このプラグイン、ブログの記事が時間順にトップページに並ぶので、研究室のような静的ページ中心のサイトだとあまり良くないと思います。

さらに、研究者のポータルサイトとして有名なresearchmapというサイトがあるんですが、これもviewportの設定なし。

確かに、研究者がWebにアクセスするのはパソコンが中心でしょうから、自分たちはこれで困らないと思うんですが、さすがに世間のWebの使われ方(モバイルファースト)と乖離しすぎのような気がするんですよね。現に、普段相手をしている学生たちはみんなスマートフォンでWebを見ているわけで、モバイル対応のサイトでないと彼らにアピールしづらいと思うのです。

企業だったら、自分たちがWebデザインに明るくないのであれば外注を考えると思うんですが、大学の研究者だと、 入門書を買って勉強するなり、Webデザインソフトを買うなりして、まず自分たちでやることを考えるんでしょうね。自分も研究者の端くれだから、その気持ちはよくわかる。ただ、それでは最低限のクオリティを維持できないほど、Webの現場の話が複雑になってるということなんでしょう。

あー、もしかして、研究者向けにいまどきのWebデザインの入門を書いたりすると、需要があったりするのかな。需要があるんだったら、やってみてもいいかな。

所属研究室名が変わりました

現職に就いて以来、ながらく「知能メディア工学研究室」という名前の研究室に所属していたのですが、つい先日、研究室の名前が「人工知能学研究室」に変わりました。教授が昨年4月に交代し、研究室として取り組んでいる課題が人工知能寄りに変わったためです。

もっとも、自分が取り組んでいる内容はやっぱり構造化文書やWeb、ソフトウェアで、特に変わるわけではありません。1年間、機械学習ベースの研究の話を聞いてきたけど、この辺はやはり勘が働きません。50歳近くになって乗り出すには畑が違いすぎるなあ、と改めて実感した次第です。

というわけで、関係者の皆様、引き続き宜しくお願いします。

松本吉弘先生の訃報

昨日、知人から松本吉弘先生の訃報を受けました。驚いてTwitterを検索してみたら、下記のツイートがありました。

松本先生のご専門はソフトウェア工学で、私の専門とはやや離れています。ですから、直接ご指導をいただくことはほとんどなかったのですが、にもかかわらず、印象深い方でした。

最初にお会いしたのは私が修士1年のとき、ちょうど松本先生が京都大学に着任された頃でした。私は当時ほかの研究室に所属していたのですが、カリキュラムの一環で、他研究室に出向いて短期間指導を受けるといった講義がありまして、すでにソフトウェアに興味を持ち始めていた私は、立ち上がったばかりの松本研を選択しました。

そこで、圏論に裏打ちされたソフトウェア設計の考え方に初めて触れたのでした。衝撃の一言でした。それまでに聞いたソフトウェア設計の講義は経験的な話が多くて、正直退屈だったのです。それが、こんなに理屈で裏打ちできるのか、と。まあ、すでに何をやったかも覚えていないし、それほど大した成果も出せなかったのだとは思いますが、体験としては強烈でした。

もう時効だと思うので書いてしまいますが、博士後期課程への進学を考えていたとき、松本研に行こうと、かなり真剣に考えていたことがあります。松本先生にもお話を伺いに行きました。その時、私はよほど深刻な表情をしていたのでしょうね。松本先生は穏やかな表情で「どうしたの?」というような言葉をかけてくださったように覚えています。そのときのご表情が、なぜか今でも印象に残っています。

当時の関係者はご存知の通り、結局その後、上林弥彦先生の研究室に進むことになり、松本先生とは、学科内の一教員と一学生、程度の関わりにとどまることになりました。それでも、この時の体験が心に残っていたのか、大学教員になってからしばらくして、松本先生の著書「ソフトウェア工学」をふと見つけ、手に取りました。

ここで、もう一度強烈な体験をすることになりました。この本の序文にこんな一節があります。

難しいということは彼ら(注: 学生)が敬遠する原因にはならない。難しくても面白ければなんでもやろうとする。(中略)数学(情報数学)的体系に基づいて構成的に話しが進められる部分に関しては、たいへん評判が良い。

先生ご自身の体験から出た言葉だと思うのですが、自分が自らの講義を通してなんとなく感じ始めていたことをはっきりと言語化してくれたのがこの一節でした。それ以来、どのような講義であれ、その裏に潜んでいる理屈を体系的に(聴衆となる学生たちがわかるように噛み砕きながら)示す、ということを常に意識しながら行うようになりました。

この「ソフトウェア工学」という本、すでに絶版になっているようです。私の宝物です。

松本先生に改めて感謝するとともに、ご冥福をお祈りいたします。

Rubyの代数パッケージalgebraを1.9.1以降に対応させました

Rubyで1変数または多変数の多項式を計算する、algebraというライブラリがあります。ところが、これ、Ruby1.8.7までしか対応しておらず、それ以降のRubyでは動かないものでした。

昨年末に、この件を知人の数学研究者から相談されまして、いろいろソースをいじくった結果、Ruby1.9.3以降で動作するようになったので、Githubで公開(kunishi/algebra-ruby2)しました。1.9.3-p551, 2.1.5, 2.2.0で動作をチェックしています。オリジナルのalgebraライブラリの作者である原さんには連絡をしまして、algebraライブラリのWebページからリンクしていただくことになると思います。

ただ、私自身は数学は専門ではないので、ソースに同梱されているテストを全て通すようにした、というだけで、まだバグが残っている可能性はあります。gemにもなっていません。

また、algebraライブラリはRationalクラスに依存しているのですが、Ruby1.9.1からRationalクラスの扱いが大きく変わりネイティブ化されたため、1.8.7以前では動作しません。そのため、オリジナルのalgebraライブラリに成果をマージできるかどうかは未定です。できたとしてもだいぶ先になりそうです。

データベースの教科書を一部執筆しました

知り合いの先生からお誘いを頂いて、昨年度からデータベースの教科書の執筆を行っていたんですが、このたび、ようやく刊行の運びとなりました。共立出版から出ている「未来へつなぐデジタルシリーズ」というシリーズの第26巻「データベースービッグデータ時代の基礎ー」です。

私は、この中の「半構造データとXML」という章の執筆を担当しました。半構造データやXMLについては名著「Data on the Web」の翻訳をやっていたりして、それなりにお声がけをいろいろいただける分野ではあります。今回も、懇意にして頂いている知り合いの先生が編集をされるという縁で、「XMLデータベースの部分を書いてもらえないか」という打診をもらいまして、お受けした、というわけです。

自分の得意分野とはいえ、やはり苦労もありました。まず、読者の対象が初学者で、かつ講義1回分、約20ページという制限があったこと。XMLの基礎だけでも、ちょっと詳しく説明すればこれくらいにはなってしまいます。でも、データベースの教科書の一部である以上、スキーマや問合せにも言及しなければなりません。

もう一つは、当初の企画案では、章のタイトルが「半構造データベース」となっていたこと。これはちょっと解説が必要ですね。普通に考えると、構造を持ったデータ(RDBのレコードなど)を少しゆるめた考え方として半構造データがあり、それを蓄積・検索する半構造データベースがある、そのような半構造データの一例としてXMLが有名である…ということで、普通のタイトルのように思うのですが、実はそうじゃないのです。

  • 半構造データは構造を持ったデータの集合も包含しています(なので、XQueryは単一の半構造データに対する問合せを想定しています)。ですので、『半構造データベース」なるものはないんじゃないかと。少なくとも私は記憶にありません。
  • 歴史的には、XMLのほうが半構造データよりも先に登場しています。つまり、XMLやHTML、あるいは電子メールのように部分的に構造を持ったテキストなどを包含する概念として提案されたのが半構造データなんですね。ある意味、アドバルーン的な概念と言えます。
  • そんな事情のためかはわかりませんが、半構造データの正確な定義はないように思います。少なくとも私は聞いたことがありません。大体こんなもの、という共通認識は、研究者の間ではあると思うんですけど。

企画案を直してもらうだけなら話は簡単なのですが、問題は、これが、情報工学の研究者から出てきた企画案だったということ。つまり、半構造データやXMLの専門家以外には誤解されている可能性が十分あるということで、誤解を解くように執筆する必要があるなあ、と実感させられました。

そんなわけで、結局、半構造データとその問合せの解説、ついで半構造データの一例としてのXMLとその問合せを解説し、次にデータベースらしい話ということで、スキーマの扱い、XMLデータのDBへの格納、SQL/XMLの話を加えました。もちろん、これを20ページに収めるということですから、本当に概要だけ、詳細は別の文献を見てくれ、というスタンスで、参考文献を結構あげています。XMLについても、あくまでデータベースの視点から話題の取捨選択を行いましたので、例えば名前空間なんかは完璧に省略した一方、識別子の扱いは比較的取り上げています(ID属性も、XPathによる識別子の代用も)。

書店には並びにくい専門書なので、実際にお手にとって見て頂く機会は少ないかもしれませんが、もし何かの機会がありましたらご覧いただけると幸いです。すでにいくつか誤植やバグを見つけて少々凹んでいますが、もしたくさん売れて重版されれば直る…かもしれません。

Google Readerのスターを一括で削除する方法

Reederが単独でRSSフィードを管理する機能を用意したので、Google Readerからのインポートを何度か試みたのだが、何度やっても途中でReederが落ちてしまう、という状態になっていた。いつも “Loading Starred Items” の途中で落ちてしまうので、Google Readerからスター付き記事のリストを取得しようとしている辺りで落ちているらしい。

そういえば、Google Readerでのスターを一時的なマーク代わりに使っていた頃があって、その影響もあって、スター付き記事の数が非常に多かったような記憶がある。20000は軽く越えていたような…

もっとも、スター付き記事を後で参照した覚えはほとんどない。というわけで、スターのインポートをあきらめ、Google Reader上でスターを一括で削除する方法がないか、検討し始めた。Google Readerの標準機能にはないようなので、何か方法がないかと検索してみると、ドンピシャのページがあった。

Jon Gallant: How unstar all Google Reader starred items

要するに、Google Reader上でスターを外していく作業をJavascriptで自動的にやらせよう、という方法である。手順は次のとおり。

  1. Google Readerをブラウザで立ち上げ、「スター付きアイテム」をクリック。
  2. スクロールを繰り返して、すべてのスター付きアイテムを表示させる。(というか、ブラウザのDOMに取り込む)
  3. 以下のJavascriptを実行。
var x = document.getElementsByClassName('entry-icons'); for(var i=0;i<x.length;i++)x[i].firstChild.click();

この人の作ったChrome機能拡張もあった。やってることは同じようである。

Chrome Web Store – Unstar All Google Reader™ Starred Items

この方法でスターを一括で削除した結果、Reederへのインポートが成功した。やれやれ。

以下、実際にやってみた経験からの注意点を書いてみる。

まず、手順2のスクロールだが、Google Readerに直接作用する機能拡張をブラウザに入れていると、このスクロールが非常に遅くなる。一回のスクロールで遅くなるのはごく僅かでも、スターの一括削除をしようとする(=スターが非常にたくさんある)状況だと、スクロールが度重なるので、「塵も積もれば山となる」という次第である。なので、この手の機能拡張はあらかじめ無効にしておく方がよい。私の場合、BufferPocket(特にBufferのほう)が該当した。

もう一つ。スター付きアイテムの数が多くなればなるほど、手順3を実行するときにDOMが非常に大きくなる。私の場合、20000以上のアイテムを全部取り込んだ状態で手順3を実行すると、ブラウザが反応しなくなってしまった。どうやらJavascriptは動いていたようなので、単にマウス操作に反応しなくなっただけのようだが、上のJavascriptは単純なことしかしていないので、手順が進んでいるのかハングアップしているのか、ブラウザの反応だけでは分からない。あまり精神衛生上よくないので、取り込むアイテム数を小分けにして、手順2と手順3を繰り返した。Google ReaderがAjaxをバリバリに使ったアプリなので、表示が乱れたりすることもあったが、Google Readerを立ち上げ直せば正常に戻ったので、単に表示だけの問題だと思われる。