プログラミング生放送勉強会 第17回@品川 #pronama に参加しました。

マイクロソフト@品川で行われたプログラミング生放送勉強会に参加しました。

プロ生はあまり知らない言語とか技術を勉強できるところがおもしろいなと思います。
今回はVisual Studio 2012で使えるC++11やlinq.jsの発表がおもしろく、早くVisual Studio 2012いれろという感じですね。

午前はプログラミングシンポジウムに行っていたので、40分ほど遅れての参加。
そのため、はじめの2つは聞けてないので省略します。

linq.js ver.3 and JavaScript in Visual Studio 2012 neueccさん(@neuecc)

今回、協賛しているgloopsのエンジニアneueccさんのlinq.jsの発表。
ソーシャルゲームの会社でもVisual StudioとかSQL Serverとか使うんですね。

JS and Collection Library

  • コレクションは配列のようにデータを入れて、ループでまわして使うもの。
    • C#ならforeachとかでぐるぐるまわす。
  • コレクション処理:要素の値を変形する、集計する、フィルタする。
    • ループでまわすのはやぼったい。さくっと書けるようにしたい。
  • JavaScriptにはprototype.jsがありましたね。
    • prototype.jsRubyゆずりの強力なコレクション処理があった。(けど死んだ)
  • jQueryはmapとfilterぐらいしかない。
  • EcmaScript5
    • ちょっと追加されたぐらいで、まだまだ足らない。
    • 互換性がー、IE6がー
  • コレクション処理のライブラリ

LINQ

linq.js

  • JavaScriptでLINQ to Objectsを実現したLINQ好きのLINQ好きによる万人のためのライブラリ。
  • お試しで書ける。
  • ver.3ではUpperCamelCaseをlowerCamelCaseに。Visual Studio 2012によく対応していて、IntelliSenseが強化されてがしがし補完をきかせて書ける。QUnitに連携できる。

JavaScriptエディタとしてのVisual Studio

  • Visual Studio Express 2012 for Web
    • IntelliSense(入力補完)
      • ドット打てば完ぺきにチェーン補完。
      • 無名メソッド内部の引数まで驚異的に追随して補完。
      • ツールチップヘルプ+オーバーロードも完ぺき、オプション引数も[]囲みで表現。
    • jQueryもIntelliSenseに対応。(日本語版Visual Studioに同梱されているのは日本語のヘルプ)
    • Page Inspector
      • Visual Studio統合のページプレビューでdocument.writeでコンソールアプリケーションぽく使えたりQUnitのテスト結果画面を表示したりも便利。

Announce

  • linq.jsはLINQのあつかえるデータソースのうちIEnumerable(LINQ to Objects)だけでした。
  • 今回あらたにLINQ to XML for JavaScriptができました。
    • C#でもXML操作に革命を起こしたLINQ to XMLをJSに。
      • DOMは使いづらいのでLINQ to XML for JavaScriptで快適にXML操作ができるように。
      • linq.js ver.3の上に構築される。
  • JavaScriptXMLはいる?
    • JavaScriptといえばJSON
    • JavaScriptの用途は広がっているので、XMLをあつかうこともあるはず。
      • Node.js, Office 2013, WinRT(Windows8), etc...
      • XMLは今もたくさん存在している。

いいパブッ!! はじめてのEPUB3 プロ生出張版 ろすさん(@lost_and_found)

電書ちゃんねる のろすさんの発表。
HTML5とか勉強会」で発表した資料をもとにプロ生版を作ろうかと思ったけど、少しやさしめの内容にしましたとのこと。

まず電子出版を3つに分類して整理しています。

  • Reading System: 電子書籍を閲覧するSW/HW。ReaderやViewerともいわれる。
  • Platform: 出版社が電子書籍を販売するためのインフラ。
  • Format: 電子書籍データ形式
  • フォーマットにはEPUBやPDFのようなオープンのものと、AmazonのAZWやKF8のような企業固有のものがある。

