Shogo's Blog

Nov 1, 2012 - 2 minute read - Comments - NLP CaboCha Python

PythonでCaboChaを美味しくいただく

日本語構文解析器CaboChaをPythonから使ってみたメモ. インストール CaboCha自体のインストールは公式のドキュメントを参照. ググれば他の人のレポートも出てくるはず. CaboChaのソースコードを展開したディレクトリの中の pythonディレクトリにPython-bindingが入ってます. そこに移動した後,管理者権限で以下のコマンドを実行すればインストール完了. python setup.py install 食べ方 解析結果を文字列出力 python/test.py に書いてあるとおり. #!/usr/bin/python # -*- coding: utf-8 -*- import CaboCha # c = CaboCha.Parser(""); c = CaboCha.Parser() sentence = "太郎はこの本を二郎を見た女性に渡した。" print c.parseToString(sentence) tree = c.parse(sentence) print tree.toString(CaboCha.FORMAT_TREE) print tree.toString(CaboCha.FORMAT_LATTICE) 以下のような結果が得られれば成功. <PERSON>太郎</PERSON>は-----------D この-D | 本を---D | 二郎を-D | 見た-D | 女性に-D 渡した。 EOS <PERSON>太郎</PERSON>は-----------D この-D | 本を---D | 二郎を-D | 見た-D | 女性に-D 渡した。 EOS * 0 6D 0/1 2.

Oct 28, 2012 - 1 minute read - Comments - togetter userscript

Togetterの編集作業便利にしたい

TogetterはTwitterの投稿をまとめられる非常に便利なサイトですが, 編集画面が異様に使いにくいです. そんなわけで前回は 自動的に検索ボタンを押してくれるブックマークレットを書いてみました. それをユーザスクリプトにして, ついでに編集画面の不便なところを修正してみました. 編集を便利にするユーザスクリプト スクリプトはGistにあげておきました. https://gist.github.com/3953476 インストールはこちら Chrome拡張Tampermonkey で動作を確認しました. この拡張,ユーザスクリプトの管理ができてオススメです. 変更内容 ユーザスクリプトは編集画面に対して次のような変更をします. 画面レイアウトの変更 自動検索機能 重複削除・ソートの高速化 選択動作の変更 元に戻す機能 ショートカットキーの追加 画面レイアウトの変更 Togetterの編集画面のレイアウト,非常に使いにくいです. ツイート一覧をスクロールしようとしたら画面全体がスクロールしてしまって, 編集用のボタンが隠れてしまう,ということが編集中に何度もあってイライラします. ** 余計なものでごちゃごちゃし過ぎなんだ! ** ** 僕は編集に集中したいんだ! ** 編集と関係の無いヘッダやナビゲーションは要らないので消えてもらうことにしました. ツイートの一覧が画面いっぱいに表示され, 編集用のボタンは常常に画面上に表示されます. 自動検索機能 前回ブックマークレットで実現した機能です. 検索キーワードと一回あたりの読み込み回数を設定し, 「自動検索開始」ボタンを押しましょう. すると,繰り返し間隔を聞いてくるので秒単位で時間を指定しましょう. カウントダウンが始まり,周期的に検索・ソート・重複削除が行われます. 重複削除.ソートの高速化 Togetterのソートのスピードはびっくりするほど遅いです. 例えば,「劇的ビフォーアフター佐世保高専ラグビー部部室をリフォーム」には 1190個のツイートが含まれています. これを時間順にソートしてみたところ, 三回の平均で9.978秒(それぞれの結果は10.118秒, 9.925秒, 9.892秒)かかりました. 1000ツイート程度のソートに約10秒です.遅い! ソート自体は数ミリ秒で終わるのになんでこんなに遅いというと,結果を画面に反映するのにjQueryのセレクタを大量に呼び出しているから. ソートのときに一回読み込んだものをキャッシュしておけばもっと速くなるはず. ってことで自前で実装してボタンを置き換えました. 結果0.171秒(0.174, 0.177, 0.161)まで短縮することができました. 約58倍の高速化! 高速化とは直接関係ないけど, 「選択したところだけソート」にしました. ツイートを内容ごとに分類してるときとかに, 一部分だけソートできます(例:ロボコン死亡かるた). 何も選択されてないときは何もしません. 全体をソートしたい時は明示的に全選択する必要があります. 重複削除とかも実装しなおしました. 約200ミリ秒かかってたのが約20ミリ秒に高速化! 選択動作の変更 もともとの編集画面では,ツイートをクリックするとクリックしたツイートの選択状態が切り替わります. 他に選択しているツイートがある場合,そのツイートは選択されたままです. Excelとかではセルをクリックすると他のセルは非選択状態になるので, それに慣れているとなんだか違和感があるんですよね. そういうわけで,ツイートをクリックしたときはクリックしたツイートのみ選択されるようにしました. 複数選択ができないのも困るので, Ctrlキーと同時クリックでクリックしたツイートを全部選択, Shiftキーと同時クリックで範囲内のツイートを全部選択にしました. Excelとかと一緒ですね.

