doilux’s tech blog

ITに関する備忘録。 DDP : http://doiluxng.hatenablog.com/entry/2018/01/01/195409

ヒューマンスキルを見える化するならバブルチャートがよさそう

こんな感じ。理由は周辺技術を表現できるから。 例えば、アプリケーション開発をしている人で「SQLだけできる」って人はまずいないと思う。SQLは得意で、次にその周辺のOR/Mapperやトランザクション周りが得意で、次にアプリケーションレイヤー、次にUI...っ…

GoでgRPCのサーバーを構築する

go getとかは割愛。こんなファイルを作る。 syntax = "proto3"; option go_package = "proto"; package user; service UserService { rpc ListUser(RequestType) returns (stream User) {} rpc AddUser(User) returns (ResponseType) {} } message ResponseT…

そうだテストを書こう

テストのことを忘れてた。とりあえずクイックソートのコードを書いてみた。 func Sort(in []int) []int { if len(in) == 0 || len(in) == 1 { return in } m := in[0] lt := make([]int, 0) gt := make([]int, 0) for _, v :=range in[1:] { if v < m { lt =…

GoでWebアプリケーションを作ってみる_画面作る

↓の続き GoでWebアプリケーションを作ってみる_雛形を作ってみる - doilux’s tech blog というか雛形作るというタイトルの割にはサーバーサイドはだいたい満足したので一旦これでよしとする。 今回は画面作ります。 この2つのサイトを参考にさせていただき…

GoでWebアプリケーションを作ってみる_雛形を作ってみる

前回の続きで、GoでTwitterライクなWebアプリケーションを作ってみる。 もろもろライブラリを取得 WAFにはechoを使うことにしたのでechoを取得 go get -u github.com/labstack/echo/... 公式サイトの通りにやったらサンプル動いた。 次にecho-scaffoldを取得…

echo-scaffoldを取得しようとしてハマったのでメモ

Go始めました。tour of goが終わったので、Webアプリケーションでも作ってみようかと(でも横着してWAF使って作ろうと)思って、echo-scaffoldを入れようとしたらハマったのでメモ。 go get github.com/mattn/echo-scaffold Mercurialがねーぞっていうエラー…

【問題】環状線

【問題】東海道線 - doilux’s tech blogの応用編 問題 環状線で2つの駅が何駅離れているか求めよ。 例:山手線 No 駅名 1 東京 2 神田 3 秋葉原 .. ... 30 有楽町 function solve(get_on_at, get_off_at, num_of_stations) { // todo : 実装する } テスト a…

【問題】東海道線

新人向けにゆるいアルゴリズムの問題を考えて見た。 問題 二つの駅が何駅離れているか求めよ。 例:東海道線 No 駅名 1 東京 2 新橋 .. .. 7 大船 function solve(get_on_at, get_off_at) { // todo : 実装する } テスト assert('テスト0', solve(1, 3) === …

StateにないときはEventを参照するパターン

いわゆるイベントドリブンな設計が好きだ。 CREATE TABLE ord_event( id NUMBER(10) PRIMARY KEY, payment_type VARCHAR(255) CHECK payment_type IN('full', 'installments'), ord_at DATE NOT NULL ); CREATE TABLE complete_event( id NUMBER(10) PRIMARY…

【随時更新】Colaboratory学習メモ

2018/04/20 本当に無料か?と色々調べてたどり着いたページ Colaboratory – Google とりあえずここに書いてある通りに動かして見たらKerasのサンプルが動いた。ただ、ランタイムをGPUにしないとimport kerasでこけた。 【秒速で無料GPUを使う】TensorfFow/Ke…

Spockならファイルに書き込むパターンのバッチのテストが簡単

バッチ処置でSJISのファイル連携するとき、あらかじめ期待値ファイルを作ってnkfでSJISに変換してアサーションってやってたんですが、Spock(というかgroovy)で簡単にかけた。 def exFile = new File('./ex.csv').withWriter('Shift_JIS') { f -> f << “あ…

N月最後のイベントを拾うSQL

SQLで業務ロジックを書くことはないですが、稼動確認とか、不正データ、怪しいデータを検出したい時とかはSQLを使うと便利だと思うことがあります。自分が最近使ったパターンを紹介します。 前提 こんな感じで、エンティティに発生したイベントを記録してい…

技名・コードネーム

短い名前をつけるとコミュニケーションの円滑化に繋がると言う話。「お客様が〇〇する際に〇〇を選択できるようにする件」とか、「〇〇からの要請で〇〇時に〇〇を返すようにする件」とか。自分的にはAppleにみたいに地名とか国名をつけるのは結構好き、あと…

ブログを書く心構え

ネタがないのでブログについて書くことにした。 毎年、年初に技術ブログを書きはじめるのですが、だいたい三日坊主で終わってました。 ただ今年は長く続いています。 心がけていることは以下 人に読んでもらうことを意識しない ブログを書く目的を、あくまで…

直積使ってテストコードを書く

直積集合を作るライブラリを作りました。 GitHub - doilux/cartesian-product これを使ってテストコードを書いてみます。 (注意:上記のライブラリのIFを変えたので、下記コードは参考です) プロダクトコードはこんな感じ public class DrivingResolver { …

EnumのテストはStreamApiを使う

こんなクラスがあったとき public enum Vehicle { BIKE(false), MOTOR_CYCLE(true), CAR(true); private final boolean needLicence; Vehicle(boolean b) { needLicence = b; } @Override public String toString() { return this.name(); } public boolean …

Spockで例外をテストするときの注意

例えばこんなメソッドがあって int convert(String str /* nullかもしれない */ ){ return Optinal.ofNullable(str.length()).orElseThrow( () -> new RuntimeException()); } Spockのthrownで以下のようなテストをすると通るのでバグに気づかない(NullPoint…

オレオレなぜなぜ分析フレームワーク

経験上、なぜなぜ分析からその流れで改善案を出そうとすると大体変なTryになります。 簡単な例をあげます。 バグが出た なぜ? -> テストできていなかった なぜ? -> コードレビューで見落とした Try -> コードレビューのチェックリストに追加 間にググるを…

gradleコマンドでDBコンテナを起動する

こんな感じで設定ファイルを書くと、./gradlew startDbContainerでコンテナがバックグラウンド起動します。 buildscript { repositories { jcenter() } dependencies { classpath 'com.bmuschko:gradle-docker-plugin:3.2.4' } } // use fully qualified cla…

【気になったこと】DockerFileにCOPYでワイルドカードを指定しているときにファイル増えたらどうなる?

僕のDockerについてのゆるい知識にによると、内部的にDockerFileに記述されたステップごとにイメージを持っているため、DockerFileに記述を追加したときには差分だけの反映で済むので比較的高速にイメージの再構成ができたと思う(まちがってたらすみません…

gradleのDockerプラグインを使ってイメージを作る

github.com gradleのDockerプラグインを使って事前に準備しているDockerFileからイメージを作りたい。基本的には上記の通りにやったらできました。 ディテクトリ構成はこんな感じです ... ├── build.gradle ├── docker │ ├── centos │ │ ├── Dockerfile <- …

【随時更新】【取り扱い注意】Dockerのワンライナーメモ

イメージ作ってすぐ起動 docker build ./ -t mymysql && docker run -p 3306:3306 mymysql コンテナみんな死ね!! docker ps -aq | xargs docker stop | xargs docker rm

centos7 + mysql5.7のDockerFileを一部解読する

https://hub.docker.com/r/centos/mysql-57-centos7/ このイメージを使うと一つのDB、ユーザーは簡単に作れるけど、複数のDBを作りたいときにどうすればいいかわからなかったので、コンテナを起動したときに何が起きているのかをDockerFileから追ってみまし…

DockerコンテナでSpring Boot + MySQLのテストを動かす

Dockerコンテナ内でテストを動かすことに成功したのでやり方をまとめます。 MySQL + jdk8のイメージを作る まずはこれがなければ話になりません。MySQL公式イメージのDockerFileにOracle-JDKをインストールする記述を足しました。 MySQL公式イメージはこちら…

Springにflywayを組み込む(テストのみ)

下記の通りにやったらプロダクトコードには組み込めた。 qiita.com ただ、テストでは使えなかった。 下記のリンク先にある通り、flyway-spring-testを依存関係に入れて、@FlywayTestをつけるとテスト実行時にflywayのマイグレーションが走った。 github.com …

SpringでDBのテストをするときにシーケンスがロールバックされない問題に対応する

SpringでDBのテストをするときに@Transactionalをつけるとテストメソッドの実行が終わるたびにロールバックしてくれるので便利なんですが、シーケンスがロールバックされないでテストがコケるという問題があります。 解決策は単純でsetupでシーケンスの初期…

Mybatisでauto_incrementされた値を取得する方法

insertの戻り値で取得する方法があると思ってたんですが、mutableなクラスにセットさせる方法しかなかったです。 まずはIDをセットするためのクラスを作り class GeneratedEmployeeId { var value: Int? = null fun setValue(v: Int) { value = v } fun conv…

dockerでmysqlを動かしてSpring Boot+Mybatisでinsertするまでのメモ

イメージをpullします コンテナの起動 docker pull mysql:5.6 コンテナを起動します。 docker run \ -p 3306:3306 \ --name mysqld \ -e MYSQL_DATABASE=hr \ -e MYSQL_USER=hr \ -e MYSQL_PASSWORD=hr \ -e MYSQL_ROOT_PASSWORD=password \ -d mysql 以下が…

Spring BootのTestでInjectできない場合

テストを動かすとInjectできなくてNullPointerExceptionで落ちる。くっそはまったのでメモ。 テスト対象クラス @Component public class TestService { public int test() { return 1; } } JUnitの場合 @RunWith(SpringRunner.class)が抜けてました。 @RunWi…

dockerでOracleをEUCで動かそうとして諦めた

過程で色々詳しくなったのでメモ やりたかったこと 下記記事で、Oracleをdockerコンテナで動かすことができました。 Oracleをdockerで動かす - doilux’s tech blog そもそもなんでdockerで動かしたかったのかというと、JenkinsのDBのIOのテストをスケールア…