Flask周りを調べていたらいくつかあった
Python
Ruby
Perl
Dancer面白そう。
#!/usr/bin/perl
use Dancer;
get '/hello/:name' => sub {
return "Why, hello there " . params->{name};
};
dance;
25052010 perl
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
ナイス!
Esotericを読み始め。
一章の練習問題にファイルのオープンを使わないでQuine
printf a="printf a=%p,a",a
perlだとsigilが必要な分だけ難しいなぁ。
12012010 perl Turbogears Python
Turbogearsで作るとかいうあたりに惹かれてぽちっと。
最近は、仕事がハードで金曜の夜はコード書いたりとか技術書読んだりとかはやる気がおきない。そのうえ金土だけ酒解禁日なので日本酒を呑むのがうれしくて仕方がないので余計にやる気などおきない。
というわけで、今晩は山形正宗をチビチビやりながら、ふとプログラム言語を静岡酒に例えたらどうなるだろうかと妄想してみた。
まぁ間違いなくPythonは喜久酔。香りはそこそこに上品な口当たりとすっきりと旨い。旨さがストレートに伝わってきて心地よい。コレは誰が飲んでも普通に旨いって思えるよな。
それに対しperlは臥龍梅かな。あのどっしり感とふくよかな旨みのわりにするりとした後味で奥の深い味わい。奥が深い症候群ってのにやられて酒米の種類で飲み比べしたりしたくなるのも臥龍梅ならでは。まさにTMTOWTDI
で、rubyは國香やな。あのメロンを思わせる爽やかな香りと酸味ののった軽快感があるけど旨みもしっかりとしている。あーでも驚き最小ではないな、美味さに驚く。
燗つけて旨いのが白隠正宗。燗をつけたときの旨みのふくらみがなんともいえなくて深みが増します、燗(括弧)はとっつきにくいけど一度慣れてしまうと当たり前になってしまうSchemeあたりか。
とくにオチはないのだけど、静岡で日本酒を呑むとしたら國香の純米中汲みとか白隠正宗の黒いラベルのやつをぬる燗にするのがオススメです。特に國香の中汲みはやたらと旨かった。
いくつかは市川さんで手に入りますヨ。
引数なしで起動したらhelpを表示して終了するのがいいのか、対話モードで起動したらいいのか悩ましいプログラムがあったりする(単に対話モードの処理を書くのが面倒とも)。
システム管理者のための Pythonによると、選択メニューを表示するのにベタ書きしていて、受け取るほうもif-elif-で処理していたのでIO::Promptみたいなモジュールはないのだろうかと探してみたが見つからなかった。
今、ちょうどまさにSICPを読んでいる僕としては朝一の基調講演は気になるところなので、朝早くから出かけた。
ハッカー気質について。内容が面白かった。早起きした価値があった。 それにしてもプレゼンMeadowだよな。あれなんなんだろう?それがちょっと気になった。
luaってそういえば7,8年くらい前(もっと前かな?)に分子生物学会のポスターで見たことあったのを思い出した。
Pythonのプレゼンがわかりやすかった。
IronPython,Jythonが気になってたが、JRuby,IronRubyも面白そう。そういえばJRubyってDepth-Firstが使っていたような。僕はJythonから使ってみたりするわけですが。
IronPythonはPythonでDirectXとか使えるのが気になる。
プレゼンソフトをつくるお題。IT戦記の人のjavascriptのやつがすげーよくできてるなと。あとGauche面白そう。
盛り上がり
抽選会で本ゲット。やたらと重かった。
充実した一日だった。
ビット演算を利用したアルゴリズム。Shift-ADDと違いdifference,insertion,deletionを考慮する。
可能性を論理和として積み上げていってShift-ORみたいなアプローチで評価するとこだと思う。いまいちちゃんと理解できてないが。
for j in range(1,k+1):
s[j] = (r[j] << 1) & Tc
s[j] |= (r[j-1] | s[j-1]) << 1
s[j] |= r[j-1]
s[j] |= 1
あと、perlで@a = @bとやれるところがpythonではa=bとできず、 b = copy.copy(a)なのね。
#!/usr/bin/env python
import copy
def amatch (T,P,k=-1):
text_length = len(T)
pattern_length = len(P)
po2 = map(lambda(x): 1 << x,range(31))
if k == -1: k = int(pattern_length/10) + 1
Table = [0] * 256
for i in range(pattern_length):
Table[ord(P[i])] |= po2[i]
r = [0] * (k+1)
for i in range(1,k+1):
r[i] = r[i-1] | po2[i-1]
mb = po2[pattern_length-1]
s = [0] * (k+1)
for i in range(text_length):
s[0] <<= 1
s[0] |= 1
Tc = Table[ord(T[i])]
s[0] &= Tc
for j in range(1,k+1):
s[j] = (r[j] << 1) & Tc
s[j] |= (r[j-1] | s[j-1]) << 1
s[j] |= r[j-1]
s[j] |= 1
if s[k] & mb:
return i - pattern_length + 1 if i > pattern_length else 0
r = copy.copy(s)
return -1
if __name__ == '__main__':
print "match: ", amatch("pearl","perl",1)
これもビット演算を利用したアルゴリズム。differenceを許容するけどinsertion,deletionは駄目。
#!/usr/bin/env python
from math import *
def shift_ADD (T, P, k=-1):
text_length = len(T)
pattern_length = len(P)
if k == -1: k = int(log(text_length)+1)
if k == 0: return T.find(P)
if pattern_length == 1: return T.find(P)
if pattern_length > text_length: return -1
if pattern_length == text_length and P == T: return 0
bits = int(log(k+1,2)) + 1 # ????
mask = 1 << ( bits - 1 )
ovmask = 0
for i in range(pattern_length):
ovmask |= mask
mask <<= bits
table = [ovmask >> (bits-1)] * 256
nmask = 1
for i in range(pattern_length):
table[ord(P[i])] &= ~nmask
nmask <<= bits
mask = ( 1 << ( pattern_length * bits )) -1
state = mask & ~ovmask
ov = ovmask
watch = ( k + 1 ) << ( bits * ( pattern_length - 1 ) )
for i in range(text_length):
state = ((state << bits) + table[ord(T[i])]) & mask
ov = ((ov << bits) | (state & ovmask)) & mask
state &= ~ovmask
if (state | ov) < watch:
return i - pattern_length + 1
return -1
if __name__ == '__main__':
print shift_ADD("perlpethonxx","python",2)