Runner in the High

技術のことをかくこころみ

メモ

Scalaでモナドとかに入門できそうな記事まとめ

会社でScalaを使っているので、できれば自分もモナモナしていきたいという気持ちがある。最近見つけた参考になりそうな記事を集めてみる。 Readerモナド Readerモナドと関数表現の比較、そして最後にFreeモナドに至る。 qiita.com Freeモナド medium.com sof…

分散モノリスに対するアプローチ

分散モノリス モノリスからマイクロサービスに至る過程でよくある分散モノリスをどのように分割していくか。 いくつかアプローチを考えたので整理してみた。 1. 内部通信 内部通信を用いた分割 たぶん一番よくあるやつ。RPCやHTTPリクエストなどでアプリケー…

dry-rbの作者による「サードパーティのgemを安全に使う方法」

「Railsやってる人たちってドメイン層にvirtusとかinteractorとかサードパーティのライブラリが現れるのってどう思ってんの」という雑なツイートに対してROM.rbやdry-rbシリーズの作者であるPiotr Solnicaが優しくリプをくれた。 One rule of thumb is to re…

ElmでPromise.all的なことをしたいときに便利なelm-task-parallel

github.com 背景 JavaScriptだと「起動時にサーバーへA, B, Cのデータの取得を問い合わせて全てデータがそろったら次の処理へ移る」というような実装をPromise.allで作ることがよくある。 これをElmで雑にやろうとすると以下のようなMaybeまみれのコードが生…

Scalaにおける無名クラスのメソッド呼び出しはリフレクションが使われる

こんなコードを書いた。 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…

Scalaでは無名関数は型パラメータをとれない

こんなコードを書いた 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]…

人の作ったWebアプリケーションのコードを見るときに注目しているところ

普段見ているものをなんとなく書き出してみた。 インターフェイス あえてやってないとか、レイヤ的にやる必要がないというケースもある。しかし、ある程度の規模のソフトウェアには大抵インターフェイスが現れる。インターフェイスがないコードはユニットテ…

ElmでBrowser.elementを使いつつルーティングを自前で作る

一般的にElmでルーティングを行うSPAを作る場合にはBrowser.applicationを使って、組み込みのルーティングの機構を使うことになる*1。しかし、一方でルーティングの仕組みを持たないBrower.elementやBrowser.documentでも、ルーティングをJavaScriptサイドで…

Elmアプリケーションにおける多言語対応パターン

特段テクい話ではないが最近話す機会があったのでこちらでもメモ。 まず、以下のように対応している言語のパターンを表現した型を全画面共通で使える型として用意しておく。 type Lang = Ja | En あとは各ページごとに画面で表示するラベルのインターフェイ…

SCIMなどの外部連携インターフェイスがアプリケーションの仕様を侵食する件

B2Bのプロダクトだとマスターデータの連携を行う目的でSCIMインターフェイスの口を提供するケースがあるが、SCIMはビジネスルールを侵食する。

ドメイン・イベントについて&Ruby製のよさげなPub/Subインターフェースgemまとめ

Rubyで特にRailsを使う際に「特定のドメインの変化によって別の処理の実行をトリガする」みたいなケースでは大抵の場合コールバックが使われる。 しかし、ぶっちゃけた話コールバックはかなり結合度の高いコードになってしまいがちで、実装的にスケールさせ…

Elmにおける依存性逆転(DIP)の表現

この記事を読んでなるほどな〜と思ったので記事にしてみる。 medium.com 依存性逆転とは 雑にいうと実装ではなくインターフェイスに依存させ、モジュール間の依存関係を疎結合にする手法。英語ではDependency-Inversion Principleと呼ばれ、頭文字をとってDI…

とにかくいろんな会社でインターンしていた学生時代

テック系の学生というと、やはりいろんな会社のインターンに参加していろんなイケてるナウい技術を触って「圧倒的成長!」を求めますよね。 自分もそうでした。 自分はかなり極端な例で、大学を1年休学してまでインターンしてコロコロと会社変えながら10社く…

ElmでPhantom TypeとExtensible Recordを用いて型安全な状態遷移パターンを実装する

このDiscourseスレッドがかなり面白かった。 OPは「幽霊型(Phantom Type)を使うと特定の順序でしか型安全に状態遷移できないように実装できると思うんだけど、どうしたらいいかな?」と質問している。 discourse.elm-lang.org 実装してみる 回答者からのア…

Elmで再帰構造を使って特定の順序でなければ状態を更新できない型を作る

