Haskellでもmkvirtualenvとworkonが使いたい

Pythonにはvirtualenvwrapperというvirtualenvをより快適につかうためのパッケージがあって、インストールするとmkvirtualenvとworkonというコマンドが使えるようになり、散らばりがちな仮想環境をきちんと管理できるようになるので、一度使うと手放せない。

Haskellでもvirtualenvクローンのvirthualenvを使っているのでmkvirtualenv相当のツールが欲しくなるのは必然。

mkvirthualenvというコマンドを書いた。

import System.Directory
import System.FilePath
import System.Process
import System.Environment

getVirthualenvDir :: IO FilePath
getVirthualenvDir = do
  home <- getHomeDirectory
  return $ home </> ".virthualenv"

main :: IO ()
main = do
  (newenv:_) <- getArgs
  currentDir <- getCurrentDirectory
  vdir <- getVirthualenvDir
  createDirectoryIfMissing True vdir
  createDirectoryIfMissing True $ vdir </> newenv  
  setCurrentDirectory $ vdir </> newenv
  _ <- system "virthualenv" 
  setCurrentDirectory $ currentDir
  return ()

workhonはbashの関数にしてみた。

function workhon(){ source $HOME/.virthualenv/$1/.virthualenv/bin/activate; }

要するに.virthualenvっていうディレクトリでそれぞれの仮想環境を管理するようにしているので、要らなくなったら該当するディレクトリを消せばいいだけ。

例えばHakyll用の仮想環境を用意したい場合、

mkvirthualenv hakyll
workhon hakyll
cabal install hakyll

こんな感じ。仮想環境をぬけるのは

deactivate

入るのがworkhonで出るのがworkhoffじゃなくてdeacivateなのは何でじゃ?っていう疑問も本家Pythonゆずりということで。

macbook airに移行した

移行アシスタントで丸二日かかったので、thundervolt-LANとかそういう有線のケーブルは必須かなと思った。

ちなみにきちんと確認せずに買ったUSB-100の変換アダプタは遅すぎて役に立たなかったが、出張先のホテルでLANケーブルに差す時には重宝するんだろうなぁ。

たった6行のコードでひたすらアイドル水着画像をあつめる(Haskell)

普段はrequests+pyqueryでやるが、今はHaskell強化月間なのでHandsomeSoupを使ってみた。

import Text.HandsomeSoup
import Text.XML.HXT.Core
main = do
  doc <- fromUrl "http://matome.naver.jp/odai/2135350364969742801"
  links <- runX $ doc >>> css ".MTMItemThumb" ! "src"
  mapM_ (putStrLn . show) links

調べてわかったんだが、Haskellって意外とスクレイピング用のライブラリが充実していた。

広島寒い

初めての広島は寒かった。何日か前には雪も降ったらしい。

講義の感触はいまいちわからないんだが、質問はよくされていたので良しとしよう。

僕も色々勉強になったし良かった。

1355316224

100枚スライドを用意していって80枚しか使わなかったのだけど、最後の20枚はopensourceとどう付き合うかとか、勉強会にいこうみたいなキャリアをどう考えるかみたいなどうでもいい話だったので出さなくて良かった。

10年以上この業界にいてその当時と変わったなーと思うことはいくつかあった。

  • IT系に関してベンダー製のソフトウェアを必須とするタスクはほとんどない。
  • (ドッキングシミュレーションのソフトウェアくらい)
  • (あれば便利なのはあるが(PipelinePilotなど))

  • クラスタも今はEC2があるし気軽にランできる

  • (VPSは便利)

  • 教育のためのレールも引かれつつある(見つけにくいだけで)

  • (SNSもかなり重要だったりする)

講演とか講義のために資料をまとめると自分の頭も整理されていい。

macbook airが来た

週末に移行作業する。

1355131337

純正品を買うのもどうかなーと思ったので、planexで。

信者じゃないのでこだわらない。

マクルーハンは難しい

挫折した。

ProductName マクルーハン理論―電子メディアの可能性 (平凡社ライブラリー)
マーシャル マクルーハン
平凡社 / 1260円 ( 2003-03 )


解像度が高いものをホット、低いものをクールと呼ぶ。

クールなメディアないし人間は人びとに参加と関わりあいを要求する。人びとが反応する余地が残っているからである

  • 教育と娯楽の間になにか根本的な差異があると考えるのは誤りである
  • 新しいテクノロジーというものはすべてのヒトとの感覚生活を完全に変えるもの
  • 安価な記録再生機が登場すれば、テレビの将来はレコードの将来に似たものになるだろう

