Template Haskell でいい感じに時間の長さを書けるライブラリ duration を作った

Template Haskell を使って,時間の長さをいい感じに(人間が読みやすい形で)記述できるライブラリを作った. hackage.haskell.org github.com (実は GW 前くらいには既に公開していたけど,ブログを書く余裕がなかった……)

Maybe と IO を一緒に使いたくなったら

たまには初学者向けにライトな話題を. 対象読者 すごいH本を12章か13章ぐらいまでは読んだ do 構文を使って IO などの処理が書ける Haskell のプログラムはなんとなく書けるが,あまり綺麗に書けている気がしない

TypeFamilyDependencies の実用的な例を考える

FunctionalDependencies という GHC 言語拡張がある.Haskell Wiki によると, Functional dependencies are used to constrain the parameters of type classes. と書かれているが,これはどういうことか. Haskell Language Report で定められた範囲では,…

Template Haskell でコード中に JSON を埋め込んだりコンパイル時にファイルから型安全に読み込んだりする

前回よりはもう少し実用的な例を. Template Haskell を使って,Haskell のコード中に JSON をそのまま埋め込むことができるようにする.また,あらかじめ用意しておいた JSON ファイルをコンパイル時に読み込み,指定したデータ型の値にする. ToC コード中…

Template Haskell でコンパイル時 FizzBuzz

数ヶ月前に Twitter で,コンパイル時に FizzBuzz を計算して,実行時には計算された文字列を出力をするだけ,というコンパイル時 FizzBuzz を何かの言語でやっているのを見かけた.元ネタは江添さんがC++で書いたものらしい.インスピレーションを受けて,H…

Type-level TypeScript

この記事は CAMPHOR- Advent Calendar 2017 の21日目の記事です. @ryota-ka です.普段は HERP という会社でリードエンジニアとして働いています.一昨日19日にサービスのティザーサイトを公開したばかりなので見てください. herp.cloud さて,12月といえ…

開発効率向上 tips vol.1 -ターミナル・シェル編-

最近弊社でも大学生のエンジニアインターンが増えてきて,彼らの成長のために,開発にあたっての知見を効率的に共有する手段を色々と模索している.こういった知見は再利用性も高く,社内に閉じている必要もまったくないので,こうしてブログに書き溜めてい…

エンジニアのためのTwitter クライアント、twterm v2 をリリースした

ターミナルエミュレータ上で動作する twterm の v2 をリリースした. twterm.ryota-ka.me これはなに 端末エミュレータ上で動作する Twitter クライアント.2015年1月ごろから細々と開発をしている.僕は普段 tmux でいくつも pane, window, session を作っ…

Terraform の module で2重ループしたい ― GitHub の issue labels を例に

実現したいこと Terraform の GitHub provider を用いて,issues および pull requests のラベルを管理したい.その際に,いくつかのラベルをひとまとめにしておき,複数のリポジトリが同じラベル群を持つようにしたい.また,module はネストすることもでき…

Swift 3 でジェネレータを作ったり、遅延評価してみる

Swift でのジェネレータの取扱いや遅延評価については,ymyzk 先生の Swift でジェネレータを作ったり、遅延評価してみる において解説されているが,2015年5月の記事であり,Swift のバージョンも1.2だった頃の記事なので,改めて書くことにした. 2017年7…

curl の -b, -c (--cookie, --cookie-jar) オプションが便利

