yunomuのブログ

酒とゲームと上から目線

Haskellでコマンドラインパーサを使う2

前回とは違うライブラリを使ってみます。 前回: Haskellでコマンドラインパーサを使う - yunomuのブログ前回の記事ではcmdargsを使ったんですが、あれはあれで面倒くさいというか、あらかじめ定義したrecord型の通りにしかデータを取ることができないのがた…

Haskellでコマンドラインパーサを使う

コマンドライン引数のパースがだいたいどう転んでも面倒くさい。特にCとかJavaとかは本当に泣きたくなりますよね。まあJavaでコマンドラインのプログラムを書く事なんてあんまし無いかもしれませんけど。いや、ありますけど。泣きながら書いてました。Haskel…

Control.Concurrent.forkIOをもっとうまくやる

以前に、 Conduit + Attoparsec (+ Concurrent) - yunomuのブログこのあたりで forkIOステキ!みたいなことを書いたんだと思う。で、最近ようやくこのあたりを真面目に扱うようになり、「プロセス終了時にスレッド中断されてるじゃん!」ってことに気付いた…

simple-config v1.0.0

一人で開発していても共通ライブラリというものは増えていくものでして、でも大体はプロジェクト内だけで収まってしまうようなものだったり、外に出すための一般化がとても面倒臭かったり、ファイル1個とか関数いくつかだからコピペでいいかってなったりして…

簡易設定ファイルパーサジェネレータ

なまえがややこしい。設定ファイルって面倒くさいからあんまし書きたくなくて、だいたいはコマンドライン引数で済ませる方向で生きてきました。 が、それはそれで面倒だったりして、いやまあ結構便利なライブラリがそれぞれの言語や環境ごとにあったりするの…

HTMLパーサ

HTMLパーサに今まではTagSoupを使っていたんですけど、IOまわりをConduitで書き直してるついでになんか別のConduit対応パーサを使ってみようかなと思ってちょっと調べてみました。とりあえず一番簡単というか最初に目についたのはhtml-conduitのsinkDocを使…

Wai+WarpのWebサーバを拡張する

頂いたラムを飲みながらお送りしております。で、前の続きです。 前の:Wai + WarpでWebサーバを作る - yunomuのブログWaiのマニュアルを見てるとちょっと面白い型があって Network.Wai type Application = Request -> ResourceT IO Response type Middlewar…

HaskellからCライブラリを呼ぶ(FFI)

Haskellのなんでもアリ具合。ライブラリをビルドしてるとちょいちょい見えるFFIという文字列、気になって調べてみると、ForeignFunctionInterfaceというものがあって、これはHaskellからCの関数を呼び出すためのモジュールというか拡張らしい。 Haskellのも…

recv: invalid argument (Bad file descriptor)

この前(Conduit + Attoparsec (+ Concurrent) - yunomuのブログ)の記事に書いてあるコードを実行すると6〜8割くらいの確率でエラーが出ます。結構な確率で。 recv: invalid argument (Bad file descriptor) こんなの。recvとかfile descriptorとかそういう…

Wai + WarpでWebサーバを作る

WarpってWebサーバらしいですよ。 いやまあ今回はそういう前置きはいいんですけど、Yesodの人ことSnoymanさんが作っているWaiとWarpでWebサーバを書いてみようと思います。まずは調査。 Waiとはなんぞや。 Network.Wai Web Application Interfaceらしいです…

Conduit + Attoparsec (+ Concurrent)

Conduit 0.5が出て、わかりやすいチュートリアルが書かれていたので、それで一日中遊んでいたりしました。 ConduitとHaskellでネットワークプロキシサーバを作る - 純粋関数空間 Conduit楽しいですね。これを上から下までやってなんとなく感覚を掴んだところ…

Template Haskellで遊んでみる

メタプログラミングって最近よく聞くけど、必要性をあまり感じてなくて放置していたんだけど、よくよく調べるとCでいうところの関数マクロでコード書いたり、ソースを解析してライブラリのヘッダファイルを生成したりとか、普通にやってる事をもう少し言語の…

core dumpで遊んだ話

いかに短いコードでcore dumpさせるかという無意味なチャレンジをやってみました。 文章にしたらなんか長くなりすぎたのでスライドで。 core dumpでcode golf View more presentations from Nomura Yusuke code golfってそれ自体にあんまし意味無いので苦手…

Stateモナドとモナドトランスフォーマー

前フリ 最近@seizansさんが新人Haskell使いを増やしまくっている。 で、その人達がググった時のために先にたくさんブログ記事書いて釣ろうぜっていう話をしていたけど、@kazu_yamamotoさんとか@nom4476さんらが仰るように、一旦自分がわかってしまうとなかな…

Filesystemモジュール

「Haskellで実行ファイル名をパス付きで取得する」って記事で出てきたFilePathって型がFilesystem.Pathで定義されているんですが、これをどう使ったらいいものかよくわかんなくて、とりあえずFilesystem.Path.CurrentOSをimportしてStringに変換して使ってい…

