Skip to content

Instantly share code, notes, and snippets.

Avatar

Yoshitaka Kawashima kawasima

View GitHub Profile
View PojoToMap.java
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.fasterxml.jackson.databind.introspect.ClassIntrospector;
import java.util.LinkedHashMap;
import java.util.Map;
@kawasima
kawasima / ShiftJISRegexGenerator.java
Created Mar 16, 2021
Shift_JISの全角文字のみにマッチする正規表現ジェネレータです。
View ShiftJISRegexGenerator.java
import java.io.UnsupportedEncodingException;
import java.util.LinkedList;
import java.util.Objects;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class ShiftJISRegexGenerator {
public static void main(String[] args) {
View RulePeriod.java
/**
* ルールの時間範囲を表現するクラスです。
*/
public class RulePeriod {
private LocalTime startTime;
private LocalTime endTime;
public RulePeriod(int startHour, int endHour) {
startTime = LocalTime.of(startHour, 0);
endTime = LocalTime.of(endHour, 0);
@kawasima
kawasima / treeDiff.ts
Created Dec 16, 2019
How to get differences between two trees
View treeDiff.ts
type TreeNode = {
key: number;
children?: TreeNode[];
}
type Oyako = [ number, number ];
const tree1 : TreeNode = {
key: 1,
children: [
View bakusatsu.clj
(ns bakusatsu
(:refer-clojure :exclude [+ -])
(:require [clojure.spec.alpha :as s]
[clojure.spec.test.alpha :as stest]
[clojure.core :as core]))
;; 金額に関する振る舞い(金額同士の加算と減算ができる)
(defprotocol IMoney
(+ [this money])
(- [this money]))
@kawasima
kawasima / 00_architecture_corpus.md
Last active Jan 3, 2021
アーキテクチャ大全 (未完) のサンプル
View 00_architecture_corpus.md

アーキテクチャ大全のサンプル

これくらいの実例とともにソリューション選択できるようにしていきたい。

View ZoneTokyo2020Register.java
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneOffset;
import java.time.zone.ZoneOffsetTransition;
import java.time.zone.ZoneOffsetTransitionRule;
import java.time.zone.ZoneRules;
import java.time.zone.ZoneRulesProvider;
import java.util.*;
public class ZoneTokyo2020Register {
@kawasima
kawasima / Graal.md
Created Aug 3, 2018
中央線Meetup #1
View Graal.md
View UnsafeTest.java
package sandbox;
import org.junit.Before;
import org.junit.Test;
import sun.misc.Unsafe;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
View 01_ADR.md

アーキテクチャ設計のドキュメンテーション

コンテキスト

アジャイルプロジェクトのアーキテクチャは、別々に記述され定義されなければなりません。すべての意思決定が一度にされるわけでもなく、プロジェクト開始時にすべての意思決定がされてるわけでもありません。

アジャイル手法では、ドキュメンテーションに反対はしませんが、価値のないドキュメンテーションはいけません。チーム自身の助けになるようなドキュメントは価値がありますが、ちゃんと最新化し続けなければなりません。膨大なドキュメントでは、最新化されなくなることでしょう。小さくまとまりのあるドキュメントは少なくとも更新される可能性はありますよね。

また膨大なドキュメントはだれも読みません。たいていの開発者はソースコードサイズの合計よりも(byte的な意味で)大きな仕様書が書かれたプロジェクトを少なくとも1回は経験したことがあるでしょう。開くのにも、読むのにも、更新するのにも、そんなドキュメントは大きすぎます。一口大のピースに分解すれば、すべての関係者にとって消化するのは簡単になりますよね。

プロジェクトが動いている間、追跡するのが難しいことの1つに、ある意思決定の裏に隠された「思い」があります。プロジェクトに新しく参画した人は、それまでに決定されたことに困惑したり、戸惑ったり、喜んだり、怒ったりすることでしょう。理念や因果関係を理解しておかないと、その人は次の2つの選択をすることになります。