Oct 27, 2012 - 2 minute read - Comments - 6さいカンファレンス

6さいカンファレンス 第7回「Windowsのアプリをクラックしよう!(再)」まとめ

2012/10/25にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第7回は「Windowsのアプリをクラックしよう!(再)」です。 第4回「Windowsのアプリをクラックしよう!」はどこへいってしまったのでしょう? 頑張って探したけどこれしか情報が無い・・・? 昨日の 6さいカンファレンスは盛り上がりましたね (第4回 「Windowsのアプリをクラックしよう!」) 来週は、作曲講座をしようと思っています。 お楽しみに☆ #6saiconf — くいなちゃんさん (@kuina_tesso) 9月 28, 2012 厳しい緘口令が敷かれているのか,参加者がくいなちゃんさんしか居なかったのか,そもそもそんなのなかったのか・・・. 勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 (カンファレンスの内容にはくいなちゃんライセンスが適用されるらしいです.怖!) —–キリトリセン—– くいなちゃん: 10/25(木) 21:00 から、第7回 6さいカンファレンスを開催します。 テーマは、「Windowsのアプリをクラックしよう!(再)」 です。 ** (再) と付いていますが、前回やった記憶はございません。 ** 参加されない方は、今のうちにご退場お願いします。 ROMでの参加も歓迎ですん☆ それでは、もうしばらくお待ちください。 くいなちゃん: それでは、第7回 6さいカンファレンスを開催します。 テーマは、「Windowsのアプリをクラックしよう!(再)」 ですん☆ しかし、これを開始する前に、いくつかの免責事項をお伝えしなければなりません。 (6さい的な事情) くいなちゃん: まず、実際に既存の Windowsアプリをクラックする、という流れで 話を進めていきますが、実際にクラックを行っているわけではなく、 また画像も合成です。 実際に既存のアプリに対してクラックする行為は、 場合によっては犯罪となりますので、** 決してマネしないでください **。 本講座は、犯罪を助長する意図があるわけではなく、 むしろ攻撃側を知ることで、防衛スキルを身に着けようというものです! マインスイーパ! くいなちゃん: はい、よろしいでしょうか。 では、本日クラックするアプリはこちらです! http://kuina.tes.so/6saiconf_7/img0.png くいなちゃん: みなさん大好きな、マインスイーパですん☆ くいなちゃんは、マインスイーパが得意ではないので、上級をクリアする頃には、 時間が999になってしまいます。 そこで、この時間が経過しないよう、改造することを今日の目標としましょう。 くいなちゃん: まず、ollydbg というフリーソフトを起動します。 これは、主に アプリをクラックするのに使われるソフトです[要出典] http://kuina.tes.so/6saiconf_7/img1.png 画像は、ollydbg 上でマインスイーパを起動したところです。

Oct 22, 2012 - 1 minute read - Comments -

Twitter公式クライアントのコンシューマキー流出について考える

