15012010 music
IDMさも感じさせられるが、僕の中では有機っぽい音
A Moment To Myselfはヤバイ、パネェ。Personaもいい曲だと思う。重低音が響くスピーカーでのraveだったらオチる。
15012010 music
IDMさも感じさせられるが、僕の中では有機っぽい音
A Moment To Myselfはヤバイ、パネェ。Personaもいい曲だと思う。重低音が響くスピーカーでのraveだったらオチる。
15012010 Haskell
import Monad
maze = ["**************************",
"*S* * *",
"* * * * ************* *",
"* * * ************ *",
"* * *",
"************** ***********",
"* *",
"** ***********************",
"* * G *",
"* * *********** * *",
"* * ******* * *",
"* * *",
"**************************"]
type Pos = (Int,Int)
type Path = [Pos]
findPos :: [String] -> Char -> Pos
findPos mz c =
let y = findY mz c 0
x = findX (mz!!y) c 0
in (x,y)
where
findY :: [String] -> Char -> Int -> Int
findY [] _ _ = error (c : " not found\n")
findY (x:xs) c n | c `elem` x = n
| otherwise = findY xs c (n+1)
findX :: String -> Char -> Int -> Int
findX (x:xs) c n | x == c = n
| otherwise = findX xs c (n+1)
canMove :: [String] -> Pos -> Bool
canMove mz (x,y) | mz !! y !! x == '*' = False
| otherwise = True
nextSteps :: [String] -> Pos -> [Pos]
nextSteps mz (x,y) = filter (canMove mz) [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]
getAllPaths :: [String] -> Pos -> Pos -> [Path]
getAllPaths mz st gl = getPath mz gl [ x : [st] | x <- nextSteps maze st]
getPath :: [String] -> Pos -> [Path] -> [Path]
getPath _ _ [] = fail "no Path"
getPath mz p1 ap@(path:queue)
| p0 == p1 = (return (reverse path)) `mplus` (getPath mz p1 queue)
| otherwise = getPath mz p1 ( queue ++ [ x : path | x <- nextSteps mz p0, not (or (map (x `elem`) ap))])
where p0 = head path
start = findPos maze 'S'
goal = findPos maze 'G'
allpath = getAllPaths maze start goal
path全体で一度通った位置を再度通らないようにしないと終わらなかった。
f-Biz主催のセミナーは初参加。若い農力がアグリビジネスを変える!というわけで、異分野すぎる気もするがまぁいいやということで。
実際参加者の6割は農業従事者だったらしい。
さて、パネラー討論でライスボディがオヤジギャグ的なネーミングセンスだったとかいう藤田さんのそういう話の流れで、小出さんがライスボディを最初においたのは富士川SAで、野菜作りも富士宮だから富士は藤田さん歓迎ムードですよ的な返しをしてたんだけど、そこで,「"ふじ"た」だけにというオヤジカウンターを返さなかったのが残念で仕方がない、悔やまれた。感想はそこに尽きる(嘘)。
あと、最初はシブヤ米って萌米みたいにパッケージングいじってマーケティングの手法で情報に付加価値くっつけてるだけなんじゃないの?とか思って聞いてたんだけど、エドウィンとの提携の話あたりを聞いてると、もう少し農業をたんに何かをつくるだけじゃなくて、そこに関わるものの営みもふくめて広く考えているんだなと思った。パッケージングも、他の商品ではごく普通にやられてるようなことがやられてないからそういう風に映るのかと認識を改めた。
あとは、味はリピーターになるかどうかの重要な要件だけど、最初にリーチするかどうかはあんま関係ないくて、リーチするためのパッケージングとかストーリー構築が重要っていうのも刺さった。思うに、酒屋ではじめての酒を選ぶのもじつはラベルに気合がはいってるかどうかだったりするもんな。で、酒屋さんはセレクトショップ的なとこを好んで使うので、情報も一緒に飲んでるっていわれれば納得なんだけど、セレクトショップ的な米屋さんて利用した事ないね。まぁ、実家が田舎で随時精米したての米が送付されてくるという体制が整っているからなんだけど。
結局、農業を単なる生産業として捉えるだけではなくて、もう少し生産の上流、下流、それに関わるヒトを見据えて再定義してるなぁと感じさせられたセミナーだった。航空を輸送じゃなくてサービス体験と再定義したとかいう話とダブった。「ちがった側面から農業を見る」ということを何度か藤田さんが話してたのも印象に残った。
農業を再定義するって言う話を含めて、どう生きるかという事に関しては農人日記が非常に刺激的だ。
僕もそろそろ、人生を再定義する時期にきているのだろうとつくづく感じる今日この頃であった。
アグリズムは明日新刊がでるらしいんだけど惜しいことにamazonには書影がない。
15012010 Haskell
どう書くは知ってる言語で解くのは楽しいけど、習い始めの言語はつらい。というわけで、mixiの課題丸投げあたりをチョイスすることが多い。
覆面算を解くというのがあったのでやってみた。XYZ + WXYZ + WXYZ + VWXYZ + VWXYZ = UVWXYZを満たす文字をそれぞれ求める。
題意からU=1は自明なんだけどあえて力技で。
-- XYZ + WXYZ + WXYZ + VWXYZ + VWXYZ = UVWXYZ
-- 4*Z + 4*10*Y + 4*100*X + 3*1000*W + 10000*V = 100000*U
check :: [Int] -> Bool
check (u:v:w:x:y:z:_) = 10000*v + 3000*w + 400*x + 40*y + 4*z == 100000*u
notDup :: [Int] -> Bool
notDup (x:xs)= notDup' x xs
where notDup' _ [] = True
notDup' x yy@(y:ys) | x `elem` yy = False
| otherwise = notDup' y ys
sol :: [[Int]]
sol = filter check $ filter notDup
[[u,v,w,x,y,z]|u <- [0..9], v <- [0..9], w <- [0..9], x <- [0..9], y <- [0..9], z <- [0..9]]
全通りの組み合わせを作ってから数字がダブっている組み合わせを除いた。
結局、組み合わせを最初から使えばいいので、0から9の数字の中から6つを選んで、それらの入れ替えをしながらチェックをするのもやってみた。
import List
check :: [Int] -> Bool
check (u:v:w:x:y:z:_) = 10000*v + 3000*w + 400*x + 40*y + 4*z == 100000*u
comb :: [Int] -> Int -> [[Int]]
comb _ 0 = [[]]
comb [] _ = []
comb (x:xs) n = map (x:) (comb xs (n-1)) ++ comb xs n
permutation [] = [[]]
permutation xs = concat [map (x:) $ permutation (delete x xs) | x <- xs]
sol = filter check $ concatMap permutation (comb [0..9] 6)
combとpermutationはProgramming:玉手箱:組合せを参考にした
ノスタルジーを誘うダウンビートなトラック満載。
Afterglowsomaの透明感が好き。ユルユル。
14012010 music
初広見公園。古墳とか屋敷とかがある。あと、籠があって担げるようになっている。ゼンマイ侍好きの子どもたちはやたら喜んでいた。

