#junki::acoustic

2011年3月6日日曜日

photo by jojonki
photo a photo by jojonki on Flickr.

2010年1月22日金曜日

hatenaに引っ越し

bloggerが使いにくいのでお引っ越ししました。過去の日記も移行しています。

http://d.hatena.ne.jp/jonki/

2010年1月18日月曜日

JScriptで現在再生中の曲をTwitterに投稿する

ソースを.jsで保存してクリックするだけ。
iTunesで何か再生中じゃないと怒られるので注意。
対応はめんどいのでしません。俺俺スクリプトですから。

こんな感じに投稿されます。

参考にさせていただいたページ。というか2つをそのまま合体しただけですが。。。


var url = "http://twitter.com/";
var user = "jojonki";
var pass = "xxxxxx";

var methods = {
//friends_timeline: "statuses/friends_timeline.json",
update: "statuses/update.json"
};

function post(data){
var req = WScript.CreateObject("Msxml2.XMLHTTP");
req.open("POST", url + methods.update, false, user, pass);
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
req.setRequestHeader("X-Twitter-Client", "jonkiTunes");
req.setRequestHeader("X-Twitter-Client", "0.1");
req.send("status=" + encodeURIComponent(data));
}

function getNowPlaying(){
var iTunesApp = WScript.CreateObject("iTunes.Application");
var track = iTunesApp.CurrentTrack;
var name = track.Name;
var artist = track.Artist;
var str = name + " ♪ " + artist + " [jonkiのiTunes]" + " #nowplaying #JScript";
return str;
}

function init(){
tweet = getNowPlaying();
post(tweet);
WScript.Echo(tweet);
}

init();

2009年10月17日土曜日

Windows (7) と Django と Eclipse

Windows 7のEclipse環境でDjango動かしてみました。
XPでもVistaでもやることは同じっぽいですがw


◆下準備
Python for Windowsのインストール
今回は2.6.2を入れた
http://www.python.jp/Zope/download/pythoncore

◆Eclipseの設定
1. MergeDocからEclipse3.4のPlatformをダウンロード
http://mergedoc.sourceforge.jp/
2. PyDevの追加
ヘルプ=>更新
http://pydev.org/updates/
3. PyDevの設定
ウィンドウ=>設定=>Pydev=>インタープイター - Python
Python inteerpretersのところで、新規=>C:\Python26\python.exeのパスを追加


◆Djangoのインストール
1. ソースを落として、解凍
http://www.djangoproject.com/download/
Django-1.1.1.tar.gz(自分はcygwinで解凍)

2.インストール
C:\user\Python26\python.exe setup.py install
インタラクティブモードでインストールできてるか確認しとく
>>>> import django
>>>> django.VERSION
(1, 1, 1, 'final', 0)

3. パスの設定
PATHに;C:\Python26;C:\Python26\Scriptsを追加

コマンドプロンプト等で確認。
>python -V
Python 2.6.2
>django-admin.py --version
1.1.1

◆テストしてみる
1. EclipseでPyDevの適当なプロジェクトを新規作成
2. コマンドプロンプト等で作成されたプロジェクトディレクトリ内のsrcディレクトリに移動して実行
>cd C:\user\workspace\MyProject\src
>django-admin.py startproject test
>cd test
>python manage.py runserver
3. 127.0.0.1:8000にDjangoの画面が出てきたら成功、あとはEclipseのsrcをリフレッシュしてソースがあることを確認。


◆参考にしたページ
どうもありがとうです。
Eclipseでdjango開発する方法
WindowsにAptana PydevでDjangoの開発環境を構築する

2009年10月13日火曜日

今更ながらのGoogle App Engineやってみた

あくまでサンプル。
いやぁ。。。簡単過ぎる。

+ SDKのダウンロード
http://code.google.com/intl/ja/appengine/downloads.html

+ 各プログラムについて
・appcfg.py
サーバーヘのプログラムアップロード
・dev_appserver.py
作成したアプリをパソコン上でテストするためのアプリケーション・サーバ


+手順
・展開したファイルから雛形をディレクトリを丸ごとコピー
・コピーしたディレクトリを自分で設定したアプリケーション名に変更
・中のyamlファイルを編集
・application => 自分で設定したアプリケーション名
・url, script => 今回はスルー
・$ ./dev_appserver.py <アプリ名>
=>動作確認 http://localhost:8080/
・$ ./appcfg.py update <アプリ名>
=>動作確認 http://<アプリ名>.appspot.com/




◆参考
+ ITpro Google App Engineの基礎知識
http://itpro.nikkeibp.co.jp/article/COLUMN/20090609/331587/?ST=develop&P=1

2009年9月1日火曜日

Twitterから今日のこんだてを投稿  〜Cookpad編〜

何だか暇だったのでまたTwitterボットを作りました。
こんだて君

Cookpad
の「本日のアクセスランキング」のメニューを拝借しています。
久しぶりにBeautifulSoupを使ったのでその部分を復習がてら晒します。

流れ
  1. 何らかのカテゴリページ(こんなの)を引数に与える
  2. idタグ"category-ranking"の部分を取得
  3. レシピタイトル、レシピリンク、レシピ投稿者の順に取得
