Gitでmasterの開発内容を開発ブランチに反映させるとき、mergeか、rebaseか

参考: はらへり日記 - Git開発でmasterの内容を開発ブランチに反映させる方法 あるあるのシナリオだが、masterブランチからフォークした開発ブランチでコミットを進めている間にmasterでコミットが進む場合。 master -o--o--o--o--o | v dev +--o--o--o この…

慢性上咽頭炎の近況 (6)

前回の近況から約1年が経過した。これまであったことを記す。前回はまだたまにめまいなどの症状があると書いていたが、幸いここ1年はそうした症状はほとんどなく、あっても半日程度で治っていた。直接的な症状はほぼ完治したと思う。ただし、体調を崩した際…

.cabalファイルのパース

先日、staversionの新しいバージョンをリリースした。 staversion: What version is the package X in stackage lts-Y.ZZ? staversionはStackageやHackageに上がっているパッケージバージョンを調べるコマンドラインツール。今回のバージョンでは、.cabalフ…

AttoparsecとMegaparsecについて

先日、HaskellのParserについていろいろ調べた。きっかけは、attoparsecだとやっぱりエラーメッセージが不親切すぎてデバッグがキツい、ということ。パーサは所詮純粋関数なので、部品を細かく分けてそれごとに単体テストを書いていけばいいという話もあるが…

stackageの特定のresolverに上がっているパッケージバージョンを調べるツール

指定したHaskellパッケージのバージョン番号が指定したstackage resolverでいくつなのかを調べるコマンドラインツールを作った。 staversion: What version is the package X in stackage lts-Y.ZZ? 例えばこのように使う。 $ staversion --resolver lts-4.2…

Zipper関連のパッケージ

先日コーディングしていてZipperが必要になる場面に出くわした。それは単純なList zipperだったので自前で実装して済ませたが、ふと、汎用的なZipperライブラリがあるかどうかが気になったので、少し調べた。 syz syz: Scrap Your Zippers Dataクラスインス…

Haskellでテンキーに動的なキーバインドを設定できるやつを作った

テンキーに対して動的なキーバインドを設定するためのHaskellライブラリ"WildBind"をリリースした。 debug-ito/wild-bind: Dynamic key binding framework (GitHub) wild-bind: Dynamic key binding framework (hackage) 現状はX11デスクトップ環境のみサポ…

慢性上咽頭炎の近況 (5)

前回の近況から3ヶ月が経過した。これまであったことを記す。幸い、あれから症状が極端に悪化することはなく、耳鼻科に行くこともなく過ごせている。ただ、依然としてたまに以下の症状が現れている。 頭がぼうっと熱い感覚。午前中からお昼にかけてが多い。 …

ロリポップ!のサーバ移設でInternal Server Errorが出たので対応