併設されている公園。

さんざん行ってみたいと言ってたU隊長だが「これだったら、中央公園でいいわ」とぼそっとつぶやいたのは聞き逃さなかった。(離れた場所に遊び場あったけど)遊具的には大渕公園のが楽しいんじゃないか。きわだ路で蕎麦食えるし。
公園で遊んだら、そのまま降りて行って、吉原のsofariiでランチ。
つけナポに、五穀米ごはんを投入してスープを食べきるという技が最高でした。旨いですマジ。おすすめ。

U隊長の食べてたスープランチとガトーショコラ。

尚、つけナポの属性はつけ麺なので、僕の中ではラーメン的な扱いです。
それにしてもつけナポの公式サイトはあんまやるきないのかな(blog更新してないし)。やっつけナポリタンか?
14012010 Haskell
実際にやってみると位置を記録すんのに手間取ったり(pythonはenumarateがあるので楽)とか、リストモナドの使い方をちゃんと理解してなかったりとかで、終わらん。
import List
maze = ["**************************",
"*S* * *",
"* * * * ************* *",
"* * * ************ *",
"* * *",
"************** ***********",
"* *",
"** ***********************",
"* * G *",
"* * *********** * *",
"* * ******* * *",
"* * *",
"**************************"]
type Pos = (Int,Int)
type Path = [Pos]
findPos :: [String] -> Char -> Pos
findPos maze c =
let y = findY maze c 0
x = findX (maze!!y) c 0
in (x,y)
where
findY :: [String] -> Char -> Int -> Int
findY [] _ _ = error (c : " not found\n")
findY (x:xs) c n | c `elem` x = n
| otherwise = findY xs c (n+1)
findX :: String -> Char -> Int -> Int
findX (x:xs) c n | x == c = n
| otherwise = findX xs c (n+1)
start = findPos maze 'S'
goal = findPos maze 'G'
canMove :: [String] -> Pos -> Bool
canMove maze (x,y) | maze !! y !! x == '*' = False
| otherwise = True
enableSteps :: [String] -> [Pos] -> [Pos]
enableSteps maze path@((x,y):_) = filter (canMove maze) [(x-1,y),(x+1,y),(x,y-1),(x,y+1)]
getAllPaths :: [String] -> Pos -> [Path]
getAllPaths maze start = [[start]] >>= toward
where
toward :: Path -> [Path]
toward path
| not.null $ moves = map (:path) moves >>= toward
| otherwise = [path]
where
moves = enableSteps maze path
結局、リストモナドをどうつなげていったらいいのかというところでつまづいている。あと[String]っていう型じゃなくてMazeとかいう型にしといた方がよかったかも。
年末からイノベーションに関する本をいろいろ読んでいたのだけどその流れでたどり着いた。これは名著でしょう。年明け早々いい本にあえてラッキーだ。
創薬ではある種の論理に基づいて、化合物の探索、合成を行う事になるわけだが、それはいわゆる定量的構造活性相関解析(QSAR)、定量的物性構造相関解析(QSPR)さらには動態特性(QSPkR)というような構造(やその特性)と変換したいパラメータの関連性からある程度論理的に探索対象を決定していくのが主流だ。ただし、このようなやり方では、ある意味推測が容易な答えしか出さないことが多いし、正しい答えの出るであろう予測の範囲もごく限られてしまうことが多い。予測範囲以外のものをアウトライヤーと呼び、予測の範囲外としてしまうが、実際にはそういう化合物の答えが知りたかったりするので常に苦労する。
我々は帰納的な推論から出発して、その枠を限りなく広げていきたいのだが、それはなかなか難しいし、実際問題として帰納の枠のなかでは無理ではないかと考えている。局所的な予測モデルを束ねてより大きい問題に対応すればよいのではないかという考え方もあるのだけど、それは結局、問題を小さくしておいてわかることの中だけで理解するということなのであまり上手くいかない。さらに、新規性の高い化合物にジャンプする(いわゆるホッピング)というものはQSARのような帰納的な推論方法からでは成し遂げることは非常に難しい。(ファーマコフォア探索は前提条件決め打ちだからなぁ、、)
いろいろ考えるに、結局創薬においては、それぞれのプロジェクトで(尤もらしい)仮説を構築できる力というものが一番重要なのだろうと考えているのだけど、本書はそういった仮説構築の論理というものに対して、帰納や演繹との対比をしながら明確に述べているので、QSARの論理的な限界はどこら辺なのかとか、より良い仮説を出すためにはどういう思考サイクルをまわせばいいかとかのヒントが満載だ。
さて、本書では科学的方法には帰納法の他に仮説の提案が必要であり、仮説の提案なしには帰納法を正しく用いることは出来ないと述べていて、その通りだと思う。しかし一方で、仮説は検討中の問題の現象についてもっともらしい、もっとも理にかなった説明を与えるものでなくてはならないとあるように、確度の高い仮説を構築するためには、高い分析能力や論理力、数多くの解析方法やマイニング方法への知識があってはじめて仮説提案力が高まるのだろうなと思うのだ。
21章は短い
Real World Haskell―実戦で学ぶ関数型言語プログラミングHDBC-2.1.0だと下のようなエラーがずらずらでるのでgitで入れる。
Database/HDBC/SqlValue.hs:585:9:
Duplicate instance declarations:
instance Typeable Day
-- Defined at Database/HDBC/SqlValue.hs:585:9-20
instance Typeable Day
-- Defined in time-1.1.4:Data.Time.Calendar.Days
使ってみる
Prelude> :m Database.HDBC Database.HDBC.Sqlite3
Prelude Database.HDBC Database.HDBC.Sqlite3> conn <- connectSqlite3 "drkcore.db"
Prelude Database.HDBC Database.HDBC.Sqlite3> getTables conn
["entries","entry_tags","roles","tags","user_roles","users"]
Prelude Database.HDBC Database.HDBC.Sqlite3> \
quickQuery' conn "select title from entries where pubdate > '2010-01-01'" []
[[SqlByteString "\229\155\155\229\173\163\230\161\156\227\129\174\232\138\ ...
これをutf8で出力したいのでWIKIも読んどく。