fugafuga.write

日々のログ

2019 ふりかえり

これは iPad Pro と new HHKB で書いている。書き心地は中々よい。 2018のふりかえりはしていないが、今年は意識低くやっていこうと思う。

Rubyで遅延評価

Rubyでの末尾呼び出しの最適化について

再帰処理の最適化についてなんもわからんという問題に向き合う

fugitiveで違うブランチのファイルの内容を見る

vim

現在のブランチとは違うブランチのファイルの内容がみたかった :Gvsplit origin/other_barnch:filename.hoge

Service Worker について調べた

Service Worker とは Service Worker はブラウザが Web ページとは別にバックグラウンドで実行するスクリプトで、Web ページやユーザのインタラクションを必要としない機能を Web にもたらします。すでに現在、プッシュ通知やバックグラウンド同期が提供され…

Action Cableの諸々について調べた

Action Cableとは WebSocketとRailsのその他の部分をシームレスに統合するためのもの。 Railsで扱っているデータをWebSocketでも扱えたりする。その逆も。 WebSocketについて WebSocketとは HTTPなどと同じく通信規格の1つ。Webアプリケーションにおいて双方…

プリレンダリングについて調べた

プリレンダリングについて調べたので書いておく。 構成と役割 Rails + React + Redux 以下プリレンダリング用のライブラリ prerender https://github.com/prerender/prerender クライアント側で動くnode_module HeadlessChromeを起動し、レンダリングしてく…

SPAにおけるSEOについて調べた

目的 SPA構成のWebアプリケーションはクライアントでDOMをレンダリングするため、検索エンジンにインデックスされない可能性がある。そのため、SPAでSEOするために必要な情報を集めた TL;DR SSRとプリレンダリングという2つの方法がある SSR サーバーでDOMレ…

heroku に master 以外の branch を push

git push heroku my-dev-branch:master

git push するときに ssh key を指定する

git

おなじみの direnv を使う。 .envrc をリポジトリがあるディレクトリに置いて下記を書く。 export GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_for_github_private -F /dev/null" direnv allowすると環境変数が設定される。

仕事用PCでのGithubアカウントの切り替え

git

まず brew で direnv 入れる 仕事用のディレクトリを作成し、.envrcとして以下のファイルを設置 NAME="<仕事用のアカウントID>" MAIL="<仕事用のemail address>" export GIT_COMMITTER_NAME=$NAME export GIT_COMMITTER_EMAIL=$MAIL export GIT_AUTHOR_NAME=…

すごいH本 part100

ある男の物語

すごいH本 part99

Zipper Haskellで木構造の要素を変更したい場合、ルート要素から指定の要素が見つかるまで探索が必要になる。 また、前回更新した要素の近くの要素を更新したい場合などでもルートから探す必要がある。 これは効率が悪い。 そこでZipperを使ってデータ構造の…

すごいH本 part98

モナドを作る モナドは作りたいと思って作るものではない。 ある問題の側面をモデル化した型を作り、 後からその型が文脈付きの値を表現していてモナドのように振る舞うとわかった場合に、 Monadインスタンスを与える場合が多い。 リスト [3,5,9] を、整数3,…

すごいH本 part97

安全な逆ポーランド記法電卓をつくる 前に作ったRPN電卓にエラー機能をつける。 import Control.Monad solveRPN :: String -> Maybe Double solveRPN st = do [result] <- foldM foldingFunction [] $ words st return result foldingFunction :: [Double] -…

すごいH本 part96

便利なモナディック関数 モナドを扱う関数はモナディック関数と呼ばれる。 liftM 関数とモナド値をとって、関数でモナド値を写してくれる。 fmapっぽい。 liftM :: Monad m => (a1 -> r) -> m a1 -> m r fmap の型 fmap :: Functor f => (a -> b) -> f a -> …

すごいH本 part95

Eitherモナド Maybeモナドは値に失敗するかもしれないという文脈をつけられる。 Eitherモナドも失敗の文脈を扱える。しかも、失敗に値を付加できるので失敗の説明ができたりする。 Either e a は、Right値であれば正解や計算の成功、Left値であれば失敗を表…

すごいH本 part94

計算の状態 状態を扱うためにHaskellにはStateモナドが用意されている。 状態付きの計算 状態付きの計算とは、ある状態を取って、更新された状態と一緒に計算結果を返す関数として表現できる。 s -> (a, s) s は状態の型で、 a は状態付き計算の結果。 この…

すごいH本 part93

Reader 関数の型 (->) r はファンクターであり、アプリカティブファンクターであるばかりでなく、モナドでもある。 関数にとっての文脈とは、値がまだ手元になく、値がほしければその関数を別の何かに適用しないといけない。 というもの。 instance Monad ((…

pg_restore 時に unsupported version (1.13) in file header エラーが出る

postgresql-client のバージョンを上げる必要がある PostgreSQL: Linux downloads (Ubuntu) (参考) Why am I getting pg_restore: [archiver] unsupported version (1.13) in file header error with pg_restore? - Heroku Help

すごいH本 part92

プログラムにログを追加する ユークリッド互除法。2つの数を取り、最大公約数を求めるアルゴリズム。 gcd関数を自前で作る gcd' :: Int -> Int -> Int gcd' a b | b == 0 = a | otherwise = gcd' b (a `mod` b) 実行 *Main> gcd' 8 3 1 8 と 3 の最大公約数…

すごいH本 part91

Writer Writerモナドはもう1つの値がくっついた値を表し、付加された値はログのように振る舞う。 Writerモナドを使うと、一連の計算を行っている間全てのログが単一のログ値にまとめて記録されることを保証できる。 盗賊団の人数をとり、それが大きな盗賊団…

カイゼン・ジャーニー 第3部読んだ

カイゼン・ジャーニー 第3部 読書メモ

カイゼン・ジャーニー 第2部読んだ

カイゼン・ジャーニー 第2部 読書メモ

カイゼン・ジャーニー 第1部読んだ

カイゼンジャーニー第1部の読書メモ

すごいH本 part90

モナド則 ある型がMonadのインスタンスとなっていることは、その型が真にモナドであることを保証しない。 真にモナドになるために、ある型はモナド則を満たす必要がある。 左恒等性 return x >>= f と f x は等価である。 return がある値を最小限の文脈に入…

すごいH本 part89

騎士の旅 チェス盤の上にナイトの駒が1つだけ乗っており、ナイトを3回動かして特定のマスまで移動させられるかという問題を解く。 type KnightPos = (Int, Int) moveKnight :: KnightPos -> [KnightPos] moveKnight (c,r) = do (c', r') <- [(c+2,r-1),(c+2,…

すごいH本 part88

do 記法とリスト内包表記 リスト内包表記はリストモナドの構文糖衣である。 listOfTuples :: [(Int, Char)] listOfTuples = do n <- [1,2] ch <- ['a','b'] return (n, ch) ↓ *Main> [(n, ch) | n <- [1,2], ch <- ['a','b']] [(1,'a'),(1,'b'),(2,'a'),(2,'…

すごいH本 part87

リストモナド 5という値は決定的である。一方、[1,2,3]のような値は複数の計算結果を含んでいるとも、複数の候補地を同時に重ね合わせたような1つの値であるとも解釈できる。 リストをアプリカティブスタイルで使う *Main> (*) <$> [1,2,3] <*> [10,100,1000…

すごいH本 part86

ピエールリターンズ ピエールの綱渡りの一連の処理を do を使って書く routine :: Maybe Pole routine = do start <- return (0, 0) first <- landLeft 2 start second <- landRight 2 first landLeft 1 second 実行 *Main> routine Just (3,2) 手続き型のよ…