Rakudo Starを触ってみた

Wiki Bookを読みながら、面白いなと思った部分。

型チェックしてくれる

> my Int $x;
Int()
> $x = "1"
Type check failed for assignment
> $x = 1
1

multi method dispatch

Haskellっぽくかける

> multi sub fib (Int $n where { $n < 3 }) { 1 }
> multi sub fib (Int $n)                  { fib($n - 1) + fib($n - 2) }
> fib(10) #55

終了条件を最初に決めて、あとは再帰させてみた。

> multi sub mysum (@a where {@a == 0}) {return 0}
> multi sub mysum (@a) {@a[0] + mysum(@a[1..(@a-1)])}
> mysum 1..10 #55

Placeholder Arguments

$^で

> for (@myArray) { say $^a + $^b; }
3  # 1+2
7  # 3+4
11 # 5+6

gather take

リスト内包表記っぽい。それともScalaっぽい?

> gather for 1..10 {take $_ if $_ % 3 == 0} # 3 6 9

こんな感じにもできる

> gather for 1..10 {take 1..$_,"\n"}
1
 1 2
 1 2 3
 1 2 3 4
 1 2 3 4 5
 1 2 3 4 5 6
 1 2 3 4 5 6 7
 1 2 3 4 5 6 7 8
 1 2 3 4 5 6 7 8 9
 1 2 3 4 5 6 7 8 9 10 

Rakudo Starを入れた

朝からPerl6の実装のひとつのRakudo Starを入れて遊んでた。

$ ./perl6 
> for 1..5 { .say }
1
2
3
4
5

無限リスト

> for 1..Inf { .say }
1
2
3
...
20092
20093
20094
Segmentation fault

週末にもう少し触ってみよう。

ProductName Einstieg in Perl 6
Alvar Freude
Addison Wesley Verlag / ¥ 4,393 ()
近日発売 予約可

Python,Ruby,PerlのMicroframework

Flask周りを調べていたらいくつかあった

Python

Ruby

Perl

Dancer面白そう。

#!/usr/bin/perl
use Dancer;

get '/hello/:name' => sub {
    return "Why, hello there " . params->{name};
};

dance;

PerlフレームワークCatalyst完全入門

気になるが、他の著書みたらこんな感じなので、実際に本屋で中を見てからのほうがいい気がした。

ProductName PerlフレームワークCatalyst完全入門
山田 祥寛
インプレスジャパン / ¥ 4,410 ()
在庫あり。

目次もない

HaskellでYAML

HaskellでYAMLを扱うライブラリはyaml,HsSyckがあるんだけどlibyamlのバインディングであるyamlのほうは使い方がわからん。

なので、HsSyckの使い方を覚えた。

import Data.Yaml.Syck

global_tag  = mkNode $ EStr $ packBuf "Item 1"
name_tag    = mkNode $ EStr $ packBuf "name"
name_value  = mkNode $ EStr $ packBuf "kzfm"
email_tag   = mkNode $ EStr $ packBuf "address"
email_value = mkNode $ EStr $ packBuf "xxx@gmail.com"
pass_tag    = mkNode $ EStr $ packBuf "password"
pass_value  = mkNode $ EStr $ packBuf "snail"

item = mkNode $ EMap [(name_tag,name_value),(email_tag,email_value),(pass_tag,pass_value)]
node = mkNode $ EMap [(global_tag,item)]

main = do
  emitYamlFile "test.yaml" node

作成されたtest.yamlの中身

--- 
? "Item 1"
: 
  ? "name"
  : >-
    kzfm

  ? "address"
  : >-
    xxx@gmail.com

  ? "password"
  : >-
    snail

これをperlでparseしてみる

use YAML;
my $filename = "test.yaml";
my $doc = YAML::LoadFile($filename);
print YAML::Dump($doc);

実行結果

---
Item 1:
  address: xxx@gmail.com
  name: kzfm
  password: snail

ナイス!

Net::AmazonでBad Requestエラー

大掃除と配置換えのためにサーバーの電源を切ったり入れたりしてたらNet::Amazonが動かなくなってしまった。

Net::Amazonのデバッグは

use Net::Amazon;
use Log::Log4perl qw(:easy);

Log::Log4perl->easy_init($DEBUG);

my $ua = Net::Amazon->new(

とか。

手元のMacbookと比較しながらにらめっこすること3時間。そろそろイライラして来た頃合にSignatureしか考えられんよなぁとソースを見ながらふと、時間ズレてんじゃねーの?

ビンゴだった

cpanのgpgエラー

cpanコマンドでinstall CPANすると

警告: 構成ファイル「/Users/xxxx/.gnupg/gpg.conf」の安全でない所有者

となるのは-Hオプションをつけてないから。

sudo -H cpan CPAN

とやればよろしい。

ProductName 初めてのPerl 第5版
Randal L. Schwartz,Tom Phoenix,brian d foy
オライリージャパン / ¥ 3,780 ()


perlでソースコードのハイライト

Pygmentsをperlで使いたかったので、 Inline::Pythonでやってみた。

use Inline Python => <<'END_OF_PYTHON_CODE';
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

def py_highlight(code):
   return highlight(code, PythonLexer(), HtmlFormatter())

def get_stylesheet():
    return HtmlFormatter().get_style_defs('.highlight')
END_OF_PYTHON_CODE


$code = <<'PYTHON_CODE';
from reportlab.pdfgen import canvas

c = canvas.Canvas('hello.pdf')
t = c.beginText()
t.setFont(t._fontname, 64)
t.setTextOrigin(0, 0)
t.textOut('Hello, World')
h = 64 / t.getX() * c._pagesize[1]
t.setFont(t._fontname, h)
c.setFontSize(h)
c.rotate(-90)
c.drawString(-c._pagesize[1], t._leading - h, 'Hello, World')
c.save()
PYTHON_CODE

printf qq|<html><head><style type="text/css">%s</style>
</head>\n<body>%s</body>\n</html>|, get_stylesheet(), py_highlight($code);

pygments

amazon認証プロキシ

amazonの認証に対応するためにhikiのバージョンを0.8.8.1にあげたついでにamazonプラグインを覗いてみたらプロキシで対応していた。

drkcoreのほうはNet::Amazon使っているので、ローカルでSignature組み立ててるんだけど、wikiりたいだけのユーザーがわざわざsecret_keyとか取得すんのもあほくさいからwikiみたいのはプロキシーでいいのかと。

ProductName パターン、Wiki、XP ~時を超えた創造の原則 (WEB+DB PRESS plusシリーズ)
江渡 浩一郎
技術評論社 / ¥ 2,394 ()
在庫あり。

駱駝使いw (2)

行末がOCamlっぽくなっても大丈夫!

use XXX;;
use WWW::Mixi::Scraper;;
my $mixi = WWW::Mixi::Scraper->new(
    email => 'ml', password => 'pw',
    mode  => 'TEXT');;
XXX $mixi->new_friend_diary->parse;;
Next Page