北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Haskell入門という本を書きました

Haskell入門 という本を書きました。まだ店頭で買うことはできませんが、amazonでは予約を開始しています。また、電子版も早いうちに出ると聞いているので、そちらもあわせてお求め下さい。技術評論社さんのサイトではサンプルのpdfも読むことができます。 H…

今日は「builderscon tokyo 2017 一日目」の日です

慶応日吉キャンバスにおりますので、自分用のメモを残しておきます。 Opening / lestrrat さん 諸事情で英語(スライドは日本語)。 builderscon は YAPC::Asia の直系のカンファレンス いろんな技術の話を集めたものがbuilderscon 近年、様々な技術が互いに関…

今日は「builderscon tokyo 2017 前夜祭」の日です

おとなのビルコン へ来ていますので、自分用のメモを残しておきます。 めっちゃ混んでる。大規模カンファレンス感 「すげえ!」 「来てよかった!」

今日は「Haskell入門ハンズオン!」の日です

今日は「Haskell入門ハンズオン!」の日です https://shinjukuhs.connpass.com/event/58224/へメンター枠で来ていますので、自分用のメモを残しておく。 はじめに / 木下さん #Haskel 講師重城さん+メンター5人居ます haskellでわからないことはteratailで…

去年の9月にconduitの演算子が変わっていた

