WebStormでDenoを利用するときのメモ

プラグインのインストールは以下のリンクの通り。 Set Up Your Environment | Deno Docs WebStormでDenoのサポートを有効にするにはSettings > Language & Frameworks > Deno > Enable Deno support for this project を on にする必要があるみたい。 OFFの…

Read, Write モード. クラスにモードを取り入れ、利用できるメソッドを制限する 〜クラス設計メモ

概略 集約やEntityのような、状態変更のあるモデルを参照系で利用する際に、状態変更を起こすメソッドを呼び出せてしまうのが気になる 参照系のユースケースの際や、計算用のモデルに集約を渡す際には同じモデルを参照用途のみで利用できるようにしたい gene…

Mac mini & Starship で [WARN] - (starship::modules::battery): Unable to access battery information: AppleRawMaxCapacity

starship.rs 会社の人のおすすめで最近Starshipを入れました。private の Mac mini でも同じの入れたけど、以下の状況に遭遇しました。 Last login: Fri Sep 8 12:49:26 on console [WARN] - (starship::modules::battery): Unable to access battery inform…

スプリントの達成確率を雑に計算する

本題 現職ではスクラムなる開発プロセスを実施しています。スクラムではPBI(Product Backlog Item)という単位にやることが切り分けられ、それらの見積もりにストーリーポイントを利用します。ストーリーポイントはPBIの大きさを測る指標と言われており、大…

個人的におすすめなドメインサービスの書き方

ドメインサービスはエンティティとメッセージングすると考えれば、もっと堅安全で使いやすくなるはず。

Rustの self, &self, &mut self の意味が分からなかったのでメモ

