第六回Haskell読書会

昨日は第六回Haskell読書会に行ってきた。参加された皆様お疲れ様でした。

演習問題7.5

sumsqreven compose [sum,map (^2),filter even]が間違っている理由を述べよ

という問題で

compose :: [a -> a] -> (a -> a)
compose = foldr (.) id

composeはa -> aという型の関数のリストを引数として取る。

ここで

Prelude> :t (map (^2))
(map (^2)) :: (Num a) => [a] -> [a]
Prelude> :t (filter even)
(filter even) :: (Integral a) => [a] -> [a]
Prelude> :t sum
sum :: (Num a) => [a] -> a

となりsumだけ [a] -> aという型なのでダメ。

sumがなければOKで、これは

:t compose [(map (^2)),(filter even)]
compose [(map (^2)),(filter even)] :: (Integral a) => [a] -> [a]

という型になる。

ProductName プログラミングHaskell
Graham Hutton
オーム社 / ¥ 2,940 ()
在庫あり。

7章で感じたのはfoldr,foldlがさくっと出てきて戸惑うのと、関数合成がさらっと流しすぎなとこ。foldl,foldrは知っているのが前提なのかな?と思った。

SICPの1,2章でも読んでおけば違うかも。

ProductName 計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン,ジュリー サスマン,ハロルド エイブルソン
ピアソンエデュケーション / ¥ 4,830 ()
在庫あり。

関数合成は他の本を読みましょう。

8章はちょっと難しいので、次回は予習して臨む。

Recovery / Eminem

Eminemも聴きます

ProductName Recovery
Eminem
Aftermath / ¥ 1,347 (2010-06-21)
在庫あり。

seductionは良いですな。あと、Love The Way You Lie

アラーム機能

オススメに入ってた。

ProductName ロジクール プロフェッショナル プレゼンター R800 R800

ロジクール / ¥ 9,980 (2009-10-30)
在庫あり。

アラーム機能は、wiiリモコンのバイブを使えばいいんじゃないかと。プレゼンテーションzenを読めばレーザーポインターの必要なスライドは作らんよね。

ProductName プレゼンテーション Zen
Garr Reynolds,ガー・レイノルズ
ピアソンエデュケーション / ¥ 2,415 ()
在庫あり。

ProductName Wiiリモコン(アオ)(「Wiiリモコンジャケット」同梱)

任天堂 / ¥ 3,800 (2009-12-03)
在庫あり。

アマゾンはこういう組み合わせをすすめてこないな。

Twitter Streaming APIをtweepyでGrowlに通知する

勉強会とかでオフィシャルハッシュタグがある場合に、「タグ付きのtweetがプレゼンしているスクリーンに出ればいいのに」と思ったりしたことはありませんか?

僕はあります。

なので、引数に任意の文字列を渡すとフィルタリングした結果をGrowlに通知するようなものを作ってみた。

$ python tw_stream.py "#worldcup"

twitter growl

参考にしたのは以下のサイト

コード

import sys,os
import tweepy
import Growl
import simplejson
import urllib2
import hashlib
from pit import Pit

class StreamListener(tweepy.StreamListener):
    def __init__(self):
        self.g = Growl.GrowlNotifier(applicationName='TwitterWatcher', notifications=['Watch'])
        self.g.register()
        self.image_dir = os.path.join(os.path.expanduser('~'),".tw_growl")

        if not os.path.exists(self.image_dir):
            os.makedirs(self.image_dir)

    def get_icon(self,url):
        fname = "%s.%s" % (hashlib.md5(url).hexdigest(),url.split('.')[-1])
        cached_image = os.path.join(self.image_dir,fname)
        image = None
        if os.path.exists(cached_image):
            image = Growl.Image.imageFromPath(cached_image)
        else:
            f = open(cached_image,'wb')
            f.write(urllib2.urlopen(url).read())
            f.close()
            image = Growl.Image.imageFromPath(cached_image)
        return image

    def on_data(self, data):
        data = simplejson.loads(data)
        image = self.get_icon(data['user']['profile_image_url'])
        self.g.notify(
            noteType='Watch', 
            title=data['user']['screen_name'], 
            description=data['text'], 
            icon=image,
            #description=image,
            sticky=False)

def main():
    conf   = Pit.get('twitter.com')
    user   = conf['username']
    passwd = conf['password']

    stream = tweepy.Stream(user, passwd, StreamListener())
    stream.filter(track=[sys.argv[1]])

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print '\nGoodbye!'

明日葉を処分した(今日の畑)

去年から育てていて大きくなったアシタバだったが、いまいち使い勝手が良くないので思いきって処分することにした。

