Bamboo+Inkscapeが快適

娘とお絵描きをして遊ぶために買ったんだけど、最近はメモをとるのに使っている。難点をいえば、USBのケーブルが邪魔。どうにかならんもんかね。

ProductName WACOM Bamboo Fun CTE-450/W0

ワコム / ¥ 13,629 (2007-09-14)
在庫あり。

Inkscapeが便利

list

参考

MooseでLispを実装してみる(List)

やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。リストの構成にはシンボルが出てこない。

list

名前を付けるということがちょっと分かったような気がした。

シンボルは Lisp の最も重要なデータタイプの一つです。「記号」とか単に「名前」または「識別子」とも呼ばれていました。

シンボルは (1) 1 個以上の値を持つことができる、(2) シンボル名により唯一性が保障されます。(2) の唯一性とは同じ名前のシンボルは同じであることを表しています。もっと正確に言えば、同じ名前のシンボルは、ある等価関数によって必ず T を返す、つまり等価であることを保障します。

とりあえず、動くとこを見たかったので、色々端折ってる。

Atom

package Moosp::Atom;

use Moose;

__PACKAGE__->meta->make_immutable;

no Moose;


1; # End of Moosp::Atom

Number

package Moosp::Number;

use Moose;

extends 'Moosp::Atom';

sub str {}

no Moose;

1; # End of Moosp::Number

Integer

package Moosp::Integer;

use Moose;

extends 'Moosp::Number';
with 'Moosp::Sexp';

has 'value' => (is => 'rw',isa => 'Int');

sub add {
  my ($self, $i) = @_;
  my $new_value = $self->value + $i->value;
  __PACKAGE__->new({value => $new_value});
}

sub subt {
  my ($self, $i) = @_;
  my $new_value = $self->value - $i->value;
  __PACKAGE__->new({value => $new_value});
}

sub mul {
  my ($self, $i) = @_;
  my $new_value = $self->value * $i->value;
  __PACKAGE__->new({value => $new_value});
}

sub div {
  my ($self, $i) = @_;
  my $new_value = int($self->value / $i->value);
  __PACKAGE__->new({value => $new_value});
}

sub ge {
  my ($self, $i) = @_;
  if ($self->value >= $i->value){
    return Moosp::T->new();
  }
  else {
    return Moosp::Nil->new();
  }
}

sub str {
  my $self = shift;
  return $self->value;
}

__PACKAGE__->meta->make_immutable;
no Moose;

1; # End of Moosp::Integer

Cell

package Moosp::Cell;

use Moosp::Nil;
use Moose;

has 'car' => (
          is => 'rw',
          default => sub{ Moosp::Nil->instance }
);

has 'cdr' => (
          is => 'rw',
          default => sub { Moosp::Nil->instance }
);

__PACKAGE__->meta->make_immutable;

no Moose;

1;

List

package Moosp::List;

use Moose;
use Moosp::Nil;
extends 'Moosp::Cell';

sub BUILD {
  my ($self, $car, $cdr) = @_;
  $self->car(Moosp::Nil->instance);
  $self->cdr(Moosp::Nil->instance);
  return $self;
}

sub serialize {
  my $self = shift;
  my $str = "(";
  $str .= $self->car->serialize;
  if (ref($self->cdr) eq 'Moosp::Nil') {
    $str .= ")";
  }
  elsif (ref($self->cdr) eq 'Moosp::List') {
    $str .= " " . $self->cdr->serialize . ")";
  }
  else {
    $str .= " . " . $self->cdr->serialize . ")";
  }
  return $str;
}

1; # End of Moosp::List

test

my $int3 = Moosp::Integer->new(value => 3);
my $int5 = Moosp::Integer->new(value => 5);
my $list = Moosp::List->new();
$list->car($int3);
$list->cdr($int5); # (3 . 5)

my $list2 = Moosp::List->new();
$list2->car($int3);
$list2->cdr($list);  # (3 (3 . 5))

print $list2->cdr->car->value # cadr -> 3

CdSセンサとArduinoで遊ぶ

当初思ってたよりも、意外にヘビーに読んでる。

ProductName Arduinoをはじめよう (Make:PROJECTS)
Massimo Banzi
オライリージャパン / ?円 ( 2009-03-27 )


先週秋月でCdSを購入してきたのでちょうどいいサンプルを。

#define LED 13
int val = 0;

void setup(){
  pinMode(LED, OUTPUT);
}

void loop() {
  val = analogRead(0);

  digitalWrite(LED, HIGH);
  delay(val);

  digitalWrite(LED, LOW);
  delay(val);
}

明るさに応じて点滅の間隔が変化する。

1239454286

ProductName Arduinoをはじめようキット

スイッチサイエンス / 3980円 ( )


rpy2とsoaplibでつくるRのウェブサービス

soaplibにはCherryPyが組み込まれているので簡単にウェブサービスがつくれる。さらにrpy2を使えばRのウェブサービスがお手軽に構築できて便利。

インストールの手順はwikiを参照

以下のコードをsoapr.pyというファイル名で保存する。これは与えた数字の数だけRがrnormして返すという簡単なサービス。

from soaplib.wsgi_soap import SimpleWSGISoapApp
from soaplib.service import soapmethod
from soaplib.serializers.primitive import String, Integer, Array, Float
import rpy2.robjects as robjects

class RService(SimpleWSGISoapApp):

    @soapmethod(Integer,_returns=Array(Float))
    def rnorm(self,num):
        r = robjects.r        
        y = r.rnorm(num)
        return [i for i in y]

if __name__=='__main__':
    from cherrypy.wsgiserver import CherryPyWSGIServer
    server = CherryPyWSGIServer(('localhost',7789),RService())
    server.start()

