Hatena::ブログ(Diary)

HTOMI.NET

20110809

.ftlのハイライト

FreeMarker: Java Template Engine Library - Editor/IDE plugins
からftl.vimを落としてきて~/.vim/syntax/において、(fileformatをちゃんと合わせとく)
.vimrcに

au BufRead,BufNewFile *.ftl set filetype=ftl

とする。

20110331 立花隆 『宇宙からの帰還』 このエントリーを含むブックマーク このエントリーのブックマークコメント

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

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

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

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

このあいだ数年ぶりに再開したときにこの話をしたら、
「民間のパイロットから宇宙飛行士になった例が日本でも出たぞ、知ってるか?」
10年振りの宇宙飛行士選抜はパイロット2名 独自有人飛行への布石か| nikkei BPnet 〈日経BPネット〉
と頼もしいセリフを吐きやがってくれたので、
ヤツはいずれこの本で紹介されている宇宙飛行士たちがみた世界を実際に経験して来ることでしょう。

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

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

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

20101109

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

モジュール

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

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形式で読み込む


#!/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) のペアからなり、 
キーが (辞書の中で) 一意でければならない、と考えると最もよいでしょう。

5. データ構造
ということらしい。


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ありがとう!

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

20101101

さくらのVPSを契約した


f:id:htomine:20101102142751g:image

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

ちなみに

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

参考にしたサイト

話題のサービスだけあって、たくさん事例があったので助かりました。

特に参考にしたところ

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

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

作業手順

  • さくらVPS申込み
    • メールが2通届く。2通目にVPS環境のIPや、初期設定rootユーザーのアカウント情報が載っている
      • VPSコントロールパネルから、サーバーを起動しておく。
      • f:id:htomine:20101101001358p:image
      • ここの「サーバー設定」からVPSコントロールパネルにいける

  • 手元のMacから、sshコマンドを使ってrootユーザーでログイン
    • 作業用ユーザーの作成
      • sudoコマンドでroot権限を扱えるように

  • ローカル側のsshの設定
    • 手元の環境で、ssh-keygenコマンドを使って、公開鍵認証に必要な公開鍵を作成
    • scpコマンドで、作成したid_rsa.pubファイルをVPS環境に転送
      • $ scp ~/.ssh/id_rsa.pub [:username]@[:ip address]:[path]
      • 転送先のパスを指定してあげないとだめだった

  • 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設置してみたり,自分用のポータルにしたりとか色々したいけどまぁまた今度で。
色々やって楽しかったです。