Runner in the High

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

メモ

ユーザーインターフェイスにおける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つの理由

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

ソーラーパフミニが被災したときに便利だった

先日9/9に、千葉県広域で大規模な停電があり、自分の家も約一日にわたって電気が使えない状況になった。我が家は自分とおじいちゃん&おばあちゃんで生活しているが、真夏30度のなか暗闇とともに生活をするのはなかなかにしんどいものがある。 そのときにと…

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

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

Opinionatedなライブラリとチーム開発

GitHubなどで作者がライブラリ(やフレームワーク)をopinionatedであると形容しているのを見ることがある。Opinionatedというのは直訳すると「意固地な」「意志のかたい」のような雰囲気になるが、意固地なライブラリというのは正直意味が通らない。ではど…

ElmのSlackチャンネルが情報収集をするのに便利

世界中のElmエンジニアが集まるSlackワークスペースがあり、情報収集をするには非常によい。 あまり日本のElm界隈では知られてないのかな? と思ったのでメモ程度に周知しておく。以下のページからSlackのワークスペースに入れる。基本的に全部の会話が英語…

dayjsと謎の挙動

年と月だけの文字列をDateへ変換すると2月だけおかしくなる console.log(dayjs('201901', 'YYYYMM').toDate()); // Tue Jan 29 2019 00:00:00 GMT+0900 (日本標準時) console.log(dayjs('201902', 'YYYYMM').toDate()); // Fri Mar 01 2019 00:00:00 GMT+090…

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

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

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

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

Immutable.jsを使うメリット

先日、新卒で入ったエンジニアが 「Immutable.jsの研修課題をやってるんですけど、正直なんで必要なのか分かんないっす」 と言っていた。 たしかに React, Redux と Immutable.js をセットでつかおうみたいなノリの記事はネットでよく見るが、じゃあなんでそ…

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

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

2018年で最も早くTypeScript+Reactのアプリを作る方法

結論から言うとこれです。 $ npx create-react-app myapp --typescript #React Create App now officially supports #TypeScript!I'm so happy this will make it much easier for devs to start with, well, both of these great pieces of tech! pic.twit…

gpd-pocket-ubuntu-respinの更新を適用したらファンが止まらなくなった

本日久しぶりにGPD Pocketのコミュニティパッチを更新して適用したところ、まだ44℃だというのにCPUファンが思いっきり回転しはじめた おそらくこれはファン周りのデーモンかなにかがうまく動いてないな...ということでおもむろにログを確認 $ journalctl -u …

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の配列は連結リス…

結果整合性について

歴史 かつて、分散システムのデータ複製における唯一無二の理想は「更新されたデータは即座に反映される」というものだった。 70年台の分散システム技術において試みられているものの多くは、いくら背後にたくさんのシステムが控えているとしても「使う人間…

AnyValを継承する意味

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

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

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

雑なDNSの理解

Domain Name Systemの略 インターネットに接続されているすべてのコンピューターはIPアドレスを割り振られているが、数字でサイトを記憶しておくのは難しいので、DNSで覚えやすい文字列への解決を行う。 ARPANET時代はひとつのHOSTS.TXTにすべて書き込まれた…

なんらかの処理において、できるだけその処理は依存するモデルのデータ構造をしりすぎないほうがよい?

たとえばSPAにおいて 「あるカテゴリに紐づく記事一覧を取得する」 という実装があるとする このような処理を実装するにあたっては、各レイヤによって知ってよいことと、知っててはいけないものが変わってくる。 例えばバックエンドが、RDBMSのようなIDによ…