カテゴリー : 2011年 8月

[Emacs] install-elisp.el をインストールしたけど使えなかったときの解決方法

 
Emacsの便利なプログラムである Elisp を簡単にインストールするための設定を下記の記事を参考にしながらやったのですが、途中ではまったというか初歩的なミスをしていて解決したのでご紹介します。
 

・参考:Emacs ビギナーに贈る、これからバリバリ使い隊!!人のための設定講座 その1。 – 日々、とんは語る。 はてなブックマーク - Emacs ビギナーに贈る、これからバリバリ使い隊!!人のための設定講座 その1。 - 日々、とんは語る。
 

他のEmacs初心者の参考になれば幸いです。
 

[追記:2011/09/01]
 

install-elisp.el には auto-install.el という後継バージョンがあるそうなので、通常こちらを使った方が良いみたいです。
 

auto-install.elでEmacsLispパッケージを自動インストール→anything.el関連を一括インストール – (rubikitch loves (Emacs Ruby CUI Books)) はてなブックマーク - auto-install.elでEmacsLispパッケージを自動インストール→anything.el関連を一括インストール - (rubikitch loves (Emacs Ruby CUI Books))
 
 

まず、find コマンドで .emacs.d のある場所を探しました。
 

1
2
# find / -name .emacs.d
/root/.emacs.d

 

install-elisp.el をwww.emacswiki.org/cgi-bin/wiki/download/install-elisp.elからダウンロードして .emacs.d 内に設置します。
 

同じように、 .emacs のある場所を探したのですが、これがいけなかった。
 

1
2
# find / -name .emacs
/etc/skel/.emacs

 

ディレクトリ /etc/skel/ 直下にある .emacs に設定を書き込んだため、emacs から install-elisp が使えるようになりませんでした。
 

正しくは、ホームディレクトリ直下に新しく .emacs ファイルを作成して以下の3行を書き込みます。
 