EPUB

  • EPUBのロゴェ
  • IDPF(国際電子出版フォーラム)が開発・管理をしている。
  • EPUB is the distribution and interchange format for digital publications based on web standards
  • アメリカの出版社はKindle電子書籍を出版するときEPUBで入稿する。Kindle StoreではAZWに変換して、DRMをかけて配信する。
    • BtoBで使われるのがInterchange、BtoCで使われるのがDistribution。
    • EPUBは配信フォーマットで使われることもあるのでBtoB、BtoCともに使われる。
  • HTML5, CSS, JavaScriptなどWebの規格を取り入れている。
  • Reflow(リフロー): EPUBの特徴のひとつでスクリーン幅や文字の大きさによって折りかえしを制御する。
  • EPUB3(EPUB 3.0)はEPUBの3回目の改訂バージョンです。
  • EPUB3の作りかた
    • XHTML5で書いたコンテンツ文書を作成する。
    • metadata, manifestを記述したパッケージ文書を作成する。
    • すべてのファイルをzipでまとめる。

EPUB3はなにが新しいの?

  • Multimedia
    • Audio/Video
  • Scripting
  • Media Overlay
    • コンテンツのテキストに音声を同期して読みあげるための仕様。
    • Content DocumentとAudio clip(MP3)をコンテンツのどの部分を、オーディオファイルのどのタイミング・どの範囲を再生するかを.smil(XML)で指定することで音声読みあげが同期できる。
  • Globalization
    • 日本語テキストに対応。
      • Ruby(ルビ), Vertical Writing(縦書き), Tate-chu-yoko(縦中横)
      • ちなみに縦書きにしてるのは日本の他、台湾とモンゴルだけ。
  • HTML5、CSS3により表現の幅が広がった。

進化をつづけるEPUB3

Fixed layout

漫画のようなレイアウトが固定されたコンテンツだとリフローと相性が悪かった。
固定レイアウトをあつかう EPUB 3 Fixed-Layout Documents という文書が2012年に公開された。

Adaptive layout

リフローを高度に制御して複雑なレイアウトを実現する。

Hybrid layout

固定レイアウトとリフローを切り替える。

EPUB電子書籍には課題があるが、確実に状況はよくなっているとのこと。

パッと見でわかるC++11 επιστημηさん(@epitwit)

Wikipediaにも記載されているεπιστημη(えぴすてーめー)さんの発表。
C++はほとんど使わないのですが、発表はとてもおもしろかったです。

Visual Studio (VC++) と C++11

  • Visual Stidio 2012に対応したC++11の話。
    • C++11のなかでも言語仕様、ライブラリ拡張によって読みやすくなった、書きやすくなったものを紹介します。
    • 今回紹介するものはVisual Studio 2012で動作するものです。(Visual Studio 2010で動くものもある)
  • Visual Studio 2012では言語レベルの強化とライブラリ追加でC++11に迫っている。
    • でも、フルセットではない。フルセットを試すならGNU, GCC, LLVM Clang(Xcode)で。

array

  • 固定長配列のためのクラスarrayが追加されてます。
  • arrayではbegin(), end(), size()などの関数が使える。

begin(), end()

  • 先頭/末尾の要素が取れる関数がコンテナと配列で同じように書ける。

auto

  • 型推論してくれるのでvector::iterator...と書かなくてよい。

range-based for

  • 範囲を指定するfor
    • C#のforeachのあたるもの。Javaのrange-based forにちかいかも。
  • 関数begin(), end()が使えるコンテナであればrange-based forが使えます。
  • foreachではできない参照ができます。auto&とすれば型推論して参照ができる。

lambda式

  • 関数オブジェクトをよびだしたその場で書いてしまう。
  • Visual Studio 2012ではstateless-lambda(キャプチャをしないlambda)が関数ポインタに暗黙変換できる。