最近流行りのRust. システムよりのことを理解するのにGoよりは自分にあってそうと思い、たまに触ってます。 まだ基本的な文法が分からずメソッド引数の self, &self, &mut self の違いが分からなかったのでメモ。 fn method(self) ・・・ fn method(self: Se…

TypeScriptでも値オブジェクトが書きたい

普段Scalaを書いていますが、業務ではTypeScriptもフロントエンドで利用されています。※私はCSSが非常に苦手なのでほとんどフロントを触らないのですが。 バックエンドAPIは業務的なロジックに集中できて、DDD的な実装パターンなども適用しやすく結構綺麗に…

【Scala】type-safe builder パターンを応用して、保存前にバリデーションが必須であることを示す

ADTを利用して状態を表現し、事前条件として使うような実装を type-safe builer を参考に考えました。理想ではない、けど数ある制約の中でベターを目指した結果です。

多分木をフラットにする, Scala

以前メモ的に書いたこれ、少し使い勝手が悪いのと、この手の処理はぱっと書けないのでメモする。 tchiba.hatenablog.jp Node trait 上の記事で作った、単純な多分木をフラットにする処理を拡張してみた。 import scala.annotation.tailrec trait Node[A <: Node[_]]{ val children: List[A] protected def flatChildren[B](z: B)(f: A => B):</:>…

集約とクラス不変表明

集約 DDDには集約という概念があります。これが本当に難しくて、どうモデリングしてあげるべきなのかが掴めないでいました。しばらくDDDを実践していくなかで、 バートランド・メイヤーのオブジェクト指向入門(通称OOSC)の契約による設計の章を読み返して…

トイレクラスで見る凝集度と責務

トイレとは何か? 社内向けに凝集度と責務について発表しました。 正直、プレゼン形式での発表は慣れないので全然うまく話せませんでしたが、調べるためのインデックスができればいいくらいの気持ちと、LTにも慣れていきたいなと思ってやってます。 折角なの…

Scalaz の Tree で違いがあるかを判定する

※Treeのflattenの結果が同じ値ならば常に同じであることを前提としていて、実際そうなのかをちゃんと確認してないので少し怪しいところあり。 ここ1年くらい木構造に悩まされていますが、scalaz の Tree を使っていて、2つの木に違いが存在するかを判定した…

Scalaでの例外処理メモ

例外についてものすごく参考になった記事と、個人的メモ。 参考になった記事 明日から使える実践エラーハンドリング Scala界隈では有名ながくぞさんのSlideですね。私はこれを読んで初めて例外が何か理解できた気がしました。 他にもスライドはあります。 ht…

【Scala】Option 利用指針

Scalaでよく使うものに Option 型があると思います。Option 型は値が存在するかもしれないことを示す型です。Javaで値がないを表現するためには null を使うのが一般的でした。Java 8からは Optional 型 ができたようですが、古いJavaのプロダクトでは null …

Mac mini m1 買った(届いてない)。選択理由

今更ながら、Mac mini m1 買いました。 動機 単純に、今使っている MacBook Pro 2016 (16GB, 2.9GHz デュアルコア)が開発用途での利用に厳しくなってきたからです。IntelliJを起動するのに数分かかったり、キーボードの入力から反映まで1〜2秒のタイムラグ…

Scala で Builder Pattern

ScalaでJava like なBuilder Patternを書く機会は自分の場合あまり無い(Static Factoryで事足りることが多い)のですが、少し古いJavaのプロダクトのリファクタをした際にBuilder Patternで生成処理を書き直したので、Scalaの場合はどうなるのか見ていこう…

Haskell 勉強メモ9

セクション 中置関数に対して、セクションという機能を使って部分適用をすることができる。 divideByTen :: (Floating a) => a -> a divideByTen = (/10) *Main> divideByTen 30 3.0 これは 30 / 10 と同義。 高階関数 関数を受け取り、2回適用する関数を書…

木勉強メモ

木構造の取扱はプログラマなら基本なのかもだけれど、アルゴリズムとデータ構造をちゃんと勉強したことなかったので、必要ベースで勉強していく。 用語 用語説明根(root)親を持たないノード。1つの木に対して1つ根。辺(edge)親から子へのリンク。葉(leaf)子…

Haskell 勉強メモ8

高階関数 Haskell は関数を引数にとったり、返り値として関数を返すことができる。このような関数を高階関数と呼ぶ。Scalaにもある。 カリー化関数 Haskellの全ての関数は、引数を1つだけ取る。今まで、複数引数を取っているように見えたものは全てカリー化…

Apache POI 調査

Excelを操作したいみたいな状況は割とよくある。Pythonとかのスクリプト言語だと結構対処法をが見つかるけど、Scalaだと、Java資産のApache POIくらいしかない上に情報もそんなにない(poi.scala のようなラッパーライブラリもあるようだけど、プロダクショ…

Haskell勉強メモ 7

クイックソート アルゴリズムの定番クイックソート。 といっても、私はアルゴリズムをちゃんと勉強したことないので名前しか知らないのだけれど。。 これを関数型ではどうやって解くのかを見ていく。 が、先に手続き型ではどうやるのか。アルゴリズム本を見…

Haskell 勉強メモ6

再帰 関数型言語では再帰はよく出てくる。 最大値を求める関数を考えてみる。命令的に考えると、現在の最大値を保持する変数を用意し、リストの全ての要素についてループして、変数を更新していく形になる。Scalaで書いてみると def maximum(list: List[Int]…

Haskell 勉強メモ5

let式 let 式は変数を束縛する。 let 式自身も式。式であるとは、「値を持つ」ということ。 円柱の表面積を求める。 cylinder :: Double -> Double -> Double cylinder r h = let sideArea = 2 * pi * r * h topArea = pi * r ^ 2 in sideArea + 2 * topArea…

Haskell 勉強メモ4

関数を書くための構文 パターンマッチ Scala でもたくさん使うパターンマッチ。Haskell版も見てく。 渡された数が7かどうかを判別する関数。 Haskell版 lucky :: Int -> String lucky 7 = "LUCKY NUMBER SEVEN!" lucky x = "Sorry, you're out of luck, pal!…

Haskell 勉強メモ3

型変数 Haskellの head 関数の型を見てみる。 *Main> :t head head :: [a] -> a この a が型変数と呼ばれる。型変数によって関数を複数の型に対して動作するようにできる。型変数を用いた関数は多相的関数と呼ばれる。 どのような型でも良いという性質のこと…

Haskell 勉強メモ2

明示的な型宣言 Haskellの型宣言は2行で書く模様。こういう書き方は初めて。 removeNonUppercase :: [Char] -> [Char] removeNonUppercase st = [c | c <- st, c `elem` ['A' .. 'Z']] *Main> removeNonUppercase("HelloWorld") "HW" addThree :: Int -> Int…

Haskell 勉強メモ 1

関数型プログラミングをちゃんとやろうと思って「すごいHaskellたのしく学ぼう!」を買って読み始めた。その勉強メモ。自分のメイン言語はScalaなので、気になったところを比較しながら見ていく。 内包表記 Haskellのリスト内包表記。集合の内包的記法の概念…

階層構造のデータから特定のプロパティを抽出して、フラットにする

json のような階層構造を持つデータから特定のプロパティを再帰的に探索して、平坦なリストにしたものを取得したい場面に出会ったのでメモする。 データ構造 case class Tree( value: Int, children: List[Tree] ) 木構造?というか、自身のリストを持つよう…

Slick の java.time 対応

普段 PlayFramework + Scala で開発していて、ORMには Slick を使うことが多い。Slickは version 3.3 から java.time をサポートするようになったのだが、MySQL の型との対応がひどく(ほとんどTEXTにマッピングされて使い物にならない)、DBにMySQLを使う場…

Scala で FizzBuzz

今更だけど、FizzBuzzやってみる。 「1から100までの数字を画面に表示する」「3の倍数のときは数字の代わりにFizzと表示する」「5の倍数のときは数字の代わりにBuzzと表示する」「15の倍数のときは数字の代わりにFizzBuzzと表示する」プログラム フィズバズ…