<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">

<channel>
	<title>web for the next</title>
	
	<link>http://webforthenext.wordpress.com</link>
	<description>次の段階、次のつながり、次の時代、次の世代・・・、さまざなま『次』のために、NPO/NGO や web で何ができるのかを考えます。</description>
	<lastBuildDate>Thu, 10 May 2012 22:45:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain="webforthenext.wordpress.com" port="80" path="/?rsscloud=notify" registerProcedure="" protocol="http-post" />
<image>
		<url>http://0.gravatar.com/blavatar/49251ce7898f780891ad1304cf463f8f?s=96&amp;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>web for the next</title>
		<link>http://webforthenext.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://webforthenext.wordpress.com/osd.xml" title="web for the next" />
	
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/WebForNext" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="webfornext" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://webforthenext.wordpress.com/?pushpress=hub" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">WebForNext</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>MylynとGithubを連携させる</title>
		<link>http://webforthenext.wordpress.com/2012/05/11/mylyn%e3%81%a8github%e3%82%92%e9%80%a3%e6%90%ba%e3%81%95%e3%81%9b%e3%82%8b/</link>
		<comments>http://webforthenext.wordpress.com/2012/05/11/mylyn%e3%81%a8github%e3%82%92%e9%80%a3%e6%90%ba%e3%81%95%e3%81%9b%e3%82%8b/#comments</comments>
		<pubDate>Thu, 10 May 2012 22:45:16 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[twitterbot]]></category>
		<category><![CDATA[Web関連]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=595</guid>
		<description><![CDATA[今後の開発で使ってみようと思って、MylynというEclipse上のタスク管理プラグインを入れてみた。それを先日設定したGitHubと連携させるための、GitHub Mylyn Connectorを設定してみたので、やったことを残していく。 Eclipse MarketplaceからGitHub Mylyn Connectorをインストール。 File-&#62;Import  の画面でGitHub Task Repositoriesを選択。GitHubのユーザーIDとパスワードを入力。対象となるリポジトリを選択。エラーが出て、タイトル表記が空欄の選択肢がGitHub上のリポジトリの数だけ出てきたが、チェックボックスは押せて選択できる。すると、Eclipse上のTask Repositoriesのウィンドウで、該当のリポジトリが表示される。 Eclipse上のTask ListウィンドウのNewTaskのアイコンから、(Local)ではなくて&#8221;(GitHubリポジトリ）issues&#8221;を選択すると、タスクの関連情報を入力するウィンドウが作成されるので、タイトルやDescriptionを記入してsubmitボタンを押す。これでTask Listウィンドウに新しいタスクが作成された。ただ、タスクの左側に表示される◯印は、白（deactivate）のまま。タスクのステータスはopen。 この時点で、GitHubの管理画面をみると、issueが作成されてた！よしよし。 そしてEclipse上に戻って、タスクの◯印を紫に（activate）して、いくつかのファイルを更新してみると、Package ExplorerでのFocus on Active Taskも機能する。 しかし、作業が終わったものとしてタスクのウィンドウでステータスをcloseにしてsubmitボタンを押しても、ステータスが更新されない。もちろんGitHub側のissueもそのまま。なぜ？？ 試しに、こちらの記事を参考に、GitHubとして変更をコミットする際に、コミットコメントのなかに&#8221;fixed #1&#8243;と記入してコミットしてみた。その後push。これでGitHub側にコミットは反映されて、issueのステータスもclosedに変わった。ここでEclipseのタスクのウィンドウのSynchronize Incoming Changesボタンを押すと、タスクがclosedに変化した。 しかし、GitHub上のコミットとタスクとで、完全にタイミングが連動させる必要はないはず。小さなタスクごとにコミットしてたらキリがないし。なので、GitHub側からissueをcloseにしてみると、それがMylynのタスク側にも反映された。 すぐに原因がわからないので、しばらくは タスク作成（オープン）：Mylyn側 タスククローズ：GitHub側 という運用で使っていこう。うーむ、だれか詳しい方、原因を教えて下さい。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=595&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>今後の開発で使ってみようと思って、MylynというEclipse上のタスク管理プラグインを入れてみた。それを先日設定したGitHubと連携させるための、<a href="https://github.com/blog/852-github-mylyn-connector-for-eclipse">GitHub Mylyn Connector</a>を設定してみたので、やったことを残していく。</p>
<p><span id="more-595"></span></p>
<p>Eclipse MarketplaceからGitHub Mylyn Connectorをインストール。</p>
<p>File-&gt;Import  の画面でGitHub Task Repositoriesを選択。GitHubのユーザーIDとパスワードを入力。対象となるリポジトリを選択。エラーが出て、タイトル表記が空欄の選択肢がGitHub上のリポジトリの数だけ出てきたが、チェックボックスは押せて選択できる。すると、Eclipse上のTask Repositoriesのウィンドウで、該当のリポジトリが表示される。</p>
<p>Eclipse上のTask ListウィンドウのNewTaskのアイコンから、(Local)ではなくて&#8221;(GitHubリポジトリ）issues&#8221;を選択すると、タスクの関連情報を入力するウィンドウが作成されるので、タイトルやDescriptionを記入してsubmitボタンを押す。これでTask Listウィンドウに新しいタスクが作成された。ただ、タスクの左側に表示される◯印は、白（deactivate）のまま。タスクのステータスはopen。</p>
<p>この時点で、GitHubの管理画面をみると、issueが作成されてた！よしよし。</p>
<p>そしてEclipse上に戻って、タスクの◯印を紫に（activate）して、いくつかのファイルを更新してみると、Package ExplorerでのFocus on Active Taskも機能する。</p>
<p>しかし、作業が終わったものとしてタスクのウィンドウでステータスをcloseにしてsubmitボタンを押しても、ステータスが更新されない。もちろんGitHub側のissueもそのまま。<strong>なぜ？？</strong></p>
<p>試しに、<a href="http://outputlog.blogspot.jp/2011/04/githubissue.html">こちらの記事</a>を参考に、GitHubとして変更をコミットする際に、コミットコメントのなかに&#8221;fixed #1&#8243;と記入してコミットしてみた。その後push。これでGitHub側にコミットは反映されて、issueのステータスもclosedに変わった。ここでEclipseのタスクのウィンドウのSynchronize Incoming Changesボタンを押すと、タスクがclosedに変化した。</p>
<p>しかし、GitHub上のコミットとタスクとで、完全にタイミングが連動させる必要はないはず。小さなタスクごとにコミットしてたらキリがないし。なので、GitHub側からissueをcloseにしてみると、それがMylynのタスク側にも反映された。</p>
<p>すぐに原因がわからないので、しばらくは</p>
<ul>
<li>タスク作成（オープン）：Mylyn側</li>
<li>タスククローズ：GitHub側</li>
</ul>
<p>という運用で使っていこう。うーむ、だれか詳しい方、原因を教えて下さい。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/595/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=595&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/05/11/mylyn%e3%81%a8github%e3%82%92%e9%80%a3%e6%90%ba%e3%81%95%e3%81%9b%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>
	</item>
		<item>
		<title>OSX/Eclipse上でGAE/P SDK1.6.5でDjango1.2を使ったプロジェクトを作って、Deployして、ついでにgithubで管理するまで</title>
		<link>http://webforthenext.wordpress.com/2012/05/02/osxeclipse%e4%b8%8a%e3%81%a7gaep-sdk1-6-5%e3%81%a7django1-2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%80%81depl/</link>
		<comments>http://webforthenext.wordpress.com/2012/05/02/osxeclipse%e4%b8%8a%e3%81%a7gaep-sdk1-6-5%e3%81%a7django1-2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%80%81depl/#comments</comments>
		<pubDate>Tue, 01 May 2012 16:34:22 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[GAEでウェブサービスをつくる]]></category>
		<category><![CDATA[twitterbot]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=554</guid>
		<description><![CDATA[もう完全に自分用メモエントリー。 もろもろをだいぶ忘れていたので一から環境準備をやり直した際の手順をそのまま記しておく。各種環境も更新されたいたので以下にまとめておく。 GAE/P SDK：1.6.5 Python：2.7 Django：1.2.5 1.まずEclipse上でGAEプロジェクトを作成 Eclipse上で、File -&#62; New -&#62; Others で、PyDev -&#62; PyDev Google App Engine Project を選択。Project nameを指定する画面で、Grammar Versionは2.7を選択。Interpreterでも、python2.7を選択。Google App Engine Directory を選択する画面では、dev_appserver.py, appcfg.pyがある場所とうことで、/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine を選択。するとたくさんlibを選ぶ画面が出てくるので、ここで lib/django_1_2 も一応選択しておく。これでprojectはできた。 作成したprojectのpropertiesも見ておく。ResourceのText file encodingはUTF-8にしておく。 次に、お約束で、srcフォルダを作っておき、各ソースはこの下に作ることにする。 2.Djangoを入れてみて動かす さて、次にGAEでDjangoを動かせるようにする。関連するドキュメントは以下のとおり。 google-app-engine-django ：本文最初にあるようにもうout of date。ただし、Helper自体のダウンロードはここから行う。 Django 1.2 on Google App Engine：上のoutotfdateの記事を参考に、Django1.2に対応させたもの。Django1.2自体のzipアーカイブを作る形式になっている。 Using the Google App Engine Helper for Django（日本語ページ）：なので現在の基本はここ。 Third-party Libraries [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=554&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>もう完全に自分用メモエントリー。</p>
<p>もろもろをだいぶ忘れていたので一から環境準備をやり直した際の手順をそのまま記しておく。各種環境も更新されたいたので以下にまとめておく。</p>
<ul>
<li>GAE/P SDK：1.6.5</li>
<li>Python：2.7</li>
<li>Django：1.2.5</li>
</ul>
<div><span id="more-554"></span></div>
<h1>1.まずEclipse上でGAEプロジェクトを作成</h1>
<p>Eclipse上で、File -&gt; New -&gt; Others で、PyDev -&gt; PyDev Google App Engine Project を選択。Project nameを指定する画面で、Grammar Versionは2.7を選択。Interpreterでも、python2.7を選択。Google App Engine Directory を選択する画面では、dev_appserver.py, appcfg.pyがある場所とうことで、/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine を選択。するとたくさんlibを選ぶ画面が出てくるので、ここで lib/django_1_2 も一応選択しておく。これでprojectはできた。</p>
<p>作成したprojectのpropertiesも見ておく。ResourceのText file encodingはUTF-8にしておく。</p>
<p>次に、お約束で、srcフォルダを作っておき、各ソースはこの下に作ることにする。</p>
<h1>2.Djangoを入れてみて動かす</h1>
<p>さて、次にGAEでDjangoを動かせるようにする。関連するドキュメントは以下のとおり。</p>
<ul>
<li><a href="http://code.google.com/p/google-app-engine-django/">google-app-engine-django</a> ：本文最初にあるようにもうout of date。ただし、Helper自体のダウンロードはここから行う。</li>
<li><a href="http://www.deck.cc/django_1.2_on_google_app_engine.html">Django 1.2 on Google App Engine</a>：上のoutotfdateの記事を参考に、Django1.2に対応させたもの。Django1.2自体のzipアーカイブを作る形式になっている。</li>
<li><a href="https://developers.google.com/appengine/articles/appengine_helper_for_django">Using the Google App Engine Helper for Django</a>（<a href="https://developers.google.com/appengine/articles/appengine_helper_for_django?hl=ja">日本語ページ</a>）：なので現在の基本はここ。</li>
<li><a href="https://developers.google.com/appengine/docs/python/tools/libraries27#Django">Third-party Libraries in Python 2.7#Django</a>：本家ドキュメントの最新部分。ただし、上の記事との差分のみ。</li>
<li><a href="http://gyktech.blogspot.jp/2011/01/google-app-enginedjango1241.html">Google App EngineでDjango1.2を動かす1</a>：HelperのダウンロードからEclipseの画面を貼り付けながら日本語でやってくれている。とてもありがたい。ちょっと手順は逆になったが、これを参考にする。</li>
</ul>
<p>現在のSDK1.6.5の時点では、もうDjango1.2自体はSDK内に入ってるのだから、それ自体のzipアーカイブなどをわざわざ別途用意する必要はないはず。ただし、Helperはダウンロードしてproject内に保持する、ということかな。</p>
<p>Helperを<a href="http://code.google.com/p/google-app-engine-django/downloads/detail?name=appengine_helper_for_django-r117.zip">ここ</a>からダウンロードする。現時点ではr117。これを、Eclipse上でsrcフォルダにimportする。ArchiveFileを選択して、いまダウンロードしたzipファイルを選択。select all してfinish。これで、srcフォルダ内にappengine_helper_for_djangoフォルダ以下が解凍された。その中のappengine_djangoフォルダやファイルをsrcフォルダ直下に移動した。これで、srcフォルダとappengine_djangoフォルダのアイコンがパッケージのもの（？）に変更された。で、中見がカラになったappengine_helper_for_djangoフォルダ自体は削除。</p>
<p>解凍されてきたapp.yaml内の記述を、今回の環境にあわせるために以下のように簡単に訂正。</p>
<pre style="background-color:#eeeeee;">application：自分のアプリケーション名
runtime: python27
threadsafe: true
libraries:
- name: django
  version: "1.2"</pre>
<p>ここで、GAELauncherを起動して、File-&gt;Add Existing Applicationでprojectのsrcフォルダを選択し、ポートを8081とかに設定。そしてRunボタンを押すと、なんと動いた模様。さっそくブラウザで見てみると、</p>
<pre style="background-color:#eeeeee;">Fatal error when loading application configuration:
Invalid object:
threadsafe cannot be enabled with CGI handler: main.py</pre>
<p>とのことなので、app.yamlのthreadsafeをfalseにすると、It worked! の画面が表示された。</p>
<p>なお、この時点でGAELauncherのログには、</p>
<pre style="background-color:#eeeeee;">The rdbms API is not available because the MySQLdb library could not be loaded.
Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named _imaging</pre>
<p>の2つのワーニングが出てる。まぁあとにしよう。</p>
<h1>3.そのままでデプロイしてみる</h1>
<p>ではこれをデプロイ（本番環境にアップロード）してみる。GAELauncherのDeployボタンを押すだけで、デプロイは成功した。しかし本番URLでアクセスしてみたら、でかでかと</p>
<pre style="background-color:#eeeeee;">Error: Server Error</pre>
<p>と出た。Dashboard（本番環境の管理画面）のログを見てみると、</p>
<pre style="background-color:#eeeeee;">File "/（本番URL）/appengine_django/__init__.py", line 152, in LoadDjango
 from google.appengine.dist import use_library
 ImportError: No module named dist</pre>
<p>とのこと。これは「distというモジュールのインポートに失敗した」ということだろう。いろいろ調べたら、公式ドキュメントのなかに以下のページが見つかった。</p>
<p><a href="https://developers.google.com/appengine/docs/python/python27/newin27#Supported_Third-Party_Libraries">What&#8217;s New in Python 2.7 （の途中）</a></p>
<pre style="background-color:#eeeeee;">The <code>google.appengine.dist</code> package has been removed, so methods like <a href="https://developers.google.com/appengine/docs/python/tools/libraries#Django">use_library()</a> 
and webapp_django_version() are no longer available.</pre>
<p><strong>…え！？</strong>　distパッケージは（Python2.7で）削除された？　でもローカルのSDKでは動いてるよ？　しかもこのパッケージを呼び出してるのはHelperのなかからだけど…？　はっ、もしかして、「Helperは、&#8221;Django1.2&#8243;には対応しているが、&#8221;Python2.7&#8243;には対応してない（GAE本番環境のPython2.7では使えない）」ということか？outofdateってそういう意味なの？ってことはもしかして、全部やり直し？　<strong>ガーン…orz</strong></p>
<h1>4. さてどうするか。</h1>
<p>…気を取り直して、今後の方針として、以下の2つが考えられるかな。</p>
<ol>
<li>Python2.5に戻して、Helperを使ってやる</li>
<li>Python2.7のままで、Helper以外の方法を使ってDjangoを入れる</li>
</ol>
<p>どっちかといえば、2が可能なら2のほうがいいな。言語のバージョンはなるべく新しいものに沿ったほうがなにかとうれしいものなので。よし、再調査開始！</p>
<h1>5.（あらためて）Djangoを入れてみて動かす</h1>
<p>さて調べてみたら、以下の記事が見つかった。</p>
<ul>
<li><a href="http://masayangdiary.blogspot.jp/2011/12/gae-16django-12.html">GAE 1.6+Django 1.2</a></li>
<li><a href="http://en.blog.surfingstudio.com/2011/11/23/using-django-1-2-on-google-app-engine-with-python-2-7-runtime/">Using Django-1.2 on Google App Engine with Python-2.7 runtime</a></li>
</ul>
<p>どちらもHelperは使用してない様子。Django自体になれてないのでどうにも飲み込みが遅いが、後者は、ローカル環境にDjangoをインストールして、そのユーティリティであるdjango-admin.pyというやつを使ってプロジェクトを（おそらく雛形含めて）作成している。でも、前者は一から手で書いてる様子。ここでは前者を参考にして、下記のファイルを手で作成・記述した。一部は、Helperから作られた記述も取り入れている。</p>
<p>app.yaml</p>
<pre style="background-color:#eeeeee;">application: (アプリケーション名)
version: 1
runtime: python27
api_version: 1
threadsafe: false
handlers:
- url: /.*
  script: main.py
libraries:
- name: django
  version: "1.2"
env_variables:
  DJANGO_SETTINGS_MODULE: 'settings'</pre>
<p>main.py</p>
<pre style="background-color:#eeeeee;">import os
def main():
    import django.core.handlers.wsgi
    # Google App Engine imports.
    from google.appengine.ext.webapp import util
    app = django.core.handlers.wsgi.WSGIHandler()
    util.run_wsgi_app(app)</pre>
<p>settings.py</p>
<pre style="background-color:#eeeeee;">MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
)
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
#     'django.template.loaders.eggs.load_template_source',
)
TEMPLATE_CONTEXT_PROCESSORS = (
#   'django.core.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
#    'django.core.context_processors.media',  # 0.97 only.
#    'django.core.context_processors.request',
)
INSTALLED_APPS = (
    'testapp'
)
ROOT_URLCONF = 'urls'
import os
ROOT_PATH = os.path.dirname(__file__)
TEMPLATE_DIRS = (
    ROOT_PATH + '/templates',
)</pre>
<p>urls.py</p>
<pre style="background-color:#eeeeee;">from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^testapp/', 'testapp.views.home')
# Uncomment this for admin:
#     (r'^admin/', include('django.contrib.admin.urls')),
)</pre>
<p>これで、srcフォルダのとなりにtestappフォルダを作ってHelloWorldをtemplates/testappフォルダ内のテンプレートを使って表示させるサンプルを作ってみたところ、動いた！ついでにDjangoのバージョンも django.VERSION で表示させてみたら、1.2.5.final.0と表示された。</p>
<p>…なんだ、もうHelperは必要なく、あっさり動くんじゃないか。</p>
<h1>6.（あたらめて）そのままでデプロイしてみる</h1>
<p>さて、肝心なのはこの次だが、deployしてみたところ、あっさり動いた。django.VERSIONもSDKと同じく1.2.5.final.0と表示された。Yes!!</p>
<h1>7.これをgithubで管理させる</h1>
<p>さて、難関は突破したので、あとは勢いで。</p>
<p>Eclipse上でGitを使うためのプラグインであるEGitのインストールや、github上でのSSHキーの登録はすでに<a title="OSX LionでEgitからgithubにSSH接続するエラーが解決した" href="http://webforthenext.wordpress.com/2012/02/13/osx-lion%e3%81%a7egit%e3%81%8b%e3%82%89github%e3%81%abssh%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%8c%e8%a7%a3%e6%b1%ba%e3%81%97%e3%81%9f/">こちらの記事</a>を書いた時にしているので、それはクリアしたものとして、このプロジェクトをgithubで管理させてみる。</p>
<ol>
<li>github上でリポジトリを作成。</li>
<li>Eclipse上のプロジェクトの右メニューからTeam-&gt;Share Project を選択し、次の画面でGitを選択。次の画面で、Use or create repository in parent folder of project を選択し、Create Repositoryボタンを押してfinish。</li>
<li>念のため、この時点で全ファイルを一度コミットしとく。</li>
<li>今度は、プロジェクトの右メニューからTeam-&gt;Remote-&gt;Push を選択し、Destination Git Repository画面がでる。各項目の設定は以下のとおり。
<ol>
<li>URI：ssh://git@github.com:22/（アカウント名）/（リポジトリ名）.git</li>
<li>Host：github.com</li>
<li>Repository path：（アカウント名）/（リポジトリ名）.git</li>
<li>Protcol：ssh</li>
<li>Port：22</li>
<li>User：git</li>
<li>Password：空欄</li>
<li>Store in Secure Store：チェックする</li>
<li>nextボタン</li>
</ol>
</li>
<li>SSHパスフレーズの再入力と、githubのサイトに訪れての確認を促されたので言われたとおりにする。</li>
<li>次にでるPush Ref Specifications画面で、Source refでmaster[branch]を選択し、Add All Branch Specボタンを押して、next。次の画面でfinish。</li>
</ol>
<p>これでPushまで完了。github側でいままで作ったソースがリポジトリに格納されていることが確認できた。</p>
<p>ふ〜、ここまで長かったが、この記事はここまで。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/554/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/554/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/554/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=554&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/05/02/osxeclipse%e4%b8%8a%e3%81%a7gaep-sdk1-6-5%e3%81%a7django1-2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%80%81depl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>
	</item>
		<item>
		<title>OSX LionでEgitからgithubにSSH接続するエラーが解決した</title>
		<link>http://webforthenext.wordpress.com/2012/02/13/osx-lion%e3%81%a7egit%e3%81%8b%e3%82%89github%e3%81%abssh%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%8c%e8%a7%a3%e6%b1%ba%e3%81%97%e3%81%9f/</link>
		<comments>http://webforthenext.wordpress.com/2012/02/13/osx-lion%e3%81%a7egit%e3%81%8b%e3%82%89github%e3%81%abssh%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%8c%e8%a7%a3%e6%b1%ba%e3%81%97%e3%81%9f/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 16:15:30 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[twitterbot]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=548</guid>
		<description><![CDATA[OSX Lion上、Eclipseでの開発にgitを使ってみようと思ってEgitプラグインを入れたのですが、これがどうにもgithubにSSHでつながってくれなかったのですが、それが解決したのでメモしときます。ちなみに、コマンドラインからgitコマンドはほとんど使ってません。usernameとかを設定したくらいかな？ 基本的には、以下のページを元に設定して進めていきました。 gitのインストール：port install git-core Egitのインストール：Eclipse Git プラグイン ～ インストールからコミット、履歴の比較まで （良記事です） Eclipse上でサンプルプロジェクトを作成 github上に同じ名前でリポジトリを作成 SSHのキーを作成しgithubに登録：Set Up Git （githubの公式ヘルプ） EgitからgithubにPushするところ：Github Tutorial （Egitの公式ヘルプ） ここまでは順調でした。で、Pushする際にgithubで作ったリポジトリのURIを指定してプロトコルをSSHにしてnextボタンを押した所で、&#8221;session is down&#8221;とか&#8221;cannot get remote repository refs&#8221;とかのエラーがでて、先に進めませんでした。（OSXのではなく）Eclipseのデザインでのパスワードを入れるポップアップがでたときもあり、ここにSSHのパスフレーズを入れてもだめ。プロトコルでhttpsを選べば進むようだったけど、せっかくなのでSSHでやりたい。 検索したところ、以下の掲示板で同じ問題に関する話題がありました。 EGit &#8211; SSH Fails at Passphrase (when connecting to GitHub) 要は、環境変数に GIT_SSH=/usr/bin/ssh を追加してみて、ということ。そもそもOSXで環境変数の追加の方法がわからなかったので、 Mac OS XでのJAVA_HOMEと環境変数の設定方法 上のページを参考にして環境変数に追加して再起動して再実行したところ、詰まっていたところで初めてOSXのいつものパスワードを入れるポップアップが出て、ここにSSHのパスフレーズを入力したところ、接続できました！！ ローカルで新しいbranchを作ってcommitしてpushしたのがgithubに反映できることも確認できました。もし同じような問題で詰まっている方がいれば、参考にしてください。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=548&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>OSX Lion上、Eclipseでの開発にgitを使ってみようと思ってEgitプラグインを入れたのですが、これがどうにもgithubにSSHでつながってくれなかったのですが、それが解決したのでメモしときます。ちなみに、コマンドラインからgitコマンドはほとんど使ってません。usernameとかを設定したくらいかな？</p>
<p><span id="more-548"></span></p>
<p>基本的には、以下のページを元に設定して進めていきました。</p>
<ol>
<li>gitのインストール：port install git-core</li>
<li>Egitのインストール：<a href="http://typea.info/blg/glob/2010/12/eclipse-git.html">Eclipse Git プラグイン ～ インストールからコミット、履歴の比較まで</a> （良記事です）</li>
<li>Eclipse上でサンプルプロジェクトを作成</li>
<li>github上に同じ名前でリポジトリを作成</li>
<li>SSHのキーを作成しgithubに登録：<a href="http://help.github.com/mac-set-up-git/">Set Up Git </a>（githubの公式ヘルプ）</li>
<li>EgitからgithubにPushするところ：<a href="http://wiki.eclipse.org/EGit/User_Guide#Github_Tutorial">Github Tutorial</a> （Egitの公式ヘルプ）</li>
</ol>
<p>ここまでは順調でした。で、Pushする際にgithubで作ったリポジトリのURIを指定してプロトコルをSSHにしてnextボタンを押した所で、&#8221;session is down&#8221;とか&#8221;cannot get remote repository refs&#8221;とかのエラーがでて、先に進めませんでした。（OSXのではなく）Eclipseのデザインでのパスワードを入れるポップアップがでたときもあり、ここにSSHのパスフレーズを入れてもだめ。プロトコルでhttpsを選べば進むようだったけど、せっかくなのでSSHでやりたい。</p>
<p>検索したところ、以下の掲示板で同じ問題に関する話題がありました。</p>
<ul>
<li><a href="http://stackoverflow.com/questions/6316014/egit-ssh-fails-at-passphrase-when-connecting-to-github">EGit &#8211; SSH Fails at Passphrase (when connecting to GitHub)</a></li>
</ul>
<p>要は、環境変数に GIT_SSH=/usr/bin/ssh を追加してみて、ということ。そもそもOSXで環境変数の追加の方法がわからなかったので、</p>
<ul>
<li><a href="http://d.hatena.ne.jp/domei/20101128/1290951379">Mac OS XでのJAVA_HOMEと環境変数の設定方法</a></li>
</ul>
<p>上のページを参考にして環境変数に追加して再起動して再実行したところ、詰まっていたところで初めてOSXのいつものパスワードを入れるポップアップが出て、ここにSSHのパスフレーズを入力したところ、接続できました！！</p>
<p>ローカルで新しいbranchを作ってcommitしてpushしたのがgithubに反映できることも確認できました。もし同じような問題で詰まっている方がいれば、参考にしてください。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/548/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/548/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/548/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=548&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/02/13/osx-lion%e3%81%a7egit%e3%81%8b%e3%82%89github%e3%81%abssh%e6%8e%a5%e7%b6%9a%e3%81%99%e3%82%8b%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%8c%e8%a7%a3%e6%b1%ba%e3%81%97%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>
	</item>
		<item>
		<title>『入門ソーシャルデータ』第4章を読む（2）</title>
		<link>http://webforthenext.wordpress.com/2012/02/09/%e3%80%8e%e5%85%a5%e9%96%80%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8f%e7%ac%ac4%e7%ab%a0%e3%82%92%e8%aa%ad%e3%82%80%ef%bc%882%ef%bc%89/</link>
		<comments>http://webforthenext.wordpress.com/2012/02/09/%e3%80%8e%e5%85%a5%e9%96%80%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8f%e7%ac%ac4%e7%ab%a0%e3%82%92%e8%aa%ad%e3%82%80%ef%bc%882%ef%bc%89/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 17:51:56 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[集合知/ソーシャルデータ関連]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=537</guid>
		<description><![CDATA[さて、ちょっと遅くなりましたが、前回の続きです。 4.3 友人関係グラフの作成 ここでは、これまでに作成してきたデータを可視化させる方向に話が進みます。可視化することによってわかってくることがあるので、といったことですね。その可視化したものをソーシャルグラフ、と呼んでいます。 じゃあ例4-10をコピって…と思ったら本にファイル名が書いてない！あらソースなし？と思って著者のgithubを見たら、なんだ、ちゃんとありました（friends_followers__redis_to_networkx.py）。 このソースは、前節の例4-8のクロールのソースを用いて対象としたいtwitterアカウントのデータをRedisに入れてあることを前提として、特定のtwitterアカウント（これを引数で指定）がフォローしている人たちのなかで、相互フォローしている関係（引数で指定した人を含まなくてもいい）を、この本の1章でちょっと使ったnetworkxライブラリを使ってグラフのエッジとして追加していきそれをファイルに書きだす、というものです。 このソースを理解する上でのpython言語的ポイントは、 friend_ids = [fid for fid in friend_ids if fid in ids] ですかね。if文つきのリスト内包表記です。わかってしまえばどうということはないのですが、日本語で説明すると、「friend_idsから一つづつもってきて、それがidsの中に含まれていれば、リストに残していく」となって、ソース内では、idsが引数指定したアカウントのuser_id＋そのアカウントがフォローしているアカウントたちのuser_idのリストで、friend_idsが、idsからひとりピックアップしたアカウントがフォローしているアカウントたちのuser_idのリストですから、ここでこの２つの積集合を取っており、それがとりもなおさず相互フォローの関係である、と。 これを前回に引き続き僕のアカウント（HOSONO_Junya）で実行したところ、 Processing user with id 14863108 Processing user with id 90241658 Processing user with id 48395404 Processing user with id 112571530 … と834行（＝フォロー数＋自分）表示されて、outというフォルダのなかに、&#8221;HOSONO_Junya.gpickle&#8221;というファイルができていました。このファイル自体は、ソース内のオブジェクトをシリアル化したものなので、直に開いても仕方がありません。次の節の、例4-11のソースの入力として使うためのものですね。 …とはいえ、せっかく僕のアカウントの近辺での相互フォローの関係がわかったわけですから、ぜひ見てみたい！と思ったのですが、それはちょっと先の4.3.3でやってくれているので、ちょっと我慢しましょうか。 4.3.1 クリークの検出と分析 ここでは、前節で得られたデータをもとに分析しています。前節で相互フォローの関係が得られたわけですが、これはソーシャルメディアという視点からすると「魅力的な素材」だと書かれています。そしてここでは、そのその関係の有り様を考える上でのツールとして、クリークというものを利用しています。これによって、「グループダイナミクス」がわかると。この単語を本にそのままカタカナで表記しているということは、適切な日本語訳が見当たらなかった、ということかな？ 「そのグループにおいて、個々の間にどのくらい密接な関連があるのか」、といったあたりでしょうか。 クリーク自体については、詳しくはWikipediaなどを参考に（と本もぶん投げてますので…）。僕もクリークというもの自体を初めて知りましたが、ざっくりいうと、 クリークとは「あるグループのなかから、どの２名をとっても関連付けられている（ここでは相互フォローしている）サブグループをとりだしたもの」 最大クリークとは「クリークの中でその対象者の数が一番多いもの」 と、理解しました。間違ってたらぜひコメントで指摘してください。  言い換えれば、「個々人がそのグループ内のだれとでも仲良しな関係にあるグループ」。そのグループの大きさが大きいほど、「人間関係が濃いグループ」とみなす、ということなんのでしょうか。 で、ここのソースの例4-11（friends_followers__clique_analysis.py）は、例4-10の結果をもとに、クリークの数や平均サイズ、最大クリークを算出してくれます。 で、実行したところ、 Num [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=537&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>さて、ちょっと遅くなりましたが、<a title="『入門ソーシャルデータ』第4章を読む（1）" href="http://webforthenext.wordpress.com/2012/02/06/%e3%80%8e%e5%85%a5%e9%96%80%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8f%e7%ac%ac4%e7%ab%a0%e3%82%92%e8%aa%ad%e3%82%80%ef%bc%881%ef%bc%89/">前回</a>の続きです。</p>
<p><span id="more-537"></span></p>
<h2>4.3 友人関係グラフの作成</h2>
<p>ここでは、これまでに作成してきたデータを可視化させる方向に話が進みます。可視化することによってわかってくることがあるので、といったことですね。その可視化したものをソーシャルグラフ、と呼んでいます。</p>
<p>じゃあ例4-10をコピって…と思ったら本にファイル名が書いてない！あらソースなし？と思って著者のgithubを見たら、なんだ、ちゃんとありました（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__redis_to_networkx.py">friends_followers__redis_to_networkx.py</a>）。</p>
<p>このソースは、前節の例4-8のクロールのソースを用いて対象としたいtwitterアカウントのデータをRedisに入れてあることを前提として、特定のtwitterアカウント（これを引数で指定）がフォローしている人たちのなかで、相互フォローしている関係（引数で指定した人を含まなくてもいい）を、この本の1章でちょっと使ったnetworkxライブラリを使ってグラフのエッジとして追加していきそれをファイルに書きだす、というものです。</p>
<p>このソースを理解する上でのpython言語的ポイントは、</p>
<pre style="background-color:#eeeeee;">friend_ids = [fid for fid in friend_ids if fid in ids]</pre>
<p>ですかね。if文つきのリスト内包表記です。わかってしまえばどうということはないのですが、日本語で説明すると、「friend_idsから一つづつもってきて、それがidsの中に含まれていれば、リストに残していく」となって、ソース内では、idsが引数指定したアカウントのuser_id＋そのアカウントがフォローしているアカウントたちのuser_idのリストで、friend_idsが、idsからひとりピックアップしたアカウントがフォローしているアカウントたちのuser_idのリストですから、ここでこの２つの積集合を取っており、それがとりもなおさず相互フォローの関係である、と。</p>
<p>これを前回に引き続き僕のアカウント（HOSONO_Junya）で実行したところ、</p>
<pre style="background-color:#eeeeee;">Processing user with id 14863108
Processing user with id 90241658
Processing user with id 48395404
Processing user with id 112571530
…</pre>
<p>と834行（＝フォロー数＋自分）表示されて、outというフォルダのなかに、&#8221;HOSONO_Junya.gpickle&#8221;というファイルができていました。このファイル自体は、ソース内のオブジェクトをシリアル化したものなので、直に開いても仕方がありません。次の節の、例4-11のソースの入力として使うためのものですね。</p>
<p>…とはいえ、せっかく僕のアカウントの近辺での相互フォローの関係がわかったわけですから、ぜひ見てみたい！と思ったのですが、それはちょっと先の4.3.3でやってくれているので、ちょっと我慢しましょうか。</p>
<h3>4.3.1 クリークの検出と分析</h3>
<p>ここでは、前節で得られたデータをもとに分析しています。前節で相互フォローの関係が得られたわけですが、これはソーシャルメディアという視点からすると「魅力的な素材」だと書かれています。そしてここでは、そのその関係の有り様を考える上でのツールとして、クリークというものを利用しています。これによって、「グループダイナミクス」がわかると。この単語を本にそのままカタカナで表記しているということは、適切な日本語訳が見当たらなかった、ということかな？ 「そのグループにおいて、個々の間にどのくらい密接な関連があるのか」、といったあたりでしょうか。</p>
<p>クリーク自体については、詳しくは<a href="http://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA%E3%83%BC%E3%82%AF_(%E3%82%B0%E3%83%A9%E3%83%95%E7%90%86%E8%AB%96)">Wikipedia</a>などを参考に（と本もぶん投げてますので…）。僕もクリークというもの自体を初めて知りましたが、ざっくりいうと、</p>
<ul>
<li>クリークとは「あるグループのなかから、どの２名をとっても関連付けられている（ここでは相互フォローしている）サブグループをとりだしたもの」</li>
<li>最大クリークとは「クリークの中でその対象者の数が一番多いもの」</li>
</ul>
<p>と、理解しました。間違ってたらぜひコメントで指摘してください。</p>
<div> 言い換えれば、「個々人がそのグループ内のだれとでも仲良しな関係にあるグループ」。そのグループの大きさが大きいほど、「人間関係が濃いグループ」とみなす、ということなんのでしょうか。</div>
<p>で、ここのソースの例4-11（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__clique_analysis.py">friends_followers__clique_analysis.py</a>）は、例4-10の結果をもとに、クリークの数や平均サイズ、最大クリークを算出してくれます。</p>
<p>で、実行したところ、</p>
<pre style="background-color:#eeeeee;">Num cliques: 832
 Avg clique size: 2
 Max clique size: 3
 Num max cliques: 125
People in all max cliques:
 [
 "HOSONO_Junya",
 "hsksyusk"
 ]
Max cliques:
 [
 [
 "HOSONO_Junya",
 "hsksyusk",
 "thinktheearth"
 ],
 [
 "HOSONO_Junya",
 "hsksyusk",
 "adanao"
 ],
 …</pre>
<p>となりました。…３!? 最大クリークが３!? (２度見した)　小さ！もっとフォロー数ふやせよ俺！（ちなみに<a href="https://twitter.com/#!/hsksyusk">@hsksyusk</a>さんとは、いま働いているNGOにボランティアで関わってくれているSEさんです）そのサイズ３のクリークが125個あるということは、僕とhsksyuskさんと後一人、という3人組が大量にある、ということですね。</p>
<p>うーん、ちょっとこれだけではサンプルとして寂しいので、フォロー数/フォロワー数が違えば結果も変わってくるかもしれないということで、僕が働いているNGOの公式アカウント（@ngo_jvc）で試してみましょう。フォロー数＝1276、フォロワー数＝3666です。</p>
<p>まずは例4-8でRedisにデータを作り(depth=1で実行、7274件のデータが作成された)、例4-10で相互フォロー関係を抜き出し、例4-11でクリークを見つける…っと。結果は以下のようになりました。</p>
<pre style="background-color:#eeeeee;">Num cliques: 1274
Avg clique size: 2
Max clique size: 4
Num max cliques: 43</pre>
<p>それでも最大クリーク＝4か…。ふと思いついて、もういちど僕のアカウントで例4-11を実行したところ、結果が変わってきました。</p>
<pre style="background-color:#eeeeee;">Num cliques: 831
Avg clique size: 2
Max clique size: 4
Num max cliques: 43</pre>
<p>…そうかそうかなるほどなるほど。そもそもRedis内のデータが足りていないために（両方共にdepth=1でしか実行していないからかな）、正確な（というか完璧な）結果が得られていなかったわけですね。</p>
<p>うーん、depthを増やして実行してみるのは後日の宿題としておくとして、先に進みましょう。</p>
<h3>4.3.2 Infochimpsの「強いリンク」API</h3>
<p>ここでは、twitterのデータを取り扱う手段のひとつとして、<a href="http://www.infochimps.com/">Infochimps</a>というサービスを紹介しており、過去のtwitterデータをAPIで取得できるとのこと。Strong Links APIでは、もっともやりとりしている（おそらく＠言及している？）相手を教えてくれるということで、それを使っています。事前にサインインが必要とのこと。</p>
<p>例4-13（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__infochimps_strong_links.py">friends_followers__infochimps_strong_links.py</a>）を実行してみました。ソース自体は単にStrong Links APIをRESTで実行しているだけですね。</p>
<pre style="background-color:#eeeeee;">HOSONO_Junya's Strong Links
 ------------------------------
 hsksyusk 5.478303
 HOSONO_Junya 4.832576
 suzukinao 3.1820507
 kanaedoi 2.982051
 tokko 2.982051
 suesi 2.95
 segatomo 2.9320507
 tksmmshr 2.8642135
 j_machikado 2.8642135
 chusoken 2.7071068
 momonico 2.6642137
 dskfj 2.6142135
 MorikawaW2C 2.45
 …</pre>
<p>となりました。自分自身の名前があるのは、たぶん旧式RTのためだと思います。僕のtwitterの使い方として独り言が多い（＠言及しない）ので、＠言及が多い人と比べてみると面白いかもしれませんね。</p>
<p>Infochimpsには他にもたくさんAPIが有りそうなので、探ってみるのもいいでしょう。</p>
<h3>4.3.3 3Dグラフへの対話的な可視化</h3>
<p>さて、さきほど後回しにした可視化をやってみる節です。</p>
<p>本では、可視化するツールとして、<a href="http://ubietylab.net/ubigraph/">Ubigraph</a>を紹介してくれています。3D、らしいですね。公式サイトからOSにあわせてダウンロードしてきて解凍しましょう。サーバを実行して、demo.pyを動かすまでやってみましょう。別ウィンドウが開いて、マウスで動かせる図形がでたところまでできれば、準備完了ですね。</p>
<p>例4-15（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__ubigraph.py">friends_followers__ubigraph.py</a>）では、twitterアカウントを２つ引数にとって、その２者がともに所属する最大クリークを3Dで表示してくれるみたいです。</p>
<p>例によってコピペしてきてHOSONO_Junyaとngo_jvcを引数にして実行…すると、エラーが出ました。</p>
<pre style="background-color:#eeeeee;">Traceback (most recent call last):
File "friends_followers__ubigraph.py", line 8, in &lt;module&gt;
import ubigraph
ImportError: No module named ubigraph</pre>
<p>おっと、pythonのライブラリが入ってませんでした。さきほど解凍したフォルダのexamples/Python/ubigraph.pyをソースと同じフォルダに入れて再実行したら、またエラー。</p>
<pre style="background-color:#eeeeee;">Traceback (most recent call last):
File "friends_followers__ubigraph.py", line 13, in &lt;module&gt;
g = nx.read_gpickle(SCREEN_NAME + '.gpickle')
File "&lt;string&gt;", line 2, in read_gpickle
File "/Library/Python/2.7/site-packages/networkx-1.6-py2.7.egg/networkx/utils/decorators.py", line 173, in _open_file
fh = _dispatch_dict[ext](path, mode=mode)
IOError: [Errno 2] No such file or directory: 'HOSONO_Junya.gpickle'</pre>
<p>あらら、今度はgpickleのファイルが読めなかったです。さっきのままoutフォルダに入ってるので、ソース内のファイル名の前に&#8221;out/&#8221;と付け足して実行。今度はうまくいきました。</p>
<p>先ほどの別ウィンドウに出てきたのが以下のような画面。</p>
<p><a href="http://webforthenext.files.wordpress.com/2012/02/cap4-05.png"><img class="aligncenter size-medium wp-image-542" title="cap4-05" src="http://webforthenext.files.wordpress.com/2012/02/cap4-05.png?w=300&h=255" alt="" width="300" height="255" /></a></p>
<p>そうか、最大クリークが43個もあるので、ほぼ球形のような図になってしまいました。描画もちらついてるし。でもマウスでぐりぐり動かせます。</p>
<h2>4.4 まとめ</h2>
<p>この章のこれまでの流れを振り返って、他の章とおなじく「こんなこともやってみれば？」という宿題が書かれてます。まぁ後日、ということで。</p>
<p>よし、とにかく『入門ソーシャルデータ』第４章、最後までやってみました。章の後半は、とにかくRedisにデータを入れてはじめて分析に役立つ、という流れになってきていたので、どんどん入れていったほうが面白そうですね。</p>
<p>最後までお付き合いいただきましてありがとうございました！それでは<a href="http://atnd.org/events/24531">勉強会</a>当日お会いしましょう！</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/537/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=537&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/02/09/%e3%80%8e%e5%85%a5%e9%96%80%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8f%e7%ac%ac4%e7%ab%a0%e3%82%92%e8%aa%ad%e3%82%80%ef%bc%882%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>

		<media:content url="http://webforthenext.files.wordpress.com/2012/02/cap4-05.png?w=300" medium="image">
			<media:title type="html">cap4-05</media:title>
		</media:content>
	</item>
		<item>
		<title>『入門ソーシャルデータ』第4章を読む（1）</title>
		<link>http://webforthenext.wordpress.com/2012/02/06/%e3%80%8e%e5%85%a5%e9%96%80%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8f%e7%ac%ac4%e7%ab%a0%e3%82%92%e8%aa%ad%e3%82%80%ef%bc%881%ef%bc%89/</link>
		<comments>http://webforthenext.wordpress.com/2012/02/06/%e3%80%8e%e5%85%a5%e9%96%80%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8f%e7%ac%ac4%e7%ab%a0%e3%82%92%e8%aa%ad%e3%82%80%ef%bc%881%ef%bc%89/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 16:17:58 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[集合知/ソーシャルデータ関連]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=468</guid>
		<description><![CDATA[今週金曜日（2012/2/10）、こちらのイベントでプレゼンを担当します。 第4回「入門 ソーシャルデータ」真面目に勉強する会 @神泉(渋谷) このイベントは、オライリーの『入門ソーシャルデータ』を参加者同士で一章ずつ担当して読み進めていこう、という連続勉強会で、この日ではそのうちの第4章を担当することになっています。 それに先立って、事前にこの章をひと通り読み進めてみましたので、その過程を書き留めていきます。参考になれば幸いです。書いてみたら長くなったので2回に分けます。これはその1回目。 まず、この本では記載されているソースはすべてpythonという言語で書かれていますので、python環境もOSなどにあわせて用意しておきましょう。なるべくバージョンは新しいほうがいいと思います。ちなみに僕の環境は以下のとおり。 OSX Lion 10.7.2 python 2.7.1 (OSXでのpythonのバージョン切り替えについてはこちらに記載) Eclipse Herios SR2 + PyDev など（コマンドラインでやる人は必要ないでしょう） （追記：pythonのバージョンは、本にあわせて2.7系がベターでしょう。@iwaimさんご指摘ありがとうございます） おっと、この章を読み進めるには、とりあえず以下のpythonライブラリも必要となってきます。とにかく用意しましょう。 twitter （これがなければ始まらない。この本の5ページにインストール方法の記載あり） cPickle（シリアル化ライブラリ） そして最初に、この章でなに取り扱うのかを確認しておきましょう。ここでは、本の91ページにあるように、 （twitterで）フォローしている/されているユーザーは何人いるか フォローしているけれどもされていないユーザーは誰か フォローされているけれどもしていないユーザーは誰か ネットワークのなかでフォロー関係のもっとも多いユーザー、少ないユーザーは誰か 「相互フォロー」（フォローし合っている関係）している相手は誰か 自分のフォロワー全員と彼らのフォロワー全員から考えて、自分がリツイートしたときにどのような影響があるか ということを取り扱います。 ちなみに、これ以前の１〜３章については、今回の勉強会の主催者の方が設置してくださっているGoogleグループ「集合知の会」に、各回のプレゼン資料が掲載されていますので、参考にしてみてはいかがでしょうか。 それでは、章立てに従って見ていきましょう。 4.1 RESTfulとOAuthを着込んだAPI ここでは、twitterのAPIはRESTfulでもあること、twitterアカウントの情報を得る際には、twitterのいわゆるアカウント名（=screen_name）のほかに、アカウントごとに固有な整数（=user_id）を利用することもできる、ということが書かれてます。 そして、ユーザー認証が必要なtwitterのAPIを利用するには、OAuthを利用する必要がある、として次に進みます。 4.1.1 君が私のパスワードを知っているはずがない ここでは、twitterというよりも、OAuth自体の説明ですね。様々なウェブサービスはその認証機能としてOAuth 2.0を採用し始めており、twitterも2010年夏からOAuth1.0aを採用しています（2.0はまだの様子）。 OAuth自体のことを理解するためには、この章を読む他にも、下記のようなページを読み進めるのもいいと思います。 ゼロから学ぶOAuth (gihyo.jp) APIアクセス権を委譲するプロトコル、OAuthを知る (@IT) 非技術者のためのOAuth認証(?)とOpenIDの違い入門 (コメント欄も読みましょう) 要は、本にあるとおり、「一言で言えば、OAuthは、ユーザー名とパスワードを共有せずに、あるアプリケーションが格納したデータに別のアプリケーションからアクセスできるようにするために、そのアプリケーションに権限を認める手段を提供する」もの。そしてその手段を、ユーザー認証として利用している場合もある、ということですかね。 たとえば、今回の勉強会の告知に利用されているatndさんも、OAuthを利用してユーザー認証をしている、といっていいものだと思います。 4.2 無駄がなく必要最小限なデータ収集マシン さて、話はtwitterに戻ります。今回の『入門ソーシャルデータ』を読み進める上でありがたいのは、掲載されているソースのなかで（〜.py）とファイル名が付いているものに関しては、著者のgithubでまんま公開されていること。コピペで動作確認できるわけですね。 さっそく例4-2のソース（friends_followers__get_friends.py）をコピペして実行…と思ったら、いきなり本のソースとちょっと違ってるやんけ！ [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=468&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>今週金曜日（2012/2/10）、こちらのイベントでプレゼンを担当します。</p>
<ul>
<li><a href="http://atnd.org/events/24531">第4回「入門 ソーシャルデータ」真面目に勉強する会 @神泉(渋谷)</a></li>
</ul>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873115132/-22/ref=nosim/" rel="nofollow" target="_blank"><img class="alignleft" style="border:none;" src="http://ecx.images-amazon.com/images/I/513gAGruDDL._SS200_.jpg" alt="『入門 ソーシャルデータ』" /></a></p>
<p>このイベントは、オライリーの『入門ソーシャルデータ』を参加者同士で一章ずつ担当して読み進めていこう、という連続勉強会で、この日ではそのうちの第4章を担当することになっています。</p>
<p>それに先立って、事前にこの章をひと通り読み進めてみましたので、その過程を書き留めていきます。参考になれば幸いです。書いてみたら長くなったので2回に分けます。これはその1回目。</p>
<p><span id="more-468"></span></p>
<p>まず、この本では記載されているソースはすべてpythonという言語で書かれていますので、python環境もOSなどにあわせて用意しておきましょう。なるべくバージョンは新しいほうがいいと思います。ちなみに僕の環境は以下のとおり。</p>
<ul>
<li>OSX Lion 10.7.2</li>
<li>python 2.7.1 (OSXでのpythonのバージョン切り替えについては<a href="http://webforthenext.wordpress.com/2012/01/14/osx%E3%81%A7%E3%81%AEpython%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%88%87%E3%82%8A%E6%9B%BF%E3%81%88eclipse%E3%81%A7%E3%82%82/">こちらに記載</a>)</li>
<li>Eclipse Herios SR2 + PyDev など（コマンドラインでやる人は必要ないでしょう）</li>
</ul>
<p>（追記：pythonのバージョンは、本にあわせて2.7系がベターでしょう。<a href="https://twitter.com/#!/iwaim">@iwaim</a>さんご指摘ありがとうございます）</p>
<p>おっと、この章を読み進めるには、とりあえず以下のpythonライブラリも必要となってきます。とにかく用意しましょう。</p>
<ul>
<li>twitter （これがなければ始まらない。この本の5ページにインストール方法の記載あり）</li>
<li>cPickle（シリアル化ライブラリ）</li>
</ul>
<p>そして最初に、この章でなに取り扱うのかを確認しておきましょう。ここでは、本の91ページにあるように、</p>
<ul>
<li>（twitterで）フォローしている/されているユーザーは何人いるか</li>
<li>フォローしているけれどもされていないユーザーは誰か</li>
<li>フォローされているけれどもしていないユーザーは誰か</li>
<li>ネットワークのなかでフォロー関係のもっとも多いユーザー、少ないユーザーは誰か</li>
<li>「相互フォロー」（フォローし合っている関係）している相手は誰か</li>
<li>自分のフォロワー全員と彼らのフォロワー全員から考えて、自分がリツイートしたときにどのような影響があるか</li>
</ul>
<p>ということを取り扱います。</p>
<p>ちなみに、これ以前の１〜３章については、今回の勉強会の主催者の方が設置してくださっている<a href="https://groups.google.com/group/StudyGroup_CI">Googleグループ「集合知の会」</a>に、各回のプレゼン資料が掲載されていますので、参考にしてみてはいかがでしょうか。</p>
<p>それでは、章立てに従って見ていきましょう。</p>
<h2>4.1 RESTfulとOAuthを着込んだAPI</h2>
<p>ここでは、twitterのAPIは<a href="http://ja.wikipedia.org/wiki/REST">RESTful</a>でもあること、twitterアカウントの情報を得る際には、twitterのいわゆるアカウント名（=screen_name）のほかに、アカウントごとに固有な整数（=user_id）を利用することもできる、ということが書かれてます。</p>
<p>そして、ユーザー認証が必要なtwitterのAPIを利用するには、OAuthを利用する必要がある、として次に進みます。</p>
<h3>4.1.1 君が私のパスワードを知っているはずがない</h3>
<p>ここでは、twitterというよりも、OAuth自体の説明ですね。様々なウェブサービスはその認証機能としてOAuth 2.0を採用し始めており、twitterも2010年夏からOAuth1.0aを採用しています（<a href="https://dev.twitter.com/discussions/397">2.0はまだの様子</a>）。</p>
<p>OAuth自体のことを理解するためには、この章を読む他にも、下記のようなページを読み進めるのもいいと思います。</p>
<ul>
<li><a href="http://gihyo.jp/dev/feature/01/oauth">ゼロから学ぶOAuth (gihyo.jp)</a></li>
<li><a href="http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth01.html">APIアクセス権を委譲するプロトコル、OAuthを知る (@IT)</a></li>
<li><a href="http://www.sakimura.org/2011/05/1087/">非技術者のためのOAuth認証(?)とOpenIDの違い入門 (コメント欄も読みましょう)</a></li>
</ul>
<p>要は、本にあるとおり、「一言で言えば、OAuthは、ユーザー名とパスワードを共有せずに、あるアプリケーションが格納したデータに別のアプリケーションからアクセスできるようにするために、そのアプリケーションに権限を認める手段を提供する」もの。そしてその手段を、ユーザー認証として利用している場合もある、ということですかね。</p>
<p>たとえば、今回の勉強会の告知に利用されているatndさんも、OAuthを利用してユーザー認証をしている、といっていいものだと思います。</p>
<h2>4.2 無駄がなく必要最小限なデータ収集マシン</h2>
<p>さて、話はtwitterに戻ります。今回の『入門ソーシャルデータ』を読み進める上でありがたいのは、掲載されているソースのなかで（〜.py）とファイル名が付いているものに関しては、<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/tree/master/python_code">著者のgithubでまんま公開されている</a>こと。コピペで動作確認できるわけですね。</p>
<p>さっそく例4-2のソース（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__get_friends.py">friends_followers__get_friends.py</a>）をコピペして実行…と思ったら、いきなり本のソースとちょっと違ってるやんけ！ githubのこのソースの履歴を見ると、<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/commit/f373592b4dc69ae0b80ba80975be8e5a288756e6">&#8220;Fixed a minor bug in reporting output, Mostly style tweaks&#8221;</a>とあって、consumer key と consumer secret を引数として渡すようになっていました。ふむふむ。</p>
<p>ここで、本にも記載がありますが、これ以降のソースを実行するには、<a href="https://dev.twitter.com/apps/new">twitterの開発者用サイト</a>に行って、「新しいアプリケーションを作成する」ことで、この consumer key と consumer secret を取得する必要があります。もちろん、twitter アカウントも必須。</p>
<p>この画面ですね。</p>
<p><a href="http://webforthenext.files.wordpress.com/2012/02/cap4-01.png"><img class="aligncenter size-medium wp-image-504" title="cap4-01" src="http://webforthenext.files.wordpress.com/2012/02/cap4-01.png?w=300&h=181" alt="" width="300" height="181" /></a></p>
<p>ここで、Nameは独自のものを指定する必要があるみたいです（ここではなにも考えずに&#8221;socialdata_hosono&#8221;としました）。無事アプリケーションを作ると、consumer key と consumer secret が発行されました。</p>
<p><a href="http://webforthenext.files.wordpress.com/2012/02/cap4-02.png"><img class="aligncenter size-medium wp-image-506" title="cap4-02" src="http://webforthenext.files.wordpress.com/2012/02/cap4-02.png?w=300&h=167" alt="" width="300" height="167" /></a></p>
<p>これを、試しに自分のtwitterアカウントのscreen_name (HOSONO_Junya)と一緒にさっきのソースの引数として渡して再実行！　コンソールには以下のような画面で止まって、</p>
<pre style="background-color:#eeeeee;">Hi there! We're gonna get you all set up to use MiningTheSocialWeb.
In the web browser window that opens please choose to Allow access.
Copy the PIN number that appears on the next page and paste or type it here:
Opening: http://api.twitter.com/oauth/authorize?oauth_token=(文字列)
Please enter the PIN:</pre>
<p>それとは別にブラウザが開き、よく見かける下の画面が出てきました。</p>
<p><a href="http://webforthenext.files.wordpress.com/2012/02/cap4-03.png"><img class="aligncenter size-medium wp-image-507" title="cap4-03" src="http://webforthenext.files.wordpress.com/2012/02/cap4-03.png?w=300&h=235" alt="" width="300" height="235" /></a></p>
<p>なるほど、twitterさんに、</p>
<ul>
<li>タイムラインのツイートを見る。</li>
<li>フォローしている人を見る。</li>
</ul>
<p>この２つの機能を、socialdata_hosono というアプリケーションに使わせてやっていいですか？という問い合わせが発生したわけですね。許可するためにアカウント名とパスワードを入力すると、PINが発行されました。</p>
<p><a href="http://webforthenext.files.wordpress.com/2012/02/cap4-04.png"><img class="aligncenter size-medium wp-image-508" title="cap4-04" src="http://webforthenext.files.wordpress.com/2012/02/cap4-04.png?w=300&h=178" alt="" width="300" height="178" /></a></p>
<p>コンソールに戻ってこれを入力すると、</p>
<pre style="background-color:#eeeeee;">Fetched 833 ids for HOSONO_Junya
[124190170, 342836805, 5373072, 384222380, 137886908, 24066081,
167287360, 313359626, 308796953, 338254966, 165748489, 14491664,
3776671, 14655252, 41823348, 14357291, …</pre>
<p>と表示されました！ 833というのは、僕のtwitterアカウントの「フォローしている数」ですので、フォローしている人たちのuser_idのリスト（pythonでいうところのリスト）が得られたことになります（この本内やtwitterの公式ドキュメント内でのfriendsというのは自分がフォローしている人、という意味ですね）。</p>
<p>（ちなみに、上の表示の"Fetched〜"の部分だけ標準エラー出力に書き出しているあたりがちょっと親切ですねw）</p>
<p>なお、本に記載もありますが、ソース内で使っている <a href="https://dev.twitter.com/docs/api/1/get/friends/ids">/friends/ids API は一度の呼び出しで5000のIDを返す</a>そうです。このソースではそのたびに"Fetched〜"の行を出しつつループする、という形になっており、上限を10000としています。そして、こうしたAPIの呼び出しには回数制限があり、350回/時とのこと。同様の記載が、以下のサイトにもありました。</p>
<ul>
<li><a href="http://sourceforge.jp/projects/tween/wiki/API%E5%88%B6%E9%99%90%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6">SourceForge.JP &gt; ソフトウェアを探す &gt; Tween &gt; Wiki &gt; API制限について</a></li>
</ul>
<p>なので、大量のフォロワーを持つアカウントを対象にこうしたAPIを利用する場合にはそれなりの準備をしなければならない、ということですね。</p>
<h3>4.2.1 リファクタリングのための非常に短い幕間</h3>
<p>ということもあって、そのあたりの準備を著者はあらかじめしてくれています。偉い！ここではOAuthを用いたログイン部分と、よく使われるAPIをモジュール化＆公開してくれています。</p>
<ul>
<li><a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/twitter__login.py">twitter__loginモジュール</a></li>
<li><a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/twitter__util.py">twitter__utilモジュール</a></li>
</ul>
<p>これを使えば、ソース内で自分のやりたいことに集中できるというわけですね。ソースが短くなっていることがわかると思います。ありがたく使わせていただきましょう。上記リンクからダウンロードして、自分のソースと同じフォルダに置いておけばいいでしょう。ファイル名もそのままにしておくのがベターですね。</p>
<p>例4-3（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__get_friends_refactored.py">friends_followers__get_friends_refactored.py</a>）は、例4-2をこの２つのモジュールを用いて書き換えただけのものです。こちらもgithub版のソースは本からちょっと修正されていて、引数としてフォロー数の上限も引数で渡すようになっています。</p>
<p>ソースを見て、「…引数がアカウント名とフォロー数上限の2つだけ？はて？」と思いつつ実行したら、案の定エラーが。tracebackが吐かれて、</p>
<pre style="background-color:#eeeeee;">twitter.api.TwitterHTTPError: Twitter sent status 401 for URL:
oauth/request_token using parameters: (oauth_consumer_key=
&amp;oauth_nonce=(数字)&amp;oauth_signature_method=HMAC-SHA1&amp;oauth_timestamp=
(数字)&amp;oauth_version=1.0&amp;oauth_signature=(文字列))
 details: Failed to validate oauth signature and token</pre>
<p>とのこと。要はOAuthに失敗しましたよと。ソースを見ると、</p>
<pre style="background-color:#eeeeee;"># You may need to setup your OAuth settings in twitter__login.py</pre>
<p>とあるので（書籍版にも書いてありますね）、twitter__login.pyの最初の部分に customer key と customer secret を直書きして再実行、再びPINが発行されて、無事friendsが取得できました。</p>
<p>もちろん、このライブラリを使ったとしても、<strong>API制限自体が消えるわけではない</strong>ので、大量のデータを取り扱う場合にはそれなりの時間を使える時にしたほうがいいでしょう。</p>
<h3>4.2.2 Redis：データ構造サーバ</h3>
<p>この節では、APIを用いて得られるようになったtwitterの各種データを取り扱うために、Redisというデータベースの導入をする、としています。その心は、大量なデータを取り扱うため、ともう一つ、<strong>集合演算を使いたいため</strong>、ということらしいです。</p>
<p>僕はRedisを今回初めて知ったのですが、この本の3章でもでてきた<a href="http://couchdb.apache.org/">CouchDB</a>など同じく、KVS (Key-Value Stored)なデータベースとのこと。要はハッシュデータのようなものを取り扱うのに長けているといったものでしょうか（詳しい人コメントお願いします）。</p>
<p>なにはともあれ、Redisをインストールしましょう。<a href="http://redis.io/">公式サイト</a>のダウンロードページにインストールの指示があり、これに従って簡単にインストールできました。そしてコマンドラインからサーバを起動して専用クライアントから操作できること、までの説明が公式サイトにあります。</p>
<p>次に、このRedisをpythonから利用するためのライブラリも、sudo easy_install redis であっさりインストール完了。</p>
<p>本の101ページの一番下のソースは、"screen_name1$friends_ids"というキーに対して、pythonのリスト内包表記を用いて、1,2,3…と順繰りに追加（sadd）していってそれを表示(smember)する、というだけのことですね。保管されるデータは、</p>
<ul>
<li>キー："screen_name$friends_ids"</li>
<li>値：set(['1','2','3'...])</li>
</ul>
<p>という一組になります。</p>
<h3>4.2.3 初歩的な集合演算</h3>
<p>さて、ここでは、そもそもなぜ集合演算を使うのか、ということを確認しています。例4-2のソースにあるように、この章で取り扱う twitter API で得られるデータは、フォロワーの一覧などその多くはデータが複数集まったもの＝集合、です。そしてそれらに対して集合演算を用いることで、意味のある情報を得ようというわけですね。例として、</p>
<p>Friends = {Abe, Bob}, Followers = {Bob, Carol}</p>
<p>というtwitterユーザーに対して、</p>
<table border="1" cellspacing="0">
<tbody>
<tr>
<th>演算</th>
<th>結果</th>
<th>コメント</th>
</tr>
<tr>
<td nowrap="nowrap">和集合：Friends ∪ Followers</td>
<td>Abe,Bob,Carol</td>
<td>あるユーザーのネットワーク全体</td>
</tr>
<tr>
<td>積集合：Friends ∩ Followers</td>
<td>Bob</td>
<td>あるユーザーの相互フォローの相手</td>
</tr>
<tr>
<td>差集合１：Friends - Followers</td>
<td>Abe</td>
<td>あるユーザーがフォローしているものの、相手はそのユーザーをフォローしていないという相手</td>
</tr>
<tr>
<td nowrap="nowrap">差集合２：Followers - Friends</td>
<td>Carol</td>
<td>あるユーザーをフォローしているものの、ユーザーの方からはフォローしていない相手</td>
</tr>
</tbody>
</table>
<p>というような情報が得られるわけですね。これらが、記事の最初に書いたこの章で取り扱おうとしていた情報そのもの（の一部）であることがわかると思います。</p>
<p>そしてこの本では、pythonの（リストではなく）set型を用いてソース内で集合を取り扱っています。</p>
<h3>4.2.4 フォローしている／されている関係を測るマシン</h3>
<p>この節の例4-4は、先の例4-2のソースに対して取得したデータをRedisに格納し、そこから上のような集合演算をして結果を表示するものです。これを実行すると、</p>
<pre style="background-color:#eeeeee;">HOSONO_Junya is following 833
HOSONO_Junya is being followed by 612
548 of 833 are not following HOSONO_Junya back
327 of 612 are not being followed back by HOSONO_Junya
HOSONO_Junya has 285 mutual friends</pre>
<p>と表示されました。上から、フォロー数(Friends)、フォロワー数(Followers)、フォロー返ししてくれていない数（上の表での差集合１）、フォロー返ししていない数（差集合２）、相互フォロー数（積集合）となります。激しくフォロー返しされて<strong>いない</strong>のがわかりますね…orz</p>
<p>なお、この例4-4のソースを理解する上でキーとなるのは、</p>
<ul>
<li>"functools.partial" というのが何をしているのか</li>
<li>Redisに格納されるデータがどんな感じか</li>
</ul>
<p>ということでしょう。</p>
<p>まず"functools.partial"ですが、うーん、これは正直自分でも正確に理解できているかどうかわかりませんが、ざっくり言うと「特定の関数を一部分だけ修正して新しい関数を作り出している」ということでしょう。専門用語では「部分適用」というらしいです。それをこの本では「ラッパー」という言葉で表現している、と。そしてここでは、</p>
<ul>
<li>元の関数＝_getFriendsOrFollowersUsingFunc (twitter__utilライブラリ内)</li>
<li>それを元に新しく作られる関数＝getFriends と getFollowers</li>
</ul>
<p>がそれに該当します。要は、関数が２つほしいけど中でやってることはほとんど同じだからその部分だけ先に作って最後に呼び出し部分を変えるだけで対応しようぜ（コード再利用のためにね）、ということでしょうかね。</p>
<p>このfunctools自体に関しては、以下のページなどを精読すると理解が深まるかもしれません。</p>
<ul>
<li><a href="http://www.doughellmann.com/PyMOTW-ja/functools/index.html">functools – 関数を巧みに操作するためのツール</a></li>
<li><a href="http://www.python.jp/doc/2.6/library/functools.html#module-functools">9.8. functools — 高階関数と呼び出し可能オブジェクトの操作</a></li>
</ul>
<p>はっきり言ってこの部分を正確に理解すること自体は、「この本のこの章を読み進めていく」という目的においてはそんなに重要ではないと思います。「へー、そんなこともできるだね」程度でいいと思います。本筋とは関係のない箇所でつまずいてそこで止まってしまうのはもったいないですから。もちろん、理解できることに越したことはありませんが。</p>
<p>どうも、CやJavaといった一般的な「手続き型プログラミング言語」を経験した人がpythonをやる上でとっつきづらく思える部分に、こうした「関数型プログラミング言語」的な要素がそこかしこに出てくるからなのかもしれません。リスト内包表記しかり、lambda式しかり、そしてこのfunctoolsしかり。以下のページにそのあたりのことがちょっと書かれていました。</p>
<ul>
<li><a href="http://www.ibm.com/developerworks/jp/linux/library/l-prog/">魅力的なPython: Pythonでの関数プログラミング: 第1回</a></li>
<li><a href="http://jutememo.blogspot.com/2008/12/python-functools-itertools-1-haskell.html">Python における関数型プログラミング のための functools, itertools (1) – Haskell と同じ名前の関数たち</a></li>
</ul>
<p>閑話休題。つぎは、Redisに格納されるデータがどんな感じか、ですね。これは、ソースの最後に以下のようなprint文を入れて実行すればわかりますね。</p>
<pre style="background-color:#eeeeee;">print r.smembers(getRedisIdByScreenName(screen_name,'friend_ids'))</pre>
<p>また、getRedisIdByScreenName関数の中身などから、Redis内には、上で作った２つの関数を実行することで、</p>
<ul>
<li>キー："screen_name$(引数で指定したscreen_name)$friend_ids"</li>
<li>値：set([(フォローしている人たちのuser_id)])</li>
</ul>
<p>と、</p>
<ul>
<li>キー："screen_name$(引数で指定したscreen_name)$follower_ids"</li>
<li>値：set([(フォロワーたちのuser_id)])</li>
</ul>
<p>という２つのデータが格納されます。Redisのクライアントのkeysコマンドなどからも確認できるでしょう。そして、次にこの２つのデータの値に対してRedisの機能である集合演算をかけている、というわけですね。</p>
<p>そして、これまでは取得するデータはたいていuser_idの集合のみでしたが、次の例4-5では、特定のuser_idのtwitterアカウント自体の各種ユーザー情報を取得しています。これもgithubからソース（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__get_user_info.py">friends_followers__get_user_info.py</a>）をコピペしてくるだけで実行できます。結果はJSON形式になります。これを実行すると、</p>
<ul>
<li>キー："screen_name$(引数で指定したscreen_name)$info.json"</li>
<li>値：引数で指定したscreen_nameのユーザー情報（JSON形式）</li>
</ul>
<div>と、</div>
<div>
<ul>
<li>キー："user_id$(引数で指定したscreen_nameに該当するuser_id)$info.json"</li>
<li>値：引数で指定したscreen_nameのユーザー情報（JSON形式）</li>
</ul>
</div>
<p>いう２つのデータがRedis内に作られます。これは、あとからscreen_nameとuser_idのどちらからでも素早くユーザー情報を取得できるようにするため、でしょうね。</p>
<h3>4.2.5 共通してフォローしている／されているユーザーからの類似度の計算</h3>
<p>この節では、複数名のユーザーを指定して、その人たちが共通してフォローしている人たち／共通してフォローされている人たち、を見つけます。異なるユーザーのフォロー／フォロワー間で集合関数を使うことで見つけることになります。</p>
<p>これまでどおり例4-7（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__friends_followers_in_common.py">friends_followers__friends_followers_in_common.py</a>）をコピペしてくるわけですが、その実行の際には、対象とするユーザーのフォロー／フォロワーのデータをあらかじめRedis内に入れておかなければなりません。具体的に言うと、例4-4を対象ユーザーで実行しておけばOKです。先ほどの部分適用して作られた関数がRedis内にデータを格納してくれますから。そうしないと、データが無いので単に0件と返ってくるだけです。</p>
<h3>4.2.6 影響力の計測</h3>
<p>twitterの機能のなかで特徴的なもののひとつに、リツイートがあげられます。気に入った他人のツイートを自分のフォロワーに「転送」する機能ですよね。これによって、ある特定のツイートが連鎖的にリツイートされると、短期間で爆発的に広まることになります。そしてフォロワーの多いユーザーにリツイートされると、より広く伝播されて大きな影響を生み出すことができる、というわけです。</p>
<p>この節では、そうした影響力をフォロワー数によって測ってみよう、というものです。例4-8（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__crawl.py">friends_followers__crawl.py</a>）は、ある特定のユーザーからスタートして、そのフォロー／フォロワーの情報をすべて取得＆Redisに格納し、そしてそれら一人ひとりに対してまたフォロー／フォロワーの情報をすべて取得＆Redisに格納し、そして…と、繰り返していきます。</p>
<p>なので、これを実行すると、Redis内のデータが一気に増大します。何階層まで探索するかは引数のdepthで指定できますが、僕のアカウントでdepth=1（直接のフォロー／フォロワーだけ）で実行したら、一分ほどで終了して、Redis内に2322件のデータがあらたに登録されました。</p>
<p>…うっかりdepth=10とかで実行すると、はっきり言ってどういう事態になるかわかりません。たぶんAPI制限に引っかかりながらも制限がリセットされる一時間おきにちょっとずつ進んでいって、メモリとHDDをRedisデータが喰い潰していく、という感じでしょうか。だからこそ、このソースでは一度のフォロー数などの探索での上限数を設けています。なんにせよ、ちょっと気をつけて実行しましょう。</p>
<p>しかしこのソースでは、あくまでデータを取得＆格納しただけで、影響力としてはさっぱりわかりません。そこで次の例4-9（<a href="https://github.com/ptwobrussell/Mining-the-Social-Web/blob/master/python_code/friends_followers__calculate_avg_influence_of_followers.py">friends_followers__calculate_avg_influence_of_followers.py</a>）では、対象ユーザーのフォロワーのなかでフォロワー数の多いトップ１０と、全フォロワーの平均フォロワー数を計算しています。なお、このソースではPrettyTableというライブラリが指定されているので、素直にeasy_installしましょう。</p>
<p>同じく僕のアカウントで行ったところ、以下のように結果になりました。</p>
<pre style="background-color:#eeeeee;">The top 10 followers from the sample:
 +----------------+---------+
 | Date | Count |
 +----------------+---------+
 | hatoyamayukio | 608,303 |
 | shuzo_matsuoka | 258,605 |
 | 38sun3 | 250,422 |
 | ktamiya | 240,826 |
 | LIVESTRONG | 203,574 |
 | tsuda | 196,778 |
 | sasakitoshinao | 145,352 |
 | myen | 137,497 |
 | wakita_tamaki | 70,913 |
 | asao_keiichiro | 68,583 |
 +----------------+---------+
The average number of followers for HOSONO_Junya's followers: 6,856</pre>
<p>トップは鳩山由紀夫元首相か…あんまり最近見かけないようなw</p>
<h2>次回に続く。</h2>
<p>さて、長かった4.2章もこれで終わりです。ずいぶん長くなったので、続きは別エントリーにします。できれば明日中には更新します。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/468/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/468/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/468/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=468&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/02/06/%e3%80%8e%e5%85%a5%e9%96%80%e3%82%bd%e3%83%bc%e3%82%b7%e3%83%a3%e3%83%ab%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8f%e7%ac%ac4%e7%ab%a0%e3%82%92%e8%aa%ad%e3%82%80%ef%bc%881%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>

		<media:content url="http://ecx.images-amazon.com/images/I/513gAGruDDL._SS200_.jpg" medium="image">
			<media:title type="html">『入門 ソーシャルデータ』</media:title>
		</media:content>

		<media:content url="http://webforthenext.files.wordpress.com/2012/02/cap4-01.png?w=300" medium="image">
			<media:title type="html">cap4-01</media:title>
		</media:content>

		<media:content url="http://webforthenext.files.wordpress.com/2012/02/cap4-02.png?w=300" medium="image">
			<media:title type="html">cap4-02</media:title>
		</media:content>

		<media:content url="http://webforthenext.files.wordpress.com/2012/02/cap4-03.png?w=300" medium="image">
			<media:title type="html">cap4-03</media:title>
		</media:content>

		<media:content url="http://webforthenext.files.wordpress.com/2012/02/cap4-04.png?w=300" medium="image">
			<media:title type="html">cap4-04</media:title>
		</media:content>
	</item>
		<item>
		<title>Jリーグは今オフ怒涛の移籍ラッシュ！これをGraphvizで可視化してみました</title>
		<link>http://webforthenext.wordpress.com/2012/01/15/j%e3%83%aa%e3%83%bc%e3%82%b0%e3%81%af%e4%bb%8a%e3%82%aa%e3%83%95%e6%80%92%e6%b6%9b%e3%81%ae%e7%a7%bb%e7%b1%8d%e3%83%a9%e3%83%83%e3%82%b7%e3%83%a5%ef%bc%81%e3%81%93%e3%82%8c%e3%82%92graphviz%e3%81%a7/</link>
		<comments>http://webforthenext.wordpress.com/2012/01/15/j%e3%83%aa%e3%83%bc%e3%82%b0%e3%81%af%e4%bb%8a%e3%82%aa%e3%83%95%e6%80%92%e6%b6%9b%e3%81%ae%e7%a7%bb%e7%b1%8d%e3%83%a9%e3%83%83%e3%82%b7%e3%83%a5%ef%bc%81%e3%81%93%e3%82%8c%e3%82%92graphviz%e3%81%a7/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 13:58:46 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[集合知/ソーシャルデータ関連]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=448</guid>
		<description><![CDATA[最近読んでいる本『入門ソーシャルデータ』で、フローチャートやグラフ理論（ノードとエッジの集合）を表現するためのDOT言語と、これを入力にして可視化画像を生成できるツールGraphvizを知りました。 例えばこんな入力から、 strict digraph { "ノード1" -&#62; "ノード2" [label="エッジA"]; "ノード2" -&#62; "ノード3" [label="エッジB"]; "ノード2" -&#62; "ノード4" [label="エッジC"]; } こんな感じの絵が描けます。 「…あれ、これって何かに使えるような…」と考えて、「そうだ、これを使ってJリーグの選手の今オフの移籍情報を可視化してみると面白いかも！」と思いつきました。 幸い、世の中にはJリーグやJFLの選手の移籍情報を蓄積してくれている「ら」情報というものがありまして、こちらのサイトで最新情報をまとめてくれています。 上記のサイトのデータ（1/14時点）をもとに、各クラブを「ノード」に、クラブ間を移籍する選手を「エッジ 」としてDOT言語に変換してみたデータを可視化してみました（赤線＝現役日本代表、青線＝大学生、緑線＝ユース／高校生）。それが下の画像です！ （生成パラメータ：layout=fdp,splines=true,overlap=false, sep=30） どうですか？　この画像から以下のようなことがわかってきます。 まず、想像以上に大量の線が描かれました。この線一本一本がひとりの選手の移籍になります（同じチームから同じチームに複数人移籍した場合も今は一本にしてあります）。そう考えてみると、いかに今オフの移籍が多いかがわかります。 最も矢印の行き来が多いのはJ1&#60;&#8211;&#62;J2ですが、J2-&#62;JFLも結構多いのが見て取れます。活躍の舞台をJ2からJFLに移す選手が多い、ということですね。 1/14時点においても、矢印の行き先が「未定」の選手が多いこともわかります…。 現役の日本代表選手の移籍はあまりないこと（槙野選手、今野選手、ハーフナー・マイク選手、李忠成選手くらい？見落としてたらすみません）。 大学生や高校生、ユースからJリーグやJFLにやってくる選手が予想よりも多かったです。また、今オフは韓国の大学からの加入も想像以上に多いですね。兵役の問題はどうするのかなぁ？ うーん、やっぱり我ながらもっと見やすくしたいですね…。そもそも僕自身がGraphvizの扱いにまだ慣れていないので、「こういうデータなら、こうすればもっときれいに可視化できるよ」という方法をご存知の方はぜひ教えてください。そうすれば、もっとたくさんのことがわかってくると思います。後日、元データのDOTファイルも公開したいと思います。それと、今回は手作業で一気に変換した（半日かかりました…）のですが、やっぱりスクレイピングでやりたいですね。 また、各クラブの塗り色ですが、「だいたいこんな感じかな〜」という程度で塗っていますので、もし変なようであればこちらのページの色情報を参考にして「この色にしてほしい」ということをtwitterの@HOSONO_Junya宛かこの記事のコメントでお知らせください。JFLクラブのファン・サポーターの方もぜひお願いします。 Jリーグ&#38;JFLのファン•サポーターにとって、この時期は自分の応援しているクラブの移籍情報に一喜一憂しますよね（僕もそのうちの一人です）。そのときに、こんなデータもちょっと参考にしてみてくれると嬉しいです。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=448&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>最近読んでいる本<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873115132/-22/ref=nosim/" rel="nofollow" target="_blank">『入門ソーシャルデータ』</a>で、フローチャートやグラフ理論（ノードとエッジの集合）を表現するためのDOT言語と、これを入力にして可視化画像を生成できるツール<a href="http://graphviz.org/">Graphviz</a>を知りました。</p>
<p>例えばこんな入力から、</p>
<pre><code> strict digraph {
    "ノード1" -&gt; "ノード2" [label="エッジA"]; 
    "ノード2" -&gt; "ノード3" [label="エッジB"]; 
    "ノード2" -&gt; "ノード4" [label="エッジC"];
 }

</code></pre>
<p>こんな感じの絵が描けます。</p>
<p><a href="http://webforthenext.files.wordpress.com/2012/01/sample-dot.png"><img class="aligncenter size-medium wp-image-457" title="sample.dot" src="http://webforthenext.files.wordpress.com/2012/01/sample-dot.png?w=300&h=266" alt="" width="300" height="266" /></a></p>
<p>「…あれ、これって何かに使えるような…」と考えて、「そうだ、これを使ってJリーグの選手の今オフの移籍情報を可視化してみると面白いかも！」と思いつきました。</p>
<p><span id="more-448"></span></p>
<p>幸い、世の中にはJリーグやJFLの選手の移籍情報を蓄積してくれている「ら」情報というものがありまして、<a href="http://www.kobaton.net/ra/">こちらのサイト</a>で最新情報をまとめてくれています。</p>
<p>上記のサイトのデータ（1/14時点）をもとに、各クラブを「ノード」に、クラブ間を移籍する選手を「エッジ 」としてDOT言語に変換してみたデータを可視化してみました（赤線＝現役日本代表、青線＝大学生、緑線＝ユース／高校生）。それが下の画像です！</p>
<p><a href="http://webforthenext.files.wordpress.com/2012/01/j-league2011-2012-dot.png"><img class="aligncenter size-medium wp-image-451" title="j-league2011-2012.dot" src="http://webforthenext.files.wordpress.com/2012/01/j-league2011-2012-dot.png?w=300&h=200" alt="" width="300" height="200" /></a>（生成パラメータ：layout=fdp,splines=true,overlap=false, sep=30）</p>
<p>どうですか？　この画像から以下のようなことがわかってきます。</p>
<ol>
<li>まず、想像以上に大量の線が描かれました。この線一本一本がひとりの選手の移籍になります（同じチームから同じチームに複数人移籍した場合も今は一本にしてあります）。そう考えてみると、いかに今オフの移籍が多いかがわかります。</li>
<li>最も矢印の行き来が多いのはJ1&lt;&#8211;&gt;J2ですが、J2-&gt;JFLも結構多いのが見て取れます。活躍の舞台をJ2からJFLに移す選手が多い、ということですね。</li>
<li>1/14時点においても、矢印の行き先が「未定」の選手が多いこともわかります…。</li>
<li>現役の日本代表選手の移籍はあまりないこと（槙野選手、今野選手、ハーフナー・マイク選手、李忠成選手くらい？見落としてたらすみません）。</li>
<li>大学生や高校生、ユースからJリーグやJFLにやってくる選手が予想よりも多かったです。また、今オフは韓国の大学からの加入も想像以上に多いですね。兵役の問題はどうするのかなぁ？</li>
</ol>
<p>うーん、やっぱり我ながら<strong>もっと見やすくしたい</strong>ですね…。そもそも僕自身がGraphvizの扱いにまだ慣れていないので、「こういうデータなら、こうすればもっときれいに可視化できるよ」という方法をご存知の方はぜひ教えてください。そうすれば、もっとたくさんのことがわかってくると思います。後日、元データのDOTファイルも公開したいと思います。それと、今回は手作業で一気に変換した（半日かかりました…）のですが、やっぱりスクレイピングでやりたいですね。</p>
<p>また、各クラブの塗り色ですが、「だいたいこんな感じかな〜」という程度で塗っていますので、もし変なようであれば<a href="http://graphviz.org/content/color-names">こちらのページ</a>の色情報を参考にして「この色にしてほしい」ということを<a href="https://twitter.com/hosono_junya">twitterの@HOSONO_Junya</a>宛かこの記事のコメントでお知らせください。JFLクラブのファン・サポーターの方もぜひお願いします。</p>
<p>Jリーグ&amp;JFLのファン•サポーターにとって、この時期は自分の応援しているクラブの移籍情報に一喜一憂しますよね（僕もそのうちの一人です）。そのときに、こんなデータもちょっと参考にしてみてくれると嬉しいです。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/448/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/448/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/448/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=448&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/01/15/j%e3%83%aa%e3%83%bc%e3%82%b0%e3%81%af%e4%bb%8a%e3%82%aa%e3%83%95%e6%80%92%e6%b6%9b%e3%81%ae%e7%a7%bb%e7%b1%8d%e3%83%a9%e3%83%83%e3%82%b7%e3%83%a5%ef%bc%81%e3%81%93%e3%82%8c%e3%82%92graphviz%e3%81%a7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>

		<media:content url="http://webforthenext.files.wordpress.com/2012/01/sample-dot.png?w=300" medium="image">
			<media:title type="html">sample.dot</media:title>
		</media:content>

		<media:content url="http://webforthenext.files.wordpress.com/2012/01/j-league2011-2012-dot.png?w=300" medium="image">
			<media:title type="html">j-league2011-2012.dot</media:title>
		</media:content>
	</item>
		<item>
		<title>OSXでのpythonのバージョン切り替え(eclipseでも)</title>
		<link>http://webforthenext.wordpress.com/2012/01/14/osx%e3%81%a7%e3%81%aepython%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e5%88%87%e3%82%8a%e6%9b%bf%e3%81%88eclipse%e3%81%a7%e3%82%82/</link>
		<comments>http://webforthenext.wordpress.com/2012/01/14/osx%e3%81%a7%e3%81%aepython%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e5%88%87%e3%82%8a%e6%9b%bf%e3%81%88eclipse%e3%81%a7%e3%82%82/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 10:13:03 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[集合知/ソーシャルデータ関連]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=425</guid>
		<description><![CDATA[いま使っているOSX上には複数のバージョンのpythonが入りうるのですが、その切替をできるようにしました。GAE開発用には2.5系、それ以外のときは最新環境として2.7系を使いたいので。ただし、ちょっと前にやったことなので不完全かもしれませんが…。 いくつかのブログを見たところ、「python_selectを使え」的な記述をよく見かけますが、どうやらこれは古い情報のようで、「python_selectは死んだ」なんて記事もありました。どうやらMacPortsの仕様変更とのこと。 なので、まずはMacPorts自体をアップデート。 sudo port selfupdate sudo port sync で、現在切り替えられるpythonを確認するために port select --list python とすると、 Available versions for python: none python25 python25-apple python26-apple python27-apple (active) なような表示がでてきます。現在activeなのは2.7、ということですね。バージョンを切り替えるには、 sudo port select --set python python25 で切り替わります。 Available versions for python: none python25 (active) python25-apple python26-apple python27-apple これで出来ました。 また、ライブラリを読み込みeasy_installも、おそらくコマンド実行時にactiveなバージョンのpythonでのみ使えるようにインストールされるものと思われます。easy_installでインストールすると、 /Library/Python/(バージョン)/site-packages/ 配下に格納されるようです。 eclipseでも切り替えらえるように GAEの開発にはeclipseを使っていますが、python2.7系を使う時にもeclipseが使えると便利ですよね。 それには、Preferences の画面から PyDev の Interpreter &#8211; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=425&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>いま使っているOSX上には複数のバージョンのpythonが入りうるのですが、その切替をできるようにしました。GAE開発用には2.5系、それ以外のときは最新環境として2.7系を使いたいので。ただし、ちょっと前にやったことなので不完全かもしれませんが…。</p>
<p>いくつかのブログを見たところ、「python_selectを使え」的な記述をよく見かけますが、どうやらこれは古い情報のようで、「<a href="http://d.hatena.ne.jp/inouetakuya/20110728/1311852834" target="_blank">python_selectは死んだ</a>」なんて記事もありました。どうやらMacPortsの仕様変更とのこと。</p>
<p>なので、まずはMacPorts自体をアップデート。</p>
<pre><code>sudo port selfupdate
sudo port sync

</code></pre>
<p>で、現在切り替えられるpythonを確認するために</p>
<pre><code> port select --list python 

</code></pre>
<p>とすると、</p>
<pre><code>Available versions for python: 
none 
python25 
python25-apple 
python26-apple 
python27-apple (active) 

</code></pre>
<p>なような表示がでてきます。現在activeなのは2.7、ということですね。バージョンを切り替えるには、</p>
<pre><code>sudo port select --set python python25

</code></pre>
<p>で切り替わります。</p>
<pre><code>Available versions for python: 
none 
python25 (active) 
python25-apple 
python26-apple 
python27-apple 

</code></pre>
<p>これで出来ました。</p>
<p>また、ライブラリを読み込みeasy_installも、おそらくコマンド実行時にactiveなバージョンのpythonでのみ使えるようにインストールされるものと思われます。easy_installでインストールすると、 /Library/Python/(バージョン)/site-packages/ 配下に格納されるようです。</p>
<h2>eclipseでも切り替えらえるように</h2>
<p>GAEの開発にはeclipseを使っていますが、python2.7系を使う時にもeclipseが使えると便利ですよね。</p>
<p>それには、Preferences の画面から PyDev の Interpreter &#8211; Python を開きます。すると、現在使えるように設定されているバージョン（のインタプリタ＝実行ファイル）が表示されますので、ここに利用したいバージョンのpythonの実行ファイル（port select で切り替えておいて which pythonで所在はわかりますね）を Add してやると、該当するライブラリをPYTHONPATHとして読み込んでくれます。便利！</p>
<p>そして、該当プロジェクトの Properties の画面から PyDev &#8211; Interpreter/Grammar を開きます。そこで、Interpreter の欄に先程設定したものを指定すると、そのバージョンのpythonで実行してくれる、というわけですね。一応、Grammar Versionもあわせておいたほうがいいでしょう。</p>
<p>これで、コマンドラインからeasy_installしたライブラリをeclipseでも使えるようにもなりました。</p>
<p>とりあえずこれで切り替わってるように思えますが、もし間違ってたり「もっとこうしたほうがいいよ」ということがありましたらコメントしてもらえると助かります。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/425/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/425/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/425/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=425&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/01/14/osx%e3%81%a7%e3%81%aepython%e3%81%ae%e3%83%90%e3%83%bc%e3%82%b8%e3%83%a7%e3%83%b3%e5%88%87%e3%82%8a%e6%9b%bf%e3%81%88eclipse%e3%81%a7%e3%82%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>
	</item>
		<item>
		<title>OSX上でGAE/Python/Djangoを使ってのtwitterbotの開発環境メモ</title>
		<link>http://webforthenext.wordpress.com/2012/01/14/osx%e4%b8%8a%e3%81%a7gaepythondjango%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%aetwitterbot%e3%81%ae%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e3%83%a1%e3%83%a2/</link>
		<comments>http://webforthenext.wordpress.com/2012/01/14/osx%e4%b8%8a%e3%81%a7gaepythondjango%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%aetwitterbot%e3%81%ae%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e3%83%a1%e3%83%a2/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 09:37:49 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[twitterbot]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[GoogleAppEngine]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=381</guid>
		<description><![CDATA[さて、現在GoogleAppEngine(GAE)を使ってtwitterbotを作ってます。自分にとっては最初のwebサービス(?)。その現時点(2012年1月)での開発環境をメモしておきます。 マシン：MacbookPro 15-inch, Early 2011 OS：OS X Lion 10.7.2 IDE：Eclipse Helios SR2 追加インストールしたもの：PyDev for Eclipse, Google Plugin for Eclipse 3.6 開発言語：python 2.5.6 Lion上だとデフォルトは2.7系だったので、GAE開発のためにmacportsで入れなおした記憶があります。 SDK：GoogleAppEngine SDK 1.6.1 利用するウェブアプリケーションフレームワーク：Django 1.2.5 (SDK同梱のやつ) DjangoテンプレートではHTML5を使う予定。 といったところですね。 とにかく、自分にとって新しい技術を使って作ることでそれらを習得することも大きな目的の一つです。特にpython/Django/GAE/HTML5あたりは自分にとって全部初物です。 今後も、開発時の記録（主に技術面・設定面）などをぼちぼち更新していきたいと思います。botの公開目標は一応3月中旬なのですが…できるのか俺？<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=381&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>さて、現在GoogleAppEngine(GAE)を使ってtwitterbotを作ってます。自分にとっては最初のwebサービス(?)。その現時点(2012年1月)での開発環境をメモしておきます。</p>
<ul>
<li>マシン：MacbookPro 15-inch, Early 2011</li>
<li>OS：OS X Lion 10.7.2</li>
<li>IDE：Eclipse Helios SR2
<ul>
<li>追加インストールしたもの：PyDev for Eclipse, Google Plugin for Eclipse 3.6</li>
</ul>
</li>
<li>開発言語：python 2.5.6
<ul>
<li>Lion上だとデフォルトは2.7系だったので、GAE開発のためにmacportsで入れなおした記憶があります。</li>
</ul>
</li>
<li>SDK：GoogleAppEngine SDK 1.6.1</li>
<li>利用するウェブアプリケーションフレームワーク：Django 1.2.5 (SDK同梱のやつ)</li>
<li>DjangoテンプレートではHTML5を使う予定。</li>
</ul>
<p>といったところですね。</p>
<p>とにかく、自分にとって新しい技術を使って作ることでそれらを習得することも大きな目的の一つです。特にpython/Django/GAE/HTML5あたりは自分にとって全部初物です。</p>
<p>今後も、開発時の記録（主に技術面・設定面）などをぼちぼち更新していきたいと思います。botの公開目標は一応3月中旬なのですが…できるのか俺？</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/381/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/381/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/381/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=381&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/01/14/osx%e4%b8%8a%e3%81%a7gaepythondjango%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%aetwitterbot%e3%81%ae%e9%96%8b%e7%99%ba%e7%92%b0%e5%a2%83%e3%83%a1%e3%83%a2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>
	</item>
		<item>
		<title>『集合知プログラミング』の勉強会に行きました＋α</title>
		<link>http://webforthenext.wordpress.com/2012/01/09/%e3%80%8e%e9%9b%86%e5%90%88%e7%9f%a5%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%8f%e3%81%ae%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%81%ab%e8%a1%8c%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/</link>
		<comments>http://webforthenext.wordpress.com/2012/01/09/%e3%80%8e%e9%9b%86%e5%90%88%e7%9f%a5%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%8f%e3%81%ae%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%81%ab%e8%a1%8c%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 09:38:15 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[集合知/ソーシャルデータ関連]]></category>
		<category><![CDATA[集合知]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=371</guid>
		<description><![CDATA[『集合知プログラミング』ってなんだ 昨年の12月15日、atndさんで見つけた、以下の勉強会に出てきました。 第13回「集合知プログラミング」真面目に勉強する会 @外苑前 きっかけは、「自分が働いているNGOの支援者データベースに蓄積された情報から、より有意義な情報を見つけるためにどうすればいいか」と考えていたことでした。「それには、いま現在自分が持っている知識とは全く別の視点が必要ではないのか？」と思っていたこともあります。「もしかしてそれが集合知なのかも」ということですね。 とはいっても、この勉強会は一冊の本『集合知プログラミング』を参加者で輪読していく連続もので、しかもこの回が最終回。ということで、それでも参加OKなのか主催者のひとりであるKshi_Kshiさんにtwitterで問い合わせたところ、快諾をいただきましたので参加してきました。当日の朝に買った本を持って（汗）。 勉強会では、簡単な自己紹介のあとに、Kshi_KshiさんがLDA(Latent Dirichlet Allocation)の紹介をされてました。これまでの回のフォロー、といった位置づけだったようです。が、いきなりで正直よくわからなかったです…。参考となるスライドを紹介されたましたのでそちらを参考にしてください。 LDA入門 View more presentations from tsubosaka その後は、最終回ということもあってか、自習の時間が長く取られており、参加者それぞれが自分で設定した目的のために黙々と作業する、というスタイルでした。 自分では、とりあえずその日の朝に買ったばかりの本を読んで、集合知を扱う際には教師あり学習と教師あり学習とがあること、自分の目的から言えば教師なし学習があっていること、本の目次から言えば、 3章　グループを見つけ出す 10章　特徴を発見する が該当するのでしょうか。そして、実際のデータを思い浮かべて、それが何に使えるかを考えることに時間を費やしました。でも、やっぱりちょっとは手を動かしつつ実際のデータを使ってみて感覚をつかみたいところでしたが、当日はそこまでたどり着きませんでした。 自習時間の後に、各自なにをやっていたかを共有して終了しました。本を読み進める人、ひたすら動くものを作る人などさまざま、けっこう自由な感じですね。 とにかく、当日勉強会に参加された皆様、（今更ですが…）お疲れ様でした。大変刺激になりました。かなーり畑違いな人間を受け入れてくださってありがとうございました。 なお、この勉強会の参加者を中心としたGoogleグループもあるので、興味のある方は登録してみてください。過去の勉強会のときのプレゼン資料も共有されていますよ。 Googleグループ：集合知の会 次回、『入門ソーシャルデータ』に続く なお、この勉強会はこの回で終わり。次からは、『集合知プログラミング』の続編と位置づけられているらしい『入門 ソーシャルデータ』をまた輪読形式で進めていくとのことで、そちらにも参加する予定です。 第1回「入門 ソーシャルデータ」真面目に勉強する会 @外苑前 ただし、こちらの本はタイトル通り、現在広く利用されているソーシャルサービス（TwitterやFaceboo、LinkedInなど）データのデータを取り扱うものなので、自分の当初の目的とはちょっと離れるかもしれません。でも、個人的にtwitterbotを作っている最中ですし、なによりも「約2時間集中せざるをえない空間」というのが新鮮だったので、今後もなるべく参加していきたいと思います。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=371&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>『集合知プログラミング』ってなんだ</h2>
<p>昨年の12月15日、atndさんで見つけた、以下の勉強会に出てきました。</p>
<p><a title="第13回「集合知プログラミング」真面目に勉強する会 @外苑前" href="http://atnd.org/events/23196" target="_blank">第13回「集合知プログラミング」真面目に勉強する会 @外苑前</a></p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113644/webfornext-22/ref=nosim/" rel="nofollow" target="_blank"><img class="alignright" style="border:none;" src="http://ecx.images-amazon.com/images/I/51FgSThMzVL._SS200_.jpg" alt="集合知プログラミング" /></a></p>
<p>きっかけは、「<a href="http://www.ngo-jvc.net/" target="_blank">自分が働いているNGO</a>の支援者データベースに蓄積された情報から、より有意義な情報を見つけるためにどうすればいいか」と考えていたことでした。「それには、いま現在自分が持っている知識とは全く別の視点が必要ではないのか？」と思っていたこともあります。「もしかしてそれが集合知なのかも」ということですね。</p>
<p>とはいっても、この勉強会は一冊の本<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873113644/webfornext-22/ref=nosim/" rel="nofollow">『集合知プログラミング』</a>を参加者で輪読していく連続もので、しかもこの回が最終回。ということで、それでも参加OKなのか主催者のひとりである<a href="https://twitter.com/kshi_kshi" target="_blank">Kshi_Kshiさん</a>にtwitterで問い合わせたところ、快諾をいただきましたので参加してきました。当日の朝に買った本を持って（汗）。</p>
<p><span id="more-371"></span>勉強会では、簡単な自己紹介のあとに、Kshi_Kshiさんが<a href="http://en.wikipedia.org/wiki/Latent_Dirichlet_allocation" target="_blank">LDA(Latent Dirichlet Allocation)</a>の紹介をされてました。これまでの回のフォロー、といった位置づけだったようです。が、いきなりで正直よくわからなかったです…。参考となるスライドを紹介されたましたのでそちらを参考にしてください。</p>
<div id="__ss_5284594" style="width:425px;">
<p><strong><a title="LDA入門" href="http://www.slideshare.net/tsubosaka/tokyotextmining" target="_blank">LDA入門</a></strong><iframe src='http://www.slideshare.net/slideshow/embed_code/5284594' width='425' height='348' scrolling='no'></iframe></p>
<div style="padding:5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/tsubosaka" target="_blank">tsubosaka</a></div>
</div>
<p>その後は、最終回ということもあってか、自習の時間が長く取られており、参加者それぞれが自分で設定した目的のために黙々と作業する、というスタイルでした。</p>
<p>自分では、とりあえずその日の朝に買ったばかりの本を読んで、集合知を扱う際には教師あり学習と教師あり学習とがあること、自分の目的から言えば教師なし学習があっていること、本の目次から言えば、</p>
<ul>
<li>3章　グループを見つけ出す</li>
<li>10章　特徴を発見する</li>
</ul>
<p>が該当するのでしょうか。そして、実際のデータを思い浮かべて、それが何に使えるかを考えることに時間を費やしました。でも、やっぱりちょっとは手を動かしつつ実際のデータを使ってみて感覚をつかみたいところでしたが、当日はそこまでたどり着きませんでした。</p>
<p>自習時間の後に、各自なにをやっていたかを共有して終了しました。本を読み進める人、ひたすら動くものを作る人などさまざま、けっこう自由な感じですね。</p>
<p>とにかく、当日勉強会に参加された皆様、（今更ですが…）お疲れ様でした。大変刺激になりました。かなーり畑違いな人間を受け入れてくださってありがとうございました。</p>
<p>なお、この勉強会の参加者を中心としたGoogleグループもあるので、興味のある方は登録してみてください。過去の勉強会のときのプレゼン資料も共有されていますよ。</p>
<p><a href="https://groups.google.com/group/StudyGroup_CI" target="_blank">Googleグループ：集合知の会</a></p>
<h2>次回、『入門ソーシャルデータ』に続く</h2>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873115132/-22/ref=nosim/" rel="nofollow" target="_blank"><img class="alignright" style="border:none;" src="http://ecx.images-amazon.com/images/I/513gAGruDDL._SS200_.jpg" alt="『入門 ソーシャルデータ』" /></a></p>
<p>なお、この勉強会はこの回で終わり。次からは、『集合知プログラミング』の続編と位置づけられているらしい<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4873115132/-22/ref=nosim/" rel="nofollow" target="_blank">『入門 ソーシャルデータ』</a>をまた輪読形式で進めていくとのことで、そちらにも参加する予定です。</p>
<p><a href="http://atnd.org/events/23451" target="_blank">第1回「入門 ソーシャルデータ」真面目に勉強する会 @外苑前</a></p>
<p>ただし、こちらの本はタイトル通り、現在広く利用されているソーシャルサービス（TwitterやFaceboo、LinkedInなど）データのデータを取り扱うものなので、自分の当初の目的とはちょっと離れるかもしれません。でも、個人的にtwitterbotを作っている最中ですし、なによりも「約2時間集中せざるをえない空間」というのが新鮮だったので、今後もなるべく参加していきたいと思います。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/371/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/371/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/371/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=371&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2012/01/09/%e3%80%8e%e9%9b%86%e5%90%88%e7%9f%a5%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9f%e3%83%b3%e3%82%b0%e3%80%8f%e3%81%ae%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%81%ab%e8%a1%8c%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>

		<media:content url="http://ecx.images-amazon.com/images/I/51FgSThMzVL._SS200_.jpg" medium="image">
			<media:title type="html">集合知プログラミング</media:title>
		</media:content>

		<media:content url="http://ecx.images-amazon.com/images/I/513gAGruDDL._SS200_.jpg" medium="image">
			<media:title type="html">『入門 ソーシャルデータ』</media:title>
		</media:content>
	</item>
		<item>
		<title>そろそろ再開。</title>
		<link>http://webforthenext.wordpress.com/2011/07/17/%e3%81%9d%e3%82%8d%e3%81%9d%e3%82%8d%e5%86%8d%e9%96%8b%e3%80%82/</link>
		<comments>http://webforthenext.wordpress.com/2011/07/17/%e3%81%9d%e3%82%8d%e3%81%9d%e3%82%8d%e5%86%8d%e9%96%8b%e3%80%82/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 01:29:46 +0000</pubDate>
		<dc:creator>HOSONO Junya</dc:creator>
				<category><![CDATA[GAEでウェブサービスをつくる]]></category>

		<guid isPermaLink="false">http://webforthenext.wordpress.com/?p=213</guid>
		<description><![CDATA[ずいぶんご無沙汰しましたが、またぼちぼちブログを更新していきたいと思います。 以前別ブログでもやっていましたが、ウェブサービスの作成過程の記録を残していこうと思います。コードネームはSK。サッカーに関するものです。それ専用のカテゴリも作りましたのでそちらでどうぞ。 開発環境は、先日買ったmacbookpro上でつくっていきます。バックエンドはGoogle App Engine。もういい加減使えるようにならないと。言語はpython。いつのまにかGAEでdjangoの1.2が使えるようになっていたので、これも使います。 さて、こんどこそ一年以内で公開にこぎつけたいと思います。<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=213&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>ずいぶんご無沙汰しましたが、またぼちぼちブログを更新していきたいと思います。</p>
<p>以前別ブログでもやっていましたが、ウェブサービスの作成過程の記録を残していこうと思います。コードネームはSK。サッカーに関するものです。<a href="http://webforthenext.wordpress.com/category/gae%E3%81%A7%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E3%81%A4%E3%81%8F%E3%82%8B/">それ専用のカテゴリも作りました</a>のでそちらでどうぞ。</p>
<p>開発環境は、先日買ったmacbookpro上でつくっていきます。バックエンドはGoogle App Engine。もういい加減使えるようにならないと。言語はpython。いつのまにかGAEでdjangoの1.2が使えるようになっていたので、これも使います。</p>
<p>さて、こんどこそ一年以内で公開にこぎつけたいと思います。</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/webforthenext.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/webforthenext.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/webforthenext.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/webforthenext.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/webforthenext.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/webforthenext.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/webforthenext.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/webforthenext.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/webforthenext.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/webforthenext.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/webforthenext.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/webforthenext.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/webforthenext.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/webforthenext.wordpress.com/213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=webforthenext.wordpress.com&#038;blog=19842015&#038;post=213&#038;subd=webforthenext&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://webforthenext.wordpress.com/2011/07/17/%e3%81%9d%e3%82%8d%e3%81%9d%e3%82%8d%e5%86%8d%e9%96%8b%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00d4d67e91a86d421eff95045895b4ce?s=96&amp;d=identicon&amp;r=G" medium="image">
			<media:title type="html">hosonojunya</media:title>
		</media:content>
	</item>
	</channel>
</rss>