スレッドライブラリ

  • Windows APIだとスレッド本体と着火がわのあいだにwrapperが必要となる。
  • C++11のスレッドライブラリを使うと簡単に書ける。
    • threadのコンストラクタに関数オブジェクト([&](int x, int y) {result = plus_int(x,y);})と引数を書くだけ。join()で終わるのを待つ。
  • async/future
    • asyncは引数を非同期で実行し、結果をfutureで受ける。
    • get()でasyncが終わるのを待つ。
  • mutex:排他制御
  • atomic
    • mutexよりも短い操作のロック。

Bingなんてもういらいない!質問応答システム入門 torotokiさん(@torotoki)

最後は自然言語処理機械学習を勉強している高1のtorotokiさん。
さくさくテキストマイニング形態素解析の発表を聞いたことがありますが、今回も難しい話です。

発表を聞いて思いだしたのは、マイクロソフトでもダイアログナビという質問応答システムがありました。

質問応答システム

  • 質問応答システムは自然言語をもとに回答してくれるシステム。
    • 今年の東京の人口は?→13,227,730人
    • 既存の質問応答システムにはIBM WatsonやSiriがある。

質問システムの構成

  • 質問解析:質問タイプの特定
    • 固有表現抽出/SVM
  • 文書検索:質問文からクエリを作成
    • TF-IDF/Okapi BM25
  • 回答候補抽出:取得した文章から回答候補を抽出
    • 質問タイプをもとに回答候補上位N件
  • 回答選択:確率の高いものを回答
    • SVM+ランキング

質問解析

  • 質問文と回答候補のタイプを照合し同じだったら、最終的な候補になる。
  • 質問分ですでに解答のタイプが決まっているものとする。
  • 回答候補のタイプ推定は固有表現抽出をつかう。
    • 人名、地名、組織名などの単語を認識する。
    • IREXの基準なら係り受け解析器のCabochaに付属している。
  • 質問分のタイプ推定は自前で用意。
    • 質問文-質問タイプのペアで機械学習をする。

文書検索

  • 質問文から検索クエリをつくるのは自立語(品詞が助詞、助動詞以外)をフィルタする。
    • 「空は何色ですか?」→「空、何、色」となるので簡単な例だとそれなりにうまくいきそう。
  • 変換したクエリから文書を検索するのはTF-IDFとOkapi BM25をつかう。
    • TF-IDFは単語の頻度と単語が含まれる文書頻度の逆数。
    • Okapi BM25はTF-IDFを改良したもの。

回答候補抽出

  • クエリにたいする文書のランキングが取得できれば文書を上位N件にしぼる。
  • N件の文書に固有表現抽出を使い、固有表現と質問文の質問タイプを照合する。
  • タイプが同じならば固有表現がすべて回答候補となる。

回答選択

  • SVMを使用して回答を機械学習する。
    • 質問文-回答-候補文書(ソース)のペアで学習する。
    • 回答候補のスコアを算出し、もっともスコアが高いものを回答とする。

データ

  • 質問解析(質問文-質問タイプ)のデータは日本語だとない。
  • 回答選択(質問文-回答-根拠文)のデータは日本語だとNTCIR-6 QACのデータが公開されている。
    • ただし毎日新聞のデータを買わないといけないので大学とか研究機関でないと無理かも。

さいごに、Bingはやっぱり必要ということで。

参考文献の「質問応答システム」は買うかな。

質問応答システム (自然言語処理シリーズ2)

質問応答システム (自然言語処理シリーズ2)

  • 作者: 磯崎秀樹,東中竜一郎,永田昌明,加藤恒昭,奥村学
  • 出版社/メーカー: コロナ社
  • 発売日: 2009/07/28
  • メディア: 単行本(ソフトカバー)
  • 購入: 2人 クリック: 29回
  • この商品を含むブログ (3件) を見る


力尽きたので、LTは省略します。