タグ

Scalaに関するTAKAyuki_atkwskのブックマーク (21)

  • Play 2.6の新機能 - たけぞう瀕死ブログ

    Play 2.6のドキュメントにある「What’s new in Play 2.6」からScalaに関する部分をざっと日語にしてみました。 https://www.playframework.com/documentation/2.6.x/Highlights26 細かい部分はマイグレーションガイドも見ないとダメそうですね。こちらはかなり分量があるのでさくっと日語にするのは厳しそう…。 https://www.playframework.com/documentation/2.6.x/Migration26 グローバルステートが非推奨に アプリケーションではplay.api.Play.current / play.Play.application()でグローバルアプリケーションにアクセスできるけど非推奨。以下のようにして禁止することもできる。 play.allowGlobalAppli

    Play 2.6の新機能 - たけぞう瀕死ブログ
  • ScalaでFutureとEitherを組み合わせたときに綺麗に書く方法 - xuwei-k's blog

    組み合わせるとはつまりアレのことを書くのですが、一応それほど前提知識無くても理解できるように書いてみます。さて、なぜいきなりEitherとFutureか?というと play2とか使ってると、Futureがよく出てくる Futureをそこら中でAwaitしたらFuture使う意味がないので、Future[A]をmapやflatMapなどでどんどん連鎖させて、メソッドの型にFutureが大量に出現! Futureは非同期に行われる処理であり、そこで例外発生したら、その中に例外を含むしかない(単純に例外投げるわけにはいかないというか不可能) Scala標準ライブラリのFutureは、Throwable型で例外を保持できるようになってる 逆にいうと、Throwableでしか保持できない 例外の種類が多くなってきて、プログラムが複雑になった場合、Throwableではなくもっと限定された独自のエラー

    ScalaでFutureとEitherを組み合わせたときに綺麗に書く方法 - xuwei-k's blog
  • アプリケーションに合ったExecutionContextを使う - tototoshi の日記

    scalaではFutureなどの裏側ではExecutionContextが動いています。ということはExecutionContextの使い方がいまいちだとFuture周りで問題が起きることになります。 よく起きる問題の1つとして、標準のExecutionContextがいまいちだった、というのがあると思います。 標準のExecutionContextはダメというか、適さないパターンがあるのですが、あまりよく考慮されずに使われてしまう印象があります。 まあ悪いのはコンパイラの親切すぎるエラーメッセージでしょう。 scala> import scala.concurrent.Future import scala.concurrent.Future scala> Future { 1 + 1 } <console>:9: error: Cannot find an implicit Execu

    アプリケーションに合ったExecutionContextを使う - tototoshi の日記
  • DIについてあれこれ - tototoshi の日記

    Dependency Injectionとはコンポーネント間の依存関係をプログラムのソースコードから排除し、外部の設定ファイルなどで注入できるようにするソフトウェアパターンである ってwikipedia先生が言ってました。 Scalaにおける最適なDependency Injectionの方法を考察する 〜なぜドワンゴアカウントシステムの生産性は高いのか〜 - Qiita を読んでいろいろ考えたので、なんで今さらって感じのことを書きます。 ScalaでDIというとDIコンテナとかCake PatternとかReader Monadとかって話になっちゃうんですが、これらはいかにかっこよくDIするかの話であって、別にこういった道具やパターンを使わなくてもDIは可能という話です。 Constructor Injection 簡単な例で考えます。今ここにUserRepositoryにべったり依存し

    DIについてあれこれ - tototoshi の日記
  • PlayFrameworkをただの静的型付けMVCだと思って本番稼動させると死ぬ - サナギわさわさ.json

    (3/15 : タイトル修正しました。wは小文字ですね、すみません・・・) PlayFrameworkが流行り始めてから割と経ちますので、そろそろ正式採用しようと考える方も多いのではないかと思います。 強力な静的型付けで守られたPlayは、ミッションクリティカルなシステムや数万行を超える大規模システムの構築に特に向いているような気がします。 また、Servletを使っていないのに加えてMVC構造がベースなので、今までRailsなどで開発をしていた人でもシームレスに移行できると思います。 しかし、忘れてはならないのがPlayのアーキテクチャが全ての処理が非同期で行われることを前提としているという事です。 ここを忘れてPlayをただの強力な静的型付けで守られたMVCフレームワークとだけ考えて開発を進めてしまうと、番環境で稼動させた時にパフォーマンスが上がらずに困ることになるかもしれません。今

    PlayFrameworkをただの静的型付けMVCだと思って本番稼動させると死ぬ - サナギわさわさ.json
  • Scala ExecutionContextって何 / Futureはスレッド立ち上げじゃないよ - ましめも

    こういう人は、あとあと処理が詰まったり理解できない挙動が起きたりして困るので注意。 よくわからないけどコンパイル時に怒られるので import scala.concurrent.ExecutionContext.Implicits.global を書いている Future.apply は 「スレッドを立ち上げて非同期に実行する」と理解している 特に何も考えず Future 内で Thread.sleep をしている ExecutionContextとは Future#mapやFuture.applyにimplicitパラメータとして要求される*1ExecutionContextって何なのか? 何か渡さないといけないからとりあえず import scala.concurrent.ExecutionContext.Implicits.global と書いている人もいるんじゃないだろうか。 Ex

    Scala ExecutionContextって何 / Futureはスレッド立ち上げじゃないよ - ましめも
  • akkaにおけるActorの生成時の注意事項 - xuwei-k's blog

    akkaをある程度使いこなしてる人なら、当たり前?かもしれませんが、その細かい仕組みがわかりずらいと思うので説明を書いてみます。(versionによってそれほど変わらないはずですが)これを書いてる時点の最新の akka 2.3.4、Scala 2.11.2 としておきます。 akkaの公式ドキュメントに以下の様な例と説明があります http://doc.akka.io/docs/akka/2.3.4/scala/actors.html import akka.actor.Props val props1 = Props[MyActor] val props2 = Props(new ActorWithArgs("arg")) // careful, see below val props3 = Props(classOf[ActorWithArgs], "arg") そこの「careful

    akkaにおけるActorの生成時の注意事項 - xuwei-k's blog
  • bullet-scala: N+1クエリ問題を回避する - 貳佰伍拾陸夜日記

    Scala関西 Summit 2015での発表で触れていたN+1クエリ問題をなんとかするためのライブラリを公開した. 発表は以下のもので, ここでは「関係モナド」という名前で紹介していたけれど, これは口頭でも説明したように便宜上てきとーにつけた名前であって, とくにそういう名前のよく知られたモナドがあるというわけでもなければ, そもそもモナドであるかどうかはあまり質的ではない. この発表のあとに, Rails (Active Record)でのbulletのようにN+1問題の検出をScalaでやる方法はないだろうか, と言っている人がいたので, そういうものを探していて辿りつけるとよかろうということで, bullet-scalaという名前にした. もちろんN+1問題の検出のためのライブラリというわけではないし, 動的に検出するのではなく原理的に問題が発生しないようにするものなので, 思

    bullet-scala: N+1クエリ問題を回避する - 貳佰伍拾陸夜日記
  • Observability Tools for Developers, not DevOps/SRE

    Observability Tools for Developers, not DevOps/SRE Monitor your backend applications, fix performance issues, and get alerted when problems happen. All without being a monitoring expert. Start with a FREE account Tailing the logs is not enough Everybody starts monitoring with logs because they are there by default. Just connect to your server and start tailing. But logs have a hard time showing yo

    Observability Tools for Developers, not DevOps/SRE
  • Play 2.4のDependency Injectionを試してみた - たけぞう瀕死ブログ

    Play 2.4にはGuiceを使ったJSR 330ベースのDI機能が導入されており、コントローラに対してコンポーネントを注入することができるようになっています。Playの標準機能もDI前提のAPIに移行しており、Play 2.4を使用する上では必須っぽい感じになっています。というわけで今日はこのDI機能を少し触ってみました。 まず、DIを使用するために従来はobjectとして実装する必要のあったコントローラをclassとして実装するようになっています。ただし、build.sbtの以下の行を削除すると従来通りobjectとしてコントローラを実装することができます。 routesGenerator := InjectedRoutesGenerator この場合は逆にDIが使用できなくなるわけですが、routesで以下のように@をつけるとそのコントローラのみDIを利用可能なclassとして実装

    Play 2.4のDependency Injectionを試してみた - たけぞう瀕死ブログ
  • 実戦での Scala: Cake パターンを用いた Dependency Injection (DI) · eed3si9n

    2011-04-23 Akka の作者として益々注目を集めている Jonas Bonér が 2008年に書いた “Real-World Scala: Dependency Injection (DI)” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2008年10月6日 Jonas Bonér 著 2011年4月22日 eed3si9n 訳 さて、実戦での Scala シリーズ第二弾の今回は、Scala を用いた Depenency Injection (DI) の実装をみていきたい。Scala は、備わっている言語機構だけを用いても何通りかの DI を実現できる非常に豊かでディープな言語だが、必要に応じて既存の Java DI フレームワークを使うこともできる。 Triental では、一つの戦略に落ち着くまで三つの異なる方法を試した

    TAKAyuki_atkwsk
    TAKAyuki_atkwsk 2015/04/24
    あとで読む
  • Scalaのversion間の非互換について具体的に考える - xuwei-k's blog

    わりと以前から書いてみたかったことなので、書いてみます。 たとえば最近ではここ Web✕Java - HTML5で進化したWeb標準を、Java技術でどう扱うのか?でStruts使ってる人へJSFの説明をしてきた #jjug #html5biz でとりあげられていたりします。*1 昔からずっと言われてる話です。ですが、「互換性がない」とある程度多くの人が口をそろえて言う一方、「ではどのくらいの互換性があればいいのか(どういうポリシー?どのくらいの期間を保証?)」という具体的な議論がほとんどされていない気がします。 なので、もうちょっと具体的に考えてみたいと思います。 先日こんなtweetをしました @seratch 順調にいけば今年中にScala2.11はRC出るくらいになりそうだし、3世代クロスビルド(2.9、2.10、2.11)はかなり厳しいので、もし2.11サポートと同時に2.9切り

    Scalaのversion間の非互換について具体的に考える - xuwei-k's blog
  • ScalaのPartialFunctionが便利ですよ - ( ꒪⌓꒪) ゆるよろ日記

    Scalaには、PartialFunctionというものがあります。 直訳すると部分関数ですが、これはなにかっていうと「特定の引数に対しては結果を返すけど、結果を返せない引数もあるような中途半端な関数」です。 どうやって使うのん? まぁ、ちょっと例を見てましょうや。PartialFunctionであるfooPfは、引数が"foo"だったら"bar"を返して、"foo"以外は知らんというてきとーな関数です。 scala> val fooPf:PartialFunction[String,String] = { case "foo" => "bar" } fooPf: PartialFunction[String,String] = <function1> scala> fooPf("foo") res5: String = bar scala> fooPf("hoge") scala.Mat

    ScalaのPartialFunctionが便利ですよ - ( ꒪⌓꒪) ゆるよろ日記
  • ScalaプロジェクトをCircleCIでビルド+テストして、scoverageで計測したカバレッジをCOVERALLSに送るための諸設定をした - TODESKING

    タイトルがわかりやすい。 環境 Scala 2.11.4 sbt 0.13.6 テストフレームワークはScalaTest使ってます sbtでカバレッジを測定する+COVERALLSに送信する Scalaのカバレッジ測定、scctというのが一般的だったけど、なにか色々あって現在はScoverageという名前になって開発が継続されています。 Scoverageの最新バージョンはScala2.10をサポートしていないので注意しましょう(旧バージョン指定したら動くかも。試してないけど。) 導入は以下の通り。 // project/plugins.sbt resolvers += Classpaths.sbtPluginReleases // sbtでScoverage使えるようにするプラグイン addSbtPlugin("org.scoverage" %% "sbt-scoverage" % "0

    ScalaプロジェクトをCircleCIでビルド+テストして、scoverageで計測したカバレッジをCOVERALLSに送るための諸設定をした - TODESKING
  • typesafe activatorを使わないplayframework2.3の始め方 - xuwei-k's blog

    tototoshiさんの、これ Play 2.3 がリリースされたので変更点と試し方を説明します の便乗(?)的な感じで、なぜか自分もチュートリアルを書いてみます。普通に書いたら意味ないので、少しだけ変わった方法を書いてみます。 変わった方法とは、あえてtypesafe activatorを使わない方法を書きます。また、play2.3がどうやって成り立ってるのかを説明するのも兼ねて、activatorを使わないだけでなく、なんらかのテンプレート使ったりとか自動生成とかもせずに、一つずつ手作業でやって、最低限の構成のところまでだけを説明します。 なので、実用的なのかどうかはわかりません。慣れたら、それぞれみんなtypesafe activator使うなり、独自にテンプレート的なプロジェクトを用意しておくなり、giter8使うなりした方がいいかもしれません。 あと、先に完成後の最小限のplay

    typesafe activatorを使わないplayframework2.3の始め方 - xuwei-k's blog
  • Effective Scala

    Effective Scala Marius Eriksen, Twitter Inc. marius@twitter.com (@marius) [translated by Yuta Okamoto (@okapies) and Satoshi Kobayashi (@scova0731)] Table of Contents 序章 書式: ホワイトスペース, 命名, インポート, 中カッコ, パターンマッチ, コメント 型とジェネリクス: 戻り型アノテーション, 変位, 型エイリアス, 暗黙 コレクション: 階層, 使う, スタイル, 性能, Java コレクション 並行性: Future, コレクション 制御構造: 再帰, Return, forループと内包, require と assert 関数型プログラミング: 代数的データ型としてのケースクラス, Option, パターンマ

    Effective Scala
  • 型引数の基本から学ぶ、FreeモナドとCoyoneda - AweKuit日記

    このエントリはScalaアドベントカレンダーの3日目です。昨日は Kuchitama さんのScalaがつないでくれた縁-NetflixMeetup Kyoto 開催後記- でした。 前おき この記事は、タイトル通りFreeモナドとCoyonedaを扱うものの、あまりそれらの直接的な話やモナモナした話ではなく、そこに至るまでの実装のあれこれを『Scalaのプログラミングとして』手探りで追ってみよう、というものです。 その過程で、特に型引数(型変数)や高階型や、それらが継承時にどう扱えるかというあたりのScalaの基にたっぷり触れます。 なので、Freeモナドに興味がない方でも 型引数で A とか F[_] とか出てくると、まだちょっとこわい Scalaでいざプログラミングすると型が合わずつまづく事が多い という方にも、役に立つ部分があると思うので参考にぜひ読んでみてもらいたいです。 もち

    型引数の基本から学ぶ、FreeモナドとCoyoneda - AweKuit日記
  • sonatypeに特定のURLでアクセスすると、javadocやscaladocを展開して表示してくれる機能がある件 - xuwei-k's blog

    たとえばScalazだったら以下のURL https://oss.sonatype.org/service/local/repositories/releases/archive/org/scalaz/scalaz-core_2.10/7.0.3/scalaz-core_2.10-7.0.3-javadoc.jar/!/index.html#package この機能なんなの?あまり使われてるの見たこと無いけど、publishするだけで自動で見れるようになる(?)ので、だいぶ便利なのでは?

    sonatypeに特定のURLでアクセスすると、javadocやscaladocを展開して表示してくれる機能がある件 - xuwei-k's blog
    TAKAyuki_atkwsk
    TAKAyuki_atkwsk 2014/11/25
    便利機能っぽい
  • ScalaでWebアプリケーションのエラー処理を綺麗に書く - はこべにっき ♨

    Play Frameworkにおいて、POSTリクエストから得られたbody中のパラメータをもとに何か処理をするというよくあるコードを、ちょっと整理して見やすくする方法を学んだのでメモがてら御シェアさせていただきます。Playのリクエストハンドラを書くときに頻繁に現れたので、例がPlayのコードになっているけど、内容的にはScala全般的な話だと思う。Scalaプロみたいな人にはまったく新しいことはないと思う。 題と関係ないけど、YAPCScalaの話をするかもしれません。言語自体の話よりかは採用理由とか開発フローの話を、これまでのPerlでのWeb開発を踏まえて話す感じになりそう。Scala In Perl Company : Hatena - YAPC::Asia Tokyo 2014 さて、題ですが、話題の対象になるのは以下の様なPlayFrameworkのコードです。 def

    ScalaでWebアプリケーションのエラー処理を綺麗に書く - はこべにっき ♨
  • ScalaでWebAppの開発に必要なN個のこと - tototoshi の日記

    PerlでWebAppの開発に必要なN個のこと - Islands in the byte stream の Scala 版です。 あるプログラミング言語で実際にWebAppを開発できるようになるまで、何が必要だろうか。言語仕様の習得は終えているとしよう。おそらく、最低限以下のような知識が必要だと思われる。とりあえずScalaについて知っていることを書いた。 パッケージマネージャ sbt が全てやってくれる。Scala のバージョン管理も、ライブラリのバージョン管理も。 http://www.scala-sbt.org/ Maven や gradle を使用することもできる。 アプリケーションサーバ Scala の Web アプリは 2 つのタイプに分けられる。Java の Servlet API を使用するものと、使用しないものである。どのフレームワーク、ライブラリを使うかによって変わっ

    ScalaでWebAppの開発に必要なN個のこと - tototoshi の日記