ブックマーク / ryota-ka.hatenablog.com (12)

  • 代数的データ型と初等代数学 - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,RustSwift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには―問われたことがないのでわからないのだが―おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモ

    代数的データ型と初等代数学 - ryota-ka's blog
  • Nix Expression Language で遅延リストを作ってみる - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me この記事は CAMPHOR- Advent Calendar 2018 15日目の記事です.14日目の記事は @Rtm6Lgo の とある研究室の運営のエモいお話 でした. Nix Expression Language を用いて遅延リストを作る.普段は「ジェネレータを作ったり、遅延評価してみる」だが,Nix Expression Language は基的に純粋なので,mutable な state をもつイテレータや,それを生成するジェネレータという概念はなじまない. これまでの流れ Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog Python でジェネレータを作ったり、遅延評価してみる – ymyzk’s blog ECMAScript 6 で

    Nix Expression Language で遅延リストを作ってみる - ryota-ka's blog
    morishin127
    morishin127 2018/12/16
    伝統芸能
  • カラーコードを渡すと色のプレビューをしてくれるコマンドラインツールを作った - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me 引数としてカラーコードを渡すと,指定した色のプレビューをしてくれるコマンドラインツールを Rust で書いた. github.com もちろん 24-bit color 対応の端末エミュレータを使っていないとちゃんと動かない.2018年上半期に作った役に立たないものランキング第一位. モチベーション 思い付いたので作った.最近は Google でさえカラーコードを打つと色を教えてくれる時代なので,実用性は皆無.「コマンドラインツールと言えばとりあえず Go で書く」みたいなご時世なので,「たまには Go でも書くか〜〜」という気持ちで最初は Go で書いていたが,途中からあまりにつらくなってきたので*1シュッと Rust で書き直した. コマンドラインオプションパーザ コマンドラインオプションのパーズ処理を自分で書き

    カラーコードを渡すと色のプレビューをしてくれるコマンドラインツールを作った - ryota-ka's blog
  • Maybe と IO を一緒に使いたくなったら - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me たまには初学者向けにライトな話題を. 対象読者 すごいHを12章か13章ぐらいまでは読んだ do 構文を使って IO などの処理が書ける Haskell のプログラムはなんとなく書けるが,あまり綺麗に書けている気がしない IO の中で Maybe を使う 例として,以下のようなプログラムを考えてみよう. 2つの整数 a b を標準入力から1行ずつ順に読み込む a と b の和を標準出力に出力する 与えられた入力が整数でなかった場合には,その時点でエラーメッセージを出力し,プログラムを終了する これらの要件を満たすプログラムを素朴に実装するならば,以下のようになるだろう. import System.Exit (die) import Text.Read (readMaybe) readInt :: String -

    Maybe と IO を一緒に使いたくなったら - ryota-ka's blog
    morishin127
    morishin127 2018/05/26
    “対象読者”、あまりに自分で読み易かった
  • Type-level TypeScript - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me この記事は CAMPHOR- Advent Calendar 2017 の21日目の記事です. @ryota-ka です.普段は HERP という会社でリードエンジニアとして働いています.一昨日19日にサービスのティザーサイトを公開したばかりなので見てください. herp.cloud さて,12月といえば,万人受けしなさそうなネタでブログを書いては「はてブが付かねえ」と文句を言う季節ですが,今年もそういう方針で,TypeScript での型レベル計算について書きます.型レベルでの自然数などが定義できると,リストに型レベルで長さを付けることができて,空リストの先頭の要素を取ろうとしてランタイムで落ちる,という悲劇が生じる可能性をコンパイル時に排除できてとても嬉しいですね. なお,使用している TypeScript のバ

    Type-level TypeScript - ryota-ka's blog
    morishin127
    morishin127 2017/12/21
    拝読しました🙏
  • 株式会社ラブグラフを退職しました - ryota-ka's blog

    2017 - 04 - 21 株式会社ラブグラフを退職しました 4月21日を以て株式会社ラブグラフを退職した.最後のわがままで,今まで使ったことのない有給休暇を消化させてもらえることになったので,5月半ばまでは在籍することになっているが,ともかく今日が最終出社日だった.2015年3月頃から手伝っていたので,およそ2年に渡って関わり続けてきたことになる.長い間,様々な人たちから「やめろやめろ」と言われていながら,ようやく退職を決意することにしたわけであるが,以下に主たる理由を3つ挙げる. 第一に,今の組織に留まり続けても,今後自分にとって成長がないだろうと感じた. 初めの頃は,メンバーもごく少なかったこともあり,自分でサービスを作っているという実感があったが,ビジネスサイドの人間が増え,力を持つようになると,単に彼らの注文をこなすだけの作業が格段に増えた.「社内外注」とは言い得て妙なり,他人

    株式会社ラブグラフを退職しました - ryota-ka's blog
    morishin127
    morishin127 2017/04/21
    悲しい
  • Vim script でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me この記事は CAMPHOR- Advent Calendar 2016 8日目の記事です. はじめに 日時間の2016年9月12日に,Vim 8.0 がリリースされた.Vim 7.4 のリリースからはおよそ3年振り,Vim 7.0 からは実におよそ10年振りのバージョンアップだそうだ.Vim 8.0 では様々な新機能が追加されたが,中でも Vim script にラムダ式が追加されたのには目を引くものがあった. ラムダ式の登場により,標準の map() 関数や filter() 関数の使い勝手が改善されたが,これらで遊んでいるうちに,似た操作をリストだけではなくイテレータに対して適用したいという欲求が自然と生まれてきた.しかしながら,Vim script にはリストはあれど,イテレータなどというものは存在するはずも

    Vim script でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog
    morishin127
    morishin127 2016/12/08
    🤔
  • ターミナルで動く最高の Twitter クライアントを作った - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me ターミナルで動く最高の Twitter クライアントを作った。 twterm.ryota-ka.me スクリーンショット インストール $ gem install twterm バージョン2.1以上くらいの Ruby じゃないと動かないと思う(詳しくは未確認)。 Linux の場合は、readline-dev とか readline-devel とか適当に入れてから Ruby をビルドしてあげてください。 開発の経緯とか 以前から shokai/tw なんかを割と喜んで使わせて頂いていた。 しかしながら、ものぐさな自分には、リプライ時に、--id オプションでリプライ先ツイートの ID を表示し、いざリプライする時に、tw '@username hogehoge' --id=xxxyyyzzz なんていう風に指定する

    ターミナルで動く最高の Twitter クライアントを作った - ryota-ka's blog
  • wercker v2 で Rails + RSpec のビルドを高速化する - ryota-ka's blog

    TL; DR 予め作っておいた Docker イメージを box として指定する rake assets:precompile で生成されたファイルをキャッシュする test-queue で RSpec の実行を並列化する Database Cleaner の代わりに DatabaseRewinder を使う 概要 業務では,WAF として Ruby on Rails,テストフレームワークとしては RSpec,CI として wercker を使用しています.今のところ,社内のエンジニアは1人しかおらず,開発規模もそれほど大きくないので,特に CI ツールに課金をすることはしていないのですが,溜まっている pull request を同時に develop branch に merge した場合や,他の人が push した場合に,build queue が溜まってしまうことがしばしばありまし

  • Haskell でマルコフ連鎖を用いたツイートの自動生成 - ryota-ka's blog

    元ネタ morishin.hatenablog.com やったこと これまでの Twitter 上の発言をもとに,マルコフ連鎖で文章を生成して,それを垂れ流す bot がいるとおもしろいかなと思って作った.しゅうまい君 (@shuumai) みたいなものなのだけど,ソースが特定の人物のものに限定されるという点で異なる. Twitter からダウンロードできる archive に含まれる tweets.csv を入力として,MeCab で形態素解析を行い,マルコフ連鎖で文章を適当に生成して,それを Twitter に投稿する.詳細な実装についてはもりしんの記事を参照のこと. 「おもしろいかな」と思った経緯はまったく覚えてないけど,たぶん inspired by @taketo958 とか @morishin_retro だと思う. twitter.com twitter.com Twitte

    Haskell でマルコフ連鎖を用いたツイートの自動生成 - ryota-ka's blog
  • Perl 6 でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog

    この記事は以下のページに移転しました. blog.ryota-ka.me この記事は CAMPHOR- Advent Calendar 2015 30日目の記事です. これまでの流れ Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog Python でジェネレータを作ったり、遅延評価してみる – ymyzk’s blog ECMAScript 6 でジェネレータを作ったり、遅延評価してみる – ymyzk’s blog Rust でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog Swift でジェネレータを作ったり、遅延評価してみる – ymyzk’s blog PHP でジェネレータを作ったり遅延評価してみる - たにしきんぐダム Scala でジェネレータを作ったり、遅延評価してみる - たに

    Perl 6 でジェネレータを作ったり、遅延評価してみる - ryota-ka's blog
    morishin127
    morishin127 2015/12/30
    伝統芸能
  • vty + StateT で画面のスクロールを実装する - ryota-ka's blog

    この記事は CAMPHOR- Advent Calendar 2015 4日目の記事です. こんにちは,@ryota-ka です.今年もアドベントカレンダーの記事がやって参りました. 今回の記事では,ncurses を使ってターミナル上でフルスクリーンアプリケーションを作成し,ユーザーのキー入力を受け取って画面のスクロール機能を実装します.スクロールのオフセットは State モナドで管理することにしましょう. TL; DR Haskell で ncurses を触る際には vty が便利 複数のモナドを同時に扱いたい時にはモナド変換子を使おう ソース GitHub に上がってます ncurses と vty について ターミナル上でフルスクリーンで動作するアプリケーションはよくあります.例を挙げると,tig, sl, twterm, chikubeam などなど.こういった挙動を実現する

    vty + StateT で画面のスクロールを実装する - ryota-ka's blog
  • 1