読者です 読者をやめる 読者になる 読者になる

euphonictechnologies’s diary

Haskell超初心者の日記です。OCamlが好きです。

follow us in feedly

HaskellからSlackにさくっとPOSTする

動機 Haskell用の強化学習クラスタを作っていてさくっとdebug printを確認したいことがあります。そんな時にそのマシンのローカルstdoutに吐いてもしょうがないのでslackにdebug printを吐きたいと思いました。ほったらかして学習させまくってる間スマホでい…

Haskell :: 2015年8月現在ghc-modをghc 7.10.2にインストールする

ghc-modは2015年8月現在、cabalでインストール出来ません。 Failed to install ghc-mod with ghc 7.10 & cabal 1.22 · Issue #437 · kazu-yamamoto/ghc-modgithub.com このissueにあるように $ cabal install ghc-mod と普通にインストールすると Language/…

Haskell :: GHCを再インストールでアップグレードする - Mac + Haskell + IntelliJ環境構築

前回の入れ方はなかったことに Haskell - 2015年のMac + Haskell + IntelliJことはじめ、あるいはghcの再インストール - euphonictechnologies’s diaryblog.euphonictech.com この方法はやっぱなしで。再インストール時に若干面倒なことになったので、もう少…

Haskell :: Snap + HerokuでRedisを使う - herokuへデプロイしてRedis Cloudと接続する

前回までのあらすじ 前回はherokuへデプロイする予定のアプリケーションをローカルで作成し、ローカルのRedisと接続してデータの読み書きができることを確認しました。 今回はそのアプリケーションをherokuへデプロイしてRedis Cloudとワークさせるための設…

Haskell :: Snap + HerokuでRedisを使う - ローカルRedisに接続する

前回はSnap + Herokuをデプロイしました Haskell - SnapフレームワークをHeroku上にデプロイして遊ぶ - euphonictechnologies’s diaryblog.euphonictech.com Hello, world!を表示することが出来ました。なので今回はデータベースを使ってみます。 Redisを使…

Haskell - SnapフレームワークをHeroku上にデプロイして遊ぶ

OpenShiftはHaskellに優しかったはずなのですが Haskell + OpenShiftでWarp + HaskellのウェブアプリケーションをPaaS上にデプロイするてはじめ - euphonictechnologies’s diaryblog.euphonictech.com この記事の通りカートリッジってのがあってそれを読み込…

Haskell - 1時間以内に解けなければプログラマ失格となってしまう5つの問題

原問題はこちら Five programming problems every Software Engineer should be able to solve in less than 1 hourblog.svpino.com なんかまたFizzBuzzの匂いがします。5番がすこしだけ篩になりそうな問題です。4番はpermしてconsしてmax取れば良いので簡単…

Haskell オセロ - Zeblaの作者謹製の終盤ソルバをMacで使う

終盤ソルバ 現在オセロは残り40手ぐらいまでは解析が終わっているらしい。出典を探してみたのだけど今すぐに見つからない。それが正しいとすると、残り40手終盤データーベースを搭載したオセロプログラム同士の対戦は24手までさしたところで勝敗が決まる。 …

Haskell オセロ - Small update - Haskellオセロ始めました

Swiftが遅いので Haskellでオセロプログラムを書いて、それをSwiftから呼び出します。一連のghc-iosの実験はそのためのものなのでした。 Haskell - GHC for iOS : 既存のSwiftプロジェクトにHaskellで作った関数をさくっと組み込む - euphonictechnologies’s…

ものすごいメモ - いま注目している論文・技術資料など

かなり個人的なメモです。いま注目している論文や技術資料などです。今読んでるものと後で読むものを混在させています。 Contextual Bandit Taming the Monster: A Fast and Simple Algorithm for Contextual Bandits - Microsoft Research Thomson Sampling…

Haskell - GHC for iOS : 既存のSwiftプロジェクトにHaskellで作った関数をさくっと組み込む

動機 Swiftでそこそこ普通の大きさのアプリケーションを書いてきたのですが、いかんせん遅い。どうも配列とか構造体とかの実装がまだ成熟しておらず、超高速なAIを実装するにはコンパイラの最適化が…とかなんとか書こうと思ったんですが、ぶっちゃけ実行速度…

Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、のタッチ操作編

前回までのあらすじ Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、のシェーダコンパイラ編 - euphonictechnologies’s diaryblog.euphonictech.com 今回は やっつけハックですが、タッチに反応するようにしてみます。 完成図 画面をうり…

Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、のシェーダコンパイラ編

