Runner in the High

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

プログラミング

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

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

Elmにおける「型によるルールづけ」の考え方

Elmは静的型付言語なので、型のチカラを活かすことでコンパイラに「あっては行けない状態や組み合わせ」をチェックさせることができる。 高度な例としては前回書いた以下の幽霊型(Phantom Type)の記事があるが、もう少し簡単な例を紹介しようと思う。 www.…

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の関数なりが最終的に実行されるという…

昔からいるプログラマーたちはいまも職を失わずに仕事をしているのですか?

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年ごろに大学を…

Elmに興味があるなら見ておきたいIzumiSyのスライド3選

過去に「NoRedInk*1の筋肉の人」としておなじみリチャード・フェルドマンをフィーチャーする記事を書いたので、今度は自分をフィーチャーしようと思う。 www.izumisy.work おすすめはやはり一番最後の「jQueryからElmまで」だが、正直このスライドはElmに関…

関数型プログラミングカンファレンス2019に登壇してElmの話をした

Scala, Haskell, Rust, Elixirあたりの関数型の匂いを感じさせる言語の人たちが、一堂に会してそれぞれのプログラミング言語のあれこれをトークする「関数型プログラミングカンファレンス2019 in Japan」というイベントが新しく爆誕していた。このイベントは…

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

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

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

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

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

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

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

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

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

会社でScalaを使っているので、できれば自分もモナモナしていきたいという気持ちがある。最近見つけた参考になりそうな記事を集めてみる。いつか自分でも手を動かして触って見る予定。 Freeモナド medium.com softwaremill.com dzone.com 1ファイルでつくるF…

Elmを書くなら見ておきたいRichard Feldmanのトーク4選

弊社では「筋肉の人」*1として知られるRichard FeldmanはElmの創造神ことEvan擁するNoRedInkに所属するエンジニア。 Evanが比較的キーノート的なElmの未来やらビジョンを語るトークをする一方で、RichardはどちらかといえばElmをプロダクションで使うにあた…

GolangでUnmarshallerインターフェースを実装した構造体をフィールドの型として使うと便利

例えばこんな構造体が定義されているとして type User struct { Name string `json:"name"` Status int `json:"status"` } この構造体をJSONからUnmarshalしてマッピングする際に、以下のような要件があるとする statusの取りうる範囲は1,2だけ、かつそれぞ…

新しいフレームワークを学ぶならTodoMVCではなくRealWorldを参考にしよう

よく新しいフレームワークを学ぶにはTodoアプリを作ってみるのがよい、と言われる。実際、Todoアプリを様々なフレームワークで作ってみたサンプルをまとめたサイトもあったりする。 ところが、実際に業務で作るようなアプリケーションはTodoアプリの範疇を超…

"初夏のJavaScript祭り2019" にElmのはなしで登壇した

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を…

2019年現時点でのElmベストプラクティス6選

先日業務で1からElmアプリケーションを作りきったのでそのときの学びをメモっておく。 1. Model / Msg / View のような分割をしない Rails などのフレームワークからきた人がやりがち。 Elm でファイル分割をするのはモジュール単位でのカプセル化をするとき…

「完璧につくらない」という能力

自分の欠点として、まず「完璧につくろうとしてしまう」というものがあることが分かってきた。 www.wantedly.com 2度現地で参加したリモートハッカソンでは、SAPに勤める若いエンジニア、バークレーで勉強をしている学生とそれぞれペアを組んで開発をしたが…

プログラミング・インポテンツ

紛れもない事実として、学生の頃よりも明らかにプライベートの時間でプログラミングをするのが億劫になった。 後輩にこのことを話すと「それってインポみたいですよね」と言われたので、これをプログラミング・インポテンツと名づける。 いまの生活に関して …

Maybeに代えてカスタム型を使う

ElmのMaybeはデータの有無を型で表現できるゆえ非常に便利なものであるが、文脈が失われるため無闇に使い過ぎるとワケがわからなくなる。ケースによっては、カスタム型を使うことによって型でデータの有無を Maybe に代えて表現するほうがよりメンテナブルに…

Golangではinterfaceはどのパッケージに属するのか

Golangを使い始めてinterfaceでDIPっぽいことをしようとするとたしかに湧きがちな疑問のひとつ。結論から言うと、interfaceはそれを使う側のパッケージに所属させるのがセオリーらしい。なるほど。 Go interfaces generally belong in the package that uses…

依存関係について再び考える

izumisy-tech.hatenablog.com あとからこの過去記事を読み返して「ムム」と思うところがあったので改めて。 CategoryId ではなく Category を引数として渡すことでデータ構造が隠蔽されているという旨の説明をしているが、これは fetchArtclesByCategory を…

JavaScriptにおける配列操作の計算量オーダー

日本語だとググっても出てこなかったのでまとめた 操作 計算量 添字アクセス O(1) 挿入(splice) O(n) 削除(splice) O(n) 削除(delete) O(1) 最後に追加 O(1) 先頭に追加 O(n) スワップ O(1) 添字アクセスがO(1)だったりするのは、JavaScriptの配列は連結リス…

AnyValを継承する意味

ScalaでDDDなコードのアプリケーションを作ろうとしているときに UserId など値型はどうするべきか の記事を読み、「専用の値クラスを作る」のパターンでふと 「ここでケースクラスが AnyVal を継承する理由ってなんだ...?」 と思ったので調べた。 case cla…

Rubyにおけるポリモーフィズムとダック・タイピング

自分がOOPをそれっぽく学んだのは、サンディ・メッツの「オブジェクト指向設計実践ガイド」だが、この本だとダック・タイピングはバキバキにでてくる一方であまりポリモーフィズムについては詳しく書かれていない。thoughtbotのブログの記事、Rubyとポリモー…

D言語で作るTCPサーバの最小構成

コネクションプーリングとかワーカスレッドの多重化とかやってないめっちゃ簡易版。 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

さーて、お待ちかねのROM.rb入門の第3回はRepositoryから。 前回の記事はRelationを説明していますので、読んでない人は参考までに。 izumisy-tech.hatenablog.com Repository リポジトリと聞くと文脈的にPoEAAやDDDっぽい雰囲気を感じる人が多いのではない…

入門ROM.rb 第2回: Relation

さて、入門ROM.rbの第2回は、まずRelationから。 ROM.rbとはなんぞやという方は第1回の下の記事からどうぞ。 izumisy-tech.hatenablog.com 入門なのでいきなりSinatraやRailsとどう使うか、ではなくワンソースでどういうAPIがあって、どう使うのか、というと…