プログラミング
Elmアプリケーションにおいてモジュールを作る際に、モジュールへ機能をどう凝集させるかに関して。 機能による区分 かつてElmにおいて一般的だった分割方針。グレーの部分がひとつのモジュールを表している。 ModelとUpdate, Viewなどをすべて別のモジュー…
DEVにシリーズ機能というものがあることを知って試してみた。全2作。 dev.to dev.to elmbitsでも取り上げられた Issue #14: This week ElmLove, PET stack, calculator project, webapp in func languages, opaque types, new podcast, and more. By @luca_m…
公式のドキュメントや他の人の書いたブログ記事を読みつつ書いてみたのでメモ。 zio.dev import zio.{IO, RIO, Runtime, Task, UIO, URIO, ZIO} // Userリポジトリのインタフェース case class User(name: String) object UserRepo { trait Service { def lo…
前回の記事の続きです izumisy.work 前の記事だと継続渡しのスタイルで処理を表現していたが、継続渡しだとシンプルにインデントがどんどん深くなっていくという微妙な点がある。 Scalaにはfor文というのが用意されているので、継続渡しスタイルよりもfor文…
ほぼZIOのbackgroundセクションにあるサンプルそのものだが、備忘録的に残しておく zio.dev いわゆるfor-comprehensionを使わずに、Applicationをミクスインした各ADTがそれぞれrestという名前で次の処理をコールバックとして取る実装(継続渡しスタイル)に…
会社でScalaを使っているので、できれば自分もモナモナしていきたいという気持ちがある。最近見つけた参考になりそうな記事を集めてみる。 Readerモナド Readerモナドと関数表現の比較、そして最後にFreeモナドに至る。 qiita.com Freeモナド medium.com sof…
分散モノリス モノリスからマイクロサービスに至る過程でよくある分散モノリスをどのように分割していくか。 いくつかアプローチを考えたので整理してみた。 1. 内部通信 内部通信を用いた分割 たぶん一番よくあるやつ。RPCやHTTPリクエストなどでアプリケー…
「Railsやってる人たちってドメイン層にvirtusとかinteractorとかサードパーティのライブラリが現れるのってどう思ってんの」という雑なツイートに対してROM.rbやdry-rbシリーズの作者であるPiotr Solnicaが優しくリプをくれた。 One rule of thumb is to re…
github.com 背景 JavaScriptだと「起動時にサーバーへA, B, Cのデータの取得を問い合わせて全てデータがそろったら次の処理へ移る」というような実装をPromise.allで作ることがよくある。 これをElmで雑にやろうとすると以下のようなMaybeまみれのコードが生…
こんなコードを書いた。 val App = new { def say = println("hello") } App.say コレ自体実行はできるが、以下の警告がでる。 reflective access of structural type member method say should be enabled by making the implicit value scala.language.ref…
こんなコードを書いた object App { type Value[A] = Seq[(A, A)] sealed trait Status { def map[A](f: Value[A] => Value[A]) = this match { case Valid(value) => Valid(f(value)) case Invalid() => Invalid() } } case class Valid[A](value: Value[A]…
普段見ているものをなんとなく書き出してみた。 インターフェイス あえてやってないとか、レイヤ的にやる必要がないというケースもある。しかし、ある程度の規模のソフトウェアには大抵インターフェイスが現れる。インターフェイスがないコードはユニットテ…
一般的にElmでルーティングを行うSPAを作る場合にはBrowser.applicationを使って、組み込みのルーティングの機構を使うことになる*1。しかし、一方でルーティングの仕組みを持たないBrower.elementやBrowser.documentでも、ルーティングをJavaScriptサイドで…
数ヶ月前にElmでコンシステント・ハッシュ法を扱うためのelm-consistent-hashingというモジュールを公開した。 github.com こんな感じで使える。詳しくはテストを見るといいと思う。 let ch = ConsistentHashing.new Replica.default (Node.new "node1") |> …
エンジニアHubさんというあの全日本的に有名なWebメディアでElmの記事を執筆しました。 employment.en-japan.com これまでにTypeScriptの記事とかはあったものの、関数型AltJSの記事はたぶん今回のElmが初めてです。 なんだかんだ国内でも少しづついろんな盛…
Rubyで特にRailsを使う際に「特定のドメインの変化によって別の処理の実行をトリガする」みたいなケースでは大抵の場合コールバックが使われる。 しかし、ぶっちゃけた話コールバックはかなり結合度の高いコードになってしまいがちで、実装的にスケールさせ…
テック系の学生というと、やはりいろんな会社のインターンに参加していろんなイケてるナウい技術を触って「圧倒的成長!」を求めますよね。 自分もそうでした。 自分はかなり極端な例で、大学を1年休学してまでインターンしてコロコロと会社変えながら10社く…
Elmは静的型付言語なので、型のチカラを活かすことでコンパイラに「あっては行けない状態や組み合わせ」をチェックさせることができる。 高度な例としては前回書いた以下の幽霊型(Phantom Type)の記事があるが、もう少し簡単な例を紹介しようと思う。 izum…
このDiscourseスレッドがかなり面白かった。 OPは「幽霊型(Phantom Type)を使うと特定の順序でしか型安全に状態遷移できないように実装できると思うんだけど、どうしたらいいかな?」と質問している。 discourse.elm-lang.org 実装してみる 回答者からのア…
a, b, c, dという型がある状況でaがなければbが更新できないし、bがなければcが更新できない、のような流れを再帰構造の型で表現する実装。使いどころは謎だが思いついたのでメモしておく。 type Data a b c d = Data (Maybe (a, Maybe (b, Maybe (c, Maybe …
この記事はElm Advent Calendar 2019最終日の記事です。 去年末あたりから現職のチームでElmを書き始めたので、大体1年程度はプロダクションでElmのコードを書き続けたことになる。学生時代はRubyとJavaScriptばっかりだったので、関数型プログラミングとか…
何を言っているのかと言うと、みんな大好きクリーンアーキテクチャの右下に図示されているFlow of Controlのこと。 黒線が引かれているということは、つまりUsecaseの中でOutput Portのインターフェイスを持つPresenterの関数なりが最終的に実行されるという…
https://www.quora.com/What-happens-to-older-over-30-programmers-Do-they-get-fired-as-they-get-older-and-less-innovative-Does-mid-career-pay-increase-much-for-software-engineers/answer/Bruce-Hoult ぼくは今年で55歳になる。81-84年ごろに大学を…
過去に「NoRedInk*1の筋肉の人」としておなじみリチャード・フェルドマンをフィーチャーする記事を書いたので、今度は自分をフィーチャーしようと思う。 izumisy.work おすすめはやはり一番最後の「jQueryからElmまで」だが、正直このスライドはElmに関する…
Scala, Haskell, Rust, Elixirあたりの関数型の匂いを感じさせる言語の人たちが、一堂に会してそれぞれのプログラミング言語のあれこれをトークする「関数型プログラミングカンファレンス2019 in Japan」というイベントが新しく爆誕していた。このイベントは…
たとえば以下みたいなデータ構造がDatastoreにあるとする type UserSetting struct { UseNotification Bool `datastore:"useNotification"` } これはユーザーの設定として「通知をするか/しないか」を表現しているものだが、もしも仕様変更でTrue/False以外…
元ネタはこれ scotthurff.com Webアプリケーションを作ったことがある人ならわかる話だが、アプリケーションは確実に予想外の状況に晒される。サーバーはレスポンスを返すのに時間がかかるし、ユーザーの環境がメモリ1G以下のこともあれば、完全に想定外の使…
ソフトウェア開発最大の難所と呼ばれる見積もり。見積もりに関する古典があるくらいにはやはり見積もりというのは難しい。 自分もずっと見積もりを正しくするためにはどうすることがベストなのか、ということにずっと悩みを抱えていたが、社会人2年目ももう…
個人開発でFirestoreを使っているので情報を集めている。なんか日本語だとググっても要領を得ない記事ばっかりだったが、英語でちゃんと調べたらFirebase Blogでしっかり書いてあった firebase.googleblog.com FirestoreなどのNoSQLデータベースは前提として…
自分が本格的に設計を意識するようになったのは、2015年の夏に現職であるFringe81株式会社で開催されていたサマーインターンに参加してからだ。 インターンではDDDとクリーン・アーキテクチャ*1を一から勉強してAPIサーバーに実装する、というカリキュラムで…