タグ

ブックマーク / xuwei-k.hatenablog.com (50)

  • 竹添さんが紹介してないScalaのWebフレームワークも含めて2015年現在の状況を色々紹介 - xuwei-k's blog

    ScalaのWebフレームワーク事情 2015年版 - たけぞう瀕死ブログ Scala界隈のWebフレームワークやJsonライブラリは良くも悪くも混沌を極めている(?)わけですが、それにしても竹添さんが紹介してるやつだけでは個人的に不公平感というか、混沌としている感が全然伝わらないと思ったので、全部に詳しい訳ではいですが、自分なりに現状を書きたくなったので紹介しようと思います。 どうせ全部を当に知り尽くしている人なんでいないので、これはこれで不公平というか偏った見方にもなってるかもしれませんが、そんなこと言ってたらこういう記事をいつまで経っても書けないので、思い切って書くことにしました。 いつもの注意書きですが、あくまでこれ書いてる2015年10月現在の状況であり、1年程度経過しただけで状況は劇的に変化する可能性あるので、ご了承ください。 そもそも、あまりこういうの書きたくないのは、わり

    竹添さんが紹介してないScalaのWebフレームワークも含めて2015年現在の状況を色々紹介 - xuwei-k's blog
  • 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
  • Scala祭と日本のScalaコミュニティ - xuwei-k's blog

    終わってからだいぶ日数が経過しましたが、感想を書いておこうと思います。 去年は運営には関わりませんでしたが、今年はある程度運営に関わりました。主に ニコ生の配信に関して社内の担当者と連絡 数日前のノベルティ袋詰 前日準備 当日の準備、片付け、細かい雑務 ホームページの更新の手伝いを少し などでしょうか。他に働き過ぎた人から比べれば、多分それほど働いていない方だと思いますが、終わってみると「とにかく疲れた」という感想が一番大きいです。みなさんお疲れ様でした。 自分がこういうことあまり得意ではない?慣れてない、というのもあるかもしれませんが、正直来年も積極的に手伝えるかどうかはわかりません。何かしら他のことが忙しかったりしたら、絶対無理だと思いました。 運営側、参加者側からみたScala祭の個人的感想と、あとは 「そもそもカンファレンス運営の何が大変なのか?」 というあたりを書こうと思います。

    Scala祭と日本のScalaコミュニティ - xuwei-k's blog
  • ceylonとか話題になってるらしいが、あえてpizzaを紹介してScalaの誕生理由とかAlgebraic Data Typesとかいろいろ考えてみる - xuwei-k's blog

    なんだか、最近ceylonっていう新しいJVM上の言語がでたらしく、自分のTL上では話題になってました・・・ が、自分は興味わかないというか、Scalaがこれだけtwitterをはじめものすごく実用でつかわれてるのに、今更新しい言語つくって普及させるとかどうなの?という立場です。まぁ言語仕様もちゃんと見てないであれなんですが(・ω・`) だれかceylonの魅力を延々と語ってください。 たしかに、Scalaは複雑すぎる的な印象は仕方ない部分もあるかもしれないですが・・・とか考えてるときに、そういえばScalaを作成する以前にodersky先生がつくっていた言語あったよなーとか思い出して、前から書こうかと思っていたのでpizzaについて紹介してみます!というよくわからない流れヽ(`▽´)/ pizzaというのは、Scalaの作者であるodersky先生がScalaを作る前につくっていたJVM

    ceylonとか話題になってるらしいが、あえてpizzaを紹介してScalaの誕生理由とかAlgebraic Data Typesとかいろいろ考えてみる - xuwei-k's blog
  • Scalaでクラス図を表示するsbt plugin作った - xuwei-k's blog

    コードのベースは、もう4年くらい前 に書いたやつ持ってきただけ https://github.com/xuwei-k/sbt-class-diagram 使い方は これ http://www.graphviz.org/ をローカルにインストール(内部でこれをコマンドで呼び出すので必須) 当は、dotというグラフの記述のための単純なテキストベースの言語から、pure javaSVGに変換したかったのだけど、ライブラリなさそう(?)なので断念 手動でレンダリングすれば不可能ではないが、nodeの配置が*1汚くなるので、graphvizに頼ることに githubのREADMEに書いてあるとおりに、addSbtPluginをproject/plugin.sbtに追加と、build.sbtにsetting読み込ませる sbtのshellから、 classDiagram "クラス図に含めたいcla

    Scalaでクラス図を表示するsbt plugin作った - xuwei-k's blog
  • akkaのそれぞれのモジュールの依存関係図 - xuwei-k's blog

    細かく文章で解説書こうかと思ったけれど、面倒になってきたし、図を貼ったほうがわかりやすいので、貼っておく http://xuwei-k.github.io/akka-2.3.3-dependency-graph.svg この前と同じく、akkaのversionは、これ書いている時点の最近安定版である2.3.3です。 akka-persistence-experimentalがlevel dbに依存していて、その先の依存が結構多いですね。akka-actorそのものは、typesafe configのみの依存なので、そういう意味ではコアはべつに依存多くありません。 あとは、akka-remoteはnettyに依存してるというのは知っておいたほうがいいかも?最近、non blokingである程度パフォーマンスを追求してるライブラリはnettyを内部的に使用してることが多く(たまたまかもしれない

    akkaのそれぞれのモジュールの依存関係図 - xuwei-k's blog
  • sbtの密結合な内部アーキテクチャ - xuwei-k's blog

    sbtというと、独特なSettingのシステム*1や、Scalaで記述する内部DSL*2ばかりが注目されがちです。それらは、初心者にわかりづらかったりして批判されることが多かったり、逆にsbtを使い慣れた人にとってはとても強力で面白い仕組みです。 Settingのシステムに注目すると、汎用的に色々な言語のビルドにも使えそうに思えます。事実、sbtでC++のpluginを作っている人もいます。 しかし、sbtはあくまで「Scala(とJava)のためのビルドツール」です。 これは「単にScalaをデフォルトでサポートしてる」という意味にとどまらず、おそらく皆さんが思っているよりもずっと深い意味で「Scalaに特化したビルドの仕組み」が内部に備わっています。 今回は、そんな「sbtの内部アーキテクチャ」の紹介をします。 以下、かなり長いです。読み物としては面白いかもしれませんが、単にsbtを使

    sbtの密結合な内部アーキテクチャ - xuwei-k's blog
  • Scala2.10から2.11の変更点 - xuwei-k's blog

    例のごとく、最初に注意書き まだfinalがでていないので、細かい部分変わるかもしれません*1 個人的に、「大きい変更点だなと思ったもの」「ライブラリ側のユーザーが直接使うクラス関連*2」「なんとなく興味があるもの」を中心にとりあげただけで、すべてを網羅してるわけではありません finalがでるまではできるだけ随時更新する予定です Scala2.11.0は、今のところ順調にいけば2014年の2月には最初のRCがでて*3、3月にはfinalがでるらしいです。*4 https://issues.scala-lang.org/browse/SI しばらくこの記事がblogの一番上にくるように、少し未来の日付にしておきます。 2.9から2.10のときの変更点に比べると、だいぶ少ないですね。(2.9から2.10の変更点が多すぎただけですが)細かく追えていませんが、その分コンパイラ側の細かいパフォーマ

    Scala2.10から2.11の変更点 - xuwei-k's blog
    nsyee
    nsyee 2013/12/02
  • ScalazのKleisliとEndomorphic - xuwei-k's blog

    Scalazネタです。しかもわりとマニアックな、Scalaz初心者向けではないネタかもしれません。前から書きたかったけど、良いサンプルが思いつかなくて躊躇してましたが、良いサンプルを見つけたのでKleisliとEndomorphicについて書きます。 Kleisliはともかく、Endomorphicは最近入ったので、日語記事はおろか現時点では英語の解説もほとんど無いのではないかと思います。最近とはこのpull reqですが、7.1.0-M1からで、7.0.x系の最新版の7.0.4には入っていません。*1 さて前置きはこれくらいにして解説を始めます。まず、独習Scalazを引用します。 5日目 騎士の旅 case class KnightPos(c: Int, r: Int) { def move: List[KnightPos] = for { KnightPos(c2, r2) <-

    ScalazのKleisliとEndomorphic - xuwei-k's blog
  • PartialFunctionの戻り値は必ずboxingされる - xuwei-k's blog

    相変わらず、noboxというライブラリを作ってる途中で気づいた、(普通は気にする必要ない)細かいパフォーマンスの話です。 気づいた経緯は以下のような感じ URL withFilter実装してみたけど、withFilterしてmapするより、filterしてmapしたほうがなぜか速くてつらい・・・。(何回か同じようなことあったけど)こういうの原因探るの難しそうだしなぁ・・・ 2013-11-05 11:48:05 via web List(1).collect{case a => a}を -Xprint:jvm したら"final override def applyOrElse(x1: Int, default: Function1): Object"となっていて、boxingされてる疑惑 2013-11-05 12:04:31 via web to @xuwei_k 自分の仮説が正しいな

    PartialFunctionの戻り値は必ずboxingされる - xuwei-k's blog
  • GenTraversable の fold が結合法則を満たさなければならない理由 - xuwei-k's blog

    タイトルに関する言い訳 みずしまさんに突っ込まれて、その後のtwitter上でのやり取りもあったので、下に追記したよ! ウオーーッ scala の GenTraversable#fold 今まで foldl1 のつもりで使ってたけど "a binary operator that must be associative" と書いてあるヨ???歳納さん、歳納さんーー 2012-09-15 01:52:51 via web @lyrical_logical foldってたしか2.8以前は存在しなくて、2.9でparallel collectionが入った関係で追加されたから、そんな感じになっていたとかだったような(だいぶ憶測で言ってるから間違ってるかも) 2012-09-15 02:05:21 via web to @lyrical_logical .@lyrical_logical URL

  • noboxというprimitive型のArrayのwrapperライブラリ作った - xuwei-k's blog

    特にすぐに必要なわけでもないけど、なんとなく作った。 https://github.com/xuwei-k/nobox Scalaには、ArrayOpsとかWrappedArrayとかあるんですが、それらも、保持してるのは内部的にArrayでも、mapしたりしたときに結局一旦boxingやunboxingされてしまっている場合がある(?)ので、それらを防ぐだけのもの。マクロとかspecializedアノテーション使って頑張ることもできたかもしれないけど、ここまでやるなら、もう最初からコード生成してしまったほうがわかりやすいというか確実なので、primitiveの8種類毎にループ回してひたすらコード生成です。 spire も、ある程度specializedアノテーション使った、boxingを防ぐためのものがありますが、コレクションのメソッドなどは提供していない(?)ようだったので、spire

    noboxというprimitive型のArrayのwrapperライブラリ作った - xuwei-k's blog
  • SetはFunctorではない - xuwei-k's blog

    SetがFunctorではない理由を延々と説明します。最初これ http://failex.blogspot.jp/2013/06/fake-theorems-for-free.html を訳そうとしましたが、英語力と理解力のなさにより断念し、中途半端な翻訳になるなら、自分なりに書き下そうという結論になりました。内容は上記の記事と半分以上被ると思います。あと、上記の記事書いた人は「Scalazのコミッターであり、おそらくekmettの同僚であり、ermine-languageのコミッター」な人です。よってオススメなので、そっちも読みましょう。*1 以下、Scala以外の言語でも大概は当てはまると思いますが、一応Scala(というか、Scalaz)を念頭において書いていきます。 さて、プログラミングにおいて、Setとは一体何でしょうか? とりあえず「要素の重複を持たないデータ構造」といえるで

    SetはFunctorではない - xuwei-k's blog
  • Scalaz の NaturalTransformation - xuwei-k's blog

    以下のやりとりなどをして、なんとなく書きたくなったので解説してみます。 @gakuzzzz implicitついてないし、型クラスのインスタンスではなく、「高階レベルの関数」ですね。Id型使いたいだけなら、それ使っていいと思います(なにに使うのか・・・?) 2013-09-11 16:07:49 via web to @gakuzzzz ↑昨日。 ↓こっちは別のやりとり .@nagise @yuroyoro 値が多相になれないというかHaskellのforallが直接表現できないので、Haskell版のこれ URL をScalaで書くとこんなに長く、とか URL 2013-09-12 19:29:14 via web to @nagise まず問題です、scala.util.Try[A]をscala.Either[Throwable, A] に変換するメソッドは、どのように書けるでしょうか

  • 関数を扱えるだけでは、モナドを表現するには不十分過ぎる - xuwei-k's blog

    つまりなぜかいきなり高階型の話です。 これ 関数を扱えることはどのようにプログラミング言語の能力をあげるか に対する便乗というかツッコミとして。 つい先日もある人がこんなこと https://twitter.com/koropicot/status/365014333413011457 を言っていて*1、「ですよねー」と勝手に納得していたりしましたが。 つまりScalazでよくみるような高階型 trait Monad[F[_]] extends Applicative[F] { implicit val listMonad = new Monad[List]{ がないと、モナドとして抽象化や共通化ができない、という話です。*2 高階型についてはたとえばこれ (もりそば)Scalaによる高階型変数 - Higher-kind Generics とか読んでください。 関数がオブジェクトとして扱

    関数を扱えるだけでは、モナドを表現するには不十分過ぎる - xuwei-k's blog
  • giter8とtypesafe activatorについて思うこと - xuwei-k's blog

    typesafe stackに組み込まれてたり*1、「play2と統合する話があっのに中途半端に実装したまま」*2になっていたりするgiter8ですが、以下のOCamlの状況と少し似てる部分がある気がしたので、なんとなく書き記しておく。 GODI 終了宣言事件に関して OCaml を使っている企業等からのスポンサリングで OCaml のコンパイラの機能やツールを実装する会社です。ブランドも人も金もコネもありますから、ここが新しい OCaml ツール作ったよとなればそちらに流れる人は多いのです。 エコシステム改良する会社が登場したことで私自身がエコシステム改良する事に慎重になってしまいました 以下のように giter8はパッケージシステムではない*3 つまり、sbtはtypesafeがしっかり面倒みててかなり安泰感あるし、もし仮に将来的にgiter8が死んだとしてもパッケージシステムが死ぬほ

    giter8とtypesafe activatorについて思うこと - xuwei-k's blog
  • ScalazのEndo - xuwei-k's blog

    @markhibberd さんの Endo の話がわかりやすかったので、勝手に日語の説明をつけたスライドを作りました もとのスライド http://mth.io/talks/patterns-in-types-ylj 日語の説明つけたもの http://gist-slide.appspot.com/5607773/endo.md https://gist.github.com/5607773 あと、他にもスライド公開してたので、みんな読むといいよ Argonaut Purely-Functional Library Design in Scala Zippers, Comonads and Data Structures in Scala それと、scalaj-httpのRequestに関してこのパターン使えるなぁーと思ったので、作ってみた https://gist.github.co

    ScalazのEndo - xuwei-k's blog
  • Scalaにおける細かい最適化のプラクティス - xuwei-k's blog

    列挙順自体はとくに意味ありません。あと「どの最適化がどのくらい速くなるのか?」を詳細に計ったことはないですし、「原理的にこうなってるから(ry」というのを説明するに過ぎません。中には「JITで無意味になるようなどうでもいい細かすぎること」も書いてありますし、最適化のトレードオフとして失うものもあるので、そのあたり自己責任でお願いします。当に最適化が必要とされる場合は、以下のものを無闇に実行するよりまず計測したほうがいいのは、言うまでもありません。*1 1. private[this]をつかえ scalaのvalやvarは、private[this]にしたときのみ、直接のフィールドアクセスになります(それ以外ではメソッド呼び出し)。シングルトンのobjectの場合も同様です。private[this]をつけられる場合はできるだけつけましょう 2. なんでもかんでもListをつかうな 最初の

    Scalaにおける細かい最適化のプラクティス - xuwei-k's blog
  • Specs2のString Interpolationを使った新しいDSL - xuwei-k's blog

    もうすぐ、specs2がversion2というちょっとややこしい(?)メジャーversionになって出るらしいです。でました。 新機能いっぱいあって自分も把握できてないんですが、その中でも面白いDSLが新機能として入っていたので、それを簡単に紹介します。 英語読める人は、人がblog書いてるのでこれ http://etorreborre.blogspot.jp/2013/05/the-latest-release-of-specs2-2.html 読みましょう、今回紹介するもの以外にも、網羅的に説明されてます まず、String InterpolationのDSLを説明するまえに、ちょっとspecs2の基的な形式について説明します。 specs2にはimmutable*1とmutable*2という2つの形式があります。*3 公式のドキュメントからそのまま拝借しますが、 mutableは

    Specs2のString Interpolationを使った新しいDSL - xuwei-k's blog
  • Scala2.10のバグが多いけど、バグ修正と開発速度も速いという話 - xuwei-k's blog

    以下のような会話して、まぁ前から感じていたので実際にちょっとコミット数をベースに調べてみた Scala2.10.2出ました。なんかversion上がるのどんどん速くなってる気が… #scalajpURL 2013-06-08 16:54:06 via Crowy @OE_uia いっぱい機能追加した分、バグもいっぱいありますからね2.10は・・・ 2013-06-08 17:53:01 via web to @OE_uia @xuwei_k そこはある意味しょうがないですね。。。そしてバグfixに手が回ってるのは、TypeSafeの人員が少し前に増えたお陰かもですね。 2013-06-08 20:12:29 via Crowy to @xuwei_k git rev-list v2.9.0 v2.9.3 | wc -l13951 commit git rev-list v2.10.0 v2

    Scala2.10のバグが多いけど、バグ修正と開発速度も速いという話 - xuwei-k's blog