コンシューマキー流出? 朝のTLにTwitter公式クライアントのコンシューマキーなるものが流れてきたので, なにか面白いことに使えないか セキュリティ的に何か問題になるのか 考えてみました. コンシューマキーとは コンシューマキーとはクライアントの身分証眼書のようなものです. Twitterはコンシューマキーを使用してクライアントを識別します. このコンシューマキーがどのように使われるのかを知るために, Twitterの認証方式であるOAuthについて簡単なスライドを描いてみました. OAuthの認証は大きく分けて次の6ステップからなります. 認証開始 Twitterの使用を開始するためにユーザはクライアントに認証の開始を指示します 鍵の使用申請書の要求 開始指示を受けたクライアントは,コンシューマキーを利用して身分証明を行います 証明できたクライアントに対してTwitterは鍵の使用申請書を渡します ユーザの使用許可をもらう クライアントはユーザに使用申請書を渡し使用許可を求めます 使用申請書はウェブページのアドレスの形で渡されるので,多くの場合ここで自動的にブラウザが立ち上がります Twitter認証 ユーザはTwitterにパスワードを渡し,クライアントに使用許可することを伝えます ハンコを受け取る 使用許可の証としてPINコード(ハンコ)を受け取ります PINコードをクライアントに渡します 申請書を鍵を交換 クライアントは使用申請書とTwitterに渡し,鍵をもらいます 次回以降,クライアントは鍵を利用してTwitterにアクセスすることができます コンシューマキーが流出したということは, ステップ2のクライアントの身分証明の際に「自分は公式クライアントだ!」と名乗ることができてしまうという事です. 一般ユーザに対する影響 さて,これによる一般ユーザへの影響について考えてみましょう. 認証画面の偽装 ステップ4のTwitter認証の際,画面にはクライアント名が表示されます. 公式クライアントのコンシューマキーを使えばここに「Twitter for iPhone」「Twitter for Android」等, 公式クライアントの名前を表示することができてしまいます. これは間違えて認証してしまいそうですね! ・・・でも,ちょっと待ってください. ステップ4にたどり着くには,ユーザ自身が「ステップ1.認証開始」をする必要があります. これをするには,ユーザ自身がソフトをダウンロードして,解凍して,実行する必要があります. ** まともな ** な情報リテラシーを持ったユーザであれば,怪しいソフトは実行すらしませんよね? 偽装Webアプリ Webサイトであれば,アクセスしただけで「ステップ1.認証開始」をしたことにするのは技術的に難しくありません. ステップ1をクリアしてしまえば,流出したクライアントキーを使ってステップ4まで進むことができてしまいます. この時表示されるクライアント名は公式クライアントのものなので,悪意のあるサイトなのか本物なのか見分けが付きません.

Oct 13, 2012 - 1 minute read - Comments - togetter bookmarklet

半自動トゥギャりスクリプトを書いてみた

