Common Lispとpythonのdocstring

Common Lispのdocstringについて調べてたのだけど、pythonって関数にしかdocstringを入れられないんだっけ?と思ったのでやってみた。

まず関数。__doc__でdocstring。

>>> def sumab (a,b):
...   "test sum"
...   return a + b
... 
>>> print sumab.__doc__
test sum

まぁ、ここまではok

続いて変数

>>> a = 10
>>> dir(a)
['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', 
'__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', 
...
'conjugate', 'denominator', 'imag', 'numerator', 'real']

おー__doc__あるじゃん。

>>> print (a.__doc__)
int(x[, base]) -> integer

Convert a string or number to an integer, if possible.  A floating point
argument will be truncated towards zero (this does not include a string
representation of a floating point number!)  When converting a string, use
the optional base.  It is an error to supply a base when converting a
non-string.  If base is zero, the proper base is guessed based on the
string content.  If the argument is outside the integer range a
long object will be returned instead.

ふむ、これは任意のstringに置き換えられるのかな?

>>> a.__doc__ = "test int"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object attribute '__doc__' is read-only

リードオンリーだった。str,float,listも一緒だった。

プリミティブな型にもdocstringはあるけど、それは書き換えられないってことかな。

perlスクリプト実行中に外部エディタを利用してデータ入力をおこなう

Config::Pitでデータを追加する時に外部エディタが立ち上がって便利なので、ソースを読んでみた。

File::Tempでテンポラリファイルを用意しておいて、system関数で、環境変数Editorに指定されているプログラムで、テンポラリファイルを開く。そのときのタイムスタンプと修正時刻を比較して、更新があったときファイルの内容を読み出す(Config::PitだとYAML::Syckで出し入れ)。

簡単のためにFile::Slurpで。

use File::Temp;
use File::Slurp;
use Path::Class;

my $text;
my $f = File::Temp->new();
close $f;
my $t = file($f->filename)->stat->mtime;
system $ENV{EDITOR}, $f->filename;
if ($t == file($f->filename)->stat->mtime) {
  print STDERR "No changes.";
} else {
  $text = read_file($f->filename); #外部エディタで入力したデータを読み込む
}

print $text;

File::Tempだと、テンポラリファイルの面倒をきちんと見てくれるので安心なので、よく使うんだけど、editorを組み合わせることが出来るんだったら、gamessとかのインプット用のテンプレートを用意しておいて、実行時にeditorでチョロチョロっと追加してそのままrunできるようなものがつくれてよいかもしれない。

「Arduino Duemilanove 328」注文した

物欲の春なので(?)、本能のおもむくままにクリック。

ProductName Arduino Duemilanove 328

スイッチサイエンス / ¥ 2,835 ()


書籍とか買いすぎて、今月の小遣いのほとんどがなくなってしまったが、来月の東京出張の時にCdSセンサを秋月で調達する予定。

Poken欲しい

パンダのやつ

ProductName [ポーケン / Poken] - Panda

Poken SA (Switzerland) / ¥ 2,480 ()


Arduino PIC AVR

当方、電子工作歴0年くらいですが、Gainer,Arduinoには興味があるので、図書館でPICの本を借りてきて読んでみたりとかしてます。

ProductName わかるPICマイコン製作集―16F84プログラミングの世界へ
遠藤 敏夫
誠文堂新光社 / ¥ 2,100 ()
在庫あり。

で、検索エンジンなどもかましつついろいろ見てたら、いますぐPICをやめてAVRに移行すべき10の理由というエントリを見つけた。

たしか、ArduinoってAVRマイコンが乗ってたよなぁ。だからArduinoでいろいろやってみてさらに掘っていきたくなったらAVRマイコンそのものをいじれば良いのかなぁと。

とか思ったら、ArduinoとかGainerってLLみたいなものなのかと思った。LLを通って低レベルに向かうみたいな感じで進めばよいのかなと。そして、Arduino用のCPANなみたいなものができても良かろうと。仮にそういうものがあったらコードだけじゃなくて部品の販売サイトへのリンクとかがセットになったものなんだろうなぁと。物理的なものへの参照も含めてコミュニティベースで成長していくモデルってのは面白いかも。

