fayを使えと心に直接呼びかけられた

(……きこえますか…きこえますか…JSerの…みなさん… 三島Ha…無名…会です… 今… あなたの…心に…直接… 呼びかけています…フロントエンドは…underscore.jsを…使う場合では…ありません…あなたが…使う…言語は… Clojure某でも…ありません…Haskellです…Haskellを…使うのです…fayでコンパイルするのです…)

fayはHaskellコードをjavascriptにコンパイルするツールで最近精力的に開発が進んでいるようで素晴らしいですね、心に呼びかけられるのも納得です。

import Language.Fay.Prelude

mylist :: [Int]
mylist = [1..10]

-- test
main :: Fay ()
main = print $ any (==2) mylist

fayコマンドでhaskellをjavascriptにコンパイルすればnode.jsで動かせるようになります。

$ fay test.hs 
$ node test.js 
true

underscore.jsに載ってた他の関数もこんな感じ。findなんかはMaybe型で返ってくるので値がなかった場合の処理も楽ちんです。

-- each
mapM_ print mylist

-- map
map (3*) mylist

-- reduce
foldl (+) 0 mylist

-- reduceRight
foldr (+) 0 mylist

-- find
find even mylist

-- filter
filter even mylist

-- reject
filter (not . even) mylist

-- all
all (>0) mylist

-- any
any (>5) mylist

-- contains
any (==2) mylist

すごいHaskellをKindleで読む時が来ましたね!これは内側からなぜか湧き上がる物欲ですが、、、、

ProductName すごいHaskellたのしく学ぼう!
Miran Lipovaca
オーム社 / ?円 ( 2012-09-21 )


ProductName Kindle Paperwhite

Amazon.co.jp / 7980円 ( 2012-11-19 )


三島Haskell無名関数の会は一緒にHaskellを学ぶお友達を絶賛募集中です。今度は三島でHaskell勉強してホルモン食べながらビールを飲みます。

Haskellでマルコフ連鎖

Titanium Mobileがうまくいかないのだが、さすがに二三日で解決しないと気が滅入るので気分転換。

virthualenv 
source .virthualenv/bin/activate 
cabal install markov-chain

コードを書く。文章は魯山人(青空文庫)から。Kindle買ったら魯山人は全部入れておくといいですね。

import System.Random
import Data.MarkovChain

mytext = "かつおぶしはどういうふうに選択し、どういうふうにして削るか。まず、かつおぶしの良否の簡単な選択法をご披露しよう。よいかつおぶしは、かつおぶしとかつおぶしとをたたき合わすと、カンカンといってまるで拍子木か、ある種の石を鳴らすみたいな音がするもの。虫の入った木のように、ポトポトと音のするしめっぽいにおいのするものは悪いかつおぶし。本節と亀節ならば、亀節がよい。見た目に小さくとも、刺身にして味い大きいものがやはりかつおぶしにしても美味だ。見たところ、堂々としていても、本節は大味で、値も亀節の方が安く手に入る。次に削り方だが、まず切れ味のよいかんなを持つこと。切れ味の悪い鉋ではかつおぶしを削ることはむずかしい。あかさびになったり刃の鈍くなったもので、ゴリゴリとごつく削っていたのでは、かつおぶしがたとえ百円のものでも、五十円の値打ちすらないものになる。"

result = take 200 $ run 2 mytext 0 (mkStdGen 123)

main = putStr result

実行

かつおぶしは、かつおぶしの良否の簡単な選択し、どういうふうに、ポトと音のするものがやはりかつおぶしを削ること。切れ味の悪いかつおぶしを削ること。切れ味の悪いかつおぶしはどういうふうに、ポトポトポトポトと音のするしめっぽいにおいのするしめっぽいにおいのするしめっぽいにおいのするものは悪いかつおぶしを削るか。まず、かつおぶしの良否の簡単な選択し、どういうふうにして味い大きいものになった木のよう。よい。

日本語は形態素解析が必須だなと。

ワンクリックというジェフ・ベゾスの話を読んだ

ジェフ・ベゾスって実はエンジニアだったのね

ProductName ワンクリック―ジェフ・ベゾス率いるAmazonの隆盛
リチャード・ブラント
日経BP社 / 1680円 ( 2012-10-18 )


後悔最小化理論ってのは面白かったが、それ以外は読み物っぽかったかな。

一つ、心に残ったのがp.210の「小さな書店はアマゾンと共存」っていう節で

今後どうなるのかは-いま、どうなりつつあるのかは-リアル書店のい心地がもっとよくなる、だと思います。ソファが増える、おいしいラテが飲める、店員の質が上がるといった具合です。すぐれた書店は、20世紀のいま、コミュニティーセンター的な役割を果たしています。