togetterでたくさんツイートをまとめたい Twitterは手軽に情報収集ができ他人とのコミニュケーションができる楽しいSNSですが、 古いツイートはしばらく経つとタイムラインや検索結果からはたどれなくなってしまいます。 過去のイベントに関するつぶやきを後から見たい、といった場合に不便です。 そこで登場するのがtogetterというサービス。 Twitterのツイートを引用して、「まとめ」を作ることができます。 Twitter上での議論やイベントに対するみんなの反応がわかりやすく見れるので便利です。 僕もJO_RI_botのツイートをまとめたりといろいろとお世話になってます。 簡単なまとめを作るのには非常に便利なtogetter。 しかし、ツイート数が多くなると少し大変です。 例えば何かのイベントのハッシュタグのついたツイートをまとめたい場合、 検索に現れるツイートの数には上限があるので、 漏れ無くツイートを集めるにはイベントの最中にまとめを作る必要があります。 togetterには自動更新機能がないので、数分毎に「検索」ボタンを押さなければなりません。 これは面倒だ・・・ ブックマークレットを書いてみたよ 面倒なので、自動的に検索ボタンを押すブックマークレットを書いてみた。 ** ユーザスクリプトで書き直してみたよ! ** // 直接書くとなぜかうまくいかない・・・ document.write("").insertAfter(a);var%20c=$('').appendTo(b);var%20d=$('').appendTo(b);var%20e;d.click(function(){if(e){clearInterval(e);d.attr("value","開始")}else{e=setInterval(g,c.val()*1e3);d.attr("value","停止");g()}});var%20f={}})()\"半自動トゥギャりスクリプト(このリンクをブックマーク!)"); 上のリンクをブックマークに登録しておき、togetterのまとめ作成ページを開くと、 検索ボックスのしたにテキストボックスとボタンが追加されます。 テキストボックスに検索ボタンを押す間隔(秒単位)を入れ、開始ボタンを押すと、 自動的に検索・移動・重複ツイートの削除・ソートをしてくれます。 スクリプト 元のスクリプトをgistにあげておきます。 {% gist 3883841 %} ブラウザ拡張のほうが便利だろうけどブックマークレットとして実装しているのは、togetterのスクリプトやjQueryを自前のスクリプトから呼びたかったから。 ブラウザ拡張でも実現する方法はあるんだろうけど、調べるの面倒だからやってない。 DOMの操作だけでもなんとかなりそうだから、余力があれば書きなおすかも。 これ作るにあたって、togetterのソース見てたけど、重複削除やソートアルゴリズムがなんだか残念な感じ。 ツイート数に比例した回数だけjQueryのセレクタを呼び出している。 jQueryのセレクタって結構重い処理だし、オーダーが O( n^2 ) になるわけで・・・。 単なるソートにしては重すぎだろ、とは思ってはいたんだ。まさかこんな中身だとは。

Oct 12, 2012 - 1 minute read - Comments - 6さいカンファレンス

6さいカンファレンス 第6回「幼女を描いてみよう! ~原画から彩色まで~」まとめ

2012/10/11にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第6回は「幼女を描いてみよう! ~原画から彩色まで~」です。 勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 (カンファレンスの内容にはくいなちゃんライセンスが適用されるらしいです.怖!) ゆるふわ☆タイム くいなちゃん: 今日も、前回と引き続き、プログラミングのプの字も出てこない、ゆるふわ講義ですん☆ くいなちゃん: テーマは 「幼女を描いてみよう! ~原画から彩色まで~」 ということなので、今回描いてみた絵を、いきなり完成形からご覧いただくことにします。 3時間で描いたです。 http://kuina.tes.so/6saiconf_6/img0.jpg 構図を描いてみるです! くいなちゃん: では、順を追って、描いていくことにしましょう。 最初はもちろん、カンヴァスは白紙です。 そこに、まずは構図をテキトーに描いてみるです: http://kuina.tes.so/6saiconf_6/img1.jpg はい、ここまではみなさん描けますね。 まるで6さいが描いたようなテキトーな落書きです。 くいなちゃん: ここでのポイントは、脳内に立体をイメージすることです。 構図をイメージしやすいように、背景に線を引いていますが、無くてもイメージできるなら描く必要はありません。 注意してほしいのは、2D絵を描くからといって、2Dで捉えないことです。 アニメ絵でも同様ですん くいなちゃん: はい、キャラに、顔と髪を追加してみました。 http://kuina.tes.so/6saiconf_6/img2.jpg えっ、完成形と絵が違う? キニシナイ! あと、独りでは寂しいので、小鳥も追加しました。 色を塗っていくです! くいなちゃん: アニメ調の絵を描く場合は、ここからアニメ塗りをしていただけば完成しそうなんですが、せっかくなので、油彩画っぽく塗っていくことにします。 くいなちゃん: まずは、べた塗りです。 http://kuina.tes.so/6saiconf_6/img3.jpg くいなちゃん: なんてことはありません。 太いブラシで、テキトーに塗っただけです。 はみ出しまくってますね。 しかし、ブラシが太いので、細かな部分はそもそも塗れません。 このくらいテキトーでもキニシナイでok くいなちゃん: 人物に影が、若干付けられていますが、原画を描くときに立体を意識したならば、光源を意識すればある程度付けられると思います。 物理学的に考えるのです! 細部を塗っていくです! くいなちゃん: はい、次は、もう少し細いブラシで、細部を塗っていきます。http://kuina.tes.so/6saiconf_6/img4.jpg 基本的には、最初に太いブラシで大まかに塗り、徐々にブラシを細くしていき、細部を描きこんでいく流れですね。 ブラシの目安は、半々にしていくと良さそうです くいなちゃん: この時点で、服に謎の模様が描かれていますが、テキトーです。 その太さのブラシで表現できる粒度のものを塗ってください。 くいなちゃん: で、更に細いブラシで塗っていきます(3段階目) そして、このあたりまで塗ったら、試しに線画(原画)を外してみましょう。 http://kuina.tes.so/6saiconf_6/img5.jpg おや、線画が無くても 綺麗に見えますね! くいなちゃん: 目を描きこんでいなかったのは、意図的です。 最初のアニメ調の絵で完成させたい場合は、目も塗ってあげてください。 顔を描くです! くいなちゃん: はい、それでは、もう線画が無くても輪郭が解りますので、線画は非表示にしたまま塗っていきましょう。 更に細いブラシで塗ります。