a, b, c, dという型がある状況でaがなければbが更新できないし、bがなければcが更新できない、のような流れを再帰構造の型で表現する実装。使いどころは謎だが思いついたのでメモしておく。 type Data a b c d = Data (Maybe (a, Maybe (b, Maybe (c, Maybe …

クリーンアーキテクチャのUsecaseはなぜControllerへ値を返すのではなくOutput PortとしてPresenterを呼び出すのか

何を言っているのかと言うと、みんな大好きクリーンアーキテクチャの右下に図示されているFlow of Controlのこと。 黒線が引かれているということは、つまりUsecaseの中でOutput Portのインターフェイスを持つPresenterの関数なりが最終的に実行されるという…

gcloudコマンドの対象プロジェクトIDを関東最速で取得する

iTerm2にはステータスバーという機能があり、そこで現在のgcloudのCLIで操作対象になっているプロジェクトIDを出すと非常に捗る。 単純に考えるとgcloudコマンドのconfigオプションを使い、プロジェクトIDの取得ができるだろうなと思うが gcloud config list…

Datastoreでは将来の変更を見越してフラグ系もStringで格納するのがいいんじゃないか

たとえば以下みたいなデータ構造がDatastoreにあるとする type UserSetting struct { UseNotification Bool `datastore:"useNotification"` } これはユーザーの設定として「通知をするか/しないか」を表現しているものだが、もしも仕様変更でTrue/False以外…

Architecture Night #2 がかなり良かった

architecture-night.connpass.com 千葉に引っ越してから、渋谷あたりで開催されるイベントにあんまり行かなくなっていたが、Twitterで設計メインのArchitecture Nightというものがあると知って会社の先輩と参加した。アーキテクチャと銘打っているくらいだか…

ユーザーインターフェイスにおける5つのステート

元ネタはこれ scotthurff.com Webアプリケーションを作ったことがある人ならわかる話だが、アプリケーションは確実に予想外の状況に晒される。サーバーはレスポンスを返すのに時間がかかるし、ユーザーの環境がメモリ1G以下のこともあれば、完全に想定外の使…

不動産投資を知るために何冊か本を読んだ

今年の頭くらいに書いた今年の抱負に関する記事の中で「不動産投資に関する本を読む」とあるが、ちゃんと有言実行ということでとりあえずいろんな本を読んでみたので、その感想を記事にしておく。 izumisy-tech.hatenablog.com 胡散臭い投資代表「不動産」 …

自分なりの作業工数見積もりのヒント

ソフトウェア開発最大の難所と呼ばれる見積もり。見積もりに関する古典があるくらいにはやはり見積もりというのは難しい。 自分もずっと見積もりを正しくするためにはどうすることがベストなのか、ということにずっと悩みを抱えていたが、社会人2年目ももう…

2019年10月のクラウドバンク

去年末からクラウドバンクをやっている。なんだかんだもう1年近く継続してやっているが、正直かなりいいのでいろんな人に勧めている。勧めている手前、自分の実績というのもある程度公開しておくのが筋かなと思うのでブログの記事にしておく。 izumisy-tech…

GoのAccept Interfaceはなにが嬉しいのか

たまーに考えることがあったが、せっかくなのでアウトプットしておく。 まず前提としてGo以外のインターフェイスを持つ言語、例えばJavaではインターフェイスを満たしていることを明示するためにimplementsキーワードなどで実装を明示してやる必要がある。つ…

FirestoreのCollection Groupに関して(ユースケースや注意点)

個人開発でFirestoreを使っているので情報を集めている。なんか日本語だとググっても要領を得ない記事ばっかりだったが、英語でちゃんと調べたらFirebase Blogでしっかり書いてあった firebase.googleblog.com FirestoreなどのNoSQLデータベースは前提として…

Amazonで買える海外のプロテインバー3選

プロテインバーと呼ばれるものがある。 簡単に言うと一本満足バーやスニッカーズ的なあのおかしのバーにプロテイン(タンパク質)が多めに含まれているバーのことだ。日本国内ではまだこの手の製品はさほどメジャーではないようだが、海外(とくにアメリカ)…

OSカーネルのCコードにでてくるkmainとはなんなのか

ozkl/sosoという小さなオペレーティング・システムの実装を読んでいたのだが、そこで出てくるmain.cのエントリポイントがmain関数ではなくkmain関数であることに気がついた。昔々にCを書いていたときは問答無用でmain関数とした記憶があるので、一体コレはな…

Firebase Cloud FunctionsではSparkプランだと外部ネットワークにGETリクエストすら飛ばせない。

もしかしてGETリクエストなら...と思ったけど普通に無理だった。 Cloud Functionsのログ画面 Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictio…

個人的なアプリケーション設計のバイブル3選

自分が本格的に設計を意識するようになったのは、2015年の夏に現職であるFringe81株式会社で開催されていたサマーインターンに参加してからだ。 インターンではDDDとクリーン・アーキテクチャ*1を一から勉強してAPIサーバーに実装する、というカリキュラムで…

大きなリリースをするべきではない4つの理由

自戒を込めてメモ 大きなリリースはバグを増やす 大きなリリースになればなるほど、コードベースに潜むバグが増える。充分なテストがないチームでは、コードレビューにテスト相当のタスクが求められるようになり、本質的な設計の優先度は低くなる。結果とし…