1
2
3
(setq load-path (cons "~/.emacs.d/elisp" load-path))
(require 'install-elisp)
(setq install-elisp-repository-directory "~/.emacs.d/elisp/")

 

しかじろう (@shikajiro) さんの記事を読んで間違えに気づきました。ありがとうございます。
 

2010-12-24 – しかじろうがプログラム作るよ!
 

これで晴れて、M-x install-elisp が使えるようになりました。
 

以上です。
 

[仮想OS] VMwarePlayer に CentOS を開発用サーバーとしてインストール

Windows7にて、VMware Player 上に開発用サーバとして CentOS 5.6 をインストールしました。

インストール手順は、以下の記事を追っていくだけでOKです。

VMware PlayerにCentOS導入。練習用Webサーバーを構築1 はてなブックマーク - VMware PlayerにCentOS導入。練習用Webサーバーを構築1

ここでは、これを読んでも分からなかった部分を補完した記事を書きます。
 

手順1 VMware Playerのインストール

VMware Playerをダウンロードして、インストールします。

VMware Player :簡単に仮想マシンを実行できる無償ソフトウェア
 

手順2 仮想マシンの設定

CentOSを仮想マシンにインストールします。今回は開発上の都合で32bit版を入れます。

CentOS 5.6 x86 (32bit版)

ちなみに「LiveCD」はお試し版なので、4GBぐらいある「正式版」をダウンロードします。正式版のDLは、BitTorrentでDLするか、ネットインストール用のISOをDLするかの2通りがあります。

今回は、ネットインストール用のISOファイルをDLして、インストールしました。

(何度もインストールする可能性がある場合は、BitTorrent からDLしてISOファイルを持っておいた方がよさげです。)

・DLサイト:www.centos.org – centos.org content

CentOS 5.6 x86だとISOファイルは「CentOS-5.6-i386-netinstall.iso」です。インストールするゲストOSの種類は「Linux」、バージョンは「CentOS」を選択します。

この後はサイトの手順通りにサクサク進めていきます。
 

手順3 VMware PlayerでCentOSのネットインストーラー起動

インストール方法を聞かれるので、ネットインストール用ISOを選択しているのでFTPを選択します。FTPサイトとディレクトリの指定ですが、Software archives at ftp.riken.jpのページにてURL(http://ftp.riken.jp/)からディレクトリの階層をたどれば分かります。

CentOS 5.6 32bitの場合のURLは以下のようになります。

web site name: ftp.riken.jp
CentOS directory: Linux/centos/5.6/os/i386/

他にも、CentOS 5.5 64bitの場合のURIは以下のようになります。

web site name: ftp.riken.jp
CentOS directory: Linux/centos/5.5/os/x86_64

「インストールプロセスを開始しています。数分かかる事があります…」と表示されますが、FTP接続でインストールする場合は数分どころではありません。

(僕は20分ぐらい待ちました。回線の混雑状況によって1時間以上かかる場合もあるそうです。)
 

手順4 VMware PlayerにCentOSをインストール開始

ここもサクサク進めていく。但し、以下の2点だけ注意する。

  • 「地域の選択」にて、「システムロックでUTCを使用」のチェックを外す
  • インストール時に含めるモジュールを選択する
    (自分で設定できるなら、できるだけ最小限にインストールした方が要らない物まで入らなくていいらしい)

自分は下記のものだけインストールしました。

  • 「アプリケーション」:エディタ
  • 「開発」:開発ツール
  • 「サーバー」:サーバー
  • 「ベースシステム」:ベース

この後も同様にサクサクとインストールを進めていきます。
 

手順5 Apache、MySQL、PHPをインストール

CentOSのインストールが完了したら、仮想サーバーとして動かすために、MySQL、Apache、PHPの順番でそれぞれソースコードからコンパイルしてインストールします。

これらのインストール作業手順については別記事でご紹介します。

以上です。

[文字コード] UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 [Python]

下記のサイトで書かれていたPythonのプログラムを対話モードで実行すると、
UnicodeDecodeErrorが発生して解決したのでメモ。

PythonでAmazon Product Advertising APIを使う – 人工知能に関する断想録

amazon.pyを使って”Amazonクラスを使って「人工知能」というキーワードで本を検索してみます。”以下のプログラムを実行すると下記のエラーが返ってきました。

xml = amazon.itemSearch("Books", Keywords="人工知能", ItemPage="1")  # 本

■ エラー内容

Traceback (most recent call last):
File ““, line 1, in
File “amazon.py”, line 44, in itemSearch
return self.sendRequest(params)
File “amazon.py”, line 76, in sendRequest
self.url = self.buildURL(params)
File “amazon.py”, line 58, in buildURL
pair = “%s=%s” % (p[0], urllib2.quote(p[1].encode(“utf-8”)))
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)

エラーの原因を調べてみると、文字コードの扱いについてのエラーでした。

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)

ここを読んで解決しました。unicodeの扱いが詳しく書かれていて勉強になりました。

・参考:PythonのUnicodeEncodeErrorを知る – HDEラボ はてなブックマーク - PythonのUnicodeEncodeErrorを知る - HDEラボ

下記のように、Keywords=u”人工知能” とKeywordsをUnicode型にしてあげると正常に動作しました。

xml = amazon.itemSearch("Books", Keywords=u"人工知能", ItemPage="1")

以上です。

[正規表現] Pythonで特定の単語を含む文章を取得する方法

 

Amazonマーケットプレイスの商品コンディションコメントにて、特定の単語を含むときにその単語を含む文章全体だけをターミナルに出力するプログラムを書きました。
 

今回は、[Python] Amazon API で商品のコンディションコメントを取得してみた | CodeNote.net はてなブックマーク - [Python] Amazon API で商品のコンディションコメントを取得してみた | CodeNote.netから、例として ‘新品’ という単語を含むケースを取り上げました。
 

まず、正規表現を使うために reモジュールをインポートします。
 

1
import re

 

次に、re.searchメソッドを使って、特定の単語 ‘新品’ を含む場合のみ conditionnote の内容を出力するように変更します。
 

1
2
3
4
5
# soupから要素 conditionnote の情報のみを取り出す
for item in soup.findAll("conditionnote"):
	# 要素 conditionnote に'新品'という単語を含むとき条件が真
	if re.search(u'新品', item.contents[0]):
		print item.contents[0]	# item要素以下の要素 conditionnote の内容を出力

 

