タグ

ブックマーク / maoe.hatenadiary.jp (42)

  • Re: Haskellの勉強で詰まってる部分 - maoeのブログ

    mizchi.hatenablog.com Haskellを習得する上で難しいポイントだと思います。大きく分けると次の二つにまとめられるのではないかと思います。 コードの中で現れる識別子からそれが何なのかを探しづらい Cabalがつらい それぞれ個人的な見解を書いてみます。 コード中の識別子の探し方 モナドのところの <$> とか <*> とか、え〜どっちがApplicativeで何がFunctorだっけ、そもそもその定義はなんだったっけ。え〜あ〜〜〜みたいになる。 と名前空間の そして名前で役割を推測することが困難な事が多々ある。mapM_ とか、前述した演算子とか。いや mapM_ は map があって mapM があって、っていう段階があるのは理解しているけど、ソース読んでて突然出現するそれには全く対応できない。 はどちらも識別子から型がわかれば大部分が解決します。ありがたいことに近

    Re: Haskellの勉強で詰まってる部分 - maoeのブログ
  • GHCのヒーププロファイルの結果を適当に間引く - maoeのブログ

    GHCのヒーププロファイラが出力する.hpファイルは、計測対象のプログラムが動いている間ずっと追記されるので、長時間動かしているとファイルがとても大きくなって、hp2any-managerなどで開けなくなってしまう。 そういう場合は.hpファイルの中身を適当に間引くといいそうなので、ghpというスクリプトを書いた。 % ghp 10 big.hp とすると10サンプル中から1サンプルに間引いて標準出力に出力する。

    GHCのヒーププロファイルの結果を適当に間引く - maoeのブログ
  • FRPの話 - maoeのブログ

    Haskell Advent Calender 2012で久々にブログを書くということで、ついでにはてなダイアリーからはてなブログに移行してみた。記事やコメントはもちろんのこと、はてブも移行でき、なおかつundoもできるという素晴らしい仕様なので、安心して移行することができた。 さて、今回はFunctional Reactive Programming(FRP)の話。FRPとは、時間やシステム外部からの入力に対して応答するプログラムを関数的に表現する方法とでも言えばよいだろうか。 FRPというとまだ定番の実装もなく、実用にはほど遠いと考える人もいるかもしれない。実際、FRPの実装に関してはまだいろいろ研究・改良の余地があるとは思うものの、以前のように簡単にメモリリークするようなことも無く、最近では試してなるほど便利そうと思える段階にまでは洗練されてきていると思う。 FRPが登場してからの1

    FRPの話 - maoeのブログ
  • Orphan instances - maoeのブログ

    Haskellのorphan instanceが何者なのか、その意味するところをちゃんと理解してなかったので調べてみた。 orphan instancesとは何? 型クラスの定義ともデータ型の定義とも異なるモジュールで定義されたインスタンス宣言のこと 例: T.hsで定義されたデータ型Tについて、モジュールM.hsでinstance Show Tとインスタンス宣言されていたら、それはorphan instance。 このインスタンス宣言は、型クラスShowともデータ型Tとも異なるモジュールで宣言されているから。 orphan instancesはいいもん?わるもん? ケースバイケース 前提: Haskell 98では重複した*1インスタンス宣言を扱えない。 利点: ケースによってインスタンス宣言を差し替えられるように、複数のインスタンスを定義したい場合は、別モジュールに定義する(つまりor

    Orphan instances - maoeのブログ
  • あるパッケージのバージョンによって別のパッケージへの依存関係を変更する - maoeのブログ

    具体的にはaesonのバージョンが新しい場合にのみscientificを依存関係に組み込みたいとする。 library build-depends: (aeson >= 0.3.2.5 && < 0.7.0) || (aeson >= 0.7.0 && scientific) こんな感じにできないかなぁと思っていたが、これはparse errorになり動かない。同僚に聞いてみたところ、flagを使うのが定石らしい。 flag aeson070 default: False manual: False library if flag(aeson070) build-depends: aeson >= 0.7.0 , scientific else build-depends: aeson >= 0.3.2.5 && < 0.7.0 aeson070という名前は何でも良い。なぜならmanual

    あるパッケージのバージョンによって別のパッケージへの依存関係を変更する - maoeのブログ
  • hpc-coverallsでHaskellプロジェクトのテストカバレッジを可視化する - maoeのブログ

    GHCには昔からHaskell Program Coverage (HPC)というカバレッジを計測する機能とツールがついてくるのだけど、コマンドラインオプションの指定が面倒だったり、そもそもHPCにバグがあって使いづらいためか、あまり広くは使われてこなかった。 ところが最近になって状況を一変させるかもしれない、hpc-coverallsというパッケージがHackageに上がっていることに気がついたので使ってみた。 Coveralls自体は広く使われてるので解説はいらないと思う。GitHubでみたいなバッジをよく見かけるはず。 hpc-coverallsの使い方は簡単で、Hackageのドキュメントにあるとおり before_installでcabal install hpc-coveralls cabal configureする時に、--enable-library-coverageをつけ

  • Re: Real World Haskellの古いところ - maoeのブログ

    Real World Haskell の古いところ - あどけない話の25章と23章についてのコメントをまとめました。 > id:kazu-yamamotoさん profilingのところはコンパイルオプションがghc 6系の古いものなので http://t.co/tVoGa7aFzv を見た方が良さそう— Mitsutoshi Aoe/maoe (@ma0e) February 6, 2014 ヒーププロファイルはhp2psでも良いけどhp2anyシリーズの方が使い勝手が良いと思います http://t.co/yOK4EBrNWo— Mitsutoshi Aoe/maoe (@ma0e) February 6, 2014 正格性の指定のためにControl.Parallel.Strategiesを使っているけど、並列プログラミングではないなら同じparallelパッケージのControl

    Re: Real World Haskellの古いところ - maoeのブログ
  • GitHubと連携するチャットサービスGitterが便利そう - maoeのブログ

    普段使っていないメールボックスを覗いてみたら、Gitterからベータテストの招待状が届いていたので使ってみた。 使い方は簡単で、GitHubのOAuthでログインして自分のプロジェクト名をクリックするだけ。これでもうチャットルームが作られて、使えるようになる。 記法はGitHub flavouredなmarkdownが使える。GitHub Issuesとも連携しているので#と打つとissueの補完ができる。 さらにチャットルームの歯車アイコンからポチポチするだけでGitHub上でのコミットやコメント等の動きをチャットルームに流せる。.travis.ymlを弄ればTravis CIのビルド結果も流れるようになる。 この記事を書いている時点では GitHub Jenkins Travis Sprintly Trello に対応している。詳しいドキュメントはまだ無いようなので、公式ブログを覗いて

    GitHubと連携するチャットサービスGitterが便利そう - maoeのブログ
  • モナディックなループ - maoeのブログ

    しょーもないイディオムの話。モナディックなループを書くとき、だいたい3つくらい宗派があるように思う。 {-# LANGUAGE ViewPatterns #-} module Loop where import Control.Monad (when) import Data.Function (fix) import System.Environment (getArgs) f :: IO () f = do (read -> n):_ <- getArgs flip fix (0 :: Int) $ \loop i -> when (i < n) $ do print i loop $ i + 1 g :: IO () g = do (read -> n):_ <- getArgs let loop i = when (i < n) $ do print i loop $ i + 1

    モナディックなループ - maoeのブログ
  • 詳解bytestring - maoeのブログ

    というタイトルでbytestringパッケージの包括的ガイドを書こうと思ったけど、まさにそんな内容のスライドをbytestringのBuilderを書いた人が公開していたのを見つけてしまったので、是非そちらを見て欲しい。 A guided tour through the bytestring library 以上、Haskell Advent Calender 2013 22日目の記事でした。 と、これで終わらせてしまってはさすがに良くないので、今回は上のスライドが作られた時点から加えられた主な変更を二つ紹介する。これらの変更は最新のリリース版GHCにバンドルされているbytestringパッケージにはまだ含まれていないので、利用したい場合は適宜cabalファイルにバージョン指定する必要がある。 ShortByteString ShortByteStringはByteStringから使え

    詳解bytestring - maoeのブログ
  • Sensuについて - maoeのブログ

    最近Sensuというモニタリングフレームワークを試している。見ての通り公式はオサレで今時な感じで、Nagiosのような古くささやZabbixのようなエンタープライズ臭はない。 Sensuの特徴は何かと考えると、こんな感じのことが浮かぶ。 監視とメトリクス収集を一つの仕組みで行える。 ただし収集したデータの可視化はしない。 設定がlightweight 所定のディレクトリにJSONファイルをつっこんでおくと勝手にdeep mergeされるのでinclude指定とかいらないし、ポチポチやってデータベースに設定値を入れる必要もない。 キーがかぶったときにどうなるかとかは知らないので、設定がシンプルとは言わない。 JSONなのでコメントは書けない。コメントはChefのレシピ側に書こうという発想。 クライアント一覧は自動的に作られるので自分で能動的に登録する必要もない。 Chefで設定するためのco

    Sensuについて - maoeのブログ
  • persistentでEntityのJSONフォーマットを変更するには - maoeのブログ

  • HaskellでWebAppの開発に必要なN個のこと - maoeのブログ

    あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずHaskellについて知っていることを書いた。 ← ここまで引用。 パッケージマネージャ Cabal 1.18を使おう。以上。 アプリケーションサーバ WSGIとかRackとかの流れでHaskellでもwebアプリのサーバインタフェースを統一化する動きがいくつかあった。その中で一番市民権を得たのはwaiと呼ばれるものだ。 ただ、残念なことにHaskell界でここ数年ずっと続いているI/Oストリーミングライブラリ戦争の決着がついていないため、統一化の状況は思わしくない。waiはconduitというライブラリに依存しているが、フレームワークによっては別のI/Oストリーミングライブラリを基盤にしている。 現状の3

    HaskellでWebAppの開発に必要なN個のこと - maoeのブログ
  • 2013年8月現在のHaskell開発環境 - maoeのブログ

    以前はHaskell Platformを使っていたのだけど、Cabalの依存関係ソルバがあまり賢くなかったこともあり、いわゆるdependency hellに陥ることが多かった。それからというものHaskell Platformを使わない環境を使っている。OS Xでは公式のインストーラやらHomebrewやMac Portsなど幾つかの方法が用意されているが、こんな方法もあるよということで紹介してみよう。 GHCのインストール GHCのリリース版は自分でビルドしない。時間が掛かるから。インストーラは使わずにtarball版を使う。これはインストール先を自分で指定したいため。 tar zxvf ~/Downloads/ghc-7.6.3-x86_64-apple-darwin.tar.bz2 cd ghc-7.6.3/ ./configure --prefix=/usr/local/ghc/

    2013年8月現在のHaskell開発環境 - maoeのブログ
  • Haskellでの並列・並行プログラミングの今: Parallel and Concurrent Programming in Haskell - maoeのブログ

    HaskellコンパイラGHCの作者の一人であり並列RTSを書いた人であるSimon Marlowが、Haskellでの並列・並行プログラミングの今を切り取ったを出した。 Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming 作者: Simon Marlow出版社/メーカー: O'Reilly Media発売日: 2013/07/12メディア: Kindle版この商品を含むブログを見る The Free Lunch Is Overから8年、Haskellでの並列・並行プログラミングの今がどうなっているのかを俯瞰しつつ、実際の問題を解決するときに陥りがちな罠や、高い性能を出すためのtipsなどが読みやすくまとまった一冊になっていて、Hask

    Haskellでの並列・並行プログラミングの今: Parallel and Concurrent Programming in Haskell - maoeのブログ
  • Goodbye Plain Old Chef Repository - maoeのブログ

    pfcasualで仕入れたネタをもとに、Chef環境を刷新したので、忘れないうちにメモしておく。 そもそもの問題意識は、 現状のcookbookにテストが全くないこと テストの欠落が原因でcookbookの変更に対して億劫になってしまっていること Chefの理解・テストの欠落・煩雑な手順によりThe Lone Wolf Chefになってしまっていること を解決したかった。 方針としてはChefConf 2013: Beginner Chef Antipatternsを参考にすることにした。 いわゆるchef-repo *1はやめてcookbookごとにリポジトリを分ける 分けたリポジトリの依存関係はBerkshelfで解決 ローカルではVagrant + vagrant-berkshelfを使って確認 minitest-handlerでテストを書く Chefは最新の11にする 各人のwor

    Goodbye Plain Old Chef Repository - maoeのブログ
    nsyee
    nsyee 2013/07/12
  • Chefのあれこれ #pfcasual - maoeのブログ

    昨日Provisioning Frameworks Casual Talks vol.1というイベントに参加した。イベントの内容はスライドも上がってるだろうし割愛して、今の状況や思うことなどを書いてみよう。 前提として、現職での管理対象のサーバは少なくて仮想サーバを含めてせいぜい40台程度。各人が使う開発マシンとバッチ処理が走っているマシンが半々くらい。残りは雑多な用途とproductionが数台。web系の会社と比べると極端にproductionサーバが少ないと思う。僕が入社するまではお手製のセットアップスクリプトで諸々の設定をしていたようだ。 chef-solo vs. chef-server サーバ台数はさほど多くないがchef-serverを使っていて、chef-clientを常時起動させて30分ごとにsyncするようにしている。productionサーバについてはかなり慎重に設定

    Chefのあれこれ #pfcasual - maoeのブログ
    nsyee
    nsyee 2013/05/11
  • HaskellでCIするなら - maoeのブログ

    函数プログラミングの集いのランチで聞かれたのでHaskellのテスト環境についてまとめます。 githubに置いているコードを面倒な設定なしにテストしたい → cabal test + travis-ciがおすすめ クローズドなコードなんだけど、どうしよう → jenkinsでもセットアップしましょう もう少し細かいメトリクスとかとりたい → test-framework + jenkins cabal test + travis-ci cabal testに対応したコードをGitHubに置いていて、お手軽に済ませたいならこれが一番です。特徴は、 とにかくカンタン セットアップはリポジトリのトップにlanguage: haskellとだけ書いた.travis.ymlというファイルを置いて、travis-ciからONにするだけ。 http://about.travis-ci.org/docs

    HaskellでCIするなら - maoeのブログ
  • undefinedの代わりに$notImplementedを使おう - maoeのブログ

    Haskellで一からコードを書くとき、よく型だけ書いて実装はundefinedにすることがあります。これはとても便利な常套手段なんですが、規模が大きくなってきたり、undefinedな数が多くなってくると不便に思うこともあります。 undefinedとplaceholders 一通り関数とその型の概要ができてきて、小さく動かせる範囲で実装していきましょうという段階に入ると、動かしながら実装したくなるものです。 このとき未実装の部分をundefinedにしておくと、実行時には例外が上がります。残念なことにこの例外はどこから上がったものなのかエラーメッセージを見てもわかりません。 例えばこんな感じ… Foo: Prelude.undefinedこれじゃつらいので行番号を出せるようにします!というのがplaceholdersライブラリです。 使い方は簡単で、 f :: MonadFooBar

    undefinedの代わりに$notImplementedを使おう - maoeのブログ
  • モナドトランスフォーマーとmonad-control - maoeのブログ

    アドベントカレンダーのいいネタが無いなあと思っていたところ、ちょうど週末にあたらしいmonad-controlがリリースされたので、これを紹介したいなと思いました。 その前に、モナドトランスフォーマーというかっこいい名前の代物の話をちょっとだけしましょう。 モナドトランスフォーマーと例外処理 Haskellerの皆さんはきっと息をするかのように自然にモナドを使っていることと思います。標準で提供されているモナドは単機能なので、組み合わせたくなってきます。必然的に皆モナドトランスフォーマーに手を伸ばすわけです。実際のアプリケーションのコードを書くと、多くのモナドではベースモナドがIOになるでしょうから、今度は自作したカスタムモナドスタックでIOが投げる例外をハンドルしたくなるわけです。 ここでふとControl.Exception.catchの型をみると Prelude> :t Control

    モナドトランスフォーマーとmonad-control - maoeのブログ