「インラインにて失礼します。」メールのやりとりで使用します。相手が送ってきたメールの文中で、先方の文章を引用として残しつつ、それに対してコメントしたい場合(よくある)に何故そういった事をするのか断りをいれる意味があるっぽいです。
先日、仕事でもらったメールで初めてこの言葉を目にした時に、とても違和感を感じたのを覚えている。昔は全文引用の文章を末尾に付けるのがマナーが悪いとされていたけど、いつの間にか逆になっているらしい。
これがナウいらしいので、僕もいつか意味もなく使ってみよう。
「インラインにて失礼します。」メールのやりとりで使用します。相手が送ってきたメールの文中で、先方の文章を引用として残しつつ、それに対してコメントしたい場合(よくある)に何故そういった事をするのか断りをいれる意味があるっぽいです。
先日、仕事でもらったメールで初めてこの言葉を目にした時に、とても違和感を感じたのを覚えている。昔は全文引用の文章を末尾に付けるのがマナーが悪いとされていたけど、いつの間にか逆になっているらしい。
これがナウいらしいので、僕もいつか意味もなく使ってみよう。
中学生か高校生くらいの時に見た短編アニメーションを突然思い出した。
無性に見たくなってYouTubeで探したけど、みつからなかった。
今見ても、あの頃のように純粋な気持ちで感動できるだろうか…
【追記】
DVDが発売されているらしい。これ欲しいなぁ。
少し前にトップページのUNIXコマンドが話題になった 安倍晋三氏のホームページ ですが、Pythonで書かれたPloneで動いています。実は5年前くらいからウオッチしているのですが、ここのシステム担当者の方とは気が合いそうです。
というのも、2001年、僕がXoopsを使いだしてしばらくした後に、安倍晋三ホームページはXoopsを使ったサイトに変わりました。そして、僕がPloneに移行してまたしばらくした後の2004年に、Ploneベースに変わりました。当時はまだXoopsもそんなに流行っていなかったし、Ploneは今でこそ大学の研究室等で人気があるみたいですが知名度は言わずもがな。これは偶然とかのレベルではないような気がします。運命の糸?
安倍晋三サイトのシステム担当者の方、もしこのブログを読んでいられたら、一度お会いして情報交換させて頂きたいです。ご連絡お待ちしています。
僕は、次はDjangoを使ったサイトにしようと思っているので、安倍晋三氏のホームページがDjangoベースになる日も近いのではないでしょうか(結構本気)。新聞社のサイトで使われているので、スピードと安定性には実績がありますし。
# ところで、まだ内閣官房長官のままになってますね…
【10:52 追記】
って、よく見たら、これ寺田さんの会社じゃん。どうも失礼しましたw
JTPAシリコンバレーツアーに参加したり、先日の刊行記念対談イベントのお手伝いなんかもしている同僚のnaoyaくんに借りて読んだ。当たり前だけど、今日という日は2度と戻ってこないんだなぁ
Webシステムを作っていると、ブラウザからのアクセスとは別に非同期で処理を実行したい場面って結構あります。例えば、cronにジョブを設定して定期的に行う処理などです。
データベースに直接アクセスするなら何も考えなくてもできます。でも、せっかくだからDjangoのモデルを利用して楽をしたいですよね? 試しにmodelをimportしてみたけど、それだけではうまくいかない。で、どうやるのかなぁと調べてたら、下記のサイトに情報がありました。環境変数'DJANGO_SETTING_MODULE'を設定してあげれば良いらしいです。
Slowchop Studios » Blog Archive » Creating a Django cron job
こういうview.pyがあって、このdaily_job()をcronから呼び出したいとき。
import urllib2
from models import WebSite
def daily_job():
for site in WebSite.objects.all():
page_html = urllib2.urlopen(site.url).read()
do_something_with_page_html(page_html)
こんな感じでプロジェクトのトップにスクリプトを置いてあげると、cronからDjangoフレームワークを呼び出して使うことができます。
#!/usr/bin/env python import os os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' from mytestapp.views import daily_job daily_job()
♪コントラスト − クラムボン
最近、近所に出没するおじさんがとても気になる。
休日に交差点の真ん中で交通整理をしている。ピー、ピピピとか笛を吹いて、行けとか、止まれとかの合図をしている。車庫から出ようとしている車があれば、ガソリンスタンドの店員さんのように車の流れを止めてくれる。
最初は、アルバイトでやっているのかなと思っていたけど、どうも違うみたい。ガーディアンエンジェルみたいに、ベレー帽を被っていて、アーミーっぽいパンツとブーツを履いている。たぶん、ボランティアでやっているっぽい。
また、平日はごみ置き場のゴミ袋を一つずつ開けて中身をチェックしているようだ。こないだ、その現場に遭遇してしまって気まずい雰囲気になった。とりあえず、挨拶してそそくさと逃げたけど、ゴミ袋チェックに引っかかって呼び止められないか、内心ビクビクだった。
おじさんが現れたのは、ここ1ヶ月くらいなので、ここが終わったら次は○○町みたいな感じで定期的にいろいろな場所を回っているんだろうか。すげー気になる…
新宿で、某メンバによる某飲み会。
ギャグ道の話で盛り上がる。やっぱり、有名ブロガーの人達は面白いなー
お酒を飲んだ後は、ポカリスエットをいっぱい飲むと二日酔いにならないらしい。カーディガンカップビー系も分かるような気がする。
半蔵門のお洒落なオフィスで開催された「Django 勉強会 Disc 0」に参加してきました。
主催の露木さんも人が集まるか心配していたようですが、蓋を開けてみると参加者は20人、しかもDjangoに目をつけるだけあって、皆さんかなりの腕前。初回なので、皆さんのレベルを推し量るという意味でチュートリアルを2,3人ずつのチームに別れて行うという内容でしたが、これは次回からかなり期待できそうです。
勉強会のトピックス
懇親会のトピックス
会社では音楽を聴きながら仕事をしているんですが、そろそろ自分のライブラリに飽きてきたので、iTunesの共有機能を使って同僚のnaoyaくんの曲を聴かせてもらいました。
で、驚いたんだけど、全曲クラシックだよ!本人に聴いてみたところ、普段は普通の曲も聴くらしいんだけど、プログラミングの時は集中したいのでクラシックにしてるんだそう。しかも、眠気防止のためか、ほとんどがバロック調のものでした。いやー、世の中、いろんな人がいるもんですね。
僕は、プログラミング中でもジャンル関係なく何でも聴きます。集中していると、歌とか全然耳に入ってこないし。気づいたら、好きな曲が終わってたってこともしばしばあります。プログラミング中はこういうジャンルにしたほうがいいとかあるんですかねー
# 最近は、なぜか懐メロ系のMy Little Loverばっかり聴いてる…
Wanderlust で画像ファイルを添付して携帯電話に送信しても、何も添付されていないように見える問題が発生して困っていた。いろいろ試行錯誤して、やっと原因が分かった。
Wanderlust(正確にはSEMI)で作成したMIMEヘッダはこのようになっている。
Content-Type: image/jpeg Content-Disposition: inline; filename="hoge.jpg" Content-Transfer-Encoding: base64
一方、ちゃんと添付画像が見えるメールは、こうなっている。
Content-Type: image/jpeg; name="hoge.jpg" Content-Disposition: attachment; filename="hoge.jpg" Content-Transfer-Encoding: base64
Content-Typeの name parameter が怪しい。しかし、どうやってこれを追加するんだろう?
だいぶ前に書いたんだけど、すっかり公開するのを忘れていました。
実行には、 MultipartPostHandler.py が必要ですので、同じディレクトリに置いてください。他に ElementTree も必要ですが、Python 2.5から標準機能に組み込まれるので、最初からインストールされていることが多いのではないかと思います。FedoraだとPRMパッケージが用意されています。
#!/usr/bin/env python
import base64
import urllib2
import MultipartPostHandler
from elementtree import ElementTree
class Photozou:
API_HOST = "http://api.photozou.jp"
API_URL = API_HOST + "/rest/"
def __init__(self, userid, password):
self.userid = userid
self.password = password
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password("photo", self.API_HOST,
self.userid, self.password)
self.opener = urllib2.build_opener(auth_handler,
MultipartPostHandler.MultipartPostHandler)
urllib2.install_opener(self.opener)
def check(self):
return self.nop()
def nop(self):
url = self.API_URL + "nop"
return self._sendRequest(url)
def photo_add(self, photo_file, album_id, photo_title="",
tag="", comment="", **args):
url = self.API_URL + "photo_add"
photo_title2 = photo_title[:]
tag2 = tag[:]
comment2 = comment[:]
params = {"photo" : open(photo_file, "rb"),
"album_id" : album_id,
"photo_title": photo_title2,
"date_type" : 'exif',
"tag" : tag2,
"comment" : comment2}
return self._sendRequest(url, params)
def photo_add_album(self, name, description=""):
url = self.API_URL + "photo_add_album"
params = {"name": name, "description": description}
return = self._sendRequest(url, params)
def photo_album(self):
url = self.API_URL + "photo_album"
retxml = self._sendRequest(url)
albums = [album for album in retxml.findall('info/album')]
return albums
def user_group(self):
url = self.API_URL + "user_group"
retxml = self._sendRequest(url)
groups = [group for group in retxml.findall('info/user_group')]
return groups
def _sendRequest(self, url, params=None):
try:
ret = self.opener.open(url, params)
xml = ElementTree.parse(ret)
return xml
except urllib2.HTTPError:
return False
except IndexError:
print "Error! -> ", xml.find('err').attrib['msg']
if __name__ == '__main__':
pz = Photozou('mail', 'password')
if pz.check():
print "Auth OK!"
else:
print "Auth Failed."
最後の if __name__ == '__main__': っていうのは、このファイルが直接実行された際に実行される処理です。他のプログラムからimportされた場合には、実行されません。クラス定義にもこれを書いておくことで、簡単な使い方が分かったりしてけっこう便利。
サイドに表示しているAmazon売れ筋ランキングが、2,3日前から文字化けしています。他のサイトでも同様の現象が発生していて、サービス側に問題があるっぽい。ウォッチしておく。
先日、 Rubyのホームページ がリニューアルしました。上のほうに“エレガントな文法を持ち、自然に読み書きができます。”とあって、特徴的なサンプルコードが載っています。 それPythonだとこうなるよ! ってことで、書いてみました。やっぱり、RubyとPythonって似てるなぁ…
(1)Rubyの場合
# The Greeter class
class Greeter
def initialize(name)
@name = name.capitalize
end
def salute
puts "Hello #{@name}!"
end
end
# Create a new object
g = Greeter.new("world")
# Output "Hello World!"
g.salute
(1)Pythonの場合
# The Greeter class
class Greeter:
def __init__(self, name):
self.name = name.capitalize()
def salute(self):
print "Hello %s!" % self.name
# Create a new object
g = Greeter('world')
# Output "Hello World!"
g.salute()
(2)Rubyの場合
cities = %w[ London
Oslo
Paris
Amsterdam
Berlin ]
visited = %w[Berlin Oslo]
puts "I still need " +
"to visit the " +
"following cities:",
cities - visited
(2)Pythonの場合
cities = set(['London',
'Oslo',
'Paris',
'Amsterdam',
'Berlin'])
visited = set(['Berlin', 'Oslo'])
print "I still need to visit the following cities:", \
cities - visited
(3)Rubyの場合
# Output "I love Ruby"
say = "I love Ruby"
puts say
# Output "I *LOVE* RUBY"
say['love'] = "*love*"
puts say.upcase
# Output "I *love* Ruby"
# five times
5.times { puts say }
(3)Pythonの場合
# Output "I love Python"
say = "I love Python"
print say
# Output "I *LOVE* PYTHON"
say = say.replace("love", "*love*")
print say.upper()
# Output "I *love* Python"
# five times
print say * 5
今日は、ラボブログでMacの布教活動をしてみました。
http://labs.unoh.net/2006/09/webmac_os_x.html
でも、自分が宣伝なんかしなくてもWeb系エンジニア界隈では、本当にマカーが増えてますよ。次期LeopardにRailsが載るのもそうだけど、Appleの「まず開発者を取り込もう」という戦略は、かなり当たっている気がする。
Django三兄弟もマカーだし(謎)
今日はウノウの社内勉強会でした。自分が当番だったので、簡単な資料を用意して、PythonとDjangoを紹介するつもりでした。
ところが、MacBookとプロジェクタの相性が良くないらしく、画面をスクリーンに写すことができません。Mac側ではバッチリ認識しているのにプロジェクタが認識してくれない模様。完全に一方通行で、まるで自分の姿を見ているようです。普通にアナログVGAで繋いでるだけなんですが…
はてなのnaoyaさんから、ほぼ同じ構成で使えているとの情報ももらいましたが(進太郎さん経由で)、こちらはいろいろ試してもだめでした。
というわけで、Pythonの布教活動は未遂に終わってしまいました。とりあえず、来週に持ち越しです。今、プロジェクタのメーカーに問い合わせているのですが、簡単には解決しなそうな予感。資料をKeynoteで作っちゃったのと、ローカルにDjangoの環境を作ってあるので、最悪VNC経由でプレゼンとかになるのかなぁ。なんかやだな…
ブラウザを立ち上げる度にWikipediaのページをランダムに表示して、毎日見ていれば少しずつ賢くなれるかもしれない。次のページをブラウザのスタートページに設定するだけでOK。
http://ja.wikipedia.org/wiki/Special:Randompage
まだ設定してから2日しか経ってないけど、へーと感心すること多し。同じようにPythonのヘルプから毎日ランダムに1ページ表示するっていうのはどうだろう。 ネタ元
♪Don't Know Why - Norah Jones
9/29(金)〜10/1(日)にPython Developer's Camp 2006 Summerというのが開催されます。Python初学者向けのものから、最近注目のWebフレームワークを題材としたスプリントなど、多くの人が楽しんで頂ける内容です。平日含む2泊3日という日程にも関わらず、現時点で35名もの参加者がいるとか… すごいなぁ。
空きは残りわずかとのことなので、参加したい方はお早めに。
転職活動中に登録したリクナビNEXTなんですけど、退会するのをすっかり忘れていました。転職する気は全くないのですが、スカウトメールとか頂いてとても恐縮です。条件的にもっといい会社は沢山あるのだろうけど、“会社の環境に左右されず、興味を持った技術を 突き詰めていける、そんな自由度が高い仕事環境”というのが何よりも重要です。自分的には。
僕より若い人たちへのアドバイスをすると、転職する気の有無に関わらず、こういうサイトに登録しておくのは良いことだと思いますよ。自己アピールする文章を書くことで、今までやってきた仕事を棚卸しできるし、自分は何が得意で、何が足りないのかを見直すきっかけにもなります。こういう棚卸しは、最低でも1年に1回は行うべきです。また、検索キーワードで企業が注目しているスキルが分かったり、業種ごとの求人数の増減を見ることで景気の状況も予測することができます。
こういう転職サイトっていろいろありますが、とりあえず登録するなら、規模的にも大きいので リクナビNEXT がお勧めです。ただし、自分が所属している会社からはレジュメが見えないようにちゃんと参照制限するのを忘れないように。
昨日、 百式の田口さん と サイドフィードの赤松さん が出張オフィスでウノウにやって来ました。
仕事中はお話しする機会がなかったのですが、ランチと夜の飲み会でいろいろな話を聞くことができました。やっぱりクレバーという言葉がピッタリなお二人でした。「同じようなアイデアを思い付く人は世の中にたくさんいるけど、実際に行動する人は一握り」ということをどこかで読んだのですが、まさにその一握りに入る人は、一味違うように感じました。いや、アイデアも一味違いますけど。
実際に実行する >>>>> (越えられない壁) >>>>> アイデアを思いつく > 不便さに気づく
それから、PHPのPEARはバグが多いし、フレームワークなんて使わないよ、っていう話も興味深かったです。確かに「おれおれフレームワーク」があれば、それが一番かも。
(おまけ)
一時期、このブログも feed meter のブログランキングに入っていたのですが、今はすっかり圏外なので、赤松さんからランキングアルゴリズムを聞き出してズルしようとしたけど、教えてもらえませんでした。残念w
del.icio.usに登録したものを毎日、はてなブックマークに自動でインポートしてるんだけど、ここのところうまく動いていませんでした。で、昨日URLが変わったということを知って納得。
pydelicious というライブラリを利用しているのですが、pydelicious.pyを次のように変更すると動作するようになりました。
DWS_HOSTNAME = 'https://api.del.icio.us/' DWS_API = 'https://api.del.icio.us/v1/'
GNU Screenの中で Ctrl+a (行頭に移動)や Ctrl+r (ヒストリを検索)などのよく使うキーバインドが使えなくて非常に困っていたんですが、いろいろ調べてやっと原因が判明。
Subversionのコミットログ編集用に環境変数EDITOR=viを設定していたので、zshがviキーバインドになっていたためでした。原因が分かれば何てことはないのですが、しばし悩みました。次のどちらかを設定すれば解決します。
1.zshのキーバインドを明示的に指定する方法
.zshrcに以下を記述
bindkey -e
2.環境変数SVN_EDITORを使う方法
EDITOR=viの代わりに以下を設定
export SVN_EDITOR=vi
あ〜、スッキリ
♪白いカイト - My Little Lover
OS X Tigerには標準でPython 2.3が組み込まれているのですが、ちと古いので Darwin Ports から2.4をインストールします。
1./opt/local/bin:/opt/local/sbinを$PATHに追加します。
2.Python 2.4をインストールします。
$ sudo port install python24
3.SQLiteをインストールします。
$ sudo port install sqlite3 $ sudo port install py-sqlite2
4.Djangoの開発版をリポジトリからチェックアウトします。
$ svn co http://code.djangoproject.com/svn/django/trunk/ ~/django/django_src
5.$HOME/django/django_src/django/bin を$PATHに追加します。
これで準備が整いました。あとは普通に開発環境を作成していきます。
$ django-admin.py startproject <project_name> $ vi settings.py $ python manage.py startapp <app_name>
開発合宿 で作成したツールをジュンヤさんがウノウ社内で利用できるように設定していました。残念ながら、当面は社内限定で一般公開はまだ未定なんですが、このRails製ツールのソースコードを解説付きで見せてもらいました。
だいぶ洗脳されてきた…
♪YES - My Little Lover