前回までのあらすじ Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、の描画の詳細編 - euphonictechnologies’s diary Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、の描画の詳細編 - euphonictechnologies’s diary …

Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、の描画の詳細編

前回は描画の流れを眺めてみました XcodeのOpenGLテンプレートプロジェクトは以下の流れで描画を行うことがわかりました。 画面をクリアする モデルデータからVAOオブジェクトを作り出す モデル描画に使う行列を計算する シェーダプログラムに計算した行列を…

Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、の描画編

前回までのあらすじ Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、の準備 - euphonictechnologies’s diary Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、の準備 - euphonictechnologies’s diary 前回はあらすじ紹…

Haskell - GHC for iOS : OpenGLで3Dグラフィックスを表示してみる、の準備

動機 前回はHaskellで書いたコードをghc-iosでコンパイルして、そのバイナリをObjective-Cで書かれたレイヤから呼び出すことができました。 Haskell - GHC for iOS : iOSアプリをHaskellで開発する - euphonictechnologies’s diary Haskell - GHC for iOS : …

Haskell - GHC for iOS : cabal-iosをできるようにする

前回までのあらすじ Haskell - GHC for iOS : iOSアプリをHaskellで開発する - euphonictechnologies’s diary Haskell - GHC for iOS : iOSアプリをHaskellで開発する - euphonictechnologies’s diary 前回はデバッグアウトプットに丸を表示するアプリケーシ…

Haskell - メモ: Haskellでモバイルアプリ開発するときに必要そうな話題

Dropboxがマルチプラットフォームでやってること C++によるiOSとAndroidでのクロスプラットフォーム開発:Dropboxの教訓 C++によるiOSとAndroidでのクロスプラットフォーム開発:Dropboxの教訓 クライアントとコアコードを分けるという普通の話。 FFI周りの…

Haskell - GHC for iOS : iOSアプリをHaskellで開発する

ここ数週間ずっとswiftを書いてきたのですが、swiftは 書いていてつまらない 言語仕様がちょっと頭おかしい オフィシャル言語なのにIDEが糞 未来が見えない と、ぶっちゃけ飽きてしまったので、HaskellでiOSアプリを書くという茨の道に行ってみたいと思いま…

Haskell - ghc-modiが新しいcabalで動かない事件

2015/01/22現在、cabal 1.22とghc-modi 5.2.1.2の組み合わせではうまく動きません。 NG BUG: GMEIOException /home/rik/haskell/projects/scotty/dist/setup-config: hGetContents: invalid argument (invalid byte sequence) というエラーが出ます。 簡単な…

Haskell - SDK設定のGHCがおかしくなった時に無理矢理治す方法

IntelliJ 14にアップグレードにした記念で先のエントリのようにGHCを綺麗に入れなおしてみました。するとGHCの場所が当然ですが変わります。すると以前の設定通りの場所にはGHCが当然ないのでビルドできなくなります。 設定を変えればいいじゃないかとおっし…

Haskell - 2015年のMac + Haskell + IntelliJことはじめ、あるいはghcの再インストール

2015-08-09:この記事にはアップグレード版があります Haskell :: GHCを再インストールでアップグレードする - Mac + Haskell + IntelliJ環境構築 - euphonictechnologies’s diaryblog.euphonictech.com この記事の入れ方は今は推奨しません。上記の新しい版…

Haskellで将棋 - Small update - 探索を劇的に高速化させる方法

もしくは探索を劇的に低速化させる方法。 バックグラウンド 遅延評価パワーとか言って指し手生成部分を手前のマイクロベンチマークで2倍以上低速化させた前々回。 Haskellで将棋 - 指し手生成部を少しずつ改良していく - euphonictechnologies’s diary Haske…

Haskellで将棋 - 探索を遅延評価を駆使した形に置き換える

Haskellのパワーはなんといっても遅延評価。Ocamlから移ってきた私としては一番戸惑うのはその部分で、末尾最適化への気の払い方とかが若干違ってくる気がします。なんというか、foldl'と比べてfoldrなら必要な部分しか評価されないから無限リストも処理でき…

Haskellで将棋 - 指し手生成のスピードテストとHaskellのマイクロベンチマークライブラリ:criterion

前回は指し手生成部分に手を加えてみた。ここにあるよくベンチマークに使われている局面からの指し手生成スピードを測定して、先の変更がどれ位悪影響をもたらしているかを確認しておく必要がある。 当然のことながら一発で計算できるものを分割してリストを…

Haskellで将棋 - 指し手生成部を少しずつ改良していく