Oct 11, 2012 - 1 minute read - Comments - 6さいカンファレンス

6さいカンファレンス 第5回「6さいからの作曲講座」まとめ

2012/10/04にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第5回は「6さいからの作曲講座」です。 勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 (カンファレンスの内容にはくいなちゃんライセンスが適用されるらしいです.怖!) THE END くいなちゃん: みなさん、楽譜は読めますね!(チラッ くいなちゃん: 今回は、作曲理論などの難しい講義というよりも、実際にどうすれば綺麗な曲が作れるのか、という実践的な内容になっています。 くいなちゃんの独自理論ですん くいなちゃん: では、さっそく、曲を作ってみましょうー コード くいなちゃん: はい、まず曲に必要なのは、 “コード” です。 「えっ、メロディじゃ?」 と言った あなたは素人です。 コードをしっかり押さえない曲は、聴くに堪えない感じになってしまいます。 くいなちゃんは、コードもメロディも全部同時に浮かぶことのできる天才肌ですが、とりあえず今回はコードを中心に創っていきましょう! くいなちゃん: コードのルール: ** 「あるコードには、移りやすい次のコードが ある程度決まっている」 ** です! たとえば、C(ド・ミ・ソ) のコードからは、G(ソ・シ・レ) や F(略) や Am(略) に移りやすいです。 逆に、G や F から、 C にも移りやすいです。 くいなちゃん: ということなので、C → G → C → G は移りやすいコードのルールで作ったので、自然なコードということになりますね。 このコードで曲を作っていきましょ! くいなちゃん: はい、この楽譜をご覧ください。 C(ドミソ) と G(ソシレ) が交互に来ているのが解るかと思います。 わからない人は、じっくり読んでね。 http://kuina.tes.so/6saiconf_5/img0.png(魚拓) くいなちゃん: はい、コード完成です! せっかくなので、これを鳴らしてみましょう。 http://kuina.tes.so/6saiconf_5/snd0.mp3 くいなちゃん: 自然ですね! メロディをのせる くいなちゃん: では、コードが完成したので、メロディを乗せて行きましょう。 メロディのルール: ** 「拍子の部分には、コードの音を使う」 ** です! さっきの、音が鳴っているタイミングの部分に、コードの音を使って、メロディを配置してみましょう。

Oct 4, 2012 - 9 minute read - Comments - 6さいカンファレンス

6さいカンファレンス 第3回「アルゴリズムを自力で生み出すプログラムを作ろう!」まとめ

2012/09/06にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第3回は「アルゴリズムを自力で生み出すプログラムを作ろう!」です。 勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 function Tree() { this.value = ''; this.children = []; } Tree.prototype.dump = function() { var result = this.value; var i; for(i = 0; i = 5 ? 6 : (Math.random()*7|0)) { case 0: result.value = '+'; numchildren = 2; break; case 1: result.value = '-'; numchildren = 2; break; case 2: result.value = '*'; numchildren = 2; break; case 3: result.value = '/'; numchildren = 2; break; case 4: result.

Oct 3, 2012 - 1 minute read - Comments -

リアルタイムにテンションを上げてみた

昨日,Twitterで猫型さんのアイコンのテンションが上がっている話をしていたら, こんな無茶ぶりをされたんですよ. 明日には、いっちーがWebRTCでリアルタイムテンション上がってきたサービス作ってくれるだろうし、猫型さんがアプリの申請出してるだろう — Takashi Sasakiさん (@civic) 10月 2, 2012 いいだろう,その挑戦受けてやる! WebRTCって? WebRTCというのはブラウザ上で Real Time Communication を行うAPI群のことことです. ローカルデバイス(Webカメラとかマイクとか)へのアクセス ブラウザ同士が(サーバを介さずに)直接通信 なんてことができるようになるらしいです. つまり WebRTCを使えば Skype っぽいものをプラグインのインストールなしにブラウザ上で実現できるってわけですね. Chrome の最新安定版で、ウェブの最先端に触れてみようから いろいろなWebRTCを使ったデモを見ることができます. 僕も似顔絵描いてもらったりしてみました. getUserMedia API を使ってみる まだまだ仕様策定中で対応ブラウザがほとんどない状況ですが, 2012年10月現在,最新版の Chrome 21 で前者のローカルデバイスへアクセスするAPIである getUserMedia API が使えるようです. 早速遊んでみましょう. navigator.getUserMedia( {video: true}, // constrains: 接続先のデバイス function successCallback(stream) { // アクセス成功 // stream に LocalMediaStream オブジェクトが入ってる // <video id="video"></video> 要素を取ってくる var video = document.

Oct 2, 2012 - 9 minute read - Comments - 6さいカンファレンス

6さいカンファレンス 第2回「数学の定理を自動で発見するAI を Haskellで作ろう!」まとめ

2012/09/13にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第2回は「数学の定理を自動で発見するAI を Haskellで作ろう!」です。 勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 WELCOME TO HELL!! くいなちゃん: それでは、まず、数学の「定理」とは何か、について説明したいと思います。 みなさん、日常的に「定理」という言葉を使っていると思いますが、「定理」とは何か、説明できますか くいなちゃん: 「教科書に載っている公式が、定理だ!」と思うかもしれませんね。 確かに、教科書にも定理は載っています。 くいなちゃん: では、曖昧な理解の方のために、厳密かつ ゆるふわに説明しましょう。 くいなちゃん: 定理とは、次のように定義できます。 公理であるならば、定理である。 定理を推論規則によって推論したものは、定理である。 以上。 くいなちゃん: はい、みなさんこれで定理が何かを理解したと思いますので、数学の定理を自動で発見するAIを作ろうと思います。 くいなちゃん: Haskellで。 Haskell! くいなちゃん: そもそも、Haskellって何? という方もおられるかと思いますので、まずは Haskell について簡単に説明しておきたいと思います。 くいなちゃん: Haskell は、関数型言語です。 宣言的プログラミングによって、プログラムしていくプログラミング言語です。「○○は××である!」というのを繰り返してプログラミングする感じですね。 「まずは○○して、次に××しろ!」という C言語(手続き型言語)とはかなり異なります。 くいなちゃん: では具体的に、今回定理を発見するための数学の体系を説明しながら、同時に Haskell で実装してみることにしましょう。 くいなちゃん: 最終的には 大規模な数学体系の定理を発見するとしても、まずは試しに小さな体系で定理を発見してみることを考えます。 今回は、命題論理を対象としてみます。 定義 くいなちゃん: では、今回対象とする命題論理を、厳密に定義していきましょう。 まず、この体系で用いられる記号は、P Q R ¬ ⇒ の5種類です。 この5種類をうまく並べると、この数学体系でのあらゆる式や命題が記述できます。 くいなちゃん: まあ、たとえば、 P⇒P (PならばPである) といった感じですん。 わかりますね。 くいなちゃん: ¬ は数学における否定によく使われる記号ですが、いまのところ、単なる記号にすぎず、意味は定義されていません くいなちゃん: ちなみに、くいなちゃんはポーランド記法が好きなので、 P⇒P を、 ⇒PP と書くことにしましょう