[]Gist.vim

gistを友人に進められて使ってみたが、細々したコード群を管理するのには本当に便利。ただ任意のリビジョンを消せないのが不便。デリート機能付けてくれないだろうか。

Gist.vim

vim上でソースコードをgistとやりとりできるplugin。

インストール方法

まずgitとcurlをインストール

[cc line_numbers="off"]
$ sudo apt-get install git-core
$ sudo apt-get install curl
[/cc]

Gist.vimをダウンロード。

後の設定は親切な人が書いてくれた以下の説明が詳しい。

gitを使ったことがないのでconfigファイルの設定の部分は非常に助かった。

[cc line_numbers="off"]
1. Vim をインストールしておく
2. "~/.vim/plugin" がなければ掘っておく
3. mattn 氏作の Gist.vim を "~/.vim/plugin" にダウンロードする
http://www.vim.org/scripts/script.php?script_id=2423
4. github のアカウントを取得しておく ( 取っておいた方が後々便利 )
5. github にログイン
6. Account Settings の Administrative Information の Username と API Token をコピっておく
7. $ git config --global github.user Username
8. $ git config --global github.token API Token
9. .vimrc に以下の行を追加
let g:gist_clip_command = 'xclip -selection clipboard'
let g:gist_detect_filetype = 1
let g:gist_open_browser_after_post = 1
let g:gist_browser_command = 'firefox %URL% &'
10. vim 上でテキストを編集する
( ファイル名を指定して Vim を起動すればこのテキストのようにファイル名をつけることができる )
11. :Gist コマンドで gist に post
12. その他のコマンドは Gist.vim のページを参照
http://www.vim.org/scripts/script.php?script_id=2423
[/cc]

http://gist.github.com/414330

[]Python

追記

※最新のコード(全文)はgistに
http://gist.github.com/527326

ログ取得

定期的に近時190tweetsをログに保存

[cc lang='python']
import twitter

api = twitter.Api()
lists = api.GetUserTimeline('your_twitter_screen_name',190)

tweets = ""
for s in lists:
tweets += s.text

idfile = open('tweets.txt', 'w')
idfile.write(tweets.encode('utf-8'))
idfile.close()
[/cc]

Yahoo!形態素解析API

Yahoo!デベロッパーネットワークでアプリケーションIDを取得。形態素解析APIを利用。

各パラメータ等はhttp://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html参照。

[cc lang='python']
def yahooParse(self,tweets):
pageurl = 'http://jlp.yahooapis.jp/MAService/V1/parse'
results = 'ma'
my_filter = '1|2|3|4|5|6|7|8|9|10|11|12|13'
params = urllib.urlencode({'appid':self.appid, 'results':results, 'filter':my_f
ilter, 'sentence':tweets})
html = urllib2.urlopen(pageurl, params)
return html
[/cc]

帰ってきた結果(html)をBeautifulSoupモジュールを利用してパース。分解された形態素と品詞のタプルを要素としてリスト生成。

[cc lang='python']
soup = BeautifulSoup(html.read())
wordlist = [(w.surface.string, w.pos.string) for w in soup.ma_result.word_list]
[/cc]

マルコフ連鎖

マルコフ連鎖でセンテンスを生成。文が不自然にならないように文頭から特定の品詞を除いている。文末は操作していないので改良の必要あり。1〜70回の範囲でランダムに連鎖する。

辞書markovはキーに2語(w1,w2)のタプルをもち、それぞれ形態素とその品詞のタプルとなっている。値はリストで、辞書に同一キーが存在するときにそれに続く語がどんどん追加されていく。

e.g.) markov = { ( (u'私', u'名詞'), (u'は', u'助詞') ) : [ (u'鳥', u'名詞'), (u'とても', u'副詞'), ...] }

ロジックは以下のページと同じものである。こちらの説明のほうがわかりやすい。

[cc lang='python']
def makeMarkov(self,wordlist):
markov = {}
w1 = (u'', u'')
w2 = (u'', u'')
for word in wordlist:
if w1[0] and w2[0]:
if(w1, w2) not in markov:
markov[(w1,w2)] = []
markov[(w1,w2)].append*1
w1, w2 = w2, word

count1 = 0
count2 = 0
sentence = u"error:文頭に適切な品詞なし"
while count1 < 50:
w1, w2 = random.choice(markov.keys())
poslist = [u'接尾辞',u'動詞',u'助詞',u'助動詞',u'特殊']
if w1[1] not in poslist:
sentence = w1[0] + w2[0]
cnt = random.randint(1,70)
while count2 < cnt:
tmp = random.choice(markov[(w1,w2)])
sentence += tmp[0]
w1, w2 = w2, tmp
count2 += 1
return sentence
break
return sentence
[/cc]

このsentenceをtweet

[cc lang='python']
api = twitter.Api(self.screen_name,self.password)
api.PostUpdates(sentence)
[/cc]