今回は、指し手生成部を2つの関数に分解する。 現在は指し手生成を駒を移動する手と持ち駒を打つ手に分けて生成しているが、これをさらに分解して 駒を打つ手 駒を移動する手のうち取る手 駒を移動する手のうち取らない手 に分解していきたい。正確に言うと…

Haskellで将棋 - off-topic: 将棋ぶらうざQのYosemiteでの動作とHaskell将棋の設定方法(未熟編)

コメントを頂いたので早速Haskell将棋の設定方法の現状の問題点と回避方法をメモしておきます。 ついでにYosemiteにアップグレードしたので将棋ぶらうざQの動作に必要なことをさらっとメモしておきます。 Yosemiteで将棋ぶらうざQを立ち上げる Yosemiteにア…

Haskellで将棋 - 探索と指し手生成の改善について考える

現状のコード 現状の探索と指し手生成は、実際にコードを見るほうが早いので早速見てみると Search.hs: minmax :: Int -> Board.Bd -> Result minmax 0 bd = Result (Eval.eval bd) [] minmax dep bd = maximumBy (compare `on` va) nexts where nexts = map…

Haskellで将棋 - 指し手生成

指し手生成は大事 指し手生成は局面探索のために必要なルーチンで、非常に重要なコンポーネントの一つだ。 指し手生成の肝は無駄なく素早く必要な指し手を生成して探索モジュールに渡すこと。Bonanzaの指し手生成は指し手を幾つかのカテゴリに分類して必要な…

Haskellで将棋 - KKP/KPP評価関数を見てみる

今回は ボナンザ型の評価関数(ここでは単にfv.binを使ったKKP/KPP評価のことを指すことにする)、であるコードを解析していく。 コード: hamilcar/Eval.hs at master · ysnrkdm/hamilcar · GitHub KPP/KKP Kは王、Pはピースで2つの王と一つの何かしらの駒、…

Haskellで将棋 - 駒割を見てみる

前回は外観を見始めて、エントリポイントから評価関数のところまで追いかけてみた。そこで評価関数はボナンザ型の評価と駒割りの足し算となっていることがわかった。 今回は駒割りの部分に注目してみる。 駒割りとIArray IArrayはHaskellにおけるimmutableな…

Haskellで将棋 - プログラムの外観をみてみる

将棋ぶらうざQで対局をしてみた Gyazoというサービスがあるのでそれを使って対局の模様をGIFアニメにしてみた。 (このサービスすぐアップロードしてくれて便利。) 将棋ぶらうざQはGUIの完成度は高いし、Haskellの将棋プログラムも動かすことができたので、こ…

IntelliJのHaskellプラグインを拡張してみる - Style scannerを入れてみる

公式にあるIntelliJのHaskellプラグインはIntelliJでHaskell開発をする上で無くてはならないのだけど、まだまだ発展途上で応用的な機能(例えばリファクタリングとか)は殆ど無かったりする。今のところghc-modiを使ったEmacsでいうflymake的なエラーチェック…

Haskellでコンピュータ将棋を書く、のテンプレート

偉大な先人のコード片からコンピュータ将棋を始めてみる。 実は昔からコンピュータ将棋には興味があって、いくつかものすごくプリミティブなプログラムを書いたことがある。 このリンク先のエントリに触発されて、Haskellでもぜひコンピュータ将棋のプログラ…

cabal sandboxを使う

cabal sandboxというのはPythonでいうvenvみたいなもの。グローバルのライブラリとかパッケージとかを汚染せずに、そのプロジェクトだけのisolateされた環境の中でパッケージのインストールとかを行える。 公式サイトの説明は以下。 https://github.com/cres…

Haskell + OpenShiftでWarp + HaskellのウェブアプリケーションをPaaS上にデプロイするてはじめ

HaskellをサポートしているPaaSは少ないのだけど、OpenShiftが対応しているらしいのでいっちょ頑張ってHello, world.までやってみる。RedHadがやってるので、そんなに早く閉鎖することはないだろう。HaskellをサポートしているPaaSはWeb/Cloud - HaskellWiki…

Haskellで作ったものすごく簡単なスペル修正プログラムを評価してみる - その4:修正用コーパスを読み込んで精度を確認する - Haskellの数値型と型クラスについて考える

前回はfor-eachで修正用コーパスの単語をひとつひとつテストすることができるようになった。 次は修正用コーパス全体に対して修正率を算出して表示できるようにする。 assertLT/assertGTをつくる HUnitにはどうも「aがbより小さい」みたいなAssertionがない…

Haskellで作ったものすごく簡単なスペル修正プログラムを評価してみる - その3:まずはスペル修正をforMを使ってひとつひとつ確認にしてみる

