タグ

ブックマーク / qiita.com/petitviolet (64)

  • scalametaに入門する - Qiita

    @ "val x = 1".tokenize res7: Tokenized = val x = 1 @ "val x = 1".tokenize.get res8: Tokens = Tokens(, val, , x, , =, , 1, ) @ "val x = 1".tokenize.get.syntax res9: String = "val x = 1" @ "val x = 1".tokenize.get.structure res10: String = "Tokens(BOF [0..0), val [0..3), [3..4), x [4..5), [5..6), = [6..7), [7..8), 1 [8..9), EOF [9..9))" @ val tokens = "val x = 1".tokenize.get tokens: Tokens = Tokens

    scalametaに入門する - Qiita
    petitviolet
    petitviolet 2017/02/19
    書いた
  • Akka-PersistenceのserializerとしてKryoを使う - Qiita

    とりあえず使えるようにする Akka-PersistenceでKryoをとりあえず使えるようにする設定については以前書いた。 Akka-Persistenceコトハジメ#serializerとしてkryoを使う serializer選択について Akka-PersistenceのPersistentActor#persistで永続化するメッセージはserializeしてから永続化している。 その際に使用できるSerializerを公式が提示している。 External Akka Serializers 以下のページでもserializer選択は大事だと強調しており、こちらではGoogle Protobuf/Apache Thrift/Apache Avroが提示されている。 Picking the right serialization format Protobufは何となく使うのがめん

    Akka-PersistenceのserializerとしてKryoを使う - Qiita
    petitviolet
    petitviolet 2017/01/23
    書いた
  • ActorでCircuitBreakerを実装してみた話 - Qiita

    実装してみる理由 ReactiveSystemやMicroservices等の文脈で登場するCircuitBreakerについて以前調べた。 [Akka]CircuitBreakerはどう動くのか - Qiita AkkaのCircuitBreakerとNetflixのHystrixの違い - Qiita CircuitBreakerは内部にClose, Open, Half-Openの3つの状態を持ち、さらに非同期処理の実行とその監視という2つの責務を持つ。 状態の管理と責務の分割にはActorが適しているんじゃないかと思ったのがきっかけ。 リポジトリはここ。 petitviolet/supervisor Actor同士のsuperviseしている状態に似ている(と感じた)のでsupervisorという名前にしてある。 気分が乗ったのでMavenCentralにも公開している。 使い方

    ActorでCircuitBreakerを実装してみた話 - Qiita
    petitviolet
    petitviolet 2016/12/06
    書いた
  • AkkaのCircuitBreakerとNetflixのHystrixの違い - Qiita

    この記事はなに? マイクロサービス等の文脈で登場するCircuitBreaker。 Scalaで使えるものの代表(要出典)として以下の2つを比較する。 Circuit Breaker - Akka Documentation シンプルだが単機能 Netflix/Hystrix 高機能 ちなみに個人的な好みはAkkaの方。 Scalaから使いやすいのと導入が簡単。 CircuitBreakerってどんなもの? 以前書いたので貼っておきます。 [Akka]CircuitBreakerはどう動くのか - Qiita 公式サンプルがある。 ちなみに独自のサンプル実装はここ。 akka.pattern.CircuitBreakerに状態遷移の条件に当たるもの(maxFailures, callTimeout, resetTimeout)を渡してインスタンス化する。 そしてCircuitBreaker

    AkkaのCircuitBreakerとNetflixのHystrixの違い - Qiita
    petitviolet
    petitviolet 2016/12/03
    書いた
  • [Akka]CircuitBreakerはどう動くのか - Qiita

    CircuitBreakerとは 原典にあたるのはMartin Fowler氏のpostになるはず。 リモートへのリクエストが失敗した時にうまいこと障害が伝搬しないようにするためのデザイン。 昨今のMicroserviceアーキテクチャな文脈だと考えやすい。 特定のサービスがダウンしてしまった時に、 それに依存するサービスが引きずられてダウンしてしまわないようにするもの。 Reactiveなシステムを作る上で欠かせない存在になりそう。 CircuitBreakerの状態 監視対象とするサービスの状態に応じてClose, Open, Half-Openの3つをとる。 それぞれの状態の意味はおおざっぱに以下。 Close 正常に動作していて、対象サービスにリクエストを送る状態 Open 対象サービスに異常があり、リクエストを送らない状態 Half-Open そろそろ直ったかな、とちょっとリクエ

    [Akka]CircuitBreakerはどう動くのか - Qiita
    petitviolet
    petitviolet 2016/11/28
    書いた
  • Akka-StreamのRunnableGraphの構築パターン - Qiita

    Akka-Streamでアプリケーションを実装する場合、 SourceとFlowとSinkを組み合わせてRunnableGraphを構築し、runして実行する。 記事ではAkka-Streamの部品のメインとなるSource, Flow, Sinkを、 Akka-ActorおよびActorPublisher, ActorSubscriberを使う場合/使わない場合でシンプルに実装してみる。 Actorを使わずにRunnableGraphを構築する まず、Actorを使わないAkka-Streamなアプリケーションを実装する。 コード全体はこちら AkkaStreamStandard.scala 今回取り扱うデータ型はこれだけ。

    Akka-StreamのRunnableGraphの構築パターン - Qiita
    petitviolet
    petitviolet 2016/10/22
    書いた
  • 2016年だけどMakefileを使ってみる - Qiita

    この資料はなに? Makeの良さを伝えるものです CとかC++の持ち物じゃない 普段使うコマンドのショートカットみたいな 2016年でもMakefileは便利 頑張らないでScala 〜VOYAGE GROUPにおけるアドネットワーク開発の戦略〜 // Speaker Deck Makeってなに?Makefile??? make(メイク)は、プログラムのビルド作業を自動化するツール。コンパイル、リンク、インストール等のルールを記述したテキストファイル (makefile) に従って、これらの作業を自動的に行う。 出典:https://ja.wikipedia.org/wiki/Make つまり、自動化のためのツール。 make が生成するのはふつう C のプログラムだが、べつに C のプログラムに限らず、Makefile に書く生成コマンドの書きように よっては、TeX のファイルだろうが

    2016年だけどMakefileを使ってみる - Qiita
  • akka.actor.FSMを永続化出来るPersistentFSM - Qiita

    状態の保持/状態遷移に長けたFSMと、その状態/状態遷移を永続化するAkka-Persistentの組み合わせとしてPersistentFSMがある。 状態を持つActorでイベントを永続化したいケース(EventSourcingなど)には強力な武器となる。 ただ、FSMと同様に普通のActor(PersistentActor)でもbecomeを使えば状態は表現できるので使いどころは難しいかもしれない。 ドキュメントにもあるようにexperimentalなものなので注意(v2.4.9時点) 実装の仕方 akka.actor.Actorの代わりにakka.persistence.fsm.PersistentFSMをextendsしてやればよい。 通常のFSMは型パラメータとしてStateとDataにあたる型を2つ要求したが、PersistentFSMでは型パラメータを3つ、State/Dat

    akka.actor.FSMを永続化出来るPersistentFSM - Qiita
    petitviolet
    petitviolet 2016/08/30
    書いた
  • Akka-Persistenceコトハジメ - Qiita

    Akka-Persistenceはstatefulなactorの内部状態を永続化することによって、生成時、再開時、migration時などに状態を復旧することを可能とするもの。 内部状態に至るまでのイベント(メッセージ)を永続化しておくことで、そのイベントを再生すれば全く同じ状態を再現させることが出来るため、CQRS/ESの文脈で最近はよく出てきている(気がする)。 build.sbt まずはbuild.sbtに依存を追加する。 バージョンは適宜変更すること。(Release Versions) サンプルでの永続化先としてLevelDBを利用する。 val akkaVersion = "2.4.9-RC2" libraryDependencies ++= Seq( "com.typesafe.akka" %% "akka-actor" % akkaVersion, "com.typesaf

    Akka-Persistenceコトハジメ - Qiita
    petitviolet
    petitviolet 2016/08/28
    書いた
  • Actorで作る有限オートマトン - Qiita

    有限オートマトン? Finite State Machine(FSM) ざっくり言うとイベントを受け取って状態遷移するステートマシン。 詳しくはWikipedia参照 FSMをActorで実装する まさにそのためのakka.actor.FSMがあるので、これを使って実装する。 FSMに必要な型を定義する 必要となるのは以下の3つの型 State FSMの状態 Data FSMが内部的に持つ情報 Event FSMの状態遷移をキックするもの 今回は信号をFSMで実装してみる。 sealed trait SignalState case object Red extends SignalState case object Green extends SignalState case object Yellow extends SignalState sealed trait SignalDat

    Actorで作る有限オートマトン - Qiita
    petitviolet
    petitviolet 2016/08/24
    書いた
  • [Akka-HTTP]spray-jsonの使い方とAkka-HTTP - Qiita

    Akka-HTTPで公式にサポートされているJSONライブラリのspray-jsonの使い方。 JSON Support — Akka Documentation Akka-HTTPと一緒に使いたいので、Marshaller/Unmarshallerとして使用法も載せる。 tl;dr クラスのフィールドに独自の型を使わない場合 or 独自の型に対応させてjsonを入れ子にする場合 jsonFormatNを使えば手軽で良い クラスのフィールドとjsonのフォーマットを変えたい場合 RootJsonProtocolを一生懸命実装する Akka-HTTPではSprayJsonSupportをextendsすればimplicitにやってくれる akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport 基的な使い方 case classをj

    [Akka-HTTP]spray-jsonの使い方とAkka-HTTP - Qiita
    petitviolet
    petitviolet 2016/06/02
    書いた
  • [Akka-HTTP]DSLにおける暗黙の型変換 - Qiita

    // path val pingSegment: String = "ping" val pingMatcher: PathMatcher[Unit] = ImplicitPathMatcherConstruction.segmentStringToPathMatcher(pingSegment) val pingDirective: Directive[Unit] = path(pingMatcher) // response val pongStr: String = "pong" val pongMarshal: ToResponseMarshallable = ToResponseMarshallable.apply(pongStr)(PredefinedToEntityMarshallers.StringMarshaller) val pongStandardRoute: Sta

    [Akka-HTTP]DSLにおける暗黙の型変換 - Qiita
    petitviolet
    petitviolet 2016/05/28
    書いた
  • Akka-HTTPを型で縛る - Qiita

    httpリクエスト/レスポンスでやり取りするStringな値をアプリケーションが期待するScalaの型に変換する方法について。 リクエストを型で縛る ユーザーからのリクエストをなるべくStringとして触らないようにする。 URLパラメータ 以下のルーティングを考える。

    Akka-HTTPを型で縛る - Qiita
    petitviolet
    petitviolet 2016/05/27
    書いた
  • [Akka-HTTP]カスタムヘッダーの取り扱い方 - Qiita

    標準で用意されていない独自のヘッダーを定義して使いたいケース。 大雑把に、文字列として扱う場合と型で扱う場合に分ける 文字列で扱う headerValueByNameで良い。 引数にSymbolかStringを渡せば、それにマッチするヘッダーの値が取り出せる。 val route = path("header" / "ping") { get { headerValueByName('Message) { msg: String => complete(s"pong: $msg") } } }

    [Akka-HTTP]カスタムヘッダーの取り扱い方 - Qiita
    petitviolet
    petitviolet 2016/05/19
    書いた
  • [Akka-HTTP]ルーティングDSLの基本となるPathMatcherのまとめ - Qiita

    trait PathMatcher[L: Tuple] type PathMatcher0 = PathMatcher[Unit] type PathMatcher1[T] = PathMatcher[Tuple1[T]] リクエストがあったPathに対してマッチするかどうかの判定を行い、マッチする場合はpassして内側の処理に入り、マッチしなかった場合はrejectして次のPath判定にうつる。 PathMatcherNはpathに与えるとDirectiveNが得られるようになっている。 文字列 Pathを定義する基となるはずのやつ。 文字列でルーティングを定義する。

    [Akka-HTTP]ルーティングDSLの基本となるPathMatcherのまとめ - Qiita
    petitviolet
    petitviolet 2016/05/18
    書いた
  • MonadicでReactiveなSlick3.xを使う - Qiita

    MonadicでReactiveだと言われているSlick3.xを使ってみる。 記事時点での最新はは3.1.1となっている。 公式のサンプルだとh2を使っていたが、今回はローカルに立てたMySQLを使用する。 Getting Started — Slick 3.1.1 documentation 準備 事前にuserテーブルを作っておく Create Table: CREATE TABLE `user` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 insert into user values (1, "alice", "alice@e

    MonadicでReactiveなSlick3.xを使う - Qiita
    petitviolet
    petitviolet 2016/03/30
    書いた
  • 静的ダックタイピングのパフォーマンスとその仕組み - Qiita

    ここでの静的ダックタイピングはScalaの構造的部分型(Structural Typing)を用いて実現されるものを指しています。 構造的部分型については以下が参考になるかと思います。 構造的部分型について - Qiita Scala School - Advanced types Structural typing - Effective Scala tl;dr 構造的部分型はリフレクション結果をキャッシュしてるから速い。 構造的部分型とはどういったものか 下のスニペット中にあるHasSizeのように、特定のメソッドシグネチャを持つ型を指定してそのメソッドを呼ぶことが出来る仕組みのこと。 object DuckTyping extends App { sealed abstract class AwesomeData(id: Int) case class Nice(id: Int) e

    静的ダックタイピングのパフォーマンスとその仕組み - Qiita
    petitviolet
    petitviolet 2015/12/22
    アドベントカレンダー書きました
  • 気持ちよくAndroidを書くために - Qiita

    ちょっとでもJava7なAndroidを気持ちよくプログラミングしたい、 Javaっぽい(?)ところがありつつもモダンなパラダイムが取り入れられているScalaが羨ましく見えたので、Scalaっぽく書きたいという意志から書いています サンプルコードでは紙面の都合上、retrolambdalambda式使っています Scalaの羨ましいところ 挙げればキリが無いですが、以下とします 関数型プログラミング 強力な式 関数型プログラミングっぽく これについてはRoppongi.aar #2 - connpassで私が発表した内容がベースとなっています OOなjavaで無理して関数型プログラミングを目指すのではなく、関数型プログラミングの中でもモナドといわれる便利なデータ構造を便利に使いたい、といった程度のものです そこで、Androidでもモナド実装して使えば気持ちいいんじゃないか、ということ

    気持ちよくAndroidを書くために - Qiita
    petitviolet
    petitviolet 2015/12/03
    アドベントカレンダー書きました
  • 数字の文字列をread使って数字列に変換する - Qiita

    Prelude> let n = "123456789" :: String Prelude> n "123456789" Prelude> map return n :: [String] ["1","2","3","4","5","6","7","8","9"] Prelude> map (read . return) n :: [Int] [1,2,3,4,5,6,7,8,9] Prelude> map (read . return) n :: [Float] [1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0] Prelude> let parse str = map (read . return) str :: [Int] Prelude> :t parse parse :: [Char] -> [Int] Prelude> map parse ["1234

    数字の文字列をread使って数字列に変換する - Qiita
    petitviolet
    petitviolet 2015/09/22
    書いた
  • React Native for Androidでアプリを作る - Qiita

    React Native for Android: How we built the first cross-platform React Native app | Engineering Blog | Facebook Code React Native | A framework for building native apps using React Setup Android SDKの追加 Android SDK Managerで以下をinstall Intel x86 Atom System Image (for Android 5.1.1 - API 22) Intel x86 Emulator Accelerator (HAXM installer) react-nativeの準備 いくつかinstallする

    React Native for Androidでアプリを作る - Qiita
    petitviolet
    petitviolet 2015/09/16
    書いた