参考

  • MeCabとPythonでマルコフ連鎖を書いてみる(改) | Weboo! Returns.

  • PythonからYahoo!形態素解析APIを使う - 人工知能に関する断想録
  • *1:word[0], word[1]

    []ついったん(@twittan)のように受信したDMをTweetするPythonスクリプト

    追記2

    gistに最新のコードがあります。
    http://gist.github.com/534705

    WordPressソースコードを表示させる

    はてなダイアリーからWordPressに移転させて、はてダで最も重宝していたスーパーPre記法の代わりを探す必要が出てきた。

    とりあえずCodeColorerというPluginがよさそうだったのでインストール。

    フォントが見づらかったので、cssを編集してフォントを「Monaco」から「Courier」にした。

    [cc line_numbers="off"] /wp-content/plugins/codecolorer/codecolorer.css [/cc]

    CodeColorerのテスト

    ついでに最近コードを書いていなかったので、任意のアカウントで受信したDMをそのままTweetするPythonスクリプトを作ってみた。

    もし利用することがあれば、当然DMを送った人はそれをTweetされるとは思っていないので、普段利用しているアカウントでは実行してはいけない。

    ついったん(@twittan)のように専用のアカウントを作ってbioに明示するか、認証したユーザーからのDMのみTweetするといいかも。

    tweetDM.py

    python-twitterモジュール使用

    [cc lang="python"]
    import time
    import re
    import twitter

    class tweetDM:
    def __init__(self, account, password, id_file, user_file):
    self.api = twitter.Api(account, password)
    self.id_file = id_file
    self.user_file = user_file

    def readFile(self):
    idfile = open(self.id_file, 'r')
    latest_id = int(idfile.readline())
    idfile.close()
    return latest_id

    def writeFile(self, status_id):
    idfile = open(self.id_file, 'w')
    idfile.write(str(status_id))
    idfile.close()

    def getDM(self):
    latest_id = self.readFile()
    dms = self.api.GetDirectMessages(since_id = latest_id)
    messages = []
    if dms:
    status_id = dms[0].id
    self.writeFile(status_id)
    usrfile = open(self.user_file, 'r').readlines()
    user_list = [user[:-1] for user in usrfile]
    for s in dms:
    if s.sender_screen_name in user_list:
    messages.append(s.text)
    return messages

    def main(self):
    messages = self.getDM()
    if messages:
    for s in messages:
    self.api.PostUpdates(s)
    time.sleep(15)

    if __name__ == '__main__':
    account = 'your_twitter_screen_name'
    password = 'your_twitter_password'
    id_file = 'latest_id.txt' #最後に取得したDMのstatus_id
    user_file = 'user_list.txt' #許可するユーザー(screen_name)

    obj = tweetDM(account, password, id_file, user_file)
    obj.main()
    [/cc]

    []WordPress

    ブックマークとRSSボタンを簡単に作れるサービス「AddClips」で生成したコードを自動でヘッダに貼り付けたり、

    AmazonAssociatesやGoogleAdsenseのコードを個別ページのフッタに貼り付けたりしたい。

    この時は記事を生成するphpファイルを編集するすればいい。
    場所は記事一覧ページの場合…

    [cc line_numbers="off"]  /wp-content/themes/テーマ名/index.php [/cc]

    個別ページの場合…

    [cc line_numbers="off"]  /wp-content/themes/テーマ名/single.php [/cc]
    コメントや、id、class名を参考に、表示させたい位置にコードを書き加える。

    []Ubuntu

    HDDイメージをまるごとコピー

    LiveCDからUbuntuを起動。

    コピー元ディスクの使用サイズに関わらず同一容量のコピー先ディスクを用意する必要あり。

    [cc line_numbers="off"]
    #コピー
    $ sudo dd if=/dev/sda of=/media/disk/sda.dump

    #書き出し
    $ sudo dd if=/media/disk/sda.dump of=/dev/sda
    [/cc]


    パッケージリストのバックアップ

    パッケージリストをバックアップしておけば、OS再インストール後同じ環境を再現できる。

    パッケージリストの位置は '/var/lib/dpkg/status'。

    [cc line_numbers="off"]
    #パッケージファイルを別ファイルとして書き出し
    $ cat /var/lib/dpkg/status | egrep '^Package: ' | awk '{print $2}' > ~/installedpackages

    #インストール
    $ sudo apt-get update
    $ sudo apt-get install `cat ~/installedpackages`
    [/cc]


    ユーザデータの定期バックアップ

    バックアップツール「fwbackups」にはGUIを備えたUbuntu版がある。

    http://www.diffingo.com/oss/fwbackups/download

    バックアップフォルダをルートにすると/mediaも含まれてバックアップが無限に作られてしまうので注意。権限のないフォルダも除外。

    オプションで「Backup is incremental」にチェクを入れると増分バックアップしてくれるが、試しにフォルダとファイルを増やして実行してみると、増分ファイルのチェックがうまくできていないのか正しくバックアップされていなかった。 *1

    参考

    *1:Direct copyにも関わらず。tarに圧縮保存するArchive backupははじめからインクリメンタル・バックアップに対応していない

    []Ubuntu(Linux)

    80mmケースファンを2つ取り付けたので心配していたサーバー機のHDD温度を調べてみる。

    [cc line_numbers="off"]
    $ sudo apt-get install hddtemp

    $ sudo hddtmp /dev/sd?

    #ケースファン稼動時
    /dev/sda: Hitachi HDS721050CLA362: 43°C
    /dev/sdb: Hitachi HDS721050CLA362: 37°C

    #ケースファン停止時
    /dev/sda: Hitachi HDS721050CLA362: 46°C
    /dev/sdb: Hitachi HDS721050CLA362: 43°C
    [/cc]

    50℃ *1 は超えていないのでよしとしよう。