スリーピー・ホローの伝説

ハドソン河の河幅がひろがり、むかしオランダ人の航海者がタッパン・ジーと名づけていたところでは、彼らは用心していつでも帆をちぢめ、航海者の守り、聖ニコラスに加護をねがいながら、横断したものだ。そこの東側の岸にくいこんでいる広い入江の奥に、小さな市場か田舎の港といったような町があり、ある人たちはグリーンズバラと呼んでいるが、本来はタリー・タウン(ぶらつき町)という名が正しく、また普通にはその名で知られている。聞くところによれば、この名は、そのむかしこの近隣の女房たちがつけたもので、市場のひらかれる日に亭主連が村の居酒屋のあたりをぶらついてはなれない頑固な癖があったからだという。それはともかくとして、わたしはこの事実の真偽のほどはうけあわない。ただ一応そのことを述べて、正確と厳正を期そうというわけである。この村からさほど遠くない、おそらく二マイルほどはなれた高い丘に、小さな渓谷、というよりはむしろ窪地くぼちというべきところがあるが、そこは世の中でいちばん静かな場所である。小川が滑るように流れそのせせらぎは人を眠りにいざない、ときたま鶉うずらが鳴いたり、啄木鳥きつつきの木を叩たたく音が聞えるが、あたりに漲みなぎる静寂を破る響はそれくらいのものだ。

立花隆 『宇宙からの帰還』

chinneng's blog: 理解不能 - 書評 - 宇宙からの帰還

高校時代は今に比べて結構本を読んでいたのですが、
そのなかでも自分にとってはかなり思い入れのある本。

買ったのは確か阪急石橋駅前のちっちゃい本屋で、
一晩で読み終わって当時仲の良かった友達にこれ絶対凄いから、読め!といって渡した覚えがあります。
回し読みしたあとは、ふたりして宇宙やべー超いきてーってなってました。

僕は文系だったのでとりあえず大学は人文学系の勉強をして、
いずれ心理学者や哲学者が宇宙に必要になったときに行けるようにしよう、
などとアホなことを考えていました。結局そういう道にも進まず来てしまいましたが…。
友達はその時「俺はパイロットになる、それがダメならレーサーになるわ(何故?)」と言っていたのですが、
大学で別れてしばらく会わないうちに、いつのまにかANAパイロット(まだ候補生だけど)になっていました。
(ちなみに大学ではグライダー部だったそう)

このあいだ数年ぶりに再開したときにこの話をしたら、
「民間のパイロットから宇宙飛行士になった例が日本でも出たぞ、知ってるか?」
http://www.nikkeibp.co.jp/article/column/20090226/135028/
と頼もしいセリフを吐きやがってくれたので、
ヤツはいずれこの本で紹介されている宇宙飛行士たちがみた世界を実際に経験して来ることでしょう。

読めば地球における体験との、広くて深い断絶が感じられる。理解は出来ないが、何かあるということだけは分かる。

そうなんですよ、この「なにかある」という感覚が、物凄い魅力的。
その感覚だけで、人の人生を左右してしまうほどの力がこの本、というか宇宙にはあるみたいです。

帰ったら読み返してみようかな。

id:suztomo先生のpython講座 - 3回目ぐらい

モジュール

  • えらいひとがまとめてくれた便利なライブラリみたいなの