ブログやQiitaに書かないようなこと(最近は主にUbuntuのインストールメモ)は個人的に立てているPukiWiki(http://debugitos.main.jp/)の方に書くようにしているが、昨日ここにアクセスしたら"Internal Server Error"が出てしまっていた。このPukiWikiはロリポ…

慢性上咽頭炎の近況(4)

前回の近況からまた2ヶ月がたったので、これまであったことを記す。 Bスポットの終了 2016年4月5日にいつも通り耳鼻科でBスポット療法を受けた。この日でだいたいBスポットを始めてから半年が経過したことになる。症状はだいぶ改善してきているし、ここでい…

.cabalファイルのghc-optionsに何を書くべきか

ふと、Haskellパッケージの.cabalファイルのghc-optionsフィールドに何を書いておくとよいか不安になったので、少し調べた。なお、cabalが実際にどのようなオプションをghcに与えているかは--verboseオプションで確認できる。 $ cabal build --verbosestack…

Stackageに自分のパッケージを上げる

最近はもうstackとstackageには頼りっきりで、使いたいパッケージがstackageに入っていないとちょっとイラッとくるくらいになってきたが、そういえば自分もいくつかのパッケージをhackageに上げている。大したものではないとはいえ、それらをstackageに載せ…

Gtk-Uguiss-2.00をリリースした

Gtk

Gtk2/Gtk3/xfwm4テーマであるGtk-Uguissの新バージョンを作った。 https://github.com/debug-ito/Gtk-Uguiss/tree/uguiss-2.00 バージョン1.xx系列はXubuntu 14.04 (Trusty)が、バージョン2.xx系列はXubuntu 16.04 (Xenial)がターゲットである。いろいろ試行…

鼻詰まり時の鼻うがい

前回の慢性上咽頭炎の近況で書き忘れていたが、花粉症などで鼻が詰まっている時の鼻うがいについて記す。当然だが、鼻の通りが悪い状態では鼻うがいもやりづらいし、鼻が完全に詰まっている状態では鼻うがいはほぼ不可能だ。そのような時にも鼻うがいをやる…

GHCにおけるヒープとスタック

先ほど、このような記事をQiitaに書いた。 GHCでコンパイルするプログラムでヒープメモリサイズを制限する - Qiita Haskellを書いていて、再帰関数の終了条件設定をミスって無限ループさせてしまうことが何回かあったのだが、CPUだけでなくメモリも無限に持…

慢性上咽頭炎の近況 (3)

前回の近況からおよそ2ヶ月経ったので、ここまでの近況を記す。 ランニング 前回、鼻やノドへのダメージを避けるために河原のランニングを断念するかということを書いた。要は冷たく乾燥した空気にさらされるのが良くないと思ったので、代わりにジムのランニ…

Xubuntu Xenial 16.04のベータテストをやっている

今年4月にリリース予定の(X)ubuntu 16.04はLTSであり、乗り換えを予定している。ここ最近、リリース後しばらくしてから使い始め、バグを見つけ、報告するもそれが修正されない or 修正されてもLTSのレポジトリに入らないということが多かったので、今回はベ…

nested Alternative (or MonadPlus)

最近仕事でattoparsecを使ってパーサを書いたりしている。パーサを書く際はAlternativeクラスの(<|>)が便利だ。 (<|>) :: f a -> f a -> f a (a <|> b)とはざっくり言って、「aを実行して失敗したらbを実行する」ということ。Alternativeをアクションだとと…

慢性上咽頭炎の近況 (2)

前回の近況から2ヶ月経ったので、これまでのことを報告する。

You can write multiple lines in TemplateHaskell splices

One day, I found out that TemplateHaskell splices (that $() thingy) accept multiple lines (confirmed on GHC 7.6.3), like, {-# LANGUAGE TemplateHaskell #-} import Data.Aeson.TH (deriveJSON, Options(..), SumEncoding(..), defaultOptions) impo…

慢性上咽頭炎の近況

初めて塩化亜鉛療法(Bスポット)を受けてから2ヶ月ほどが経ったのでここで現状を記録しておく。この2ヶ月、毎週Bスポットを受けたが、症状は若干良くなった程度である。まあどのみち時間がかかるものだと覚悟しているので特にガッカリしているわけではない。…

軽い慢性上咽頭炎と診断された

ここ3,4ヶ月、軽い目まいなどの微妙な体調不良がずっと続いていたが、先日、近所の耳鼻咽喉科で軽い慢性上咽頭炎であると診断された。以下、個人的な記録も兼ねてここまでの状況について記す。

Haskellでいい感じのHTTPパーサライブラリはない?

「いい感じの」とはずいぶん主観的だが、だいたい以下のようなHTTPパーサが欲しくなってちょっと調べていた。 基本的に(Lazy?)ByteStringに対して作用する。 非IO。 HTTPリクエストとレスポンスをパースできる。 HTTPボディも引っこ抜いてくれる。 HTTPボデ…

lifted applicative style

モナドを使った演算を書いている時は、applicative styleを使うと記述量を少なくできて便利だ。 >>> (++) <$> getLine <*> getLine hoge foobar "hogefoobar" 使う関数が最終的にモナドを返す場合、最後にjoinしてやればいい。 >>> let catPut a b = putStrL…

()は(.)の代わりに使える

例えばこういう関数群があったとして、 toStr :: Float -> String toStr = show length' :: String -> Int length' = length isBig :: Int -> Bool isBig = (> 5) Haskellでは($)演算子を使ってデータに対して次々に関数を適用できる。 isBig $ length' $ to…

haskell-relational-recordチートシート

最近、haskell-relational-recordを勉強しているが、ドキュメントを読むととにかく大量のデータ型(と型シノニム)が出てきてわけが分からなくなるので整理してみた。(relational-record-0.1.1.0, relational-query-0.4.0.1, relational-query-HDBC-0.1.0.0の…

必須引数とオプショナル引数が混在した名前付き引数渡し

Haskellで名前付き引数(named arguments/parameters)のようなことをしようと思ったらレコード構文を活用するのが一般的である。 data Args = Args { arg1 :: Int, arg2 :: Int, arg3 :: String } func :: Args -> Int func = undefined main = print $ func …

cabalを使ってHaskellのプログラムを作り始める時のメモ

公開しようがしまいが、Haskellでプログラムを作る時はcabalを全面的に使うといろいろメンテしやすい。しかしその使い方(特に.cabalファイルの書き方)は自明ではないということで、いろいろ調べたのでメモ。 .cabalファイルには、とりあえずlibraryセクショ…

forkIOがmask状態を引き継ぐ意味が分からない

(注: この記事はghc 7.6.3, base-4.6.0.1で検証している)HaskellのIOモナドには(フツーの命令型言語で言うところの)例外の仕組みが備わっているが、この例外には2種類がある。 同期例外(synchronous exception): スレッド自身が行う処理によって発生する例外…

むつかしいことを考えずにHaskellでCSVをパースする

まともに使い物になるプログラムを作ろうとすると、プログラムの外から何らかのデータを取り込んでパースし、内部で使えるデータに落としこむ処理というのはほとんどの場合で必要になる処理だろう。しかし、Haskellではこのパース処理を記述するのが意外なほ…