これは図書館でも言われていることだけど、それは本を売る場所ではなくてスタバとかそっち方面と競争していくことになるのかなぁ。

例えば、高校生なんかは休日に図書館に勉強しに来ているけど司書に混じって教師の役割をデキる人がいるような場になってもいいんじゃないかなぁー。

というか、小学生とか中学生が集まれるようなコミュニティセンターを目指すべきなんじゃないかと思ったりもする。

図書館っていうのは本の博物館じゃなくて、知識を得る場所であるべきであろう。

「iPhoneアプリ設計の極意」を読んだ

コードは出てこない。デザインの指針が満載なので、iPhoneアプリを作る人にとっては非常に参考になる本なのではないでしょうか?

1353808014

  • iPhoneアプリは消費財
  • 構想は大きく、実装は小さく
  • アイコンとそのサイズに関して
  • 起動画面の設計
  • iPhoneの設計が先で、その後にWebの設計を考える

特に起動画面の設計で、スプラッシュスクリーンをどうするかっていう話は、ラーメン屋の行列心理(外で待っていると待っている意識になるんだけど注文を取ってから待っている場合には待たされている感覚になってイライラしやすいとかそんな話)に似ているなぁと。

ProductName iPhoneアプリ設計の極意 ―思わずタップしたくなるアプリのデザイン
Josh Clark
オライリージャパン / 3570円 ( 2011-06-18 )


pdfの余白が邪魔

オライリーは電子書籍を買うようにしていて、大抵epubで入手している。今回はpdfしか用意されてなかったので、pdfを購入してみたのだが余白のせいで字が小さくなってしまうためNexus7のような7インチタブレットでは非常に読みにくかった。今後はepubかmobiじゃないと買わないと思う。

電子書籍は付箋が貼れないのがちょっと困る。

AldikoもKindleもBookmarkできるようになっているんだけど、範囲が大雑把すぎるのでこまっている。行単位でブックマークできると嬉しいんだが。

1353808013

Emacsでタグジャンプ

昨日Gentoo Linuxの布教活動に来ていた@karky7にEmacsのタグジャンプの便利さを教えてもらったので、僕もちょっと使ってみようかなと。

ちょうどredmineの中を読んでいるのでappディレクトリで