結果は下記の通りです。
 

コンディションコメントに ‘新品’ を含む場合だけ出力されています。
 

新品未読品です。在庫確実。迅速発送いたします。
新品未読品の状態の書籍です。水濡れ防止にて丁寧に梱包し、迅速に発送いたします。(原則3営業日以内)在庫切れ時は速やかにご注文をキャンセルさせて頂きます。定価より高価になっている場合がございますので、必ず定価をご確認ください。 (土、日、祝は原則お休みです。)
新品未読の商品ですので非常に綺麗です。迅速丁寧に対応いたします。International shipping available.
新品美品です。ビニール梱包、メール便にて迅速発送させていただきます。(ご注文をいただいた時間にもよりますが、翌日〜一週間の発送になります)品切れの場合はご了承下さい。希少品につき、若干定価より高めになっておりますが、ご検討くださいませ。
実質新品として取り扱われたものを仕入直後より未読のままビニール封入しております。ただし、一度棚に並んだり再配本された商品ですので本出品としてはコンディション「非常に良い」とします、陳列や配送などでのスレなどの瑕疵についてはご容赦下さい。相場状況などに合わせて(定価に近い参考価格4830円)より高価格な設定となっております。よくご検討の上ご購入ください。在庫共有しておりますので品切れもございます。その場合、注文キャンセルとさせていただきますがご了承ください。在庫切れ、高価格設定の点についてお気にされない方のみご注文お願い致します。

 

以上です。
 

・参考:Road to make a twitter bot 03 « WackyPress
 

Yahoo!検索Web APIを使ってみた

 

Yahoo!デベロッパーネットワークで提供されているYahoo!検索Web APIを使ってみました。
 

Yahoo!デベロッパーネットワーク はてなブックマーク - Yahoo!デベロッパーネットワーク

・API一覧:Yahoo!デベロッパーネットワーク – ドキュメント はてなブックマーク - Yahoo!デベロッパーネットワーク - ドキュメント
 

ヤフーIDを持っていれば、アプリケーションを登録して、アプリIDを取得すれば簡単にAPIが使えます。
 

Yahoo!デベロッパーネットワーク – 新しいアプリケーションを開発
 

試しに、Yahoo!のウェブ検索APIを使ってみました。

Yahoo!デベロッパーネットワーク – 検索 – ウェブ検索 はてなブックマーク - Yahoo!デベロッパーネットワーク - 検索 - ウェブ検索
 

自分のアプリID(appid)、検索クエリー(query)に Python、返却結果の数(results)を2に設定してブラウザからリクエストを送ってみました。
 

■ リクエストURLとリクエストパラメータ

http://search.yahooapis.jp/WebSearchService/V2/webSearch?appid=自分のアプリID&query=Python&results=2
 

■ レスポンス

<ResultSet xmlns="urn:yahoo:jp:srch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" firstResultPosition="1" totalResultsAvailable="15700000" totalResultsReturned="2" xsi:schemaLocation="urn:yahoo:jp:srch http://search.yahooapis.jp/WebSearchService/V2/WebSearchResponse.xsd">
<Result>
<Title>日本Pythonユーザ会</Title>
<Summary>ニュース、言語の紹介、チュートリアル。</Summary>
<Url>http://www.python.jp/</Url>
<ClickUrl>http://www.python.jp/</ClickUrl>
<ModificationDate/>
<Cache>
<Url>
http://cache.yahoofs.jp/search/cache?c=Cs14y_5sgy4J&u=http://www.python.jp/&p=Python
</Url>
<Size>44000</Size>
</Cache>
</Result>
<Result>
<Title>Python - Wikipedia</Title>
<Summary>
Python(パイソン)は、オランダ人のグイド・ヴァンロッサムが作ったオープンソースの プログラミング言語。オブジェクト指向スクリプト言語の一種であり、Perlとともに欧米で 広く普及している。イギリスのテレビ局 BBC が製作したコメディ番組『空飛ぶモンティ・ ...
</Summary>
<Url>http://ja.wikipedia.org/wiki/Python</Url>
<ClickUrl>http://ja.wikipedia.org/wiki/Python</ClickUrl>
<ModificationDate/>
<Cache>
<Url>
http://cache.yahoofs.jp/search/cache?c=V7-JAW94jyQJ&u=http://ja.wikipedia.org/wiki/Python&p=Python
</Url>
<Size>123000</Size>
</Cache>
</Result>
</ResultSet>

 

