flyway-sbt の依存が解決できなくなった

半年前くらいに書いたプロジェクトを再び実行しようとしたらCircleCIでエラーが出てきた。

gist.github.com

エラーの内容はFlywayがダウンロードできないだけなんだけど、以前動いてたものだったので原因がさっぱりわからず。

↓当時置いてた project/flyway.sbt gist.github.com

一応Issueは上がってて解決したっぽいことが書いてあるけどまだ解決してないのかな。

flyway-sbt is not resolved · Issue #1281 · flyway/flyway · GitHub

追記

もう少し調べてみたところSame Issueも上がっていてrepositoryのurlをhttpsにすれば解決するとのこと。 SBT plugin published to wrong location in Maven Central · Issue #1276 · flyway/flyway · GitHub

試しにhttpsにしたところうまく行った…

解決した project/flyway.sbt gist.github.com

例外型書いた

柔軟に例外を扱いたかったのでEitherらしきものを書いた。

今まではプレゼンテーション層でvalidationのロジック書いてたんだけど、割りと似たようなコードが異なる画面をまたいで散見されたので共通のエラーハンドラと例外型をつくって流すことにした。

で、そうなるとvalidationというか例外をモデル層から制御してくなった。

gist.github.com

↓サンプル

using PurchaseResult = ???;
public class Shop{
    public IEither<PurchaseResult, ShopError> Buy(ShopItem item){
        if(在庫確認、通貨の残高確認、など必要に応じてエラーを調べる){
            return Either.right<PurchaseResult, ShopError> (ShopErr.NotEnoughCoin);// 実際は要件にあったエラー型
        }
        var purchaseResult = some();// どっかで購入する;
        return Either.Left<PurchaseResult, ShopError>(purchaseResult);

    }
}

public class ShopItem{
// 何か
}

public enum ShopErr{
    NotEnoughCoin,
}

public class ShopController{
    // どっかで注入されてる
    Shop shop;
    List<ShopItem> shopItems;

    public void buy(int shopItemId){
        var item = shopItems.Single(_ => _.id = shopItemId);
        var result = shop.Buy(item);
        result.Use<Some>(success => {}, err => {});


        
    }
}

今年で読んだ本

Ray Tracing in One Weekend

週末にレイトレの勉強した。

ビジュアル情報処理CG・画像処理入門

ビジュアル情報処理  -CG・画像処理入門-

ビジュアル情報処理 -CG・画像処理入門-

詳解 圧縮処理プログラミング

詳解 圧縮処理プログラミング

詳解 圧縮処理プログラミング

詳解画像処理

詳解 画像処理プログラミング

詳解 画像処理プログラミング

大学の頃読んだ。 調べることがあったから拾い読みした。 ちなみにどの書籍もとても丁寧に書かれてるので画像処理興味ある人は買って損しないと思う。

実践プログラミングWebGL

もはや3D技術入門書だった。 ここまで丁寧に書かれてるとWebGL関係なく3Dプログラミングをはじめる人に勧めたくなる

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャ

マイクロサービスアーキテクチャ

なんか気になった。

Javaマルチスレッド入門: 並行処理の最新API対応

マルチスレッドと向き合わなければならなかった。

PythonによるWebスクレイピング

PythonによるWebスクレイピング

PythonによるWebスクレイピング

GooglePlayとAppStoreのランキングを取ってくるBotつくってた。

アート・オブ・プロジェクトマネジメント

アート・オブ・プロジェクトマネジメント ―マイクロソフトで培われた実践手法 (THEORY/IN/PRACTICE)

アート・オブ・プロジェクトマネジメント ―マイクロソフトで培われた実践手法 (THEORY/IN/PRACTICE)

会社のやり方が気に入らなかったから読んだら一般的なやりかただった

シビル・ウォー【限定生産・普及版】 (MARVEL)

シビル・ウォー【限定生産・普及版】 (MARVEL)

シビル・ウォー【限定生産・普及版】 (MARVEL)

キックアス1〜3、ヒットガール

キック・アス (ShoPro Books)

キック・アス (ShoPro Books)

マーク・ミラーいいねー

ウォッチメン

バットマン:梟の法廷

バットマン:梟の法廷(THE NEW 52!) (ShoPro Books THE NEW52!)

バットマン:梟の法廷(THE NEW 52!) (ShoPro Books THE NEW52!)

ベスト・オブ・スパイダーマン

ベスト・オブ・スパイダーマン (ShoPro Books)