HaskellでCGI

最近「Haskellで~」ってタイトルばっかですね。 今回のも「CGIを書く」とかでいいのかもしれない。っていうほどHaskellのことばかり書いてるわけでもないのでそれはやり過ぎかもしれない。 たぶんそのうちRubyの記事も書きます。 Hello World で、Haskellで…

Haskellで実行ファイル名をパス付きで取得する

CGIを書くときとか、実行ファイルが置いてあるパスが欲しい事がある。 設定ファイルやデータの読み書きをするために。一応System.EnvironmentのgetProgNameで実行ファイルの名前は取れるんだけど、これにはパス名が付いてない。 getArgsにも入ってないし。 S…

HaskellでTwitterにpostする

例によってお酒を飲みながら書いているので文章が冗長です。御託はいいって人は本題まで飛ばしましょう。 枕っていうか前置き プログラミング言語選択の理由というのは結局のところライブラリだったり環境にインストールされてるのがそれしかなかったりとか…

Haskellで並列処理

あの、関数型言語の特徴としてよく「並列化しやすい」とか挙げられますよね。なんでかっていうのはなんかよくわかんないんだけど、やっぱりその、副作用っていうか、他のスレッドに影響を及ぼすような処理を書きづらいというか、影響を及ぼさない処理を書き…

atコマンド

atコマンドの使い方。たまにしか使わないので忘れがちですよね。 % at 10:00 at> service tomcat restart at>^D job 1 at 2012-04-24 10:00 既に過ぎた時刻を指定すると翌日になる。こんなでもいい。 % at 10am tomorrow 詳しくはat(1)確認と削除。 % atq jo…

sudoの時のPATH

sudoでコマンド実行しようとしたらcommand not foundになる。 sudo -iなら動きはするんだけど、カレントディレクトリが~rootになるのがあまり面白くない。sudoの環境変数ってどこから読まれるんだろう……という話。最初はrootとかそのユーザの環境変数が読ま…

fluentdのpluginを書いてみた: fluent-plugin-diskutil

仕事飽きたからfluentdのpluginを書いて遊んでいたよ。これを試してみたくて。 fluentdのためのプラグインをイチから書く手順(bundler版) - tagomorisのメモ置き場作ったのがこれ。 yunomu/fluent-plugin-diskutil · GitHub例がoutputだったのでinputの方を…

mighttpd2を使う

mighttpd2で遊んでみようと思う。 前に一度ビルドしてみようとして失敗したことがあったんですけど、なんとなくそれはそういうもんだというのがわかってきたので、それはそれで再挑戦してみよう。ということで、とりあえず % cabal instal mighttpd2 でいい…

Macでターミナルからアプリケーションを立ち上げる

Mac

Macはターミナルをメインで使っているんだけどたまにFinderを開きたい事があったりTextEditでファイルを見たい時があって。 Windowsだとstartコマンドでファイルやフォルダを開いたりするところなんだけど、Macだとどうやってやるんだろう。openコマンドでや…

なんでもアリ

プログラミングコンテストとか苦手なんだよねぇ。 でも「FizzBuzzで一番笑わせた奴が優勝」とか、そういうのならやりたい。なんて言ってたら大学の後輩がこんなのを教えてくれた。IOCCCで出てたFizzBuzz(?)のCode Golf(?)らしい?dev.c #include"/dev/tty" …

tmuxを導入

時代はtmuxらしいですよ。Terminal Multiplexer MacPortsに入ってるのでインストールは簡単です。だいたいscreenと同じように使えるらしいです。デフォルトのprefixがC-bっていうのはscreenを意識してるんですかね。まあC-aよりはマシですけど、適当に変えち…

redmine_projects_sorter ver.1.0.0

githubでwatcherが増えてたので、いい加減バージョンを1以上にしよう。しました。yunomu/redmine_projects_sorter at v1.0.0 · GitHub今回はDBを変更するのでmigrateが必要です。 % git clone git://github.com/yunomu/redmine_projects_sorter.git vender/p…

gitでタイプミスした時に出るアレ

かみまみた % git statsu git: 'statsu' is not a git command. See 'git --help'. Did you mean this? status これ。この"Did you mean this?"ってのどうやって出してるのかなって思って、とりあえずgitのソースをgrepしてみたけど(ソースはFri Mar 23 14:…

Parsecを使って正規表現の代わりにパーサを与えるgrepのようなものを作る

Haskellやるならパーサ作っておかなきゃいけないかなって。ということで試しにIPv4アドレスのパーサと、正規表現の代わりにパーサを与えるgrepのようなものを作ってみようかなと。 完成イメージはこんな感じ。(実際にはこの記事のコードの完成直前に固まり…

HaskellでOSコマンド実行

当たり前の事を当たり前にやりたいよね。ちょっとしたスクリプトを書く時に、OSのコマンドを実行してその結果をgrepしてcutしてとか、そういう事をよくやる。Haskellでやるかどうかっていうのは別として、そういうのってどうやるんだろうと思って。 grepとか…