以上です。
 

[Eclipse] PHPのsyntax errorが表示されないときの解決方法

 

Eclipseで、PHPのsyntax errorが表示されないときの解決方法を調べたのでメモ。
 

■ 原因
 
プロジェクトが、PHPプロジェクトになっていませんでした。
 

■ 対処方法
 
「プロジェクト」→右クリック→「構成」→「Add PHP Support」
 

以上です。
 

[正規表現] Pythonの reモジュールを用いた入門者向けチュートリアル

 

Pythonである特定の単語と一致した部分を抜き出すプログラムを書きたいなと考えています。
 

これには正規表現の知識が必要なので日本Pythonユーザ会(PyJUG)が掲載している、reモジュールを用いた正規表現入門者向けチュートリアルを読みました。
 

正規表現 HOWTO はてなブックマーク - 正規表現 HOWTO
 

以下、内容です。
 

・ 1. はじめに

・ 2. 簡単なパターン
  文字とのマッチ / 繰り返し

・ 3. 正規表現を使う
  正規表現のコンパイル / バックスラッシュだらけ / マッチングを行う / モジュールレベルの関数 / コンパイル時のフラグ

・ 4. パターンにもっと力を
  他のメタ文字 / グルーピング / 取り出さないグループと名前付きグループ / その他

・ 5. 文字列の変更
  文字列の分割 / 検索と置換

・ 6. ありがちな問題
  string モジュールについて知る / match() vs search() / Greedy vs Non-Greedy / re.VERBOSE を使わないと…

・ 7. フィードバック

 

和訳されたものなので一部、日本語の言い回しが変なところはありますが、分かりやすくて勉強になりました。
 
 

[Python] Amazon API で商品のコンディションコメントを取得してみた

 

Amazonマーケットプレイスに出品されている情報から「商品のコンディションのコメント」を取得する方法を調べたのでご紹介します。
 

その他に、商品の情報を取得したい場合も応用できます。
 

ちなみに今回は [Python] Amazon Product Advertising APIを使ってみました | CodeNote.net はてなブックマーク - [Python] Amazon Product Advertising APIを使ってみました | CodeNote.net にて、itemSearchのキーワードを”Python クックブック 第2版”に変更して、この本のマーケットプレイスから本のコンディションコメントを取得しました。
 

取得したい情報が「コンディションのコメント」なのですが、これはXMLの要素 ConditionNote に含まれています。要素は親要素から順番に以下のようになります。
 

<Items><Item><Offers> <OfferAttributes><ConditionNote>

 

よって、要素 ConditionNote の情報を取得したい時に、親要素 OfferAttributes を全て取得して、取得したデータから1つずつOfferAttributesの子要素である ConditionNote を見ていくようにしたらエラーがでました。
 

以下、エラーで、最初の方は出力できているのですが、途中から取得できませんでした。
 

$ python t_offerattributes_fail.py 
◆◆◆小口に汚れが有ります。カバーに使用感があります。他は問題ありません。迅速・丁寧な発送を心がけております。【日曜以外毎日発送】
エアキャップにて梱包し、速やかに発送します。
Traceback (most recent call last):
  File "t_offerattributes_fail.py", line 17, in <module>
    print item.conditionnote.contents[0]
AttributeError: 'NoneType' object has no attribute 'contents'

以下、失敗した場合のコードです。
 

■ t_offerattributes_fail.py
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#coding:utf-8
import sys, codecs
sys.stdout = codecs.lookup('utf_8')[-1](sys.stdout)
 
from amazon import Amazon
 
