プログラミング生放送勉強会 第17回@品川 #pronama に参加しました。
マイクロソフト@品川で行われたプログラミング生放送勉強会に参加しました。
プロ生はあまり知らない言語とか技術を勉強できるところがおもしろいなと思います。
今回はVisual Studio 2012で使えるC++11やlinq.jsの発表がおもしろく、早くVisual Studio 2012いれろという感じですね。
午前はプログラミングシンポジウムに行っていたので、40分ほど遅れての参加。
そのため、はじめの2つは聞けてないので省略します。
- プログラミング生放送勉強会 第17回@品川 #pronama : ATND
- http://togetter.com/li/361310
- プログラミング生放送勉強会 2012年 ‐ ニコニコ動画(原宿)
- レポート:プログラミング生放送勉強会 第17回@品川 レポート|gihyo.jp … 技術評論社
- 8/25 プロ生勉強会 第17回@品川 終了! #pronama « プログラミング生放送
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.jsはRubyゆずりの強力なコレクション処理があった。(けど死んだ)
- jQueryはmapとfilterぐらいしかない。
- EcmaScript5
- ちょっと追加されたぐらいで、まだまだ足らない。
- 互換性がー、IE6がー
- コレクション処理のライブラリ
LINQ
- Language INtegrated Query: あらゆるデータソースを統一的な書法をあつかえるようにする。
- 話すと長くなるので詳しくはWindows Developer Daysの資料を見てください。
- LINQ to Everything : データソース・言語を超える LINQ の未来 | Windows Developer Days 2012 | Channel 9
- LINQの対象はインメモリのコレクションも含む。
- JavaScriptのインメモリのコレクションにたいして適用すれば、JavaScriptでもできるのではないか。それがlinq.jsのはじまり。
linq.js
- JavaScriptでLINQ to Objectsを実現したLINQ好きのLINQ好きによる万人のためのライブラリ。
- linq.js - LINQ for JavaScript
- LINQのない言語で開発したくないのでJavaScriptで作りました。
- LINQのよい性質を100%継承し、さらにC#オリジナルで物足りない要素を追加。
- お試しで書ける。
- 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のテスト結果画面を表示したりも便利。
- IntelliSense(入力補完)
Announce
- linq.jsはLINQのあつかえるデータソースのうちIEnumerable
(LINQ to Objects)だけでした。 - 今回あらたにLINQ to XML for JavaScriptができました。
- JavaScriptにXMLはいる?
- 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
- JavaScriptが使える。
- Media Overlay
- Globalization
- 日本語テキストに対応。
- Ruby(ルビ), Vertical Writing(縦書き), Tate-chu-yoko(縦中横)
- ちなみに縦書きにしてるのは日本の他、台湾とモンゴルだけ。
- 日本語テキストに対応。
- HTML5、CSS3により表現の幅が広がった。
パッと見でわかる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に迫っている。
array
- 固定長配列のためのクラスarrayが追加されてます。
- arrayではbegin(), end(), size()などの関数が使える。
begin(), end()
- 先頭/末尾の要素が取れる関数がコンテナと配列で同じように書ける。
range-based for
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:排他制御
- lock_guardインスタンスがデストラクトされるまでロックされる。
- atomic
- mutexよりも短い操作のロック。
Bingなんてもういらいない!質問応答システム入門 torotokiさん(@torotoki)
最後は自然言語処理や機械学習を勉強している高1のtorotokiさん。
さくさくテキストマイニングで形態素解析の発表を聞いたことがありますが、今回も難しい話です。
発表を聞いて思いだしたのは、マイクロソフトでもダイアログナビという質問応答システムがありました。
質問システムの構成
質問解析
文書検索
- 質問文から検索クエリをつくるのは自立語(品詞が助詞、助動詞以外)をフィルタする。
- 「空は何色ですか?」→「空、何、色」となるので簡単な例だとそれなりにうまくいきそう。
- 変換したクエリから文書を検索するのはTF-IDFとOkapi BM25をつかう。
- TF-IDFは単語の頻度と単語が含まれる文書頻度の逆数。
- Okapi BM25はTF-IDFを改良したもの。
回答候補抽出
- クエリにたいする文書のランキングが取得できれば文書を上位N件にしぼる。
- N件の文書に固有表現抽出を使い、固有表現と質問文の質問タイプを照合する。
- タイプが同じならば固有表現がすべて回答候補となる。
データ
- 質問解析(質問文-質問タイプ)のデータは日本語だとない。
- 回答選択(質問文-回答-根拠文)のデータは日本語だとNTCIR-6 QACのデータが公開されている。
- ただし毎日新聞のデータを買わないといけないので大学とか研究機関でないと無理かも。
さいごに、Bingはやっぱり必要ということで。
参考文献の「質問応答システム」は買うかな。
- 作者: 磯崎秀樹,東中竜一郎,永田昌明,加藤恒昭,奥村学
- 出版社/メーカー: コロナ社
- 発売日: 2009/07/28
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 29回
- この商品を含むブログ (3件) を見る
力尽きたので、LTは省略します。
GraphDB勉強会に行ってきました
フューチャーアーキテクトで行われたGraphDB勉強会に参加しました。
The Definition of GraphDB (@doryokujin)
Graph Type for GraphDB
Graphとは?
- NodeとEdge
- NodeとNodeのあいだにはEdgeがあり、EdgeにはNodeとNodeの関係(Relationship)をもっている。
- Undirected Graph, Directed Graph
- Mixied Graph
- Undirected Graph + Directed Graph
- Multigraph
- NodeとNodeに複数のEdgeがある、Edgeがループしている
- システムとしてあつかいやすくするため、矢印のないものは両方向に矢印をもつ2本のEdgeとし、1本の矢印は片方の方向しかもたないものとしましょう。
- Sigle-Relational Graph
- NodeとEdgeの関係はひとつだけ
- Multi-Relational Graph
- NodeとEdgeの関係は複数ある
- Property Graph
- Multi-relational Graphを拡張しNodeとEdgeにプロパティ(keyとvalue)をもたせる。
- GraphDBであつかうグラフはほぼProperty Graph
Graph Traversals
Traversal
- GraphDBのクエリはあるNodeやEdgeを中心に隣接をたどっていく。
- RDBやNoSQLでもグラフ構造のデータをもたせることはできる。
- クエリはあるNodeやEdgeの集合から条件に満たすNodeやEdgeを見つける。
- Traversalは指定の条件をもとに、幅優先または深さ優先で探索する。
- NodeからNodeの移動は2Step(NodeからEdge(1step)、EdgeからNode(1step))
- あるNodeを基準に近傍のNodeやEdgeをもってくるモデルがGraphDBに適している。
- リコメンデーション、ソーシャルネットワーク分析、最短経路問題...
- あるプロパティの条件を満たすNodeを検索するようなモデルは適してない。
- RDBやNoSQLのほうがいい(かも)。
Index Free Adjacency
- GraphDBはNodeからNodeに移動するのにIndex-Treeを見ません。
- Mini-IndexというそれぞれのNodeが接続の情報をもっている。
- Lookupのコストが小さい、グラフが大きくなってもほぼコンスタント。
- ただしNodeとEdgeのプロパティはIndex-Treeを作ります。
- はじめのNodeを見つけるのにIndex-Treeを使う。
- Mini-IndexというそれぞれのNodeが接続の情報をもっている。
An Introduction to Neo4j (@doryokujin)
Introduction
- なんでJava?
- EnterPriseむけだから
- #neo4jをつけてTweetすればNeo4jのなかの人がRetweetしてくれます。
Code Example
- Hello World
- MatrixでTraversal
- IndexingにはLuceneを使っている。
Cypher
- TraversalをSQLのように記述できる。
An Introduction to Tinkerpop (@doryokujin)
- TinkerpopはGraphDBを統一してあつかうライブラリを提供するプロジェクト。
Blueprints
- GraphDBのJDBC
- TinkerGraph
- ライトウェイトなIn-MemoryのGraphDB
reXster
- RESTfulに操作できるAPI
- ランク・スコア計算もできる
- ブラウザで操作できるThe Dog House
Gremlin
- Groovyで記述されたTraversal Language
- Code Example
- v.outE: Node vから外にむかって出ているEdgeを取りだす。
- v.outE.inV: Node vから外にむかって出ているEdgeとつながるNodeを取りだす。
- またはv.outと書ける。
- filter: 条件を満たすNodeとEdgeを取りだす。
- paths: 起点から終点までのパスを取りだす。
- loop: Traversのくりかえしをイテレーションしながら取りだす。
Pipes
- Gremlinのドット(.)でつなげるデータフローフレームワーク。
Enjoy Graph DB! (@bibrost)
GraphDBにアクセスする方法
- ネイティブドライバで直接接続する
- DB固有のHTTPインターフェイス
- TinkerPop/Gremlinを経由
- Tinkerpop/Rexster経由(HTTP)
Enjoy!への道
- JVM環境を入れておく。
- Rexterのパッケージをダウンロードする。
- 0.6があるけどbulbsは0.5用なので0.5をダウンロードしましょう。
- Rexterを起動する。
- rexster-start (sh|bat)
- Bulbsをインストールする。
- easy_install bulbs
- あとはEnjoy!
ここで問題
- ユーザ[u]のまだ友だちになっていない友だちの友だちを取りだすクエリ。
- Except Pattern
- g.v(u).ouot.aggregate(x).out.except(x)で書ける。
- aggregate(x): 友だちの集合をxにいれる。
- except(x): xを除く集合(差集合)を取りだす。
- じっさいは自分が友だちに含まれているので集合に自分を含めるとか、uniqueObjectで同じ人を排除する。
- コードはGitHubにあげてある。
告知
- 次回はミクシィでやる(予定)