簡単ですね。(`・ω・´)


def getKondate(_url):
_html = urllib2.urlopen(_url).read()
_soup = BeautifulSoup(_html)
category_ranking = _soup.find(attrs={'id' : 'category-ranking'})
_kondate = []
for _recipe_title, _recipe_link, _recipe_by in zip(
category_ranking.findAll(attrs={'class': 'recipe-title font12'}),
category_ranking.findAll(attrs={'class': 'recipe-title font12'}),
category_ranking.findAll(attrs={'class': 'font11'}) ):
  print _recipe_title.string
  print _recipe_link['href']
  print _recipe_by.string

あとはここから煮るなり焼くなりして投稿してます。

2009年7月31日金曜日

VMWareESXi 仮想マシンの強制BIOS起動

◆問題
ESXiではBIOSの設定画面が表示されず、OSの起動画面がはじめから表示される。
そのためCD/DVDドライブやホストマシンの.isoを優先的に読み込ませたい場合に困る。

◆解決法
1. 仮想マシンを選択し、[Edit Settings]
2. [Options]タブを開く
3. [Bood Options]を選択し、[Force BIOS Setup]にチェックをいれればOK

どうやらForce BIOS Setupのチェックは初回起動時のみ有効になり、2回目以降の起動は自動的にオフになる。
そのため再度BIOSを起動させたい場合はこのオプションを再び設定する必要がある。

2009年7月17日金曜日

sendmailで受信をトリガーにホゲホゲする

色々方法はあるけど.forwardを使ったやり方で。

例えばtestというユーザがメールを受信したとき、というトリガーにするなら

/home/test/.forwardに
"| /home/test/runHoge.sh"

みたいな。

ただこれだとメールがメールボックスに配送されないのでtestアカウントのメアドに
あらかじめメールを送ってから処理するようにした。

test@hogehoge.com
"| /home/test/runHoge.sh"


基本的な設定はこれでいいんだけど、一応smrshに実行するプログラムのシンボリック
リンクを張っとく必要あるので注意。

参考ぺーじ
http://moyolab.blog57.fc2.com/blog-entry-48.html

2009年5月27日水曜日

PythonでGmailを送信

以前の日記のソースがあまりにもひどかったので修正。
こんな感じでやれば送れます。

from GmailApi import *
sg = sendGmail(encoding, subject, body, from_addr, to_addr, login_addr, passwd)
sg.sendMail() # 送信


Gmail送信用に書いたクラス
◆GmailApi.py
#!/usr/bin/python
# -*- coding: utf-8 -*-

#@author Junki OHMURA
#@date 2009/05/027

#gmailでメールを送るためのSMTPライブラリ
import smtplib
from email.MIMEText import MIMEText
from email.Header import Header
from email.Utils import formatdate

class sendGmail:
def __init__(self, encoding, subject, body, from_addr, to_addr, login_addr, passwd):
self.date = formatdate()
self.encoding = encoding
self.subject = subject
self.body = body.encode('utf-8')
self.from_addr = from_addr
self.to_addr = to_addr
self.login_addr = login_addr
self.passwd = passwd

def sendMail(self):
msg = MIMEText(self.body, 'html', self.encoding)
msg['Subject'] = Header(self.subject, self.encoding)
msg['From'] = self.from_addr
msg['To'] = self.to_addr
msg['Date'] = self.date

s = smtplib.SMTP('smtp.gmail.com', 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(self.login_addr, self.passwd)
s.sendmail(self.from_addr, self.to_addr, msg.as_string())
s.close()

2009年5月26日火曜日

Twitter Streaming API

以前Twitterのデータマイニングフィードを与えられてましたが、ここ数日調子が良くない。
今まで600件取れてたのに20件しか取れなくなってしまいました。

TwitterのDevelopment Teamにメール投げたところ…
「Streaming APIつかえや( ^ω^)」と帰って来ました。
なんていうかデータマイニングフィード軽く流されましたが、さっそく使ってみることに。

いくつかタイプがあるみたいです。
Streaming API Documentation
とりあえず制約なしで使えるspritzerを試してみることに。


ではLet's Access!
http://stream.twitter.com/spritzer.json

おお、確かにストリーミングデータですね!
パッと見た感じでは結構取得できてそう。

ということでさっそくデータマイニングフィードと比較。
今まで1分で600件でしたが、このspritzerでは90秒ほどかかりました。
# 実行時間の計測は結構適当なんでばらつきはあるかも。

[結論]
なかなかに使える。


以下今回のソース
# BasicAuth.pyは過去の記事参照
◆spritzer.py

#!/usr/bin/python
# -*- coding: utf-8 -*

#@author Junki OHMURA
#@date 2009/05/26

import BasicAuth
import simplejson as json
import sys, os

from datetime import datetime
#Basic認証
realm = "Firehose"
host = "http://stream.twitter.com/spritzer.json"
usrname = "user"
passwd = "pass"
basiApi = BasicAuth.BasicAuthentication(realm, host, usrname, passwd)


cont = basiApi.get("http://stream.twitter.com/spritzer.json")
i=1
start = datetime.now()
while 1:
s = cont.readline()
if not s:
break
obj = json.loads(s)
print i
print obj['id']
print obj['text']
print obj['created_at']
user = obj['user']
print user['id']
print user['name']
print
i = i+1
if(i==600):
end = datetime.now()
break

print "TIME"
print end -start