JKになりたい

何か書きたいことを書きます。主にWeb方面の技術系記事が多いかも。

2018-06-01から1ヶ月間の記事一覧

モナドトランスフォーマーを使ってモナドを合成する

ネストしたモナドの取り扱い モナドがネストして帰ってくることがあります。 例えば、DBに接続してユーザレコードを取り出す時、DBに接続できたかどうかを表すEither、該当のユーザがいたかどうかを表すOptionのモナドがネストして帰ってくるケースを考えて…

gormでRelationを組む方法とn+1の回避

Go

昨日から色々あってGo langで開発をはじめました。 超にわかですが、気づいたことやハマったことなどあれば備忘録を残しておこうと思います。 今回は、gormを使ってBelongToの関係にあるFishモデルとWaterAreeモデルのリレーションを組んでみます。 github.c…

CatsのStateモナドを使ってFP in ScalaのEx6.11 自動販売機問題を解く (2)解いてみた

Functional Programming in ScalaのExercise6.11の問題をStateモナドを使用して解いてみます。 問題設定 スナックの自動販売機をモデリングする有限状態オートマトンを実装する。 この自動販売機は2種類の入力を受け付ける。 1つは硬貨の投入、もう1つはハン…

CatsのStateモナドを使ってFP in ScalaのEx6.11 自動販売機問題を解く (1)Stateモナドについて

Stateモナドについてざっくりと。 状態の変化を伴うミュータブルな計算をFunctional Programmingのコンテキストで表現可能にしたもの。 catsにおけるStateモナドのapplyメソッドのシグネチャは以下のようになっています def apply[S, A](f: S => (S, A)): St…

UdacityのDeep Learning Nanodegree Programを修了しました

Nanodegreeとは MOOCプラットフォームであるUdacityの提供する有料コースです。 基本的には無料の講座と同様、動画を見て学ぶ形になります。 無料コースと比較して以下のような特徴があります。 修了には指定された幾つかのプロジェクトを期限以内に提出しな…

ExpectedSarsaでOpenAI GymのTaxi問題を解く

OpenAI Gym gym.openai.com 強化学習アルゴリズムを開発して比較するためのツールキット。 シンプルなものからAtariのゲームのような複雑なものまで、様々なシチュエーションが用意されています。 今回は、そこから「Taxi-v2」環境を使って、強化学習によるA…

SwiftのOptionをEither(Result)にするExtension

SwiftのOptionalをResultにするExtension書いたのでメモ。 Resultはこのライブラリを入れてます github.com 実装 import Result extension Optional { func toResult<E: Error>(error: E) -> Result<Wrapped, E> { guard let value = self else { return .failure(error) } return </wrapped,></e:>…