2010年9月28日火曜日

Illustrator CS4を起動した時に「プラグインが見つかりません」と出るとき

こんな事もあろうかと、AdobeのサイトにQ&Aがありました。ていうか、わかっているなら直してよ、もう。

http://kb2.adobe.com/jp/cps/231/231348.html

2010年6月6日日曜日

blogにtwitterウィジェットつけました

右側です。
twitterの設定画面からボタン一つでblogger用のウィジェットを追加できたので、簡単でした。やっぱブログはシェアの大きいものに限る。

2010年5月25日火曜日

Mac OS X & sphinxでPDF出力(準備編)

Mac OS X (snow leopard)でsphinxを使ってPDFを出力する下準備は、これだけ必要。

  • sphinxのインストール
  • Xcodeのインストール(makeコマンドを使えるようにするためだけ)
  • pTeXのインストール&PATHの設定
これだけ実行すると、PDFファイルが作成できる。
sphinxのインストールは、前の記事でかいたので割愛。

Xcodeのインストールは大量の帯域とディスク領域と、ほんの少しの割り切りが必要だ。Xcodeのページ(http://developer.apple.com/technologies/tools/xcode.html)を開いたら、左ペインのメニューの下段にある"Free Download"をクリックする。"Download Xcode"ページが開いたら、右ペインの"iPhone Dev Center"あるいは"Mac Dev Center"をクリックする。ログイン画面が開くのでログインする(ユーザー登録がまだの人は、いい機会なのでここで登録しておこう)。画面下の"Download"エリアにある"Xcode 3.2.2 and iPhone SDK 3.2(あるいはそれっぽいリンク)"をクリックしよう。これでようやくダウンロードが始まる。ダウンロードサイズは数百メガバイト、展開時には7ギガバイト近くかかるので帯域とディスク領域が必要。それでsphinxにとって何が必要かというとmakeコマンドのみという事実に対する割り切りが必要。

pTeXはここ(http://www2.kumagaku.ac.jp/teacher/herogw/)からダウンロードする。ダウンロードしたファイルを展開して、pTeXアプリケーション(黒い犬のアイコン)をアプリケーションフォルダにコピーしてダブルクリック。これで導入完了だ。

2010年5月15日土曜日

macでsphinxのインストール

mac os xでsphinxのインストールをしてみた。
僕がはまったのは次の二つ

"error: /usr/local/bin/sphinx-build: Permission denied"がでる
→sudoコマンドでeasy_installコマンドを実行する


"easy-install"といれてもコマンドがないと言われる
→ハイフンではなくてアンダースコア

上記を踏まえて、Let's try!


********-*****-no-macbook-pro:local *****$ sudo easy_install http://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.5-py2.6.egg#md5=d1230f6d317a35770365f62225069259
Downloading http://pypi.python.org/packages/2.6/S/Sphinx/Sphinx-0.6.5-py2.6.egg#md5=d1230f6d317a35770365f62225069259
Processing Sphinx-0.6.5-py2.6.egg
removing '/Library/Python/2.6/site-packages/Sphinx-0.6.5-py2.6.egg' (and everything under it)
creating /Library/Python/2.6/site-packages/Sphinx-0.6.5-py2.6.egg
Extracting Sphinx-0.6.5-py2.6.egg to /Library/Python/2.6/site-packages
Sphinx 0.6.5 is already the active version in easy-install.pth
Installing sphinx-build script to /usr/local/bin
Installing sphinx-quickstart script to /usr/local/bin
Installing sphinx-autogen script to /usr/local/bin

Installed /Library/Python/2.6/site-packages/Sphinx-0.6.5-py2.6.egg
Processing dependencies for Sphinx==0.6.5
Searching for docutils>=0.4
Reading http://pypi.python.org/simple/docutils/
Reading http://docutils.sourceforge.net/
Best match: docutils 0.6
Downloading http://prdownloads.sourceforge.net/docutils/docutils-0.6.tar.gz?download
Processing docutils-0.6.tar.gz
Running docutils-0.6/setup.py -q bdist_egg --dist-dir /tmp/easy_install-QL4h1w/docutils-0.6/egg-dist-tmp-AASUn6
zip_safe flag not set; analyzing archive contents...
docutils.parsers.rst.directives.misc: module references __file__
docutils.writers.html4css1.__init__: module references __file__
docutils.writers.latex2e.__init__: module references __file__
docutils.writers.newlatex2e.__init__: module references __file__
docutils.writers.odf_odt.__init__: module references __file__
docutils.writers.pep_html.__init__: module references __file__
docutils.writers.s5_html.__init__: module references __file__
Adding docutils 0.6 to easy-install.pth file
Installing rst2html.py script to /usr/local/bin
Installing rst2latex.py script to /usr/local/bin
Installing rst2man.py script to /usr/local/bin
Installing rst2newlatex.py script to /usr/local/bin
Installing rst2odt.py script to /usr/local/bin
Installing rst2odt_prepstyles.py script to /usr/local/bin
Installing rst2pseudoxml.py script to /usr/local/bin
Installing rst2s5.py script to /usr/local/bin
Installing rst2xml.py script to /usr/local/bin
Installing rstpep2html.py script to /usr/local/bin

Installed /Library/Python/2.6/site-packages/docutils-0.6-py2.6.egg
Searching for Jinja2>=2.1
Reading http://pypi.python.org/simple/Jinja2/
Reading http://jinja.pocoo.org/
Best match: Jinja2 2.4.1
Downloading http://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.4.1.tar.gz#md5=e0cf5af057fac63ac9689b86c8b31ce6
Processing Jinja2-2.4.1.tar.gz
Running Jinja2-2.4.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-Itm1u1/Jinja2-2.4.1/egg-dist-tmp-b6WF5r
warning: no previously-included files matching '*' found under directory 'docs/_build/doctrees'
Adding Jinja2 2.4.1 to easy-install.pth file

Installed /Library/Python/2.6/site-packages/Jinja2-2.4.1-py2.6.egg
Searching for Pygments>=0.8
Reading http://pypi.python.org/simple/Pygments/
Reading http://pygments.org/
Reading http://pygments.pocoo.org/
Best match: Pygments 1.3.1
Downloading http://pypi.python.org/packages/2.6/P/Pygments/Pygments-1.3.1-py2.6.egg#md5=05270ee059c038407364b28993980960
Processing Pygments-1.3.1-py2.6.egg
creating /Library/Python/2.6/site-packages/Pygments-1.3.1-py2.6.egg
Extracting Pygments-1.3.1-py2.6.egg to /Library/Python/2.6/site-packages
Adding Pygments 1.3.1 to easy-install.pth file
Installing pygmentize script to /usr/local/bin

Installed /Library/Python/2.6/site-packages/Pygments-1.3.1-py2.6.egg
Finished processing dependencies for Sphinx==0.6.5
********-*****-no-macbook-pro:local *****$

上手くいったようだ。

2010年4月30日金曜日

引っ越ししました

レンタルしているケーブルテレビ会社のブログから、bloggerに引っ越しました。
苦労するかと思ったけれど、かなり簡単でした。

1. 元のblogの管理画面から、blogをMovable Type形式でエクスポートする。
2. エクスポートしたファイルを、http://movabletype2blogger.appspot.com/ で変換する。
3. 変換したファイルを、bloggerの管理画面でインポートする。

画像はさすがにアップロードされないので、何とかせねばならないけど何とかしなくてもいいかとも考えている。

2010年4月18日日曜日

Joomla1.5+さくらレンタルサーバでフレンドリーURL

Joomla 1.5を使うと、ディレクトリを分けて複数のサイトを管理する事ができる。また、"http://www.foo.bar.com/info"といったユーザーフレンドリーなURLを使う事ができる。これを組み合わせてさくらのレンタルサーバで使うにあたって少し苦労したので、ここに備忘録として記しておく。

・Joomlaの設定
http://foo.domainname.com/としたい場合は、インストール場所は、~/www/fooにする。http://www.domainname.com/としたい場合は、インストール場所は~/www/wwwにする。ただしwwwのみの単一運用であれば、~/wwwにする。
管理画面から、基本設定−サイトに移動する。
SEOの設定で「サーチエンジンフレンドリーURL=はい」「Apache mod_rewriteを利用=はい」「サフィックスをURLに追加=いいえ」二設定する。

・さくらのサーバ側の設定
もし、wwwで始まらないドメインを使いたい場合には、ドメイン設定でドメインを追加する。このドメインは標準のドメインではなく、別途取得したオリジナルドメインである必要がある。さらに、サブドメインの指定も行っておく。
Joomlaをインストールしたディレクトリに存在するhtaccess.txtを.htaccessに変更する
.htaccessの中身について「Options +FollowSymLinks」と「RewriteBase /」のコメントを削除する

2010年3月31日水曜日

web2py & GAEによるデモ on youtube2

前のブログの動画の続きです。
これらの動画は、Python & Ruby東海での発表内容を動画で再構築したものです。

2010年3月29日月曜日

web2py & GAEによるデモ on youtube

0からweb2pyを使ってGoogle App Engineのアプリを作る方法を作成しました。見てね。

2010年3月16日火曜日

40秒で作るweb2pyアプリ

■[Python]40秒で作るweb2pyアプリ
web2pyもRailsには負けていません。何せ後発ですから。
「何かメモするアプリ」ということで作ってみます。環境はこんな感じです。

$ python web2py
web2py Enterprise Web Framework
Created by Massimo Di Pierro, Copyright 2007-2010
Version 1.76.5 (2010-03-11 15:19:08)
Database drivers available: SQLite3
Starting hardcron...
というわけで、つくるよ!

アプリケーション作成
管理サイト上で、アプリケーションを作ります。


モデル生成

モデルはソースコード(db.py)で定義します。
db.define_table('note',
Field('body', 'text')
)

コントローラーの作成

データの入力と表示を行うコントローラーを作成します。
def index():
form = SQLFORM(db.note)
if form.accepts(request.vars):
redirect(URL(r=request))
notes = db().select(db.note.ALL)
return dict(form=form, notes=notes)

はい、これで完成。

ブラウザで確認
ブラウザで確認します。
http://localhost:8000/mynote/
出ました!



web2pyも簡単だよ。

2010年3月15日月曜日

WHR-G300Nで接続がよく切れる

バッファロー社のWHR-G300Nを使っていて接続がぶちぶち切れてしまう時は、無線設定のWPS機能をオフにすると調子が良くなるようです。危うく新しい無線ルーターを買ってしまうところだった。

2010年3月13日土曜日

GAE, Snow Leopard, python

ついさっき知りましたが、GAEはpython2.5が推奨環境です。しかーし、Mac OS X Snow Leopardはデフォルトがpython2.6となっています。そのためweb2pyのアプリを乗っけるとエラーが頻発します。しかもそれらがweb2pyのエラーチケットとしてフックされ、しかもそれを見るためのGAEが立ち上がらないという堂々巡り。

仕方がないのでしばらくは、Launcherを使用せずにコマンドラインからGAEを起動するようにします。
$ /usr/local/bin/dev_appserver.py web2py

GAEの開発環境にweb2pyをデプロイできない

web2pyで作ったアプリをGAEで作っているけど、うまく行っていない。
とりあえず現状をさらして、他力本願。

OS : Mac OS X 10.6
python : Version 2.5.x
web2py : Version 1.76.5
GAE : Version 1.3.1

$ /usr/local/bin/dev_appserver.py web2py
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/appcfg.py:41: DeprecationWarning: the sha module is deprecated; use the hashlib module instead
import sha
/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_login.py:33: DeprecationWarning: the md5 module is deprecated; use hashlib instead
import md5
Traceback (most recent call last):
File "/usr/local/bin/dev_appserver.py", line 68, in
run_file(__file__, globals())
File "/usr/local/bin/dev_appserver.py", line 64, in run_file
execfile(script_path, globals_)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_main.py", line 417, in
sys.exit(main(sys.argv))
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver_main.py", line 360, in main
config, matcher = dev_appserver.LoadAppConfig(root_path, {})
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/dev_appserver.py", line 3444, in LoadAppConfig
raise AppConfigNotFoundError
google.appengine.tools.dev_appserver.AppConfigNotFoundError


google.appengine.tools.dev_appserver.AppConfigNotFoundError
がでるのは、単純に実行したディレクトリが間違っていました。
上記のエラーは、web2pyディレクトリをカレントディレクトリとしていましたが、本当はweb2pyディレクトリの親ディレクトリで実行する必要があります。
しかし、さらなる罠が...

2010年3月1日月曜日

メール本文をPDFに変換するアプリ

Google App Engineでメール本文をPDFに変換するアプリを作成しました。
味も素っ気もないWebページはこちら。
http://nakakenstudy.appspot.com/
このページは本質的には全然関係なくて利用に当たっては、mail2pdf@nakakenstudy.appspotmail.comまでメールを送ってください。メールの本文がPDFとなって返信されます。
PDFの変換を試すには、http://nakakenstudy.appspot.com/post2pdf をリクエストしてください。

今回はreportlabを使ってテキストをPDFに変換しました。といってもベタにテキストにするだけなので、ほとんど実装していません。あんまり短くできたので、記念にソース公開しておきます。うるさい事言わないので、勝手にコピペしてください。blogの制約上全角スペースでインデントをつけているので、各自で半角スペースに変換しておいてください。


# -*- coding: utf-8 -*-
#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

import logging
import StringIO

import pdf

from email.utils import parseaddr
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp.mail_handlers import *

SENDER_ADDRESS = 'nakaken@mediacat.ne.jp'

def main():
  application = webapp.WSGIApplication([
        (r'/', MainHandler),
        (r'/_ah/mail/.+', Mail2PdfHandler),
        (r'/post2pdf', Post2PdfHandler),
  ], debug=True)
  util.run_wsgi_app(application)

def goodDecode(encodedPayload):
  encoding = encodedPayload.encoding
  payload = encodedPayload.payload
  logging.debug(encoding)
  logging.debug(payload)
  if encoding and encoding.lower() != '7bit':
    payload = payload.decode(encoding)
  else:
    try:
      payload = payload.decode('ISO-2022-JP')
    except Exception, value:
      logging.warn(value)
  return payload

class MainHandler(webapp.RequestHandler):
  def get(self):
    self.response.out.write('Mail to "mail2pdf at nakakenstudy.appspotmail.com" and you can get pdf file converted from your mail.')
 
class Mail2PdfHandler(InboundMailHandler):
  def receive(self, message):
    logging.info('do Mail2PdfHandler.receive')
  
    editormail = parseaddr(message.to)[1]
    account = editormail.split('@')[0]
    if account != 'mail2pdf':
      logging.warn(account + ' is an undefined account.')
      return
  
    content = ''
    for body in message.bodies(content_type='text/plain'):
      content += goodDecode(body[1])
    logging.debug(content)
  
    buffer = StringIO.StringIO()
    pdf.go(buffer, content)
    pdffile = buffer.getvalue()
    buffer.close()
  
    logging.info('sender=' + SENDER_ADDRESS)
    logging.info('to=' + message.sender)
    mail.send_mail(
      sender=SENDER_ADDRESS,
      to=message.sender,
      subject='result of converted pdf from mail',
      body='Here is the pdf file you want, yeah!',
      attachments=[('content.pdf', pdffile)],
    )

class Post2PdfHandler(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/html'
    self.response.out.write("""<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
  <form action="/post2pdf" method="post">
   <p>PDFに変換したい文字列を入力してください</p>
   <textarea cols="60" rows="30" name="content"></textarea><br />
   <input type="submit" value="変換" />
  </form>
</body>
</html>"""
)

  def post(self):
    content = self.request.get('content')
    buffer = self.response.out
    pdf.go(buffer, content)
    self.response.headers['Content-Type'] = 'application/pdf'
  
if __name__ == '__main__':
  main()

[[ pdf.py ]]
# -*- coding: utf-8 -*-
import cgi
import StringIO

from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics
from reportlab.platypus import SimpleDocTemplate, Spacer, XPreformatted
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.rl_config import defaultPageSize
from reportlab.lib.units import inch

pdfmetrics.registerFont(TTFont('Togoshi-mono', 'togoshi-mono.ttf'))

PAGE_HEIGHT=defaultPageSize[1]
PAGE_WIDTH=defaultPageSize[0]

styles = getSampleStyleSheet()
my_style = styles["Normal"]
my_style.name = "bonlife"
my_style.fontName = "Togoshi-mono"
my_style.fontSize = 0.15*inch
my_style.leading = 11

def go(filename, content):
    doc = SimpleDocTemplate(filename)
    Story = [Spacer(1, 0.5*inch)]
    style = my_style
  
    x = XPreformatted(cgi.escape(content), style)
    Story.append(x)
  
    doc.build(Story)

2010年2月14日日曜日

Joom!fishで翻訳文書が表示されない

Joom!fishは、サイトを他言語化するに、すばらしいソリューションを提供してくれるが、ちょっと動きが怪しいところがあった。完全に正しいかどうかわからないけれども、実際にあった事をかいておきます。

#1 保存し直したら表示された
Joom!fishで登録した翻訳文が、blogスタイルのページで表示できなかった。翻訳文を消して、もう一度登録し直したら表示された。

#2 アンケートが翻訳されなかった
コンポーネント「アンケート」で作成したアンケートが、メニュー内でだけ選択肢が翻訳されなかった。modules/mod_poll/helper.phpをハックする必要があるらしい。

$query = 'SELECT p.id, p.text' .
' FROM #__poll_data as p' .
' WHERE p.pollid = ' . (int) $id .
' AND p.text <> ""' .
' ORDER BY p.id';

単に、テーブル名のエイリアスを入れただけなんだけど、うまく動いた。
http://forum.joomla.org/viewtopic.php?p=2016608

2010年1月31日日曜日

無線LANのチャンネルを調べる

どうも無線LANの調子が悪いので、チャンネルを固定化する事にしてみた。
その場合、近くで使われていないチャンネルを探さないといけないのだけれど、それをmac(snow lepard)で調べるにはどうすれば良いかと思ったらコマンドラインでできる事がわかった。

$ cd /System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/
$ ./airport -s

詳しい人たちがいるものだ、と感心。
http://blog.isocchi.com/2009/04/java-jamac-maclan.html

2010年1月16日土曜日

Joomla1.5サイトを構築する #2

とりあえず日本語化が完了したら、次は見た目を整える。Joomlaはとても使いやすいCMSで、いつでもテンプレートを変更する事が可能だ。だがしかし、色合いの違うテンプレートに差し替えると、思った通りのサイトにはならない。やる気を出すためにも、はじめの段階でテンプレートを最終版に決定するべきだ。

テンプレートは、とりあえず以下のサイトから見つけるのがよい。とにかく数が多いのでだんだん大変になってくるが、根気よく作成するサイトにマッチするものを見つけよう。
http://www.joomla24.com/

気に入ったテンプレートを見つけたら、管理サイトからテンプレートを次の手順でインストールする。管理サイトも日本語化がされている前提でメニューなどは表記している。
1. メニューから「エクステンション - インストール/アンインストール」を選択する。
2. パッケージファイルのアップロードに、ダウンロードしたテンプレートのzipファイルを選択してインストールボタンを押す。あるいは、URLからインストールにテンプレートをダウンロードしたときに使ったURLを指定したインストールボタンを押す(joomla24のサイトは、一番最初に手作業でdownloadを行わないと、zipファイルをダウンロードするためのURLが使えない仕様になっているので注意)。
3. メニューから「エクステンション - テンプレート管理」を選択する。
4. 適用したいテンプレートのラジオボタンを選択して、デフォルトボタン(星形のアイコン)をクリックする。

これでよい。
テンプレート内のタイトル画像などは、サーバ内のファイルを直接置き換える事で差し替え可能だ。しかしサイズを変えるとレイアウトが崩れる事が多いので、元々の画像とサイズは合わせるのが吉である。

Joomla1.5サイトを構築する #1

Joomlaをインストールして、サンプルデータベースで遊んで、さて空の状態から自分のサイトを作ろうかと思ってはいるが、どこから手を付けてよいのやら迷ってしまった、そんな自分のためのJoomla備忘録。

日本人なら、まずはじめにしなければならない事は、サイトの日本語化ではないだろうか。
これは次のように行う。

1. 管理サイトにログインする。
2. メニューから「Extension - Install/Uninstall」を選択する。
3. 「URLからインストール」の欄に、サイト用と管理サイト用のランゲージパックをそれぞれ選択してInstallボタンを押す
4. メニューから「Extension - Language Manager」を選択する。
5. SiteとAdministratorのそれぞれについて、Japaneseのラジオボタンを選択し、デフォルトボタン(星のアイコン)をクリックする

これで完了。管理サイトが日本語化されるはず。
通常のサイトは、この設定によって日本語化されたかどうかはわからない(ログインモジュールなどを表示すると、日本語化されているのがわかる)

ちなみにランゲージパックは、以下のサイトからダウンロードできる。
Joomla! Accredited Translations Project(http://joomlacode.org/gf/project/jtranslation/)
メニューから「ファイル」を選択して、日本語関係のファイルを探してほしい。Joomla1.5.10の場合は
・ja-JP_Joomla_1.5.15_site.zip
・ja-JP_Joomla_1.5.15_admin.zip
の二つだ。

2010年1月13日水曜日

MACからさくらのサーバーにSSHで接続する方法

ターミナルを開き、次のコマンドを入力する。

>ssh -l ユーザー名 サーバーパスワード