プログラミング
自分が本格的に設計を意識するようになったのは、2015年の夏に現職であるFringe81株式会社で開催されていたサマーインターンに参加してからだ。 インターンではDDDとクリーン・アーキテクチャ*1を一から勉強してAPIサーバーに実装する、というカリキュラムで…
弊社では「筋肉の人」*1として知られるRichard FeldmanはElmの創造神ことEvan擁するNoRedInkに所属するエンジニア。 Evanが比較的キーノート的なElmの未来やらビジョンを語るトークをする一方で、RichardはどちらかといえばElmをプロダクションで使うにあた…
例えばこんな構造体が定義されているとして type User struct { Name string `json:"name"` Status int `json:"status"` } この構造体をJSONからUnmarshalしてマッピングする際に、以下のような要件があるとする statusの取りうる範囲は1,2だけ、かつそれぞ…
GitHubなどで作者がライブラリ(やフレームワーク)をopinionatedであると形容しているのを見ることがある。Opinionatedというのは直訳すると「意固地な」「意志のかたい」のような雰囲気になるが、意固地なライブラリというのは正直意味が通らない。ではど…
よく新しいフレームワークを学ぶにはTodoアプリを作ってみるのがよい、と言われる。実際、Todoアプリを様々なフレームワークで作ってみたサンプルをまとめたサイトもあったりする。 ところが、実際に業務で作るようなアプリケーションはTodoアプリの範疇を超…
6/1に開催されたJavaScript祭りというイベントに「jQueryからElmまで」というタイトルで15分枠の登壇をした This is my slides on #jsfes https://t.co/6p0mONwZrk— IzumiSy (@sy_izumi) June 1, 2019 内容はjQueryからJavaScriptを触り始めた自分が、Elmを…
先日業務で1からElmアプリケーションを作りきったのでそのときの学びをメモっておく。 1. Model / Msg / View のような分割をしない Rails などのフレームワークからきた人がやりがち。 Elm でファイル分割をするのはモジュール単位でのカプセル化をするとき…
自分の欠点として、まず「完璧につくろうとしてしまう」というものがあることが分かってきた。 www.wantedly.com 2度現地で参加したリモートハッカソンでは、SAPに勤める若いエンジニア、バークレーで勉強をしている学生とそれぞれペアを組んで開発をしたが…
紛れもない事実として、学生の頃よりも明らかにプライベートの時間でプログラミングをするのが億劫になった。 後輩にこのことを話すと「それってインポみたいですよね」と言われたので、これをプログラミング・インポテンツと名づける。 いまの生活に関して …
ElmのMaybeはデータの有無を型で表現できるゆえ非常に便利なものであるが、文脈が失われるため無闇に使い過ぎるとワケがわからなくなる。ケースによっては、カスタム型を使うことによって型でデータの有無を Maybe に代えて表現するほうがよりメンテナブルに…
Golangを使い始めてinterfaceでDIPっぽいことをしようとするとたしかに湧きがちな疑問のひとつ。結論から言うと、interfaceはそれを使う側のパッケージに所属させるのがセオリーらしい。なるほど。 Go interfaces generally belong in the package that uses…
izumisy-tech.hatenablog.com あとからこの過去記事を読み返して「ムム」と思うところがあったので改めて。 CategoryId ではなく Category を引数として渡すことでデータ構造が隠蔽されているという旨の説明をしているが、これは fetchArtclesByCategory を…
日本語だとググっても出てこなかったのでまとめた 操作 計算量 添字アクセス O(1) 挿入(splice) O(n) 削除(splice) O(n) 削除(delete) O(1) 最後に追加 O(1) 先頭に追加 O(n) スワップ O(1) 添字アクセスがO(1)だったりするのは、JavaScriptの配列は連結リス…
ScalaでDDDなコードのアプリケーションを作ろうとしているときに UserId など値型はどうするべきか の記事を読み、「専用の値クラスを作る」のパターンでふと 「ここでケースクラスが AnyVal を継承する理由ってなんだ...?」 と思ったので調べた。 case cla…
自分がOOPをそれっぽく学んだのは、サンディ・メッツの「オブジェクト指向設計実践ガイド」だが、この本だとダック・タイピングはバキバキにでてくる一方であまりポリモーフィズムについては詳しく書かれていない。thoughtbotのブログの記事、Rubyとポリモー…
コネクションプーリングとかワーカスレッドの多重化とかやってないめっちゃ簡易版。 import std.stdio; import std.socket; import core.thread; void main() { Socket server = new TcpSocket(); server.setOption(SocketOptionLevel.SOCKET, SocketOption.…
たとえばSPAにおいて 「あるカテゴリに紐づく記事一覧を取得する」 という実装があるとする このような処理を実装するにあたっては、各レイヤによって知ってよいことと、知っててはいけないものが変わってくる。 例えばバックエンドが、RDBMSのようなIDによ…
さーて、お待ちかねのROM.rb入門の第3回はRepositoryから。 前回の記事はRelationを説明していますので、読んでない人は参考までに。 izumisy-tech.hatenablog.com Repository リポジトリと聞くと文脈的にPoEAAやDDDっぽい雰囲気を感じる人が多いのではない…
さて、入門ROM.rbの第2回は、まずRelationから。 ROM.rbとはなんぞやという方は第1回の下の記事からどうぞ。 izumisy-tech.hatenablog.com 入門なのでいきなりSinatraやRailsとどう使うか、ではなくワンソースでどういうAPIがあって、どう使うのか、というと…
core.sys.posix.unistdの中にある。使い方はforkそのまま。 import std.stdio; import core.thread; import core.stdc.stdlib; import core.sys.posix.unistd; void main() { auto pid = core.sys.posix.unistd.fork(); if (pid == 0) { writeln("child work…
std.signalsというモジュールを使うとオブザーバー・パターンの実装が簡単にできる。 この例ではひとつのオブザーバーしか登録していないが、複数のオブザーバーを登録した上で一気にシグナルを発行できる。 dlang.org import std.signals; import std.stdio…
whileループからCtrl-Cで抜ける処理を横取りしたいときに。 import std.stdio; import core.thread; import core.stdc.stdlib; import core.sys.posix.signal; extern (C) { void cleanup(int signal) { writeln("cleanup"); exit(1); } } void main() { sig…
SAMパターンというのを勉強している。 www.infoq.com この記事は少しだけはてブでバズったが、実際コレを読んだだけでは例えば実際に実装に落としたときにどういうデータ・フローになるのか、というところまでは若干理解しづらい。この記事の作者のDubrayはs…
ハッカソンや個人開発でよく使う自分でこしらえたアプリケーションのスケルトン・コードをGithubに置いて、それを気軽にスキャフォルディングしたい。こんな欲求はだれしもあると思う。スキャフォルディング・ツールの王道といえばYeomanだが、ちょっとYeoma…
何が言いたいのかというと、Vue.js, React, Angularなどここ最近のフロントエンド界隈を賑わせているフレームワークはたくさんあるけれども、その中でビューレイヤという責務に対して最も薄いアプローチをしているのがReactで、もっとも関数らしい副作用のな…
RubyといえばRails、RailsといえばActiveRecordというくらいに、事実上ActiveRecordはRuby界隈におけるORマッパのデファクトスタンダードだ。しかしながら、Piotr Solnicaというソフトウェア・エンジニアは、ActiveRecordパターンが常にスケーラブルなアプリ…
www.npmjs.com validatable-recordというモジュールをすこし前に作った。Twitterでは軽く流したが、実際にはこれを作ろうと思ったモチベーションが少なからずあったので、自分自身の学びやのちのちの振り返りのためにも、そのモチベーションについてここに書…
「とりあえず、ググったら大抵解決しそうなんでReduxを使おうと思います」 2016年の夏、僕はあるフリマアプリで有名なECスタートアップでインターン生として、商品を販売するユーザー向けのアプリケーションのプロトタイピングをしていた。ほとんどすべての…
ときたまセッションに関連するロジックをモデルの中に作りたいときがある。ところが、原則的にRailsではセッションをモデルの中で操作することができない。 この問題を解決する最も簡単な方法は、モデルに生やしたメソッドへセッションのインスタンスを渡す…
Deviseなどを使って、ひとつ以上のスコープを持つアプリケーションを開発している際に、RESTfulなコントローラとビューが1対1対応をしていると、コントローラがどうしても複数のスコープが絡みついた見通しの悪いコードになりがちである。 たとえば、ECカー…