Hakyll+bootstrapでGithub Pagesをつくった

次回の三島Haskell無名の関数の会は懇親会を鈴木屋@三島でやることが決定しているので、前回のホルモン画像を使ってみた。

鈴木屋

使ったもの

Shizudevつくる会でbootstrapの勉強会をやりたいなーと思っているんだけど誰か興味ある人いないじゃろか?

bootstap用の配色ツールを使ってみた(PaintStrapとLavish)

BootstrapのCSSを簡単にいい感じにカスタマイズできる厳選サービス2+1つ紹介で二つ紹介されてたので、両方触ってみた。

Paintstrap

PaintStrapAdobe kulerCOLORloversの配色を取り込んでbootstrapに設定してくれる。

が、kulerがいまいち使えないというか、気に入ったパターンをアプライするとごちゃごちゃした感じになるので「えーこんなの使えねーじゃん」と最初は結構悩んだ。

どういうパターンを選択するのがよいかということになるわけだが、kulerを使った誰にでもできそうなWeb配色を参考にした。というわけで、同系色の濃淡+アクセントカラーというパターンを選ぶとうまくいくことが多いかなと。

natureとかいい感じ

nature_strap

kulerだと7:2.5:0.5とか色の面積比で見ることができないので、面積力がなくてバランスが掴めない場合にはCOLORloversの比率付きで出ているパレットを使ったほうが全体のイメージが掴みやすいかもしれない。それから色で検索できるので個人的にはこっちを使うほうが楽かなと思う。lavish(後述)でつくったセットが気に入らない場合に色で検索できる。

Lavish

写真からbootstrapの配色を決定しくれるサービスなのでお手軽。自分の写真から配色つくれば、オリジナルの写真をherounitにでも設定すれば素敵になるし。

kichitonaru_strap

写真もアクセントカラーの効いてるヤツを選ぶといいみたい(こういうのとか)

Flickrで良さげなのをみつけてアプライするのもいいと思う。

ただ、どうしてもボケた感じになってしまうので、似たような配色をCOLORloversで探してみることは多いかも。あとはFlickr使うとオリジナルの写真を貼付けにくいので、自分のPhotostockの中から使うのがいいかな。

配色の管理

つくったlessは自分用twitter bootstrapを管理するでmy_variablesを配色名にちなんだ名前のファイルにしてヘッダーにオリジナルの画像のURLがlavishとかパターンのurlでもつけておけばいいかなと思う。

こんな感じで使ってみようと思う。

ProductName ウェブ配色 コーディネートカタログ
坂本 邦夫
技術評論社 / 2604円 ( 2011-02-23 )


Haskellのarrは何を持ち上げるのかがちょっと分かった気になった

Hakyllのサンプルを読んでいてarrowの使い方がわかりやすくていいなーと思ったんだがarrの必要性がよく分からなかった。

例えばtagblogの22行目のarrとか。

>>> arr (renderDateField "date" "%B %e, %Y" "Date unknown")

renderDateFieldは

renderDateField :: String  -- ^ Key in which the rendered date should be placed
                -> String  -- ^ Format to use on the date
                -> String  -- ^ Default value, in case the date cannot be parsed
                -> Page a  -- ^ Page on which this should be applied
                -> Page a  -- ^ Resulting page
renderDateField = renderDateFieldWith defaultTimeLocale

だからrenderDateField "date" "%B %e, %Y" "Date unknown"の型は

Page a -> Page a

でarrで持ち上げる必要ないんじゃないかなぁと。

と思ったので、22行目のarrを除いてコンパイルしてみた。

$ ghc --make test.hs 
[1 of 1] Compiling Main             ( test.hs, test.o )

test.hs:22:17:
    Couldn't match expected type `Compiler (Page String) b0'
                with actual type `Page a0 -> Page a0'
    In the return type of a call of `renderDateField'

あれ?arrってCompiler型に持ち上げていたのか。ということはCompiler型ってAllowなのか

みてみると、

data Compiler a b = Compiler
    { compilerDependencies :: Reader DependencyEnvironment Dependencies
    , compilerJob          :: a -> CompilerM b
    }

あーなるほど。こういうのもArrowになるのか。

というわけで、arrの使い道がちょっと分かった(気がした)。

hsktagsでHaskellでもタグジャンプ

@karky7に教えてもらったEmacsのタグジャンプでRedmineの中を探索するのが楽になったが、etagsはHaskell対応していない。

これは困ったとフグったところ、hasktagsをみつけて解決。

hakyllのソースで

hasktags -e .

ってやってTAGSファイルを作ったら、Emacsでタグジャンプできる。