mike-neckのブログ

Java or Groovy or Swift or Golang

Swift の Result にあると良さそうな関数

Swift の Result をいじっていて、書いてしまった拡張関数

f:id:mike_neck:20180609045321p:plain


現在の値を消費して終わりの関数

extension Result {
  func doOn(success: (Success) -> Void, failure: (Failure) -> Void) {
    switch self {
    case .success(let value): success(value)
    case .failure(let error): failure(error)
    }
  }
}

現在の値が .success の場合にデバッグプリントするための関数

extension Result {
  func peek(_ action: (Success) -> Void) -> Result<Success, Failure> {
    let doNothing: () -> Void = {}
    switch self {
    case .success(let value): action(value)
    case .failure(_): doNothing()
    }
    return self
  }
}

現在の値が .failure の場合にデバッグプリントするための関数

extension Result {
  func peekError(_ action: (Failure) -> Void) -> Result<Success, Failure> {
    let doNothing: () -> Void = {}
    switch self {
    case .success(_): doNothing()
    case .failure(let error): action(error)
    }
    return self
  }
}

Swift愛好会 vol39 に行ってきた

表題の通り、 Swift 愛好会 なる勉強会に行ってきました

f:id:mike_neck:20180609045321p:plain

love-swift.connpass.com

ついでなので、 swift-log について発表してきた

www.slideshare.net

雑に紹介すると、 swift-log は apple が作っている slf4j みたいなもの。 slf4j が log4j などのログを奪う機能(slf4j-over-log4j)はまだない。

勉強会の雰囲気は、アットホームなノリで、肩肘張らずにいられる感じ。

普段はエンジニアでない方の iOS アプリ開発の疑問も、みなでどうすればいいか意見を出し合う相談会になった。

初心者も上級者も誰でもウェルカムだそうですので、 swift さわってる人は一度行ってみるとよいかもしれません。

pixela-java-client のバージョン 0.3 を maven central repository にリリースしました

なるべく 月1度リリースしようと心がけてはいますが、ちょっと時間が経ってしまいました。

ということで、 pixela-java-client のバージョン0.3 を maven central repository にリリースしました。

https://search.maven.org/search?q=pixela

github.com

https://pixe.la/v1/users/pixela-java-client/graphs/run-ci?mode=short

↑ CI 回している回数を草化した画像


今回の変更点は以下のとおりです。

  • 内部 http-client が返す型に Response という型を使っていましたが、これは実質 Mono であるし、これを表現することで何らかの問題を解決しているわけではないので、なくしました
  • Pixela から Graph 既存の Graph に移動する際に、 pixela#graph に与えるパラメーターが GraphId でしたが、これのインスタンスを作るのもまあ面倒なので、 String で与えられるようにしました。内部的には GraphId によるバリデーションを行っていますが、ユーザーには極力簡単な API を提供したほうがよいだろうと考えてこの形にしました。

今後

  • Android から使えないのがもったいないので、なんとか Android でも使えそうな型にラップして提供するのはありかと思っているので、そうしたい
  • Java8 からも使えるほうがよろしいかと思うので、 reactor-netty で実装する PR 作っているけど、その過程で、今回の Response の型とかの変なところに気がついて修正しました

現場からは以上です


c.f. 今 Swift 用の pixela client を書いています。こちらもあわせてよろしくおねがいします!

github.com

クリーンアーキテクチャーの読書メモ(10)

f:id:mike_neck:20190312230053p:plain

第四部 コンポーネントの原則

  • SOLID 原則 = レンガを組み合わせて部屋を作る
  • コンポーネントの原則 = 部屋を組み合わせて建物を作る

§12 コンポーネント

  • コンポーネント = デプロイの単位
  • コンポーネントの歴史
    • アプリケーションと関数ライブラリーのアドレス(セグメンテーション)を分けてた
      • 関数ライブラリーのアドレス開始位置が固定なので、アプリケーション領域が増えると、また先にある特定の固定アドレスにアプリケーションの続きを配置する
    • リロケータビリティ/リンクローダー
      • コンパイラーが出力するバイナリに手を加えてスマートローダーでメモリに再配置
      • コンパイラーも関数名をメタデータとして関数名を出力
      • ライブラリーの関数も外部参照として扱えるようになる
    • リンカ
      • プログラムが巨大化してリンクローダーが使い物にならなくなった
      • ロードとリンクに分けて、後者をさらに別のアプリケーション(リンカ)に切り出し
    • プログラムの巨大化とマシンの高速化の戦い
      • マシン性能の向上によるリンク時間短縮が勝った
  • つまり