conduitといえば $$ や $= =$= のような演算子を使い分けなければいけなくて 面倒だなものだと思っていた のだが、去年の9月から .| だけを使えばいいように変わっていた。これは直感的で使いやすい。 module Main (main) where import Data.Char (ord, chr,…

自由モナドの定義であるところの Control.Monad.Free.Church.foldF

圏論勉強会の資料 によれば、 と自由な構成 について、 を与えると が得られるとある。 自由モナドの文脈でこれを考えると、関手 からモナド (の構造を忘れて関手と思ったもの)への自然変換を定義すれば、自由モナド からモナド への自然変換(正確にはモナド…

IOモナドで使うときだけログを吐く関数を定義する

純粋な関数として定義できるんだけど内部でやってることが複雑な場合、何が起きてるかわからないと心配だからとログを吐く機能をつけると、その時点でそいつは IO アクションになってしまう。ログを吐くという副作用を持つのだから IO になるのは当たり前で…

C言語の多次元配列の型はどう読むのか

C

int a[2][3] って、「整数2個の配列( int a[2] )を 3個の配列( [3] )にした、と読めるけどどうなのか1。 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf と比べて確認。 116ページのArray declaratorsの節によると、 T D[n] という形式のときは…

man introとcalコマンド

月末って何曜日だっけとかってときいつもgoogleカレンダー開いてたんだけど、これでいいじゃん。知らなかった・・・。 ubuntu:~$ cal May 2017 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 …

VMWareのインストール

最近ずっとVirtualBoxを使っていたのだけど、3Dアクセラレーションを有効にするとOpenGLがまともに動かなかったので、代わりとして久々にVMWareを入れてみた。 Ubuntu 17.04 を入れたんだけど、 Install VMWare tools が動かなかったので、 /media/ユーザ名/…

monadiusを動かす

12年前に書かれた http://www.geocities.jp/takascience/haskell/monadius_ja.html を手元で動かした。と言っても、ほぼ手を加えずにそのまま動いた。 $ diff -ur monadius.BK/ monadius diff -ur monadius.BK/src/Main.hs monadius/src/Main.hs --- monadiu…

shu-thing (シューティングもどき) を動かす

12年前にhaskellで書かれた shu-thing を手元で動かした。と言っても、ほとんど何もせずに動いてしまった。 @@ -10,6 +10,7 @@ import System.Process main = do + getArgsAndInitialize keystate <- newIORef [] cp <- newIORef (openingProc keystate) ini…

久々にoptparse-applicative使った

いつも optparse-applicative ってどう使うんだっけって悩むのだけど、 philoponさんのエントリ を見ながらやるとトップダウンにコードを書けてすごくよかった。

Mac Pro と BRAVIA の HDMI 接続

Mac Pro(ゴミ箱) と sony の BRAVIA を HDMI で繋いでいるのだけど、まったく安定しない。具体的に言うと、認識しないことがほとんど。BRAVIAとMac Proの電源をON OFFしつつHDMIケーブルをポートを変えつつ何度も何度も何度も何度も何度も何度も差し替えると…

Slackのstarとmute、joinの使い方

最近チャネルが増えてSlackを見るのが大変だったので改善した。社内で投稿したものだが、設定を変えてから快適になったので紹介する。 変更前のチャネルの管理方針 重要っぽいかそうでないかでなんとなく分けていた。大事っぽかったらstarで、大事じゃないけ…

VS 2017でrustを使う

Surface Studio に rust をインストールしようと思ったんだけど、 Microsoft Visual C++ Build Tools 2015 が要るらしい。せっかくなので Visual Studio 2017 使おうと思って探したんだけど、パッケージングの仕方が変わってるぽい。 まず、 このエントリ の…

Alternative preludes

Alternative preludes – Haskell – Aelve Guide Preludeの代替品の評価。どれも一長一短感ある。 自分のモチベーションはpartial functionよりも Text なんだけど、 Text にまとめたいと思いつつも、結局パッケージを使う以上は現状では String からは逃れら…

textlint の導入

textlintで日本語の自動校正サービスを作ってみた! | それいけ!フロントエンド 以前面倒だと思ってやってなかった textlint だけど、こちらのエントリの通りやったらさくっと動いた。 ざっくり手順。 npm の作法を知らないのが怖いところだけど、まあ、オ…

Server::Starter を利用できるサーバの実装

http://qiita.com/hiratara/items/2dacf8470c378b130d5c に書いたとおり。 下回りが苦手なので色々調べたのだけど、今回もGREEの https://github.com/gree/haskell-prefork なるリポジトリが役に立った。 fork するだけじゃんと思って中を読むと、環境変数仕…

wai-graceful

wai-graceful の仕組みを眺めた。 warp 側に手を入れずにどうしてるのかと思ったら forkIO してサーバスレッドを別で立てといた上で、シグナル受け取ってからリクエスト捌き終わるまでメインスレッド残すのね。リクエストの処理が強制終了されることがないも…

Windows 上での getChar のための no-buffering-workaround パッケージ

hiratara.hatenadiary.jp エンターキーを押さないとキー入力を受け付けてくれない。大昔からチケットが上がっていて、 今日気がついたのだけど、Hackageにいい感じのパッケージが上がってる。 no-buffering-workaround: Workaround for GHC bug #2189. 使い…

Unit への implicit conversion

内容はともかく気になったのが、 def A_B_Cのつもりで書いた間違っているのにビルドが通る例(): Future[Unit] = { funcA() .map { _ =>funcB()} .map { _ =>funcC()} // ※たとえでこう書いていますが、本来はfor文とかを使いましょう // ※返値の型は本当はFu…

`stack setup --upgrade-cabal` した

lts-7.19 使ってたら嫌な感じのエラー。 /tmp/stack25595/cairo-0.13.3.1/Setup.hs:8:29: error: • Couldn't match expected type ‘Distribution.Simple.UserHooks.UserHooks’ with actual type ‘Cabal-1.24.2.0:Distribution.Simple.UserHooks.UserHooks’ N…

"hSetBuffering stdin NoBuffering doesn't work on Windows" とのこと

完全に序盤で投げ出されているけど、Haskellでroguelikeを実装するエントリ。 https://github.com/jamiltron/Thieflike Haskell には https://hackage.haskell.org/package/LambdaHack っていうroguelikeがあって そっちのほうが真面目に作られてるのだけど…

msys2の最新版で [lost server] が発生

msys2 をアップデートしたら、 tmux でクリップボード周りを操作すると [lost server] 的なメッセージが出て死ぬようになってしまった。今までも何度かあったこととは言え、辛さに溢れる。 とりあえずこれの通り msys2 のランタイムのバージョン下げたら直っ…

MSYS2でHDBC-sqlite3をコンパイル

当然のことながら、msys2のshellではなくmingw64のshellから操作する。 まず、 sqlite3 を入れる。 pacman -S mingw64/mingw-w64-x86_64-sqlite3 後はビルドするだけなんだけど、2点注意がいる。 --extra-include-dirs と --extra-lib-dirs にmingw64関連の…

AllowAmbiguousTypes拡張と型適用

このように f を定義して実行したい。 f :: String -> String f = show . read main :: IO () main = putStrLn $ f "True" エラーが出る。 Prelude> :l test.hs [1 of 1] Compiling Main ( test.hs, interpreted ) test.hs:5:5: error: • Ambiguous type var…

ConnectionFailure getAddrInfo: does not exist (Name or service not known) が出た

vagrantで ubuntu/zesty64 を使ったら、 https://github.com/commercialhaskell/stack/issues/2536 的なメッセージが出てかなりの高確率で stack setup に失敗した。 そもそも安定版使ってないほうが悪かったので、 ubuntu/xenial64 使うようにしたら収まっ…

2017年センター試験英語

最近ひどく疲れているので http://www.toshin.com/center/ から英語を解いた。リスニングが42点で筆記が169点。おもったよりひどくないと思ってしまったけど、本来満点取らないと駄目なやつだよね、これ。現役の頃を思い出して気分転換にはなったので良しと…

stackのコードを読む(3)

リソルバのダウンロード先URLのデフォルトは Stack.Config.Urls で定義されているがコンフィグで上書きできる リゾルバはYAMLでこんな感じで全パッケージとバージョンが書かれてる packages: drawille: .. 省略 .. version: '0.1.2.0' .. 省略 .. descriptio…