etags */*.rb */*/*.rb

と打つとTAGSファイルができて(etags -f rb -Rとか叩けないんだろうか?)タグジャンプができるようになるのでM-.で探索しつつM-*で元の場所に戻るということが簡単にできるようになっていい感じ。

RoRみたいなフレームワークは行きつ戻りつすることが多いのでタグジャンプを使えばコードを追いかける効率が上がりそうだ。anythingとかhelmでも使えるようなのであとで設定してみる。

三島Haskell無名関数の会#1が面白かった

皆様お疲れ様でした。Emacsの設定ネタでやたらと時間が取られてしまったが、Emacsの素晴らしさが伝えられたかなーと。キーバインドなんて些細なことですよ、みんな左手の小指を鍛えて快適なEmacsライフをおくりましょう!

init.elはこれを参考にしてください。

todo

virtualboxでGentoo Linuxを入れてみる。

次回

fay-langの話とか、もう少しハンズオン的なyesod(wikiを作るくらいの)ネタをやれればいいかなという感じ。

次回は三島でやって、懇親会を鈴木屋でやりたい。

参加者

Kindleで漫画はありなのか

と気になったので稲中購入。めくる方向が普通の本と違って漫画と一緒なので最初戸惑った。

蟲師も気になるところではあるが。

ProductName 蟲師(1): 1 (アフタヌーンKC (255))
漆原 友紀
講談社 / ?円 ( 2012-09-28 )


伝染るんですは電子書籍化されてなかった。待ち遠しい

ProductName 伝染(うつ)るんです。 (1) (小学館文庫)
吉田 戦車
小学館 / 630円 ( 1998-11 )


「Kindle自費出版ガイド」は役に立つ情報が満載だった

「Kindle自費出版ガイド」という電子書籍作成ノウハウ満載なミニコンテンツが興味深い件につられて購入して読んでみたが、必要なことが書いてあって僕にとっては費用対効果が高かったので満足。

レビューにはページ数に対して価格が高いか安いかという評価が多いようだが、そのコンテンツが幾らで消費されるべきものなのか?という観点で考えると興味深いかも。本書はブログの優良な1エントリぐらいの量だが、これが100円で消費されているわけですよね?ということはKindleで見れたほうが便利なブログのエントリはKDPでも買えるようにしておくとブログのAuthorも消費者もハッピーになれるwin-winなモデルになるのかなぁと。

例えばEmacsの設定みたいな設定系のやつとかquickstart系のエントリはKDPに持って行きやすいような気もする。Dive Into Python3なんかはそんな感じだよね。情報のポータビリティにお金を払うのか、コンテンツの内容にお金を払うのかはちょっと考える必要があるのかもしれないけど。

ProductName Dive Into Python 3 日本語版
Mark Pilgrim
/ ?円 ( 2012-10-26 )


例えば、はてブが一定以上ついて、それが継続的に続くようだったらKDPに移行するっていう出版モデルがあってもいいのかなぁと思ったりもする。それは、日経だかどこかみたいに2ページ目移行はログインが必要な感じのを真似して元エントリを削除してamazonへのリンクにしてもいいのかなぁと思う。そっちのほうがgoogle adsenseとかメルマガよりコンテンツの消費の仕方というか課金モデルとして健全な気がするしなぁ。

Alloyでつくる簡易RSSリーダー

Titanium Mobile iPhone/Androidアプリ開発入門の簡易RSSリーダーをAlloyで書きなおしてみた

alloy rssreader

CoffeeScrptで開発する方法については、ここを参照のこと。

軽くハマったのはviewかな。

views/index.xml

最初TabGroupにidを設定したら、$.index.openでエラーがでた。

結局$.indexってなんじゃろか?とドキュメントを読んだら解決した。

要するにViewのトップレベルには

  • Ti.UI.Window
  • Ti.UI.TabGroup
  • Ti.UI.iPad.SplitWindow

のいずれかが必要で、idが明示的に指定されてない場合には、そのファイル名がidとして利用される。

規約に従うことにしたらxmlはシンプルになった。

<Alloy>
    <TabGroup>
    </TabGroup>
</Alloy>

controllers/index.coffee

コントローラーは本の通りに。スタイルとかも全部コントローラーに書いちゃったのでindex.tssはいじってない。

createApplicationTabGroup =  ->
  tab1 = createRSSTab 'Developer Blog', 'http://developer.appcelerator.com/blog/feed'
  tab2 = createRSSTab 'Q&A', 'http://developer.appcelerator.com/questions/feed/newest'
  $.index.addTab tab1
  $.index.addTab tab2
  return

createRSSTab = (title, url) ->
  win = Ti.UI.createWindow
    title: title

  tab = Ti.UI.createTab
    title: title
    icon: 'KS_nav_views.png'
    window: win

  tableView = Ti.UI.createTableView {data:[]}
  win.add(tableView)

  win.addEventListener 'open', ->
    query = String.format "select * from rss where url = '%s'", url
    Ti.Yahoo.yql query, (res) -> 
      if res.success is false
        alert("Yahoo YQL error.")
        return
      res.data.item.forEach (item) ->
        tableView.appendRow
          title: item.title
          color: '#000'
          link: item.link
          hasChild: true
    return

  tableView.addEventListener 'click', (event) ->
    detailWin = Ti.UI.createWindow {title: event.rowData.title, backgroundColor: '#fff'}
    webView = Ti.UI.createWebView {url: event.rowData.link}
    detailWin.add(webView)
    tab.open(detailWin)
    return

  return tab

createApplicationTabGroup()

$.index.open()

ProductName Titanium Mobile iPhone/Androidアプリ開発入門―JavaScriptだけで作る
小澤 栄一
秀和システム / 2520円 ( 2012-02 )


Blogとは情報収集ツールであり自分のための反芻ツールでもある

zenbackの何がいいかというとSNSのボタンというより関連記事をまとめてくれることだ。

僕の場合は筆頭想定読者が自分なので、昔考えてエントリにしたことが関連記事で出てくると、思いがけず反芻することができたりして、そのおかげで当時よりも理解がすすんだり、もう一歩踏み込んだアイデアが浮かんだりするので重宝している。昨日再発見したこれなんかもエレベータで数階上がった感覚が得られた。

思考というか課題というのは螺旋を描きながら前進するものだろ思っているので、一周廻ったあたりでタイミングよく振り返るツールとしてzenbackの関連記事はいい機能だと思うんだがどうなんだろうか?

そしてblogは情報発信というよりは情報収集のためのアンテナとして優れているのだと思う(たぶん昔書いたような気もするが)その当時はコメントとかトラックバックでエントリ以上の質のレスポンスがあって、非常に勉強になったわけだが、いまはそれらはtwitterが担っているのだと思う。

というのは、ちょっと前に隠れフォロワー(twitterのアカウント持たずにtweetを補足するというアレ)に補足されるのが嫌になって鍵をかけたらレスポンスが激減していいことがなかったのでもとに戻したんだけど、その結果twitterはコメントツールの役割も担っているんだなぁ認識したので。

一方でfacebookは思考の幅を広げるには大して役にたたない(すくなくともblogのレスポンスとしては役に立ったことがない)。というか「いいね!」を押したからといって何がどうなるんだという。

そんな感じのことを考えながら澤の花を呑んでた。