# キーワードで本を検索したい!
amazon = Amazon("自分のAccess Key", "自分のSecret Access Key")
xml = amazon.itemSearch("Books", Keywords=u"Python クックブック 第2版", ResponseGroup="OfferFull", MerchantId="All", Condition="All")  # 本の詳細な販売情報(OfferFull)
print amazon.url  # リクエストURL
print unicode(xml, 'utf_8')		# Amazonのレスポンス
 
# XMLから情報を取り出す
from BeautifulSoup import BeautifulStoneSoup
soup = BeautifulStoneSoup(xml)	# XMLをsoupに格納
 
# soupから要素 offerattributes の情報のみを取り出す
for item in soup.findAll("offerattributes"):
	print item.conditionnote.contents[0]
		# item要素以下の要素 conditionnote の内容を出力

 

要素 OfferAttributes の子要素に ConditionNote がないときがあるので、item.conditionnote.contents[0] の中身がないことでエラーになります。
 

よって、直接、要素 ConditionNote を取得すればいいわけです。
 

上記プログラムの最後の4行だけ以下のように書き換えれば上手く商品のコンディションコメントを取得できました。
 

1
2
3
4
# soupから要素 conditionnote の情報のみを取り出す
for item in soup.findAll("conditionnote"):
	print item.contents[0]
		# item要素以下の要素 conditionnote の内容を出力

以下、出力された情報です。
 

$ python t_offerattributes_true.py 
◆◆◆小口に汚れが有ります。カバーに使用感があります。他は問題ありません。迅速・丁寧な発送を心がけております。【日曜以外毎日発送】
エアキャップにて梱包し、速やかに発送します。
新品未読品です。在庫確実。迅速発送いたします。
新品未読品の状態の書籍です。水濡れ防止にて丁寧に梱包し、迅速に発送いたします。(原則3営業日以内)在庫切れ時は速やかにご注文をキャンセルさせて頂きます。定価より高価になっている場合がございますので、必ず定価をご確認ください。 (土、日、祝は原則お休みです。)
新品未読の商品ですので非常に綺麗です。迅速丁寧に対応いたします。International shipping available.
★初版。カバーに極小ヨレあり。中身文面綺麗です。エアーパッキンにて梱包し迅速に発送致します。★
新品美品です。ビニール梱包、メール便にて迅速発送させていただきます。(ご注文をいただいた時間にもよりますが、翌日〜一週間の発送になります)品切れの場合はご了承下さい。希少品につき、若干定価より高めになっておりますが、ご検討くださいませ。
実質新品として取り扱われたものを仕入直後より未読のままビニール封入しております。ただし、一度棚に並んだり再配本された商品ですので本出品としてはコンディション「非常に良い」とします、陳列や配送などでのスレなどの瑕疵についてはご容赦下さい。相場状況などに合わせて(定価に近い参考価格4830円)より高価格な設定となっております。よくご検討の上ご購入ください。在庫共有しておりますので品切れもございます。その場合、注文キャンセルとさせていただきますがご了承ください。在庫切れ、高価格設定の点についてお気にされない方のみご注文お願い致します。

 

これを利用して、商品の検索に細かくフィルタをかけることができそうです。
 

以上です。
 

[Python] Macのターミナルからプログラムを動かす方法

 

MacのターミナルからPythonのプログラムを動かす方法をご紹介します。
 

例えば、test.py というPythonプログラムを実行したいとします。

この場合、test.pyのファイルがある場所にディレクトリを移動して、
 

python test.py

 

とファイル名だけを指定すると実行できます。
 

・参考:【libro】 GAE開発を目指す人のためのPython超入門/Pythonを使えるようにしよう!/Pythonを動かす2つの方法
 

[Facebook] ソーシャルグラフを簡単にテストできるツール「Graph API Explorer」

Facebookのソーシャルグラフを簡単にテストできるツール「Graph API Explorer」がなかなか便利です。

Graph API Explorer – Facebook開発者

・参考:Facebook開発者向けツール「Graph API Explorer」徹底解説: 小粋空間 はてなブックマーク - Facebook開発者向けツール「Graph API Explorer」徹底解説: 小粋空間

・参考:Introducing the Graph API Explorer – Facebook開発者 はてなブックマーク - Introducing the Graph API Explorer - Facebook開発者