ベスト・オブ・スパイダーマン (ShoPro Books)

読みなおした

.NETのエンタープライズアプリケーションアーキテクチャ 第2版

誰かのブログで話題になってたのを見て思い出した。 去年に読んですごく勉強になったのを覚えてる。 設計についてここまで実践的な内容で網羅してる本はそうないんじゃないかな。

あとは仕事で作ってるUnityのアプリの一部を自動テスト書いてたのでに参考になった。 また、オレオレフレームワークの改修とかで。

C#実践開発手法 (マイクロソフト公式解説書)

C#実践開発手法 (マイクロソフト公式解説書)

C#実践開発手法 (マイクロソフト公式解説書)

レガシーコード改善ガイド

レガシーコード改善ガイド (Object Oriented SELECTION)

レガシーコード改善ガイド (Object Oriented SELECTION)

自動テスト書いたり、激しい仕様変更があったので参考にしてる。

進行形

実践ハイパフォーマンスMySQL 第3版

実践ハイパフォーマンスMySQL 第3版

実践ハイパフォーマンスMySQL 第3版

通称鈍器。 最近、個人でサービスつくってみてるので電車で読んでる。(とりあえず、6章まで) サーバーはScalaでフロントはReactでSPA

ガベージコレクション 自動的メモリ管理を構成する理論と実装

ガベージコレクション 自動的メモリ管理を構成する理論と実装

ガベージコレクション 自動的メモリ管理を構成する理論と実装

パフォーマンス・チューニングしてるので昼休みに読んでるけどまだ前提知識の理解が浅いせいか頭がおいつかない。 不勉強だからまだ早いかも

Android 7.0にあげたらAmazon系のアプリが軒並み調子悪くなった

Nexus6p使用中。

今までもDeveloper PreviewのNを使ってたんだけど、先日正式リリースされたので迷わずインストールしてみた。

今までは普通に使う分に困ったことはなかった。

ただ、今日は調子が悪くてAmazonMusicをバックグラウンドにまわしてBGMを流してたらものすごい高温になってた。

また、冷却したあともKindleが起動できなくなって再起動してもダメだった。

現在に至る。

Kindle動かないのは私生活において重大な問題だ。。。

俺の端末の不良なのか、OSがまだ安定してないのか、Amazonがまだ7系の対応できてないのか。

どうなんだろうか

と、読む予定の本が読めなくてイラついたので書きなぐった

実践ハイパフォーマンスMySQL 4章 スキーマとデータ型の最適化 メモ

めもめも

  • 基本的に最小のデータを選べ。
    • ex. tinyintで済むならtinyint
  • enum型は内部的には整数で扱う。
    • ex. ("one", "two", "three")は1,2,3
  • BLOBとTEXT型はmax_sort_lengthでsortする。文字列全体でsortするのではなくmax_sort_lengthで行う。
    • ex. どういうことか理解してないので実験する。
  • 日付のデータ型でテーブルに保存するときはTimestampを使う。
    • ex. DateTimeは5~8バイト、Timestampは4~7バイトなので効率が良い
  • 正規化・非正規化のトレードオフ
  • ALTER TABLEするときは基本的に新しいスキーマの空テーブルを作り、既存のレコードを新しい空テーブルにInsertして、Indexの再構築を行う。※データサイズ次第ではめっちゃ時間がかかる
  • ただし、空テーブルを作らずに済むパターンもある
    • .ex(enumとsetの定数の追加、AUTO_INCREMENTの削除)

まとめ

  • 極力小さいサイズのデータ型を選択する
  • 遅いクエリ・構造を避ける
  • IDは整数を使う

django rest_framework ModelSerializerでカスタムフィールドを使用する

# models.py

class Monster(models.Model):
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)

    @property
    def full_name(self):
        return self.first_name + self.last_name

class MonsterSerializer(serializer.ModelSerializer)
    class Meta:
        model = Monster
        readonly_fields = ("full_name)
    # sourceでプロパティ名入れる
    full_name = serializer.ReadOnlyField(source="full_name", read_only=True)

Gears of war4 キタ━━━━(゚∀゚)━━━━!!

GamesCom2016でトレイラーが公開されてた。

www.youtube.com

すごく、美しい。。。

ローカストの生まれる過程とかローカストホールとかこんなに気持ち悪かったのか… (素っ裸の地底人と銃撃戦するTPSって

ゲーム的にも気になる独特な武器が増えててテンションが上ってた。

あとはめっちゃグロいんで日本で発売できないのも納得