json使ってみよう

  • atndのAPIリファレンスにのっている、イベントサーチAPIのサンプルクエリをjson形式で読み込んでみる(っていうことだとおもう
googleまたはcloudに関係するイベントを検索、出力フォーマットはatom
http://api.atnd.org/events/?keyword_or=google,cloud&format=atom

/*format= のところを json にした*/

ATND API リファレンス

jsonをつかえるようにする

  • import jsonとかしてもだめだったので、json/simplejsonをつかえるようにしたい
    • easy_installというので入らなかったので、先生がtarball落としてきて使えるようにしてくれたようです

json形式で読み込む

  • 以下のようなpythonのファイル「atnd.py」を作る
#!/usr/bin/env python
import simplejson                    #simplejson をいんぽーと
 
f = open("atnd2.json")            #wgetしたクエリの出力結果を格納
x = simplejson.load(f)            #pythonで扱える形にsimplejsonで読み込む?

for i in [0,9]:
  print (x['events'][i]['title'])

ipythonでいろいろ試してみる

$ ipython atnd.py

でひらいて、いろいろしらべる。

In [1] : x

とやると、とりあえず検索クエリの結果を保存したファイルの中身がばーっとでる。
次に、

In [5] : type (x)
Out [5]: <type 'dict'>

とやると、xに格納されたデータがどんな型?なのか分かる。
この場合「dict」ということで、「辞書型(dictionary)」と分かる。

辞書は順序付けのされていない キー(key): 値(value) のペアからなり、 
キーが (辞書の中で) 一意でければならない、と考えると最もよいでしょう。

http://www.python.jp/doc/2.5/tut/node7.html#SECTION007500000000000000000
ということらしい。

In [6]: x.
x.__class__         x.__getattribute__  x.__lt__            x.__str__           x.iterkeys
x.__cmp__           x.__getitem__       x.__ne__            x.clear             x.itervalues
x.__contains__      x.__gt__            x.__new__           x.copy              x.keys
x.__delattr__       x.__hash__          x.__reduce__        x.fromkeys          x.pop
x.__delitem__       x.__init__          x.__reduce_ex__     x.get               x.popitem
x.__doc__           x.__iter__          x.__repr__          x.has_key           x.setdefault
x.__eq__            x.__le__            x.__setattr__       x.items             x.update
x.__ge__            x.__len__           x.__setitem__       x.iteritems         x.values

次に、x.とかやってtabを押して候補をだすと、xに対して呼び出せるkey?がわかるので、
それっぽいものをさがす。
ここんとこはよくわからなかったけど、とりあえず「keys」というやつをすずとも先生が選んでくれました。

で、以下のようにしてみると、以下のような感じになるんでゲソ

In [7]: x.keys()    #関数だからちゃんと()つけないとだめ
Out[7]: [u'results_returned', u'events', u'results_start', u'results_available']

ふむふむ。(←わかってない
ただ、それっぽい名前の項目がリストになってるのかなーみたいなのはなんか分かる。
とりあえず、[results_returned]を選んで取り出してみる

In [8]: x['results_returned']
Out[8]: 10

まぁなんか10件の結果が返ってきましたね、ということがわかる。*1
件数は分かったので、次に[events]を見る。

In [9]: x['events']
Out[9]: 
[{u'accepted': 38,
  u'address': u'\u672d\u5e4c\u5e02\u767d\u77f3\u533a\u6771\u672d\u5e4c5\u67611\u4e01\u76ee1\uff0d1',
  u'catch': u'\u304a\u984c\uff1a\u521d\u5fc3\u8005\u5411\u3051',
   .
   .
   .

となんかもりっと返ってくる。
ので、さっきのtypeってやつで、どんな型なのか調べてみる。

In [11]: type(x['events'])
Out[11]: <type 'list'>

すると、「list」と返ってきて、リストなんだなーとわかる。
ということは、適当な番号を指定してやれば格納されたeventsの項目をひとつ抜き出せそうですね、となる。
すずとも先生曰く、うしろに[0]とか付ければよい、とのことなので、

n [12]: x['events'][0]
Out[12]: 
{u'accepted': 38,
 u'address': u'\u672d\u5e4c\u5e02\u767d\u77f3\u533a\u6771\u672d\u5e4c5\u67611\u4e01\u76ee1\uff0d1',
 u'catch': u'\u304a\u984c\uff1a\u521d\u5fc3\u8005\u5411\u3051',
   .
   .
   .

としてみると、またもりっとかえってきた。
なので、もっかいtypeしてみる。

In [13]: type(x['events'][0])
Out[13]: <type 'dict'>

すると今度はdictときて、辞書型なのかー、ということがわかった。
先ほどと同じように、.keys()とうしろにつけてみる。

In [15]: x['events'][0].keys()
Out[15]: 
[u'owner_nickname',
 u'event_url',
 u'ended_at',
 u'description',
 u'accepted',
 u'title',
 u'event_id',
 u'lon',
 u'updated_at',
 u'owner_twitter_id',
 u'url',
 u'waiting',
 u'owner_twitter_img',
 u'address',
 u'catch',
 u'place',
 u'started_at',
 u'limit',
 u'lat',
 u'owner_id']

おお、なんか出た。
で、「title」というのを取り出してみると

In [16]: x['events'][0]['title']
Out[16]: u'Hokkaido.pm #3'

わーい、「Hokkaido.pm #3」というイベントのタイトルを見ることができた。
HIT件数は10あるらしかったので、今度はatnd.pyにfor文を足して、タイトルを全部書き出させてみる。

#!/usr/bin/env python
import simplejson
 
f = open("atnd2.json")
x = simplejson.load(f)
for i in [0,1,2,3,4,5,6,7,8,9]:
  print (x['events'][i]['title'])

で、実行結果

COTTOS:atnd htomine$ python atnd.py 
Hokkaido.pm #3
世界の注目スタートアップ勉強会
第8回 データマイニング+WEB 勉強会@東京 ( #TokyoWebmining #8) −大規模解析・ウェブ・クオンツ 祭り−
第9回 山陰ITPro勉強会
ESPer2010
第5回 やさしいPAIP読書会
9LISP - 027
Android 鍋部:キックオフ鍋会
第7回 データマイニング+WEB 勉強会@東京 (Tokyo.Webmining #7) −機械学習・解析・セマンティックウェブ祭り− 
第7回「コンピュータビジョン最先端ガイド」勉強会@関東
COTTOS:atnd htomine$ python atnd.py 
世界の注目スタートアップ勉強会

わーー。
という感じでモジュールを使ってみようだったけど、いろいろ触ってみた感じだった。
とりあえずプログラミング全然初歩があれなので、いちいち質問しています。。。
id:suztomoありがとう!

*1:Googleだかクラウドだかに関連するイベント、ということでしたね。

さくらのVPSを契約した

ちょっとレンタルサーバーを用意する必要があったので、さくらのVPSを借りてみました。
ちなみにVPSってVirtual Private Serverの略らしいよ!
バーチャル・プライベート・サーバ - Wikipedia

ちなみに

  • レンタルサーバー童貞
    • 今まで既にある環境を使うことしかなかったので、自分でサーバー借りるところから、かんたんな初期設定までしたのははじめてでした。
  • sshとか
    • 今回は、手元のMacからVPS環境にsshでログインしてもにょもにょするのに必要そうな初期設定をしました。sshの設定とかもはじめてだったので、主にそのあたりを調べながらやりました。

特に参考にしたところ

基本的に以下のサイトの記事を参考にし、分からないところは横に調べて行った感じです。
作業の順序が初心者にも分かりやすく書いてあって助かりました。

上記エントリが分かりやすいですが、振り返りのために自分用メモを書いてみました。

作業手順

  • さくらのVPS申込み
    • メールが2通届く。2通目にVPS環境のIPや、初期設定rootユーザーのアカウント情報が載っている
      • VPSコントロールパネルから、サーバーを起動しておく。
      • ここの「サーバー設定」からVPSコントロールパネルにいける
  • 手元のMacから、sshコマンドを使ってrootユーザーでログイン
    • 作業用ユーザーの作成
      • sudoコマンドでroot権限を扱えるように
  • VPS環境で作業ユーザーに公開鍵認証の設定
    • 作業用ユーザーでVPS環境にsshでログイン
    • ~/.ssh/配下に転送したid_rsa.pubファイルを、authorized_keysというファイル名に変更
      • chmod 600 しておく
  • sshd_configの設定
    • rootでのログイン(PermitRootLogin)
    • パスワード認証でのログイン(PasswordAuthentication)
      • を無効にする(”no”に設定)
      • その他色々したほうがいい設定はありそうだけど、とりあえず分かる範囲で。
    • 変更を適用する
      • /etc/init.d/sshd restart

最初はsshd_configの設定を公開鍵の作成よりも先にしてしまって、リモートでのパスワード認証による接続ができなくなって困ったり…。いくつか解説エントリを巡って、それぞれの設定の意味を理解するまでに時間がかかってしまいました。

このあとapache2を入れて、VALUE-DOMAINで取得済みのドメインのポイント先をVPS環境に設定し、ひとまずWebサーバーとして機能するところまでやりました。
WP設置してみたり,自分用のポータルにしたりとか色々したいけどまぁまた今度で。
色々やって楽しかったです。