タグ

ブックマーク / hiratara.hatenadiary.jp (59)

  • lambdabot-hipchat-plugins - Pixel Pedals of Tomakomai

    HipChatを使う機会があったので、lambdabotをHipChatへ組み込むプラグインを書いてる。とりあえず年内ぎりぎりでなんとなくは動くようになった。 以下、この件に関するメモ。 HipChatのAPI WEB APIとXMPPが使える。メッセージのストリーミングはXMPPを使うことになってるっぽいので、lambdabotのようなユーザの発言に反応するbotはこちらを使ったほうが良い。ただし、WEB APIの方がXMPPでは指定できないような細いことにも対応しているので、いろんな操作をしたければこちらを叩くことになる。 HaskellのXMPP 更新されてそうなpontarius-xmppを使った。network-protocol-xmpp の方も一応は更新されてそう。 HipChatでグループチャットの発言を拾うためにはMUCに対応する必要があるのだが、こちらに対応しているのはh

    lambdabot-hipchat-plugins - Pixel Pedals of Tomakomai
  • 関手圏からHaskへの関手 - Pixel Pedals of Tomakomai

    こんな感じでいいのかな。 class HFunctor hf where hfmap :: (Functor f, Functor f') => (forall t . f t -> f' t) -> hf f -> hf f' 以下は、型bを固定した時に定義できる関手F_bで、Functor fを型f bに移すような関手の定義。 data FunctorB b g = FunctorB (g b) deriving (Eq, Show) instance HFunctor (FunctorB b) where hfmap nat (FunctorB x) = FunctorB (nat x) 例えば、以下のようなMaybe関手からList関手への自然変換。 maybeToList :: Maybe a -> [a] maybeToList Nothing = [] maybeToList

    関手圏からHaskへの関手 - Pixel Pedals of Tomakomai
  • 今日は「秋のエンジニアぶつかり稽古 2013」の日です - Pixel Pedals of Tomakomai

    @__kanさんを見に来てます。メモを取る必要のあるイベントかわかりませんが、一応。 行事の内田さんより YAPCでのカヤックさんの企画 かん関とあんちぽ関の取り組み 「俺の気を見せてやる」プレゼンタイム 吉高由里子と僕 / @hisaichi5518さん コピペ辛い→おじさん達となくしてる 吉高由里子さんが大好き 笑顔が素敵な女優さん 吉高由里子さんに相応しい男か 「吉高由里子 彼氏」でググる 野田洋次郎→ラッドのボーカルらしい バンドマンにはなれないけど、クリエイターなら クリエイターとは 作家、芸術家。作って発表してる人 カヤック 「WEBクリエイターの集団」 僕もクリエイターだ! 仕事では書いてないので、胸を貼って言えない 吉高由里子さんに関係するものをネットに公開→結婚 おもしろ法人にいても面白いことを言えない 「最高のハックは、日常的な問題への個人的な解決策」 ワンクリックで

    今日は「秋のエンジニアぶつかり稽古 2013」の日です - Pixel Pedals of Tomakomai
  • I/Oストリーミングライブラリの実装の基礎 - 後編 - Pixel Pedals of Tomakomai

    前回の続きである。予告通り、2つのストリーミングの「出力」と「入力」をつなげる処理、そして、ストリームの命令列を解釈する処理系を実装する。 2つのストリームを1つにする(考え方) 「出力」と「入力」をどうくっつけるといいのか。それぞれのストリームは命令の列なので、2つの命令の列があると考えられる。ちょっと考えると、これらをうまく並べ替えることで、1つの命令の列を作れることがわかる。 例えば、「Notify(1), Wait(2), Done(3)」という列の出力を、「Wait(4), Notify(5), Done(6)」という2つの列の入力につなぐことを考えよう。様々な処理をつなげる場合、取り出したい演算結果は下流で生成されると考えられるだろう。そこで、合成後の命令の列は下流のWait(4)から開始される。Wait(4)では上流からのデータを期待するので、次は上流の命令であるNotify

    I/Oストリーミングライブラリの実装の基礎 - 後編 - Pixel Pedals of Tomakomai
  • I/Oストリーミングライブラリの実装の基礎 - 前編 - Pixel Pedals of Tomakomai

    conduitやpipesなどのストリーミングライブラリの実装は結構わかりにくい。Pipes to Conduitsという一連のエントリが分かりやすい解説なのだが、それでも序盤からFunctorやFreeモナドを駆使していてハードルが高めな印象を受ける。 理解するには自分で実装するのが一番の近道だろうから、このエントリでごく簡単なストリーミングライブラリを実装してみよう。ストリーミングライブラリではI/Oを扱うのが目的であるため、来であればモナドを扱えるように実装しなければ意味がないのだが、ストリーミングの基的な仕組みとしてはモナドは重要ではないので、ここでは純粋な値のみを扱うストリームを作成する。 ストリームを表す型 ここが一番重要かつわかりにくい部分だと思われる。今回の実装では、「入力」「出力」「結果」の3つの型をストリームで利用する。が、「出力」と「結果」の違いとはいったいなんな

    I/Oストリーミングライブラリの実装の基礎 - 前編 - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第6回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第6回です。資料とustreamは公開されています。 第6回: 積・余積・極限 / 講師 @9_ties さん 普遍性の概念によって定義される極限と余極限について 終対象 任意の対象から射がひとつだけ存在 同型を除いて一意 1と1'があれば、!1 . !1' : 1 → 1、id : 1 → 1なので、唯一性から!1 . !1' = id Well-defined性 定義が複数通りある場合に、矛盾が起きないこと 終対象も複数あるが、どれをとっても議論に影響しない 始対象 → 双対圏における終対象 よって、同型を除いて一意 双対性原理 → 任意の圏における正しい文は、双対圏においても正しい 圏の公理がドメイン、コドメインについて対称なことによる Setsの始対象 → 空集合(1つだけ)、終対象 → 単集合(複数個ある) Setsの圏は非対称性がある Monの

    今日は 圏論勉強会 第6回 の日です - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第5回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第5回です。資料とustreamは公開されています。 今日は倚子が追加された ワークスアプリケーションズ社さんに感謝しましよう 第5回: 様々な射 / 講師 @9_ties さん Hom集合についての補足 A言語とB言語のトランスレーターtと問題のA言語での解法fがあるとする B言語での解法はt.f (共変) B言語でのインタプリタをinterpとすると、A言語のインタプリタはinterp.t (反変) オブジェクト思考でも同様の考え方ができる インスンタンスを作るのは共変 フィールドから値を取り出すのは反変 計算機では射は実装する可能性があるもの → 自動で射を移せるのはありがたい 同型射 g.f = 1, f.g = 1, 同型射がある対象同士は同型 gは逆射 → 一意なのでf^-1と書く 証明 → gとhがfの逆射であれば、g = g.id = g.

    今日は 圏論勉強会 第5回 の日です - Pixel Pedals of Tomakomai
  • 自由マグマを自由対象の定義の図で書くと - Pixel Pedals of Tomakomai

    圏論勉強会 第3回の自由対象で悲鳴が上がってたようなので、参考までに図に書いて説明しておく。 まず、マグマと自由マグマを以下のように定義する(というか、勉強会においてこう定義していた)。 class Magma a where magappend :: a -> a -> a data FreeMagma a = Leaf a | Node (FreeMagma a) (FreeMagma a) deriving Show instance Magma (FreeMagma a) where x `magappend` y = Node x y このFreeMagmaが自由対象という性質を持つ事は、以下の図で捉えられる。 図の上半分はマグマと準同型がなす圏なので、登場するFreeMagma aとbはMagmaクラスのインスタンスであることが求められる。忘却関手というのは、上半分の圏からその

    自由マグマを自由対象の定義の図で書くと - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第3回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第3回に来ました。資料とustreamは公開されています。 今回からヘッドセット完備 中高生も見ているらしい(のでプログラミング以外のネタも) 第3回: 様々な圏 / 講師 @9_ties さん 視野が狭くならないよう、プログラムに関わらず色々な圏を見る 定義の復習: 圏〜自然変換まで。(自然変換はまだ雰囲気だけでOK) 主役級の圏を紹介 Sets*1 対象が(小さい)集合、射が関数、関数合成 とんでもなく巨大な圏 整数論とか実数論とかと規模が違う。色々問題が起こる 宇宙(universe) : 基礎論の分野なのでそこまで詳しく知らなくてもOK Setsの対象すべてからなる集合Uを考えると、U∈U?? 対角線論法使ってごにょごにょすると、カントールのパラドクスにつながる。 数学で必要な集合を全て含む"領域" U。もはや集合と呼べないもの。色んな宇宙がある

    今日は 圏論勉強会 第3回 の日です - Pixel Pedals of Tomakomai
  • 今日は 圏論勉強会 第7回 の日です - Pixel Pedals of Tomakomai

    圏論勉強会ではない方の圏論勉強会 第7回です。資料とustreamは公開されています。 司会の方がワークスアプリケーションズ社を退社されたので今回からバトンタッチ 後半第一回目 第7回: 様々な極限 | 代数的データ型 / 講師 @9_ties さん 1時間で話せる内容ではないので、証明とかは家で読んで 「ここまで生き残った皆さんなら」 錐の圏の終対象、始対象がlimit, colimit 空圏、離散圏は前回やった イコライザ、コイコライザ 2の平行射からなる圏のlimit, colimit この定義から詳細な定義を考えるのは良い練習問題 「f.e = g.eで、f.x=g.xなる任意のxについて、e.u=xを満たすuが唯一存在」 Setsでのイコライザ f.e=g.eなので、fとgで同じ所へ移る要素のみ集める。唯一性から包含写像 f(x,y)=x^2+y^2、g(x,y)=1とするとe

    今日は 圏論勉強会 第7回 の日です - Pixel Pedals of Tomakomai
  • 今日は第一回 ゆるふわHaskell入門会の日です - Pixel Pedals of Tomakomai

    第一回 ゆるふわHaskell入門会に来ています。Hackathonがメインですが、トークもボチボチありますのでメモります。 究極の手続き型言語Haskell / @fumieval さん 関数型言語とは 関数を自在に操作、組み合わせて記述 手続き型とは 手続きを自在に組み合わせられる? 違う。命令列をプログラムから扱うのは難しい Haskellならできる 呼び出しが階層になっている 関数を呼び出していいても、APIを直接呼び出している 移植性が低くなる 冗長な書き方になっている できることが多いことはデメリット PHPやJSで文字列と数値の演算ができてまずい Cのポインタも型を無視して扱える 副作用が入っているとやっかいになる (Pythonでのデモ) Haskellの場合 関数呼び出しではなく、「変形」をする レイヤ内で異なる抽象度のコードを混ぜられない 階層内の依存がない (任意の層

    今日は第一回 ゆるふわHaskell入門会の日です - Pixel Pedals of Tomakomai
  • "圏論とかモナドなんて簡単だからscalaを使って説明してみた"を検証してみた - Pixel Pedals of Tomakomai

    射っていうのはscalaだと単なる関数だし、関手はmap、モナドはflatMapなだけです。これのどこが難しいというのでしょう。 圏論とかモナドなんて簡単だからscalaを使って説明してみた 内容について考えてみよう。 圏の定義? trait Cat { type A type B def f:A => B } trait Cat { type A type B type C def f:A => B def g:B => C def f_g:A => C = f andThen g } 圏論とかモナドなんて簡単だからscalaを使って説明してみた ここで定義されているCatはただの1の射であって圏とは言い難い。hom setを定義したというのならまだわかるが、ScalazのHomとは似ているが違う定義だ。具体的に言うと、Homは1の射fではなく、射を表す型であるCが定義されている。

    "圏論とかモナドなんて簡単だからscalaを使って説明してみた"を検証してみた - Pixel Pedals of Tomakomai
  • 今日はekmett勉強会の日です - Pixel Pedals of Tomakomai

    ekmett勉強会に来ています。ekmettさんがオンライン参加されています。 I love profunctors. They're so easy / liyanghuさん 傘を指し棒に使うと言う斬新なプレゼン。詳細はこちら。 HaskellのFunctorは共変 Predicate (a -> Bool) は Functor ではない (半変)関手ではある Data.Functor.Contravariant contramap g (Predicate p) = Predicate (p . g) 他、Const、Comparison (a -> a -> Ordering)、Op (b -> a)が反変関手 双関手 : 引数を2つとる関手 bimap :: (a -> c) -> (b -> d) -> f a b -> f c d Either、(,)、Biapplicativ

    今日はekmett勉強会の日です - Pixel Pedals of Tomakomai
  • 2012年にニートになったこと - 北海道苫小牧市出身の初老PGが書くブログ

    2012年のまとめとして、今年ニートになったことをまとめておく。 経緯 3月に転職して新しい職場に勤め始めたのだけど、業務内容が合わなくて適応障害を起こしてしまった。具体的には、マニュアルに従って進める大量の単純作業が合わなかったんだと思う。早朝覚醒が起き、通勤中呼吸ができなくなったり、勤務中突然涙が止まらなくなったりした。医師にも退職を勧められたので、親族とも相談して手遅れにならないうちにということで3ヶ月の試用期間で退職することにした。 ハローワーク関連 診断書が出たので、3ヶ月の給付制限なしで給付金を貰えることになった。と言っても、待機期間とかがあったりで実際にお金が手に入るのは1ヶ月以上後で、貰える額も少ない。貯金がなければどうにもならないだろう。 手続き的には基的にハローワークの人は親切なので指示に従うとよい。最初の1〜2ヶ月は、指示に従ってハローワークに何度か足を運びつつ受給

    2012年にニートになったこと - 北海道苫小牧市出身の初老PGが書くブログ
  • JSON::XSで作られる浮動小数点数でハマった話 - Pixel Pedals of Tomakomai

    JSON::XSを使うと、小数は浮動小数点数にパースしてくれる。 use JSON::XS qw(decode_json); my ($double) = @{decode_json("[0.6]")}; この値、printすると "0.6" なのだけど、0.6とイコールではない。 print $double, "\n"; # 0.6 print +($double - 0.6), "\n"; # 1.11022302462516e-16 なので、直感と違う振る舞いをしたりする。 # 3 / 0.6 == 5 printf "%s / %s == %s\n", 3, 0.6, int(3 / 0.6); # 3 / 0.6 == 4 <- unexpected :( printf "%s / %s == %s\n", 3, $double, int(3 / $double); 仕方ないので

    JSON::XSで作られる浮動小数点数でハマった話 - Pixel Pedals of Tomakomai
  • 今日はYokohama.pm #9の日です - Pixel Pedals of Tomakomai

    残念ながら横浜市民ではなくなりましたが、Yokohama.pm #9に参加しています。USTはこちら。 myfinderさん - 転職して1年間(弱)やってきたこと こちらのトークは、USTなしでした。 自作サーバインフラ 引継 ケーブリング修正 サーバが落ちる問題 WEB+DB PRESSの寄稿の計画 → 寄稿 MySQLのパフォーマンス改善 → 30分のトランザクションなど web APIの整備 AWS JPAスポンサー YAPC::Asia 2012に fluentd、TreasureData 楽しいよ! kanさん - use Smart::Options Getopt::Long 標準 使い方がキモい Getopt::Compat::WithCmd けっこう複雑 opts Smart::Argsをパクry 型の変換 optimist(node.js) 直感的、きっちりも使える S

    今日はYokohama.pm #9の日です - Pixel Pedals of Tomakomai
  • QUnitでJSのテストを書いてみた - Pixel Pedals of Tomakomai

    JSでテストファーストしたかったので、QUnitを試してみました。QUnitを使えば、とても簡単にJavaScriptのテストスイートを作ることができ、オススメです。 てっとり早く試す インタネットにつながる環境であれば、てっとり早くQUnitを試せます。 QUnitのページに行って、View Sourceタブに表示されているHTMLをコピペしてローカルに保存します*1。このHTMLをブラウザで開けば、サンプルのテストが走ります。4つのテストがあって、4つ目だけfailed(赤文字表示)となればうまく動いてます。 QUnitでは、このようにブラウザでテストの結果を確認します。緑帯が表示されればOKで、赤帯が表示されればNGです。 もうちょっとまともに使う インストール 最初の例ではネットワーク上のリソースを使ってましたが、まともに使うときはローカルにファイルを揃えましょう。 HTMLを用意

    QUnitでJSのテストを書いてみた - Pixel Pedals of Tomakomai
  • Git勉強会 in livedoorさんに行ってきました - Pixel Pedals of Tomakomai

    @lestrratさんに誘われて、livedoorさんの社内勉強会でお話してきました。id:perlcodesampleさんが来社された時の資料を20%くらい使い回した資料ですが、公開しておきます。 モデルから知るGitView more presentations from hiratara. これでまとまった資料が出来たので、札幌とかで勉強会が開催されることになっても安心して出張できますね!

    Git勉強会 in livedoorさんに行ってきました - Pixel Pedals of Tomakomai
  • 2011年になってもPerlを使ってる理由 - Pixel Pedals of Tomakomai

    10年以上使ってて慣れてるからってのが一番ですが、後、TMTOWTDI に共感するからってのもあります。 まず、たくさんの書き方があれば、それだけ読み手に色んなことを伝えられます。文章を書く時に、一人称を「僕」「俺」「私」のどれを使っても意味は一緒ですが、相手に与える印象は全然違います。コードも同じで、表現のレパートリーが多いというのは、それだけ様々なことを読み手に伝えるポテンシャルを持っているということになります。コードはロジックだけを伝えられればいいってものではなく、書いた人間の意図まで正しく伝えることが重要だというのは、誰もが認めるところでしょう。 また、自由度が高いものの方が、進化する伸びしろがあります。使い方がきちんと1つに決められている物は美しいですが、それ以上の使い方はできません。逆に、何に使うかわからないものまで含めてたくさんのものが混在しているような状況では、創意工夫でそ

    2011年になってもPerlを使ってる理由 - Pixel Pedals of Tomakomai
  • Pixel Pedals of Tomakomai

    今日はまったく自転車に乗る気がしなかった。 TODO は山ほど溜まっているし、気温は 10 度を下回る予報のくせに、花粉がかなりの量飛んでいる。こんな日はスタバにこもって作業でもするに限る。タリーズコーヒーで朝トマトパスタコーヒーを摂りながらスマホで検索し、スターバックス相模原共和店 なるものを発見した。なんだかんだ距離は 30Km ほどあるので、コーヒーでも飲んで戻ってくればそれだけで 60Km は走れるのでいいだろう。 目的のスタバに行くには、尻手黒川道路を町田方面に進めば良い。この道路は都内へ向かう道と違って緑が多くて好きなのだが、昼頃からは交通量が増えて走りにくい。ご多分に漏れず、百合ヶ丘付近からは渋滞で思うように進めなくなった。 もっとも、渋滞がそこまで嫌な訳では無い。自転車だとどうせ 25Km/h 程度で巡航することになるのだし、ゆっくり走るのは足休めになる。必死に漕いで

    Pixel Pedals of Tomakomai