体系だった大掛かりな記事を書こうとすると,なかなか気力と労力が必要で,結局書き上がった頃には多大なる時間を費やしているということがままあるので,もう少し雑にお役立ち情報を書いていきたい.そこで,TIL (Today I Learned) を (GitHub に push する…

Cycle.js を JSX で書く

Cycle.js と DOMDriver で Web アプリケーションを書くとき,sink に流す仮想 DOM を JSX で記述したい.公式を読むと普通にやり方が書いてあったが,ググって解決しようとしていると,古い手順に当たってしまい,少し引っかかってしまった.加えて,「最近…

Vim script でジェネレータを作ったり、遅延評価してみる

この記事は CAMPHOR- Advent Calendar 2016 8日目の記事です. はじめに 日本時間の2016年9月12日に,Vim 8.0 がリリースされた.Vim 7.4 のリリースからはおよそ3年振り,Vim 7.0 からは実におよそ10年振りのバージョンアップだそうだ.Vim 8.0 では様々な…

Rust の turbofish と GHC 8 の Type Application ― または我々は如何にして多相な関数を単相化するか

Rust には std::str::FromStr という trait があって,データ型がこれを実装すると,from_str という名前の associated function *1 を通じて,str からそのデータ型に変換できるようになる. use std::str::FromStr; fn main() { let x = i32::from_str("42…

ぷろみすのはなし

resolve.js Promise.resolve({ ok: true, json: () => Promise.resolve({}) }) .then(res => res.ok ? Promise.resolve(res.json()) : Promise.reject(res.json())) .then(console.log.bind(console)) .catch(console.error.bind(console)) reject.js Promis…

ないんたんのパーザを書いた

京都に住んでいた頃は,ズバリ大学付近の予想降水量をないんたんで知ることができたが,ないんたん天気予報@東京 で提供されているのは,本郷・駒場・大岡山・六本木ヒルズの4ヶ所なので,以前に比べると自分の行動範囲からは遠のいてしまった.が,普段は目…

wercker v2 で Rails + RSpec のビルドを高速化する

TL; DR 予め作っておいた Docker イメージを box として指定する rake assets:precompile で生成されたファイルをキャッシュする test-queue で RSpec の実行を並列化する Database Cleaner の代わりに DatabaseRewinder を使う

Haskell でマルコフ連鎖を用いたツイートの自動生成

元ネタ morishin.hatenablog.com やったこと これまでの Twitter 上の発言をもとに,マルコフ連鎖で文章を生成して,それを垂れ流す bot がいるとおもしろいかなと思って作った.しゅうまい君 (@shuumai) みたいなものなのだけど,ソースが特定の人物のもの…

キヨシ

界隈の人たちはみんなポエムを書くのが好きなので,散々既出だと思うけど,先週京都にいるときに少し話が出て,自分だったらこう書くかなぁと,フワッと思ったものを書き下してみた. import Data.Bool (bool) import Data.List (isPrefixOf) import System.…

beautiful people

data Person = Person { isBeautiful :: Bool , isNice :: Bool , isTall :: Bool } deriving Show type People = [Person] people :: People people = let b = [minBound ..] in Person <$> b <*> b <*> b beautiful :: People -> People beautiful = filte…

Perl 6 でジェネレータを作ったり、遅延評価してみる

この記事は CAMPHOR- Advent Calendar 2015 30日目の記事です. これまでの流れ Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog Python でジェネレータを作ったり、遅延評価してみる - 意識低い開発者のBlog ECMAScript …

パターンマッチなんか書いたら負け (モナドがあるから)

この記事は CAMPHOR- Advent Calendar 2015 26日目の記事です. はじめに (弁明) 個人的な意見といたしましては,別にパターンマッチを使おうが負けだとはこれっぽっちも思っておりませんし,むしろ,Haskell におけるパターンマッチは非常に強力な言語機構…

vty + StateT で画面のスクロールを実装する

この記事は CAMPHOR- Advent Calendar 2015 4日目の記事です. こんにちは,@ryota-ka です.今年もアドベントカレンダーの記事がやって参りました. 今回の記事では,ncurses を使ってターミナル上でフルスクリーンアプリケーションを作成し,ユーザーのキ…

Karabiner を使ってターミナルの外でもラクラクカーソル移動生活

おはようございます,@ryota-ka です. 僕は Zsh の設定ファイルに bindkey -e と書いている人種なのですが*1,いくつかの Emacs のキーバインディングは Cocoa の Text System でも使えるようになっていて便利ですよね.C-a -> C-k で move-beginning-of-li…

Rust でジェネレータを作ったり、遅延評価してみる

はじめに 日本時間の2015年5月16日に Rust 1.0 がリリースされました というわけで、4月末頃から、「書こう書こう」と延々と言っていた記事を、いい加減書こうと思います。 これまでの流れ Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる …

Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる

Ruby には Enumerable モジュールってのがあって、これを include したオブジェクトは、自身に対して何かしらの反復処理ができるようになる*1。 また、その反復処理を用いた Enumerable#map とか Enumerable#select *2 とか Enumerable#reduce とかが使える…

ターミナルで動く最高の Twitter クライアントを作った

ターミナルで動く最高の Twitter クライアントを作った。 twterm : A full-featured CLI Twitter clienttwterm.ryota-ka.me スクリーンショット インストール $ gem install twterm バージョン2.1以上くらいの Ruby じゃないと動かないと思う(詳しくは未確認…

ポートフォリオサイトをリニューアルした

明けましておめでとうございます。@ryota-ka です。11月末頃にようやくクレジットカードを手に入れたこともありまして*1、12月初旬にさくらのVPSを借りていたのですが、なかなかまとまった時間が取れずに放置しておりました。しかしながら、以前から常々、ポ…

Raspberry Pi をセットアップ後に apt-get update ができなかった

最近とある理由で Raspberry Pi Model B+ (とカメラモジュール)を手に入れたので、セットアップしてみました。とりあえず無事にインストールを終え、起動と ssh 接続はできたので、とりあえず apt-get update しようと思ったらさっそくコケた。 pi@raspberry…

Git さえ使ったことがない初心者がとりあえず Heroku 上で PHP アプリケーションを動かすまで

PaaS とかが流行っていると耳にするようになって久しいですが、なんだかどうも Heroku というものは手軽でいいらしい、と。しかも先日 PHP も公式にサポートされまして*1、「PHP しかできないし難しいことよくわかんない><」っていう人でも比較的簡単に使…