タグ

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

  • Phil Bagwell Awardを受賞しました - xuwei-k's blog

    Phil Bagwell Awardって何?という人は、まず以下を読んでください。 www.scala-lang.org 簡単にまとめると Scalaコミュニティに対して貢献した人に送られる賞 2013年から (いまのところ?)毎年1人だけ "Phil Bagwell" というのは人の名前で、その人にちなんでつけられた あくまで賞の名前がちなんでつけられただけで、賞の内容は上記に書いたような "Scalaコミュニティに対して貢献" らしい? 今までの受賞者は以下 2017: Josh Suereth 2016: Erik Osheim 2015: Bill Venners 2014: Lalit Pant 2013: Dick Wall "Phil Bagwell" さんについてですが 2012年に亡くなった https://www.lightbend.com/blog/rip-phil-

    Phil Bagwell Awardを受賞しました - xuwei-k's blog
    komlow
    komlow 2019/06/14
  • 2017年11月現在のScalaのWeb Framework - xuwei-k's blog

    以前同じようなものを書いたけど、それがもう2年くらい経過してるので、また書きました xuwei-k.hatenablog.com xuwei-k.hatenablog.com まず、このblog書いてる時点でのGitHubでのstar数での順位 1 https://github.com/playframework/playframework 9900 2 https://github.com/twitter/finagle 6088 3 https://github.com/spray/spray 2533 4 https://github.com/scalatra/scalatra 2230 5 https://github.com/twitter/finatra 1645 6 https://github.com/finagle/finch 1115 6 https://github.

    2017年11月現在のScalaのWeb Framework - xuwei-k's blog
    komlow
    komlow 2017/11/19
  • scalaz.concurrentのActorとFutureとTaskあたりの説明 - xuwei-k's blog

    https://www.dropbox.com/s/567s5mxlcyzzh8h/PurelyFunctionalConcurrency.pdf 資料貼り付けておくだけのエントリ。 runaroramaさん(FP in Scalaの作者かつScalazコミッタ)が、ハーバード大学で特別講師的な感じで講演してきたらしいです。 I'm finally an academic. Last night was my first time in a university classroom, and I was the teacher. 2015-05-06 02:29:32 via Twitter Web Client Slides from my lecture for the Scala Concurrency course at Harvard URL 2015-05-07 09:27:2

    scalaz.concurrentのActorとFutureとTaskあたりの説明 - 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
    komlow
    komlow 2016/12/10
  • Scala祭でscalatest作者とproperty based testingの話をした - xuwei-k's blog

    明らかに祭の1日目の一番の収穫でした。 scalatest作者とは、Bill Vennersさんです。コップの共著者だったりもする方です。 https://github.com/bvenners まず、Scala祭の半年くらい前(?)の2015年6月頃の話 twitterで急にDM来たり、eed3si9nさんに仲介してもらってメールのやりとりする 具体例にはCogen(Coarbitrary)について聞かれて、scalapropsの作成経緯含め答えた覚え それで、その返信で scalapropsの一部取り込むことも考えてるんだけど、その場合のライセンスが(ry https://github.com/japgolly/nyaya も試したり、さらにscala.js対応もやろうとして 現状こんな感じでscalatest内にGenerator入れて試してるんだけど みたいな内容でした。たぶん。

    Scala祭でscalatest作者とproperty based testingの話をした - xuwei-k's blog
    komlow
    komlow 2016/02/01
  • CoproductとInjectを使ったFree Monadの合成とExtensible Effects - xuwei-k's blog

    Scaladays2014の写真がtwitter上で流れてきて「あーまたrunaroramaさん、Free Monadの話してるのかー」と思ったら、たしかにFree Monadの話もしてたみたいですが、それの発展形(?)的な感じで、Coproductや、Injectという型クラス(?)の話をしていたようです。 Woah, Coproducts (URL as replacement for transformer stacks look pretty cool! URL /cc @runarorama 2014-06-17 20:43:56 via Twitter Web Client それで、*1コードを読んでみたら、それなりにある程度理解できた気がするので、解説を書いてみます。*2 最初に断っておくと、タイトルに"Extensible Effects"と入れましたが、Extensibl

    CoproductとInjectを使ったFree Monadの合成とExtensible Effects - xuwei-k's blog
    komlow
    komlow 2015/09/02
  • ekmett先生のdiscriminationというライブラリの動画を見たので雑に要約してみた - xuwei-k's blog

    当に雑に(前半部分だけを)まとめただけなので、ちゃんと知りたい人は、元動画やライブラリのコードや、元論文読むとよいです http://hackage.haskell.org/package/discrimination https://www.youtube.com/watch?v=cB8DapKQz-I https://github.com/ekmett/contravariant/blob/v1.3.2/src/Data/Functor/Contravariant/Divisible.hs やる気がでたら、もう少し真面目な解説を後で別に書くかも知れませんし、書かないかもしれません。 先に簡単に自分の感想的なものを書いておきます。 ソートの話なはず、の動画を見ていたら、なぜか前半は「圏論」や「Hask」や「Contravariantなんちゃら」の話してて 「あれ、見る動画間違ったのかな

    ekmett先生のdiscriminationというライブラリの動画を見たので雑に要約してみた - xuwei-k's blog
    komlow
    komlow 2015/08/03
  • 関数型Scalaという勉強会でproperty based testingについて話をした - xuwei-k's blog

    Scalaの勉強会で半分くらいHaskellの話してすいませんでした。 http://xuwei-k.github.io/slides/scalaprops/ http://connpass.com/event/16052/ http://togetter.com/li/852254 資料はりきって頑張り過ぎたらとても長くなりました(150ページ超えた) 今までで一番頑張ったかもしれません。ここ半年くらいの成果を全部詰め込んだ感じです。 あとで資料として読んで理解してもらうこと前提で色々詰め込んだので、1年後でも2年後でも、興味のある人が見て有用な資料になればいいですね・・・。 ところで、スライド作るのに、今回から remark というやつ使いました https://github.com/gnab/remark markdownで書けて コードのシンタックスハイライト効いて ページ数表示と

    関数型Scalaという勉強会でproperty based testingについて話をした - xuwei-k's blog
    komlow
    komlow 2015/07/26
  • ghscala 0.2.5 リリース - xuwei-k's blog

    例のOperational Monad使ってるGithub APIクライアント。なんか数日に一回のペースでリリースしてる。 https://github.com/xuwei-k/ghscala/tree/v0.2.5 以前scalaj-httpに直接依存していた部分を抽象化して、内部のhttp clientライブラリを変更できる!という、必要なのかどうかよくわからない、謎機能が追加された 現状デフォルトで対応してるのが、scalaj-http、dispatch-classic、apacheのhttpclient https://github.com/xuwei-k/ghscala/blob/v0.2.5/project/Build.scala#L153-L170 sbt-unidocで、rootのプロジェクトで、(実行のためのjarはpublishせずに)documentのjarだけpub

    ghscala 0.2.5 リリース - xuwei-k's blog
    komlow
    komlow 2015/06/07
  • モナドの本当の力を引き出す・・・モナドによる同期/非同期プログラミングの抽象化 - xuwei-k's blog

    以下の2つの続き ScalaでFutureとEitherを組み合わせたときに綺麗に書く方法 FutureとEitherの話の続き(ApplicativeとMonadの違い) 上記の2つ(特に最初の方)を読んだことを前提で書くので、読んでない人は先にそちらを読みましょう。 なんだか少し関連する話(?)で盛り上がっていて、書かないといけない気がしてきたので 非同期プログラミングの難しさとScalaのFuture そのtogetterの議論について色々書きたいこと*1もありますが、それは置いておき、表題の「モナドによる同期/非同期プログラミングの抽象化」について書きます。というか、(非同期プログラミングの話より)便乗してモナドとモナドトランスフォーマーの便利さを話したいだけかもしれません(?) 前回2つは「Future使って非同期にしても、だいたい関数の体同じでいけるよ」ということを書きました

    モナドの本当の力を引き出す・・・モナドによる同期/非同期プログラミングの抽象化 - xuwei-k's blog
    komlow
    komlow 2015/03/29
  • FutureとEitherの話の続き(ApplicativeとMonadの違い) - xuwei-k's blog

    昨日書いたこれ ScalaでFutureとEitherを組み合わせたときに綺麗に書く方法 の中で、 実は今回の例だけだと、Applicativeの範囲でいけるので、必ずしもモナドトランスフォーマーは必須ではありません と書いたところ、以下のような反応をもらったので Applicative でダメな例気になる 2014-09-20 00:08:37 via Twitter for Websites 例を思いついたので、それも書いておきましょう。丁寧にScalaz初心者向けに説明するの疲れたので、以前よりは雑に要点だけ書きます、ご了承ください。今回も先にコード例のgist貼っておきます。 https://gist.github.com/xuwei-k/051c3b00129b7a0dfcd6 そもそも「Applicativeで範囲よい」「ApplicativeではダメでMonad必要」は、モナ

    FutureとEitherの話の続き(ApplicativeとMonadの違い) - xuwei-k's blog
    komlow
    komlow 2014/12/17
  • 代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出 - xuwei-k's blog

    これは、ドワンゴ Advent Calendar の 7日目です。 6日目は DartのASTを触ってみる でした。 さて、会社でアドベントカレンダーやる、と言われて、なんとなく参加登録したはいいものの、特に書くこと決めてませんでした。 最近、msgpackのScalaのライブラリ作ってるので、それ完成したらそのこと書こうかな―、と思ってましたが、msgpack-javaのバグや、古いversionと新しいversionの違いと戦ってたりしたら、なかなか完成しないので別のこと書くことにしました。 というわけで、標題の 「代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出」 という話をします。ドワンゴアドベントカレンダーだからといて、べつに変わったことはなく、いつものようなScalaネタです。 さてみなさん「代数的データ型」って知ってますか?Scalaよりもっと

    代数的データ型とshapelessのマクロによる型クラスのインスタンスの自動導出 - xuwei-k's blog
    komlow
    komlow 2014/12/08
  • 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
    komlow
    komlow 2014/09/19
  • Scalaのマクロの基礎。評価タイミング、評価回数と、健全性 - xuwei-k's blog

    Scalaのマクロというより、一般的にマクロに共通する基であり重要な部分です。それをScala使って説明するだけです。 Scalaのマクロは、未だexperimentalという位置づけで、他の機能に比べれば仕様やAPIが変わりやすい状態です。そして、機能が搭載されてからあまり時間が経っていないこともあって*1あまり一般的に使われているとはいえない状態でしょう。しかし、Cなどのマクロとは違い、Scalaのものはある程度は格的にコンパイル時に抽象構文木を自由にいじれるものであり、使いこなせるようになってくるとなかなかおもしろいです。 マクロというと、ある程度の人はLispを思い浮かべると思いますが(?)、先ほど書いた「格的に抽象構文木いじれる」という点はまさにLispと共通する部分もあります(もちろん異なる部分も多くあります)。 つまり、これから説明することは、On Lisp*2 On

    Scalaのマクロの基礎。評価タイミング、評価回数と、健全性 - xuwei-k's blog
    komlow
    komlow 2014/09/01
  • 時代はリテラルレベルプログラミングだ! - xuwei-k's blog

    リテラルレベルプログラミングという用語が存在するのかは知りませんが、べつに厳密に定義せずなんとなく使います。まぁこれ https://github.com/okomok/lity の説明が "Exploring literal-level metaprogramming" なので、そこから拝借という感じですかね。 さて、scalaでは、StringやIntのリテラルでfinal valで定義すると、型自体が特別扱いされる(?)という、知られざる仕様があります。まずは以下のgist御覧ください finalを付けずに val a = "a" だと型は a: String = a なのに対して、final valにすると b: String("b") = b というよくわからない型になってますね。そして def foo(c: b.type) と定義すると、foo("bar")と渡すとコンパイルエ

    時代はリテラルレベルプログラミングだ! - xuwei-k's blog
    komlow
    komlow 2014/07/17
  • HaskellのdoとScalaのfor式とEitherとMonadPlus - xuwei-k's blog

    標題の通り、色々書きたいことあって長くなってわかりにくくなりそうですが、頑張って書いてみます。なお、(2.8や2.9でもほぼ同じだと思いますが)Scalaのversionは2.10.1です。Haskellはghc7.4.2です。 「for文は7つしか使っていません(ドヤッ」という謎の主張を含んだスライドが最近流行っていましたが、まずScalaのfor式はMonadのための構文というのはお馴染みですよね!!! Monadそのものから説明していたらとても長くなってしまうので、そのあたりの説明は飛ばします。Scalaのfor式は、コンパイル時に内部的に以下のメソッドの組み合わせに変換されます map foreach flatMap filter withFilter なので、上記の5つのメソッド名は、予約語ではないですが、for式に変換されるという点において特別です。 for式を「Monadの

    HaskellのdoとScalaのfor式とEitherとMonadPlus - xuwei-k's blog
  • Swiftのおもしろ仕様と、Scalaの特殊な(?)構文 - xuwei-k's blog

    以下の、Appleが最近発表したSwiftという言語の、面白い(?)仕様が話題になってますが、 This playground should illustrate why the immutability behavior of #Swift is *terrible*: URL 2014-06-10 19:31:56 via Twitter for Mac 大事なことは全部MLが教えてくれた 〜 AppleSwift の mutability 周りの件を理解する これ見て、なんとなくScalaの "とある構文" を思い出したので書いてみる。 自分の理解では、要するに 「b.append(5)というのが、単なるメソッド呼び出しとかではなく、コピーして、追加して、かつ元の変数b自身の参照を書き換える(再代入する)」 という挙動をするあたりが、(他の言語でこんな動きするのがないので)、み

    Swiftのおもしろ仕様と、Scalaの特殊な(?)構文 - xuwei-k's blog
    komlow
    komlow 2014/06/13
  • 関数型ガチ勢から見たScalaのアンチパターン - xuwei-k's blog

    Scalazのコミッター、もしくはScalazを使いこなしているような関数型ガチ勢からみると、ある程度以下の様な共通認識*1がある気がする(けどあまり知られていない?)ので、ちょっとまとめてみました。 関数型ガチ勢ではない一般のScalaユーザーの間では、あまり疑問も持たずにそれなりに使われているものが多い気がします 個人的には、以下で紹介するものを「絶対使うな」とも思いません。*2が、しかしこれらのものに対して「アンチパターンとは言わないけど、デメリット多いし代替手段あるよね」という意見の人が少なすぎる気がするし、もうちょっとその辺りの議論がされるべきではないかなぁーと思い、あえて「アンチパターン」と言ってみました。 タイトルにScalaを入れましたが、厳密にはScalaに限らない話だと思います。ただし、「JVMで動く静的型付き関数型言語」という状況により、ある程度Scala特有の状況な

    関数型ガチ勢から見たScalaのアンチパターン - xuwei-k's blog
    komlow
    komlow 2013/11/17
  • 関数を扱えるだけでは、モナドを表現するには不十分過ぎる - 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
  • 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
    komlow
    komlow 2013/07/09