サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
円安とは
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 TL; DR FONTCONFIG_FILE = "${pkgs.fontconfig.out}/etc/fonts/fonts.conf"; ビルドプロセスで Puppeteer を使いたい 前回の記事で,静的にビルドした Storybook に対し,Puppeteer を通じてヘッドレスモードの Chromium を立ち上げ,stories.json というファイルを生成する手順を紹介した. ryota-ka.hatenablog.com Chromium を動かすのは面倒な場合がある Puppeteer を用いれば Chromium の操作の自動化を手軽に行えるが,CI 上などで Chromium をインストールするためには,大量の動的ライブラリの存在が要求され,少々煩わしい. 以下は,かつて .circlec
この記事は以下のページに移転しました. blog.ryota-ka.me Storybook 6.0 から,ある Storybook の中から別の Storybook を参照することができる "Storybook composition" という機能が導入された. storybook.js.org これは目玉機能として挙げられているものの,2021年1月現在この機能についてのドキュメンテーションが十分になされていない.そのため,不足している情報を補完することを目的としてこの記事を書くことにした. モチベーション HERP では herpism と呼ばれる社内用 UI コンポーネントライブラリを管理しており,プライベートな npm パケッジとして配布している.またherpism の Storybook は,社内のメンバのみがアクセス可能な環境にホスティングされている. 各フロントエンドのプロ
この記事は以下のページに移転しました. 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 Dhall の Prelude を眺めていて見付けた,ランク2多相を使ったテクニックを紹介する. Dhall のビルトイン型の一部 (e.g. Natural Option List) にはそれぞれ build という関数が定義されている.これはコメントで "inverse of fold" と説明されているから,最も普遍的に値を構築する手段として提供されているようである. 例えば,Natural/build 関数の型は以下のようになっている. ⊢ :t Natural/build ( ∀(natural : Type) → ∀(succ : natural → natural) → ∀(zero : natural) → natural ) → Natural 引数として受け取った関数を元に Natural 型の値
この記事は以下のページに移転しました. blog.ryota-ka.me TL; DR Netlify の build hook URL を発行する 上記の URL に対して定期的にリクエストが送られるように設定する モチベーション ポートフォリオサイトを Gatsby で作って Netlify でホスティングしているのだが,コンテンツの一部として,gatsby-source-graphql を使って GitHub GraphQL API から自分の profile の pinned items を取得して表示したり,gatsby-source-rss-feed を使ってこのブログの最新記事を取得して表示したりしている.静的サイトとしてホスティングしているため,これらの情報はビルド時に取得され,その時点で得られた値が HTML に埋め込まれる.しかし,こうした情報は低頻度ではあるものの,ポ
この記事は以下のページに移転しました. 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 もう1ヶ月ちょっと前の話になるが,effect system 勉強会 で Cycle.js の話をしてきた. connpass.com 発表資料はこちら. qiita.com 当日の Twitter の様子をまとめた moment はこちら. twitter.com 発表内容のサマリ 「望ましい Web フロントエンドフレームワークとは,以下の2点の要求に答えることができるものである」との仮定のもと,それらの仮定を満たすものとして天下り的に Cycle.js の紹介をし,実際に仮定を満たしていることを確かめる,という構成をとった. 非同期が織り込み済みだと嬉しい 種々の副作用を互いに分離できると嬉しい a. 非同期が織り込み済みだと嬉しい interactive なアプリケーションを作る上で,非同期処理はどうあがいて
この記事は以下のページに移転しました. 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 この記事は 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 で
この記事は以下のページに移転しました. 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 Rust には std::str::FromStr という trait があって,データ型がこれを実装すると,from_str という名前の associated function *1 を通じて,str からそのデータ型に変換できるようになる. use std::str::FromStr; fn main() { let x = i32::from_str("42"); println!("{}", x.unwrap()) // 42 } これだけ見れば,特に取り立てて議論するべき点はない. 一方.str は parse というメソッドを持っていて,文字通り文字列のパーズを行うのだが,以下のようなシグネチャをしている. fn parse<F>(&self) -> Result<F, F::Err> where F:
この記事は以下のページに移転しました. blog.ryota-ka.me 数日前,@staltz 氏から Cycle React のリリースがアナウンスされた. Announcing, believe it or not, Cycle React! 🎉https://t.co/rWlyNnZ4Ra pic.twitter.com/l3i1IMx10K— André Staltz (@andrestaltz) July 18, 2018 @cycle/react を含む一連のライブラリ群は,React component を Cycle.js の中で用いることを可能にし,Cycle.js の component を React の中で用いることを可能にする. モチベーション 氏は Use React in Cycle.js and vice-versa という記事で,次のように述べている.
この記事は以下のページに移転しました. 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 引数としてカラーコードを渡すと,指定した色のプレビューをしてくれるコマンドラインツールを Rust で書いた. github.com もちろん 24-bit color 対応の端末エミュレータを使っていないとちゃんと動かない.2018年上半期に作った役に立たないものランキング第一位. モチベーション 思い付いたので作った.最近は Google でさえカラーコードを打つと色を教えてくれる時代なので,実用性は皆無.「コマンドラインツールと言えばとりあえず Go で書く」みたいなご時世なので,「たまには Go でも書くか〜〜」という気持ちで最初は Go で書いていたが,途中からあまりにつらくなってきたので*1シュッと Rust で書き直した. コマンドラインオプションパーザ コマンドラインオプションのパーズ処理を自分で書き
この記事は以下のページに移転しました. 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
最近とある理由で Raspberry Pi Model B+ (とカメラモジュール)を手に入れたので、セットアップしてみました。 とりあえず無事にインストールを終え、起動と ssh 接続はできたので、とりあえず apt-get update しようと思ったらさっそくコケた。 pi@raspberrypi ~ $ sudo apt-get update ... Reading package lists... Error! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/dpkg/status E: The package lists or status file could not be parsed or opened. /var/lib/dpkg/status がおか
この記事は以下のページに移転しました. 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 ランタイムが必要. 変更点とか カスタマイズ可能なキー
次のページ
このページを最初にブックマークしてみませんか?
『ryota-ka's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く