前回は単語修正用のコーパスファイルを読み込んで、それをタプルのリストにするところまでできた。今回はそれを使って、スペル修正を評価することを試みる。 コーパス内のファイルをfor-eachでひとつひとつテストする:forMを使う、解剖してみる for-eachした…

Haskellで作ったものすごく簡単なスペル修正プログラムを評価してみる - その2:修正単語コーパスのロードとパージング

前回はユニットテストの下ごしらえをして評価を実装する手前までやってみた。前回まででIntelliJ上でボタンクリックでユニットテストが走る。この上に実際に評価をするためのコードを書き足していこう。 スペル修正プログラムはどう書くかによると[OTA] Birk…

Haskellで作ったものすごく簡単なスペル修正プログラムを評価してみる - その1:IntelliJ上でHUnitを使ってスペル修正の評価テストを書く準備

前回はひとまずスペル修正プログラムが完成して、コマンドラインから修正したい単語の引数を与えるとその修正した単語と修正候補のトップ5が表示されるようにしてみた。 今回はスペル修正プログラムはどう書くかに従って、このスペル修正プログラムの評価が…

Haskellでものすごく簡単なスペル修正プログラムを作ってみる - その3:スペル修正プログラムを仕上げる

前回は修正候補を列挙する関数を定義した。スペル修正プログラムはどう書くかをなぞりながらいろいろ関数を定義してきたが、今回はそれらを使って最後残っている関数correctを定義していきたい。 スペル修正プログラムはどう書くかによればcorrectはエラーモ…

Haskellでものすごく簡単なスペル修正プログラムを作ってみる - その2:編集距離を使って単語候補を列挙する::リスト内包表記を使う

前回はURLをフェッチするモジュールを外部化してMainモジュールはいまスペル修正ロジックだけを含むようになっていて大変見通しがいい。なので、コーディングを進めて今回はスペル修正に必要な候補を列挙する関数を書いていきたい。 編集距離から候補単語の…

HLintを使う

cやcppを使ってプログラムを書いている人はlintが手放せないはず。lintはプログラムの字面を使って解析をして脆弱性や改善点を指摘するプログラムだ。 lint - Wikipedia HaskellにもHLintがあって、これを使うとコードの良くないところを指摘してもらえる。 …

Haskellでものすごく簡単なスペル修正プログラムを作ってみる - その1.6:URLをフェッチして内容をキャッシュするモジュールをつくる

前回は文字列をText型で取り扱うように全体を書き換えてすこし見通しが良くなった。 次は、URLをフェッチする部分を外部モジュールに抜き出して、さらにローカルキャッシュ機能を付け加えていこう。 まずfetchUrlを外に追い出す リファクタリングだ! fetchU…

Haskellでものすごく簡単なスペル修正プログラムを作ってみる - その1.5:文字列処理をTextモジュールを使うようにする

前回は、スペル修正プログラムに必要なword関数(外部のテキストファイルを読み込んで単語列を作り出す)とtrain関数(その単語列から単語->出現回数なるマップを作り出す)を定義した。 ここから一気に後半の部分を完成させたいところだけど、すこしコードを綺…

Haskellでものすごく簡単なスペル修正プログラムを作ってみる - その1:URLをフェッチして修正単語コーパスを作る

Peter Norvigのスペル修正プログラムはどう書くか(リンク先は青木氏による日本語訳)を見てみると画面一枚に収まるような短いPythonコードでスペルチェッカがかけることがわかる。スペルチェッカみたいなちょっと高度なことをしているプログラムが書けると、…

Haskellで"Hello, world."、簡単な出力、計算と数字を入力するところまで

前回のエントリで、Haskell+IntelliJの環境が出来上がった。プラグインとかHLintとか準備出来てないけど、とりあえずプログラムは書けるようになった。公式の10分で学ぶHaskellにHaskell入門があるけど、ちょっと知能指数の低い俺には長かったり、例えば文字…

Haskell + IntelliJ IDEAでゆるくHaskell入門する手始め

このエントリはバージョンアップグレード版があります Haskell - 2015年のMac + Haskell + IntelliJことはじめ、あるいはghcの再インストール - euphonictechnologies’s diary Haskell - 2015年のMac + Haskell + IntelliJことはじめ、あるいはghcの再インス…

Haskellをhomebrewからインストールして、一部モジュールのcabalインストールがlibiconvで問題を起こす場合

Thanks for haskell-cafe@haskell.org If you have a problem when you install uniplate (or ghc-mod, hlint, etc...) by cabal: Loading package base ... <command line>: can't load .so/.DLL for: /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platf</command>…