ProductName パソコンを隠せ、アナログ発想でいこう!―複雑さに別れを告げ、“情報アプライアンス”へ
ドナルド・A. ノーマン,安村 通晃,岡本 明,伊賀 聡一郎,Donald A. Norman
新曜社 / ¥ 3,465 ()
在庫あり。

エスパルスドリームプラザ 海

特にあてもなく静岡のほうに買い物でもいこうかという話をしたら、それだったらエスパルスドリームプラザに行ってみたいというので、出かけた。

昼は子連れにやさしいソファーっぽい椅子のテーブル席がある寿司岩で寿司。

1238238769 1238238772

握り盛り合わせ。

1238238776

なかなか美味しくて満足。

豊盃「ん」

篠田酒店で購入。

1238238765

価格(1900円台)の割に旨くてびっくり。生酒なのでフレッシュ感もある。

最近この価格帯でおいしいお酒が増えてきてるような気がする。

  • 信濃鶴の純米
  • 喜久酔の普通酒
  • 浜千鳥の本醸造
  • 豊盃の「ん」(普通酒)

他にもあるかな。

ピタゴラ装置のDVD

最近、面白いと思えるようになったようで、アンパンマンの合間とかに見るようになった。そういえば、そんなエントリ昔書いたよなぁと検索したら丁度二年くらい前の出来事だった

ProductName ピタゴラ装置DVDブック1

ポニーキャニオン / ¥ 2,940 (2006-12-01)
在庫あり。

ProductName ピタゴラ装置 DVDブック2

ポニーキャニオン / ¥ 2,940 (2007-04-18)
在庫あり。

「Arduinoをはじめよう」を読んだ

ごく簡単なArduinoの説明書といった感じ。

ProductName Arduinoをはじめよう
Massimo Banzi
オライリージャパン / ¥ 2,100 ()
一時的に在庫切れですが、商品が入荷次第配送します。配送予定日がわかり次第Eメールにてお知らせします。商品の代金は発送時に請求いたします。

半分を公式リファレンスの日本語訳を占めるのでほとんとポケットリファレンス的な使い方になるかも。

クックブック的なものも併せないとこれだけでは辛いかな。

ProductName Making Things Talk -Arduinoで作る「会話」するモノたち
Tom Igoe
オライリージャパン / ¥ 3,990 ()
在庫あり。

XML::FeedのContent

LDRでこのblogのフィードの本文が表示しなくなってしまい、なんでかなーと。

% perl -MXML::Feed\ 999  
XML::Feed version 999 required--this is only version 0.23.
BEGIN failed--compilation aborted.
% perl -MXML::RSS\ 999 
XML::RSS version 999 required--this is only version 1.43.
BEGIN failed--compilation aborted.

バージョンは上の通りで、

use XML::Feed;

my $feed = XML::Feed->new('RSS');
$feed->title( "test" );
$feed->link( 'http://www.kzfmix.com/rss' );
$feed->description("feed test");

my $feed_entry = XML::Feed::Entry->new('RSS');
$feed_entry->title('feed test');
$feed_entry->link('http://www.kzfmix.com/test');
$feed_entry->summary("test summary");
$feed->add_entry($feed_entry);

print $feed->as_xml;

を実行してみると

<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0"
 xmlns:blogChannel="http://backend.userland.com/blogChannelModule"
 xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:atom="http://www.w3.org/2005/Atom"
 xmlns:dcterms="http://purl.org/dc/terms/"
>

<channel>
<title>test</title>
<link>http://www.kzfmix.com/rss</link>
<description>feed test</description>

<item>
<title>feed test</title>
<link>http://www.kzfmix.com/test</link>
<description>test summary</description>
<guid isPermaLink="true">http://www.kzfmix.com/test</guid>
<content:encoded> </content:encoded>
</item>
</channel>
</rss>

とスペース一個content要素が出来る。このせいかなと、contentに本文を入れて出力するように変更してみた。