1277412176 1277412171

綺麗さっぱり。肥料を投入して来週末くらいに島オクラかモロヘイヤかそこら辺を植えるかな。

1277412169 1277412174

収穫したもの。茄子はコンスタントに採れてる。トマトはもう少し赤くならないと青臭い。

1277412166

[おまけ]ベランダでも家庭菜園を始めて、二十日大根の芽が出てきてた。

ProductName はじめての野菜づくり12か月
板木 利隆
家の光協会 / ¥ 2,100 ()
在庫あり。

HTML5

HTML5ROCKSというサイトのプレゼンテーションを見ていて、オースゲー!ってなった。

で、スライド

HTML5 ~= HTML  + CSS  + JS APIs

って書いてあったのでそんな感じの書籍を探してみた。

なか見検索によるとこれはマークアップ主体らしい

ProductName 徹底解説HTML5マークアップガイドブック
羽田野太巳
秀和システム / ¥ 3,150 ()
在庫あり。

一方、こちらはレビューによるとW3Cのドラフトについて主にJavaScript部分を和訳したとのことなのでJSの内容らしいが、ちょっと辛口の評価が気になるので立ち読みしてから検討しよう。HTML5ROCKS読んでから。

ProductName HTML5&API入門
白石 俊平
日経BP社 / ¥ 2,940 ()
在庫あり。

残るは8月にでるらしい洋書

ProductName Beginning HTML5 and CSS3: Next Generation Web Standards
Christopher Murphy,Richard Clark,Oli Studholme
Apress / ¥ 3,852 ()
近日発売 予約可

  • Cutting-edge web development techniques with HTML5 and CSS3
  • The new features of HTML5 and how to work with HTML5 and CSS3
  • The new web standards being implemented by all the major web browsers
  • How to work with the new HTML5 structural sections
  • How to create HTML5 and CSS3 layouts
  • How to create transitions and animations without using Flash
  • New web typography solutions
  • A new vision of web development with HTML5 and CSS3

洋書でも買ってみるかな。

Rのrequireとlibrary

Loading and Listing of Packagesから。

library(package) and require(package) both load the package with name package. require is designed for use inside other functions; it returns FALSE and gives a warning (rather than an error as library() does by default) if the package does not exist.

面白そうなので、試してみる。

まずはRでパッケージを作る準備。package.skeletonは便利

f <- function(x,y) x+y
package.skeleton(list=c("f"), name="testpkg")

f.Rの先頭で存在しないパッケージを読み込む

library(dummypkg) # or require(dummypkg)

f <-
function(x,y) x+y

libraryのほうはエラーになってインストール出来ないが、

$R CMD INSTALL testpkg
* installing to library ‘/Library/Frameworks/R.framework/Resources/library’
* installing *source* package ‘testpkg’ ...
** R
** preparing package for lazy loading
Error in library(dummypkg) : 
   'dummypkg' という名前のパッケージが見当たりません 
ERROR: lazy loading failed for package ‘testpkg’
* removing ‘/Library/Frameworks/R.framework/Resources/library/testpkg’

requireではwarningが出るが先に進む。

$ R CMD INSTALL testpkg
* installing to library ‘/Library/Frameworks/R.framework/Resources/library’
* installing *source* package ‘testpkg’ ...
** R
** preparing package for lazy loading
Loading required package: dummypkg
 library(package, lib.loc = lib.loc, character.only = TRUE,\
 logical.return = TRUE,  中で警告がありました: 
  'dummypkg' という名前のパッケージが見当たりません  

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。

小夜衣 純米吟醸

小夜衣はアタックが強すぎて好みの方向じゃないんだけど、これは良かった。

1277297498

でも、燗つけると(ぬる燗でも)ちょっときつい感じがしてつらかったので、冷やした状態でくいくい飲んだ。

Rのスクリプト中でエディタによる入力をしたい場合

perlみたいに。

tempfile <- tempfile(pattern = "file", tmpdir = tempdir())
system(paste(Sys.getenv("EDITOR"),tempfile))

tempfileは終了時に自動的に消されるっぽい。

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。

この本もいいけどヘルプのbaseパッケージを熟読するか??を使ってサーチした方が欲しい情報にあたることが多いかも。

Shiga.R

ちょうど私とbonohuさんが大阪に行くので、そのタイミングで企画してもらいました(zgmfx20aありがとうございます)

ちなみに僕だけネタものです。

ProductName Rの基礎とプログラミング技法
U.リゲス
シュプリンガー・ジャパン(株) / ¥ 3,675 ()
在庫あり。