サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
ryota-ka.hatenablog.com
この記事は以下のページに移転しました. blog.ryota-ka.me 「ゴミの収集が止まる年末に大掃除をするのは非合理だ」という言説を見かけた.「一理ある」と感じたので,特に家の大掃除などはしないことに決め,代わりに dotfiles の大掃除をすることにした.プロたるもの,日頃から*1自らの仕事環境に対する投資を惜しんではならない. 筆者は Nix ユーザであるため,この年末年始の休暇を用いて Home Manager を導入したいと考えており,実際に移行を行った. github.com この記事では,Home Manager の利点や導入手順,実際の導入にあたって取った選択や tips を紹介する. なお,筆者が用いているのは Intel および ARM プロセッサの macOS Monterey で,Zsh, Neovim, tmux などの上で生活している.もちろん Nix は
この記事は以下のページに移転しました. blog.ryota-ka.me この記事は Haskell Advent Calendar 2020 20日目の記事です. TL; DR タイトル 問題設定 ユースケース層とサーバ層が存在する Web アプリケーションを考える.サーバ層はユースケース層を呼び出すことができるが,ユースケース層はサーバ層について無知でなければならない. +----------------+ | server layer | +-------+--------+ | depends on +-------v--------+ | use case layer | +----------------+ このようなアプリケーションのAPI リクエストハンドラにおいて,複数のユースケースを合成して呼び出すケースを例に挙げ,それぞれのユースケースが投げうるエラーをうまく扱う o
この記事は以下のページに移転しました. blog.ryota-ka.me 前編はこちら ryota-ka.hatenablog.com §8 発話文脈・変項割当 という文を発話したとする.この文は,代名詞 と の2つの指示対象が発話の状況から明らかなときにのみ適切である.このように,文脈に依存して意味が初めて定まる言語表現を直示 (deixis) という.指示対象を明らかにするため,次のように代名詞に指標 (index) を振ることにする. と に と という異なる指標が割り当てられているのは,それらが相異なる外延をもつことを表している. 既に述べたように,この文の外延は および の指示対象が文脈から定まることで初めて計算することができる.このような文は自由変項*1を含んだ開いた項 (open term) として見做すことができる.このような発話に際しての状況を utterance con
この記事は以下のページに移転しました. blog.ryota-ka.me 一昨年のゴールデンウィークに池袋のジュンク堂を訪れた際,『形式意味論入門』という表題の本に目が止まり,数学や論理学を用いて自然言語表現の意味を形式的に考察する学問分野があることを知った*1.また,その道具立てとして単純型付きラムダ計算が用いられていることが,なおのこと私の興味を惹いた.ラムダ計算といえば,読者の多くが計算機科学分野での応用を思い浮かべると思うが,Richard Montague*2 が自然言語分野に応用して以来,そちらの方面でも道具立てとして用いられているようである. 形式意味論入門 (開拓社叢書) 作者:拓郎, 田中開拓社Amazon この本は,Irene Heim と Angelika Kratzer による Semantics in Generative Grammar (以下 Heim and
この記事は以下のページに移転しました. blog.ryota-ka.me みなさん,Haskell やってますか?普通に Haskell IDE Engine を入れようとするとビルドにメッチャ時間がかかって「地獄か?」という感じがするので,Nix でシュッと入れていきましょう. Nix のインストール Nix を入れていない人はいないと思うけど,念の為インストール手順です. 「Nixはこの会社以外で役に立つことはないけど、人生が豊かになるから勉強した方がいい」— ポアソン氏 (@hiroqn) June 28, 2019 $ curl https://nixos.org/nix/install | sh $ nix-channel --add https://nixos.org/channels/nixpkgs-unstable $ nix-channel --update Cachix
この記事は以下のページに移転しました. blog.ryota-ka.me cycle-ink-driver というライブラリをリリースした.このライブラリを用いると,Cycle.js と Ink を用いてインタラクティヴなコマンドライン・アプリケーションを作ることができる. www.npmjs.com github.com Cycle.js は Web フロントエンドフレームワークではない.Cycle.js は Web フロントエンドフレームワークではない.大事なので2回言いました. Cycle.js を,例えば React などと比較するのは間違っている,と再来週の effect system 勉強会 で話そうと思っている.Cycle.js は effect system の枠組みを提供しているに過ぎず,view の部分は ReactDOM の代わりに Snabbdom,state 管理
この記事は以下のページに移転しました. blog.ryota-ka.me Dhall v3.0.0 がリリースされた.メイジャーバージョンの更新ということで,いくつかの破壊的変更を含む. Version 3.0.0 of the Dhall standard is out: * `Some`/`None` constructors for `Optional` (`Some` performs type inference) * Kind polymorphism (Allows records to store types of mixed kinds) More details: https://t.co/Dln6fFq3FW— Dhall (@dhall_lang) October 16, 2018 Some / None コンストラクタが予約語として導入 Optional 型のコン
この記事は以下のページに移転しました. blog.ryota-ka.me お盆に数日の休みがあったので,Ludwig Wittgenstein の『論理哲学論考 (Tractatus Logico-Philosophicus)』を読み始めた.Wittgenstein の著作を読んでいると,彼が理論を継承し,また批判する対象となった Gottlob Frege や Bertrand Russell の思想にも同時に触れることになる. 『論考』の命題 3.3 以下に,Russell のパラドクスに対する解決策を提示し,Russell の主張を反駁する場面が見られるが,この記事ではむしろ,Russell 自身の回答である階型理論 (theory of types) による解決策に目を向けたい.我々が普段プログラムを記述する際に触れる型の概念が如何にして生まれ,発展してきたのかを見ていくこととしよ
この記事は以下のページに移転しました. blog.ryota-ka.me こんにちは.Kubernetes 班の ryota-ka です。皆さん Kubernetes やっていますか?*1 Kubernetes をやっていこうとすると,大量の YAML を書くことになって大変である.大量の YAML を書くことは大変なので,大抵コピペする.コピペをするが,コピペは怖い.例えば,deployment を定義する YAML をコピペしたとして,万一 label を変更するのを忘れて,想定していない service からルーティングされたりすると悲惨である.そもそも(個人的な意見ではあるが) YAML の仕様自体があまりにも複雑かつ難解であり*2,ある種の仕様が余計なお世話だともしばしば感ぜられる*3. 最近では kustomize が将来的に kubectl に統合される予定で開発が進められて
この記事は以下のページに移転しました. blog.ryota-ka.me 「関数プログラミングとはなんですか?」と問われたときには「デ,データファースト……(震え声)」と答えることが多いのだが,実際 Haskell や OCaml などの言語を特徴付けるものとして,代数的データ型 (Algebraic Data Type; ADT) の存在は無視できないだろう.その有用性ゆえに,近年では新たな言語の策定の際にその概念が輸出され,Rust や Swift などの言語にも採用されている. 「代数的データ型とはなんですか?」と問われたときには―問われたことがないのでわからないのだが―おもむろに ghci か utop を立ち上げて,解説を始めるのではないかと思う.ひとしきり解説をした後,「つまり直積の直和なんですよ〜🙌✨」と言って話を締めくくるだろう. int 型や float 型など,「メモ
この記事は以下のページに移転しました. blog.ryota-ka.me operational (あるいは freer) と呼ばれているものの説明として, a) Coyoneda を使うと,kind が * -> * であるような任意の型から functor を作り出せる 任意の型 f :: * -> * について Coyoneda f は Functor のインスタンスになる b) Free を使うと,任意の functor から monad を作り出せる Functor のインスタンスである任意の型 f について Free f は Monad のインスタンスになる a と b を組み合わせると,適当な型 f :: * -> * から monad を作り出せて便利〜🙌 というストーリーが往々にして語られる*1. Free については既に多くの解説が存在するので,詳しい解説は他の記事を
この記事は以下のページに移転しました. blog.ryota-ka.me Template Haskell を使って,時間の長さをいい感じに(人間が読みやすい形で)記述できるライブラリを作った. hackage.haskell.org github.com (実は GW 前くらいには既に公開していたけど,ブログを書く余裕がなかった……) モチベーション JavaScript のライブラリに,ms というものがある. www.npmjs.com README を読めば一瞬で使い方が把握できるが,以下の様なことができる. ms('2 days') // 172800000 ソースコード中に 1000 * 60 * 60 * 24 * 2 などと記述するのも悪くはないが,やはり自然言語表現の方が読み手にとって親切だ. ただし,この方法には一つ問題があって,文字列はパーズに失敗しうる. > con
この記事は以下のページに移転しました. 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 -
この記事は以下のページに移転しました. blog.ryota-ka.me FunctionalDependencies という GHC 言語拡張がある.Haskell Wiki によると, Functional dependencies are used to constrain the parameters of type classes. と書かれているが,これはどういうことか. Haskell Language Report で定められた範囲では,型クラスに与えられるパラメータは1つに限られるが,MultiParamTypeClasses を用いると,複数のパラメータを与えることができる.この際に,パラメータとして与えられた (複数の) 型の間の関係性に制限を加えることができるのが,FunctionalDependencies なのであった.恐らく多くの人が初めて目にするのは,mtl
この記事は以下のページに移転しました. blog.ryota-ka.me 前回よりはもう少し実用的な例を. Template Haskell を使って,Haskell のコード中に JSON をそのまま埋め込むことができるようにする.また,あらかじめ用意しておいた JSON ファイルをコンパイル時に読み込み,指定したデータ型の値にする. ToC コード中に JSON を埋め込む コンパイル時に JSON をファイルから型安全に読み込む 環境 stack --version Version 1.6.3 x86_64 hpack-0.20.0 $ stack ghc -- --version The Glorious Glasgow Haskell Compilation System, version 8.2.2 $ stack list-dependencies | grep -e aes
この記事は以下のページに移転しました. blog.ryota-ka.me 数ヶ月前に Twitter で,コンパイル時に FizzBuzz を計算して,実行時には計算された文字列を出力をするだけ,というコンパイル時 FizzBuzz を何かの言語でやっているのを見かけた.元ネタは江添さんがC++で書いたものらしい.インスピレーションを受けて,Haskell で書いてはみたが,簡単すぎて全然おもしろくなくなってしまった. コード GHC の制約*1により,モジュールを分割している. -- FizzBuzz.hs {-# LANGUAGE TemplateHaskell #-} module FizzBuzz (answerExpr) where import Language.Haskell.TH fizzbuzz :: Int -> String fizzbuzz n | n `mod`
この記事は以下のページに移転しました. blog.ryota-ka.me この記事は CAMPHOR- Advent Calendar 2017 の21日目の記事です. @ryota-ka です.普段は HERP という会社でリードエンジニアとして働いています.一昨日19日にサービスのティザーサイトを公開したばかりなので見てください. herp.cloud さて,12月といえば,万人受けしなさそうなネタでブログを書いては「はてブが付かねえ」と文句を言う季節ですが,今年もそういう方針で,TypeScript での型レベル計算について書きます.型レベルでの自然数などが定義できると,リストに型レベルで長さを付けることができて,空リストの先頭の要素を取ろうとしてランタイムで落ちる,という悲劇が生じる可能性をコンパイル時に排除できてとても嬉しいですね. なお,使用している TypeScript のバ
この記事は以下のページに移転しました. blog.ryota-ka.me 最近弊社でも大学生のエンジニアインターンが増えてきて,彼らの成長のために,開発にあたっての知見を効率的に共有する手段を色々と模索している.こういった知見は再利用性も高く,社内に閉じている必要もまったくないので,こうしてブログに書き溜めていくことにしてみようかと思う.第一弾として,端末エミュレータ上でのオペレーションの効率化について記す. ソフトウェアの開発をやっていると,なんだかんだで端末エミュレータというインタフェースの上で,シェルを使ってオペレーションを行うことが多い.開発に用いるマシンの OS はたいてい macOS か Linux の何かしらのディストリビューション (Ubuntu が多いか?) だし,プロダクション環境での運用は Linux を前提することが多いだろう.また,Docker の普及により,Li
この記事は以下のページに移転しました. blog.ryota-ka.me ターミナルエミュレータ上で動作する twterm の v2 をリリースした. twterm.ryota-ka.me これはなに 端末エミュレータ上で動作する Twitter クライアント.2015年1月ごろから細々と開発をしている.僕は普段 tmux でいくつも pane, window, session を作って作業をしているが,そのうちの一つで twterm を常に開いている.Text-based User Interface を採用していて,ターミナルから出ることなくインタラクティブに Twitter を眺めたり,ポストしたりできて便利. インストール $ gem install twterm ncurses と readline が有効化された Ruby ランタイムが必要. 変更点とか カスタマイズ可能なキー
この記事は以下のページに移転しました. blog.ryota-ka.me 体系だった大掛かりな記事を書こうとすると,なかなか気力と労力が必要で,結局書き上がった頃には多大なる時間を費やしているということがままあるので,もう少し雑にお役立ち情報を書いていきたい.そこで,TIL (Today I Learned) を (GitHub に push するのではなく) 記事にしていこうと思う. 既に today ではないのだが,先週末に curl について便利なオプションを知ったのでまとめておく.curl で cookie を送受信する際には -b / --cookie -c / --cookie-jar という便利なコマンドがあるのでこれが使えるという話. 動作検証用に Node.js で簡単な HTTP サーバを立てておく. const http = require('http'); http
2017 - 04 - 21 株式会社ラブグラフを退職しました 4月21日を以て株式会社ラブグラフを退職した.最後のわがままで,今まで使ったことのない有給休暇を消化させてもらえることになったので,5月半ばまでは在籍することになっているが,ともかく今日が最終出社日だった.2015年3月頃から手伝っていたので,およそ2年に渡って関わり続けてきたことになる.長い間,様々な人たちから「やめろやめろ」と言われていながら,ようやく退職を決意することにしたわけであるが,以下に主たる理由を3つ挙げる. 第一に,今の組織に留まり続けても,今後自分にとって成長がないだろうと感じた. 初めの頃は,メンバーもごく少なかったこともあり,自分でサービスを作っているという実感があったが,ビジネスサイドの人間が増え,力を持つようになると,単に彼らの注文をこなすだけの作業が格段に増えた.「社内外注」とは言い得て妙なり,他人
この記事は以下のページに移転しました. 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 にはリストはあれど,イテレータなどというものは存在するはずも
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 が溜まってしまうことがしばしばありまし
この記事は以下のページに移転しました. 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 でジェネレータを作ったり、遅延評価してみる - たに
この記事は CAMPHOR- Advent Calendar 2015 26日目の記事です. はじめに (弁明) 個人的な意見といたしましては,別にパターンマッチを使おうが負けだとはこれっぽっちも思っておりませんし,むしろ,Haskell におけるパターンマッチは非常に強力な言語機構であり,見通しよく処理を記述できる素晴らしい機能だと思っています.記事のタイトルは,単に「id:ryota-ka は将来こういうことを言っていそうだ」と過去に言われた言葉をそのまま引用したものであり,私自身の主義主張とは何ら関わりのないものである旨をここに記しちょっとまさかり投げるのやめて痛い,痛いから! この記事の趣旨について Haskell は,圏論という分野から幾分か抽象化のアイディアを得ており,様々な型を Functor や Monad といった型クラスのインスタンスとすることで,それぞれの型に対する処
この記事は CAMPHOR- Advent Calendar 2015 4日目の記事です. こんにちは,@ryota-ka です.今年もアドベントカレンダーの記事がやって参りました. 今回の記事では,ncurses を使ってターミナル上でフルスクリーンアプリケーションを作成し,ユーザーのキー入力を受け取って画面のスクロール機能を実装します.スクロールのオフセットは State モナドで管理することにしましょう. TL; DR Haskell で ncurses を触る際には vty が便利 複数のモナドを同時に扱いたい時にはモナド変換子を使おう ソース GitHub に上がってます ncurses と vty について ターミナル上でフルスクリーンで動作するアプリケーションはよくあります.例を挙げると,tig, sl, twterm, chikubeam などなど.こういった挙動を実現する
おはようございます,@ryota-ka です. 僕は Zsh の設定ファイルに bindkey -e と書いている人種なのですが*1,いくつかの Emacs のキーバインディングは Cocoa の Text System でも使えるようになっていて便利ですよね.C-a -> C-k で move-beginning-of-line -> kill-line とかは本当によくお世話になっていますし,まったくカーソルキーを押すことなく生活ができるので,普段から心の平穏を保つことができています. このデフォルトのキーバインディングの設定は, /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict に書いてあります. $ plutil -convert xml1 /System/Library/Fr
この記事は以下のページに移転しました. blog.ryota-ka.me はじめに 日本時間の2015年5月16日に Rust 1.0 がリリースされました 👏👏 というわけで、4月末頃から、「書こう書こう」と延々と言っていた記事を、いい加減書こうと思います。 これまでの流れ Ruby の Enumerator でジェネレータを作ったり、遅延評価してみる Python でジェネレータを作ったり、遅延評価してみる ECMAScript 6 でジェネレータを作ったり、遅延評価してみる とりあえず例を見てみる fn main() { let arr = [0, 1, 2, 3]; // 要素は4つしかない let mut iter = arr.iter(); for _ in 0..5 { // ループを5回回してみる match iter.next() { Some(x) => print
この記事は以下のページに移転しました. blog.ryota-ka.me Ruby には Enumerable モジュールってのがあって、これを include したオブジェクトは、自身に対して何かしらの反復処理ができるようになる*1。 また、その反復処理を用いた Enumerable#map とか Enumerable#select *2 とか Enumerable#reduce とかが使えるようになる。 更に、Enumerator というものがある。Enumerable がモジュールなのに対して、Enumerator はクラスなので、インスタンス化できる。また、Enumerator は Enumerable を include している。この Enumerator は、外部イテレータ、いわゆるジェネレータとして使える。 フィボナッチ数列のジェネレータを作ってみよう。 fib = Enu
次のページ
このページを最初にブックマークしてみませんか?
『ryota-ka's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く