実行するとサーバが立ち上がりhttp://localhost:7789/soapr.wsdlにアクセスするとwsdlを出力する。

テスト用のクライアント

>>> from soaplib.client import make_service_client
>>> from soapr import RService
>>> client = make_service_client('http://localhost:7789/',RService())
>>> print client.rnorm(5)
[-0.40538156526399999, 0.45889158855099998, -0.67243766066699995, 2.6881017757299999, 0.113257266309]
>>> print client.rnorm(3)
[-0.16610789340500001, 0.66591497139099998, -1.74812066455]

参考

PyPI recent updates

CPANのアップデートは追いかけているのに、PyPIのアップデートを追いかけないのは如何なものかと思い、PyPI recent updatesをLDRで購読した。

が、他に誰も購読してないが、なんか購読するサイト間違ってる?

ProductName みんなのPython 改訂版
柴田 淳
ソフトバンククリエイティブ / ?円 ( 2009-04-11 )


09.04.11 追記

間違ってた。RSS autodiscoveryだとhttp://www.python.org/をさすようになってた。

MooseでLispを実装してみる(NilとT)

やさしい Lisp の作り方 by Java and by C#を参考に書いてみる。進行中のメモなのであちこち修正するかも。というか修正しまくりで全然進まないのでメモることにしたという。もう少しまとまったらLISPをみんなで勉強しよう!に投稿したい。

ちなみにMooseでlispなのでMoosp(ムースプ)だ。

まずNilとTはMooseX::SingletonでSingletonにした。

package Moosp::Nil;

use MooseX::Singleton;
with 'Moosp::Sexp';

sub str {"NIL"}

__PACKAGE__->meta->make_immutable;

no MooseX::Singleton;

1;

Tも一緒。

package Moosp::T;

use MooseX::Singleton;

extends 'Moosp::Atom';
with 'Moosp::Sexp';

sub str {"T"}

__PACKAGE__->meta->make_immutable;

no MooseX::Singleton;

1;

javaでlispだとSexpはインターフェースなのでMoose::Roleのクラスにしてみたけどこれでいいのかはわからない(まだ最後まで動かしてないので)。

package Moosp::Sexp;

use Moose::Role;

requires 'str';

sub print { 
  my $self = shift;
  print $self->str;
}

sub serialize {
  my $self = shift;
  return $self->str;
}

no Moose::Role;
1;

Moosp::Atom

package Moosp::Atom;

use Moose;

__PACKAGE__->meta->make_immutable;

no Moose;
1; 

モダンperl入門が手放せない

ProductName モダンPerl入門 (CodeZine BOOKS)
牧 大輔
翔泳社 / ¥ 2,940 ()
在庫あり。

macbookのgitを1.6.2にあげた

gitのバージョンを1.6.1から1.6.2にあげた

sudo port upgrade git-core

これで、いままでうまくいかなかったpushがOKになった。(バージョンのせいではないかもしれないけど)

今年ポスター発表でもすることがあったらPokenをぶら下げておく

Pokenみたいな電子名刺ガジェットみたいなものこそ、研究ネットワークにのせてもよいんではないかと思った。特にポスターみたいに、スペースが限られていて、アテンション獲得が目的みたいな場所ではPokenはなかなかよいのではないかと。

というわけで、今年の前半にポスター発表かなにかするチャンスがあればPokenをぶら下げてみることにした。

興味をもった、研究者のPokenにハイタッチしとけば興味を持ったよっていう意思表示にもなるしね。

そういう使い方は、現実系でのトラックバックみたいなもんか。

杉山フルーツの生ゼリー

杉山フルーツの生ゼリー

1239102018 1239102023

美味しいことは美味しいが、、、、感動するかと言われれば想定の範囲内なのかなぁ。他のも食べてみたいが。

娘は自分の分を一つ食べたくせに、さらに僕のをはんぶんこしようとか言ってきた。

Moose::Roleでwithするクラス

モダンperl入門のp.28で

+------+      +--------+
| Bird | <--- | Winged |
+------+      +--------+
    | 
    |
+--------+
| Pigeon |
+--------+

とあるので、BirdにwithでロールをつけてPigeonがBirdを継承すればよかろうと思ったが、それだと'Winged' requires the method 'fly' to be implemented by 'Bird'とBirdクラスでflyが実装されてないよっていうエラーになる。

package Animal;
use Moose;

package Winged;
use Moose::Role;
requires 'fly';

package Bird;
use Moose;
extends 'Animal';
# with 'Winged'; ここだとエラー

package Pigeon;
use Moose;
extends 'Bird';
with 'Winged'; # ここに記述
sub fly { print "Pigeons fly in the day\n" }

package main;

Pigeon->new->fly;

つまり、個別にwithしないといけないのかな。

+------+ 
| Bird | --------------------------------------------------+
+------+                                                   |
    |\__________________________                           |
    |                          |                           |
+------+      +--------+    +------+      +--------+    +------+      +--------+
| Bird | <--- | Winged |    | Owl  | <--- | Winged |    | Hawk | <--- | Winged |
+------+      +--------+    +------+      +--------+    +------+      +--------+

こんな感じ?。それとも鳥は翼を持つからflyメソッドをBirdクラスに直接書いてしまっても良いのだろうか?(ペンギンとかはここでは無しの方向で)

一応上の図には載せてないのだけどサンプルでは Animal->Mammal->Batという(鳥ではないけど飛ぶことのできる)コウモリクラスがあることを想定している。

ProductName モダンPerl入門 (CodeZine BOOKS)
牧 大輔
翔泳社 / ¥ 2,940 ()
在庫あり。