タグ

ブックマーク / takezoe.hatenablog.com (9)

  • Scala Love in the CityでGitBucketの発表をさせていただきました - たけぞう瀕死ブログ

    主催者のOliさんからのDMで急遽 Scala Love in the City で話させていただくことになり、あまり時間もなかったので準備なしでも話せるGitBucketの紹介をさせていただきました。スライドは以下になります。 GitBucket: Open source self-hosting Git server built by Scala from takezoe www.slideshare.net 他のトークはScalaでの関数型プログラミングやScala3の話題が多かったと思いますが、具体的なアプリケーションレイヤから見たScalaという観点での話ができればと思い、前半はGitBucketの紹介、後半は8年間開発を続けてきて難しかったこととしてScala 2.12へのアップグレードについて話させていただきました。 なぜScala 2.12へのアップグレードが辛かったのかと

    Scala Love in the CityでGitBucketの発表をさせていただきました - たけぞう瀕死ブログ
  • Modern Systems Programming with Scala Native: Write Lean, High-Performance Code without the JVM - たけぞう瀕死ブログ

    いまだScala 2.11までのサポートしか提供されていないなど開発が停滞気味のScala Nativeですが、最近書籍が出たということで読んでみました。 Modern Systems Programming with Scala Native: Write Lean, High-Performance Code without the JVM 作者:Whaling, Richard発売日: 2020/02/11メディア: ペーパーバック 仕事ScalaでCLIツールを書くことがあるのですが、やはりJVMの起動時間のオーバーヘッドが気になるのでネイティブバイナリを作成可能な技術としてScala Nativeが気になってはいたのですが、最近はそういう用途であればGraalVMのネイティブイメージ生成機能の方が最新バージョンのScalaを利用できたり、使えるライブラリの自由度など様々な面で実

    Modern Systems Programming with Scala Native: Write Lean, High-Performance Code without the JVM - たけぞう瀕死ブログ
    petitviolet
    petitviolet 2020/04/20
    “Scala NativeはScalaで書いたプログラムをネイティブ化するためのものではなく、ScalaをC言語として使うためのものだったのです。”
  • ScalaIO 2017に参加してきました - たけぞう瀕死ブログ

    11月2日、3日にフランスのリヨンで開催されたScalaIO 2017にスピーカーとして参加してきました。このエントリでは参加したセッションの中から印象に残ったものを紹介したいと思います。 Compiling like a boss! Scalaで分散コンパイルによるコンパイル速度の高速化を実現するHydraのセッション。事前のスケジュールではTriplequoteのお二方でのトークとなっていましたが、Iulianさんは不在でMircoさん単独でのトークでした。 ScalaDaysでのセッションとほとんど同じ内容だったと思いますが、今回のプレゼンテーションではIntelliJでのサポートが利用可能になる、Hydraのモニタリングが可能になるという2点のアップデートがありました。以下のスライドは今年のScalaDaysで使用したもののようですが、上記二点のアップデート以外は今回も同じ内容のも

    ScalaIO 2017に参加してきました - たけぞう瀕死ブログ
  • RestyというScala用のREST APIフレームワークを作ってみました - たけぞう瀕死ブログ

    GitHubリポジトリはこちら。 github.com なぜ作ったのか? Scala業界のフレームワークは関数型的なアプローチのものが主流になっています。これらのフレームワークはノンブロッキングI/Oや並列処理をうまく扱うことができますが、質的な複雑さをもたらします。自分の経験では、特に企業システムなどの場合は従来の同期サーブレットでも十分というケースも多いのではないかと感じています。 また、既存のScala用のフレームワークはタイプセーフなDSLでルーティングや入出力パラメータなどを定義するものが多いのですが、この手のものはシンプルな静的解析でメタ情報を抽出することが難しいためSwaggerなどの外部ツールとの相性が悪いという欠点もあります。 Restyはこのようなケースにおいてもプログラミング言語としてのScalaのアドバンテージを活かすことのできるシンプルなフレームワークがあるとい

    RestyというScala用のREST APIフレームワークを作ってみました - たけぞう瀕死ブログ
  • マイクロサービスにレジリエンスをもたらすHystrixを試してみる - たけぞう瀕死ブログ

    github.com HystrixはNetflixが開発しているオープンソースのJavaライブラリで、主として分散システムにおけるサービス間のやり取りをラップして以下のような機能を提供します。 スレッドプールの分離 フォールバック、サーキットブレーカー タイムアウト キャッシュ モニタリング 例えば外部サービスに障害があり呼び出しがエラーになる場合や、処理に時間がかかった場合にフォールバック値を返すことで呼び出し元の処理を継続できたり、外部サービスの呼び出しでエラーが多発する場合は一時的に呼び出しをショートカットして呼び出し先の回復を待ったりといった制御を行うことができます。 マイクロサービスではあるサービスの障害や遅延が他のサービスに波及する危険性がありますが。このような仕組みをサービス間の通信に導入することでサービス全体のレジリエンスの向上が期待できます。 今回はHystrixの基

    マイクロサービスにレジリエンスをもたらすHystrixを試してみる - たけぞう瀕死ブログ
  • HystrixをScala / Playアプリケーションから使ってみる - たけぞう瀕死ブログ

    前回はHystrixの簡単な紹介を書きました。 takezoe.hatenablog.com HystrixはJavaライブラリなのでもちろんScalaからも使うことができるのですが、そのままだと若干Scalaからは使いにくい部分もあります。今回はScala(主にPlay Framework)でHystrixを使う場合について書いてみたいと思います。 Playにモニタリング用のエンドポイントを追加する HystrixをScalaで使うには普通にHystrixCommandをScalaで実装してそれを呼び出せばよいのですが、問題はダッシュボードからのモニタリング用のエンドポイントが標準ではサーブレットコンテナ用のものしか用意されていないということです。 探してみたところ、PlayにHystrixを組み込むサンプルを作っている方がいました。 github.com 上記のリポジトリにあるHyst

    HystrixをScala / Playアプリケーションから使ってみる - たけぞう瀕死ブログ
  • Scalaのコンパクトな便利ライブラリ「Hamsters」を調べてみた - たけぞう瀕死ブログ

    最近HamstersっていうScalaライブラリを発見しました。関数型っぽいコンテナや機能を提供するものなのですが、非常にコンパクトでなおかつ関数型プログラミングに慣れていなくても簡単に使えるというものです。 github.com 使い方はREADMEを見ればだいたいわかると思いますが、以下のような機能があるようです。 Validation OK/KO Monads Monad transformers HLists Union types ひとつずつ見ていきましょう。 ValidationとOK/KO ValidationはEitherのリストを格納するコンテナ、OK / KOはright-biasなEitherのエイリアスで、組み合わせて使います。 こんな感じで全部の結果を保持するか、 val e1 = OK(1) val e2 = KO("error 1") val e3 = KO(

    Scalaのコンパクトな便利ライブラリ「Hamsters」を調べてみた - たけぞう瀕死ブログ
  • Akka Persistenceでメッセージの到達保証をしてみる - たけぞう瀕死ブログ

    前回はAkka Persistenceでアクターの状態を保存するということをやってみましたが、今回は「メッセージを永続化することでメッセージがアクターに到達することを保証する」ということをやってみたいと思います。 アクターはこんな感じになります。 class SampleActor extends PersistentActor with AtLeastOnceDelivery { override def persistenceId: String = "sample" var state: State = ... override def receiveRecover: Receive = { case SnapshotOffer(_, snapshot: Int) => state = snapshot // リストアされたメッセージを処理 case e: Event => { up

    Akka Persistenceでメッセージの到達保証をしてみる - たけぞう瀕死ブログ
  • scalaz-effectのIOモナドを使ってみる - たけぞう瀕死ブログ

    Scalaの標準ライブラリはコレクションに関してはは充実しているものの、IOに関しては貧弱そのものです。scala-ioが標準になるのではという時期もありましたが、いつの間にか動きが止まってしまったようです。もちろんJava標準のAPIやCommons IOなどを使ってもよいのですが、もっとScalaのメリットを活かした使いやすいライブラリが欲しいところです。 そこでScalazのモジュールの1つであるscalaz-effectに含まれているIOを試してみることにしました。ScalazでIO、嫌な予感がしますね。そう、IOモナドです。 scalaz-effectを使うにはbuild.sbtに以下の依存関係を追加します。 libraryDependencies += "org.scalaz" % "scalaz-effect_2.11" % "7.2.0" まずはコンソールにメッセージを表示

    scalaz-effectのIOモナドを使ってみる - たけぞう瀕死ブログ
  • 1