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

  • HerokuにScalaやPlayframeworkプロジェクトをデプロイするための新しいsbt plugin - xuwei-k's blog

    https://github.com/heroku/sbt-heroku あとで欠点見つかるかもしれない?けど、もう基的にこっち使ったほうが良さそう。*1注意点としては、sbt0.13.5以降のみ対応なので、現状play2.1とかの古いversionでは使えない?とか。以下、困ってる人の声と、自分が少し試した感想。 270MBくらいのものでもデプロイ自体は3分ぐらいだった。あとは回線の問題だったり、あのsbt-pluginもう少しキャッシュ効かせるとか改善の余地はありそう。けど、もともと現状は300MB制限あるので「制限ギリギリの量でも3分ほどで終わってタイムアウトしない」という保証ができれば?コンパイル時間気にしなくて済む(このsbt-pluginはコンパイルはローカルでやるみたい) ので、300MBの制限さえ気にすればよい、ということになりそう ScalaHerokuで動かそうとす

    HerokuにScalaやPlayframeworkプロジェクトをデプロイするための新しいsbt plugin - xuwei-k's blog
    quassia88
    quassia88 2014/09/29
    http://ift.tt/Y4lizj あとで欠点見つかるかもしれない?けど、もう基本的にこっち使ったほうが良さそう。*1注意点としては、sbt0.13.5以降のみ対応なので、現状play2.1とかの古いversionでは使えない?とか。以下、困ってる人の声
  • Scala祭と日本のScalaコミュニティ - xuwei-k's blog

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

    Scala祭と日本のScalaコミュニティ - xuwei-k's blog
    quassia88
    quassia88 2014/09/16
    終わってからだいぶ日数が経過しましたが、感想を書いておこうと思います。 去年は運営には関わりませんでしたが、今年はある程度運営に関わりました。主に ニコ生の配信に関して社内の担当者と連絡 数日前のノベルテ
  • sbtをScala2.11で単なるライブラリとして使う - xuwei-k's blog

    Scala祭の興奮冷めやらぬ中?なのか、べつにそうでもないのかよくわかりませんが、引き続きこういった地味なお役立ち情報を書いていきたい所存です。 さて、sbt 0.13.6 でましたね。 https://groups.google.com/d/topic/sbt-dev/BBKDh2h56ww/discussion ところで sbt 0.13.6 から、Scala2.11でもビルドされてpublishされてるらしいです。(正確には0.13.6のマイルストーンの頃からですが) http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-sbt/io_2.11/ しかし、おそらくsbt自体がScala 2.11への移行をやりやすくするため?であって、べつにユーザーがsbtでビルドする際のScalaのversionを

    sbtをScala2.11で単なるライブラリとして使う - xuwei-k's blog
    quassia88
    quassia88 2014/09/16
    Scala祭の興奮冷めやらぬ中?なのか、べつにそうでもないのかよくわかりませんが、引き続きこういった地味なお役立ち情報を書いていきたい所存です。 さて、sbt 0.13.6 でましたね。 http://ift.tt/1DdTlG7 ところで sbt 0.13.6 から
  • Functional Programming in Scalaはオススメできる唯一のScalaの本 by アルパカの人 - xuwei-k's blog

    Functional Programming in Scala is the only scala book I have ever seen which I can recommend without reservation. 2014-09-11 00:05:21 via Tweetbot for Mac ということらしいです。 最近皮肉っぽい感じの発言多いですが、こういう形で純粋に褒めるのめずらしいですね。*1というわけで皆さん読みましょう。 読書会やれればやりたいですけど、ちょっと勉強会開催しすぎで疲れ気味なので、元気がでたらやるかもしれません。少人数でオフラインでやりはじめました http://www.manning.com/bjarnason/ 以前書いた感想 (最新版では少し変わってる可能性もあり?) http://www.amazon.co.jp/Functional-Pr

    Functional Programming in Scalaはオススメできる唯一のScalaの本 by アルパカの人 - xuwei-k's blog
    quassia88
    quassia88 2014/09/11
    Functional Programming in Scala is the only scala book I have ever seen which I can recommend without reservation. 2014-09-11 00:05:21 via Tweetbot for Mac ということらしいです。 最近皮肉っぽい感じの発言多いですが、こういう形で純粋に褒めるのめずらしい
  • Scalaのマクロの基礎。評価タイミング、評価回数と、健全性 - xuwei-k's blog

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

    Scalaのマクロの基礎。評価タイミング、評価回数と、健全性 - xuwei-k's blog
    quassia88
    quassia88 2014/08/31
    Scalaのマクロというより、一般的にマクロに共通する基本であり重要な部分です。それをScala使って説明するだけです。 Scalaのマクロは、未だexperimentalという位置づけで、他の機能に比べれば仕様やAPIが変わりやすい状態で
  • sbtrcでsbt pluginを追加できるようにしておくと便利なことに気づいた - xuwei-k's blog

    sbtには、便利なのにあまり知られてない.sbtrcという仕組みがあります。 rcというのは、bashrcとかzshrcとかのあれです。 ホームディレクトリ/.sbtrc に置いておくか、それぞれのプロジェクトのディレクトリのトップに置いておくと読み込まれます。 よく使うコマンドのalias設定しておけます。aliasの設定機能自体知ってる人少ないかも? たとえば自分は、今まで以下のようにしてます alias cd=project alias ls=projects alias c=compile alias t=test alias r=run alias tc=test:compile alias to=test-only alias tq=test-quickこれ、aliasにしても、タブ補完が同じように効くのでとても便利です。 さて、これもまたあまり知ってる人少ないと思いますが、s

    sbtrcでsbt pluginを追加できるようにしておくと便利なことに気づいた - xuwei-k's blog
    quassia88
    quassia88 2014/08/08
    sbtには、便利なのにあまり知られてない.sbtrcという仕組みがあります。 rcというのは、bashrcとかzshrcとかのあれです。 ホームディレクトリ/.sbtrc に置いておくか、それぞれのプロジェクトのディレクトリのトップに置いてお
  • 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
    quassia88
    quassia88 2014/08/06
    akkaをある程度使いこなしてる人なら、当たり前?かもしれませんが、その細かい仕組みがわかりずらいと思うので説明を書いてみます。(versionによってそれほど変わらないはずですが)これを書いてる時点の最新の akka 2.3.4、
  • 時代はリテラルレベルプログラミングだ! - 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
    quassia88
    quassia88 2014/07/17
    リテラルレベルプログラミングという用語が存在するのかは知りませんが、べつに厳密に定義せずなんとなく使います。まぁこれ http://ift.tt/1qJw0Eo の説明が "Exploring literal-level metaprogramming" なので、そこから拝借とい
  • Scalaでのドメイン駆動設計 - xuwei-k's blog

    追記 ドメイン駆動では、べつに下位層に上位層がアクセスしてはいけない、というような決まりはないらしい、とj5ik2oさんから教えてもらいました @sifue @xuwei_k DDDの文脈でいうと上位層は下位層のすべてにアクセスできます。DDD P66, P70みてもそのような依存を示していますね。アクセスできるのは一個上の層だけではないですのでー。当然各プロジェクトでいろんなやり方ありますが。 2014-07-05 00:21:20 via YoruFukurou to @sifue @j5ik2o @sifue なるほど。色々理解が曖昧なまま「あれ現状アプリケーション層はインフラにアクセスできるんだっけ?」「できなくするにはどうすれば?」「こういう依存関係にするしかないのでは?」という話をしてたのです。DDDがそういう思想なら、DDDあまり関係なかったですね 2014-07-05 00

    Scalaでのドメイン駆動設計 - xuwei-k's blog
    quassia88
    quassia88 2014/07/06
    via scalaとか・・・ http://ift.tt/1hGUfPr
  • Free MonadとInject typeclassでtwitter4jをラップしてみた - xuwei-k's blog

    https://github.com/xuwei-k/twitterz Inject typeclassについては、先日書いたこれ CoproductとInjectを使ったFree Monadの合成とExtensible Effects 読んでください 単にFreeだけではなくOperational Monad使ってます。 名前、twitter4zにしたかったけど、ねこはるせんせーが、以前その名前で作ってたので、被るとややこしいしやめました。 これ、やはりものすごく単純作業になるのですが、もう少しどうにかならないか・・・。マクロかコード生成・・・? あと、Interpreterを切り替える需要がないと、IOモナド(とReaderモナド合わせたもの)とあまり変わりがないというか、わざわざ分けて定義したりFreeとCoyonedaに包む分だけ、ライブラリ作成者側はちょっと面倒な気がしましたが、

    Free MonadとInject typeclassでtwitter4jをラップしてみた - xuwei-k's blog
    quassia88
    quassia88 2014/06/24
    http://ift.tt/1lM6M83 Inject typeclassについては、先日書いたこれ CoproductとInjectを使ったFree Monadの合成とExtensible Effects 読んでください 単にFreeだけではなくOperational Monad使ってます。 名前、twitter4zにしたかったけど、ねこはるせん
  • macro annotationを使って、operational monadのためのメソッドをコンパニオンオブジェクトに自動生成 - xuwei-k's blog

    できた気がする https://github.com/xuwei-k/twitterz/commit/b1d8201 https://github.com/xuwei-k/macro-annotation-sample/commit/47896fc1c0 単純にコンパニオンへのメソッド追加方法はなんとなくわかったけれど、InjectとCoproduct使ったパターンの単純化は難しそう。 そして、Scala2.11でも、未だにmacro annotationはcompiler pluginとしてしか提供されてないので、実際に使うのはかなり躊躇われる・・・。2.12では体に入るのだろうか・・・?2.12でも体には入らないことが、ほぼ決定したらしい。 http://d.hatena.ne.jp/xuwei/20140717/1405549390

    macro annotationを使って、operational monadのためのメソッドをコンパニオンオブジェクトに自動生成 - xuwei-k's blog
    quassia88
    quassia88 2014/06/24
    できた気がする http://ift.tt/1jaTspG http://ift.tt/1lM6MEU 単純にコンパニオンへのメソッド追加方法はなんとなくわかったけれど、InjectとCoproduct使ったパターンの単純化は難しそう。 そして、Scala2.11でも、未だにmacro annotationはcompile
  • twitterのobjectsize計測するやつ - xuwei-k's blog

    メモ alias objectsize='screpl com.twitter.common%objectsize%0.0.10 "twttr at http://maven.twttr.com/"'https://github.com/twitter/commons/blob/20fabe1bb0/src/java/com/twitter/common/objectsize/ObjectSizeCalculator.java べつにscrepl経由で使わなくてもいいけど。 普通にbuild.sbtに追加するなら以下 resolvers += "twitter" at "http://maven.twttr.com/" libraryDependencies += "com.twitter.common" % "objectsize" % "0.0.10" 同じ固定のオブジェクト返すなら、

    twitterのobjectsize計測するやつ - xuwei-k's blog
    quassia88
    quassia88 2014/06/19
    メモ alias objectsize='screpl com.twitter.common%objectsize%0.0.10 "twttr at http://ift.tt/1uEC69N;' http://ift.tt/UOuCXb べつにscrepl経由で使わなくてもいいけど。 同じ固定のオブジェクト返すなら、valよりdefのほうがフィールド(つまりオブジェク
  • WriterTはアンチパターン - xuwei-k's blog

    I wish the `transformers` library had a RWT (ReaderT + StateT) monad transformer. WriterT is an anti-pattern. 2014-04-09 12:17:20 via Twitter for Android @GabrielG439 why is it an anti-pattern? 2014-04-09 12:22:13 via Echofon to @GabrielG439 @etorreborre It always leaks space (even if you don't use it). You also get no results until the end. See here: URL 2014-04-09 12:25:14 via Twitter for Androi

    WriterTはアンチパターン - xuwei-k's blog
    quassia88
    quassia88 2014/04/11
    I wish the `transformers` library had a RWT (ReaderT + StateT) monad transformer. WriterT is an anti-pattern. 2014-04-09 12:17:20 via Twitter for Android @GabrielG439 why is it an anti-pattern? 2014-04-09 12:22:13 via Echofon to @GabrielG439 @etorreborre It always leaks space (even if you don't use
  • sbtで一つ下の階層のシェルに入るコマンド - xuwei-k's blog

    よく忘れるので書いておく reload plugins 戻り方 reload return https://github.com/sbt/sbt/blob/0.13.1/src/sphinx/Extending/Plugins.rst#1c-automatically-managed-command-line-approach

    sbtで一つ下の階層のシェルに入るコマンド - xuwei-k's blog
    quassia88
    quassia88 2014/03/19
    よく忘れるので書いておく reload plugins 戻り方 reload return http://ift.tt/OAmh5V via scalaとか・・・ http://ift.tt/1hGUfPr
  • JavaとScalaのBigDecimalについて色々と - xuwei-k's blog

    以下のような経緯で、BigDecimalをいじっていて、知らなかったことがいくつか出てきたので、まとまりが無いですがとりあえずわかったことを順に書いていきます。 前提知識として、BigDecimalはDoubleなどで表しきれない大きな数を表すためのクラスです、そしてscala.math.BigDecimalは、java.math.BigDecimalの薄いラッパーです。単に、BigDecimalといった場合、どちらのこと言ってるのかわかりにくい・・・。 play2scalaz という自作のライブラリで、テストが途中で停止する(?)問題に遭遇 スレッドダンプ取得してみたら、BigDecimalがあやしい Play2のJsonの数字を表すJsNumberは、内部で一旦scalaのBigDecimalとして保持している*1 なので、play2scalazのテストで、BigDecimalからJs

    JavaとScalaのBigDecimalについて色々と - xuwei-k's blog
    quassia88
    quassia88 2014/01/04
    以下のような経緯で、BigDecimalをいじっていて、知らなかったことがいくつか出てきたので、まとまりが無いですがとりあえずわかったことを順に書いていきます。 前提知識として、scala.math.BigDecimalは、java.math.BigDecimalの薄
  • Scalaでの再帰的implicitとRank2Type - xuwei-k's blog

    「再帰的implicit」という、普通にScala書いていたら遭遇しない話をします。なので、多くの人にとっては役に立たないだろうから、そういうのに興味のない人は読まないほうがいいです。 さて、これはekmett/freeの中にあるCofreeのEqのインスタンス(珈琲じゃなくて、Freeモナドの双対のCo Freeだよ!) *1 をScalaに翻訳していたとき(そしてScalazに入れようとした)に遭遇した話です。以下は翻訳元のHaskellコード instance (Eq (f (Cofree f a)), Eq a) => Eq (Cofree f a) where a :< as == b :< bs = a == b && as == bs https://github.com/ekmett/free/blob/v4.2/src/Control/Comonad/Cofree.hs#

    Scalaでの再帰的implicitとRank2Type - xuwei-k's blog
    quassia88
    quassia88 2013/12/23
    「再帰的implicit」という、普通にScala書いていたら遭遇しない話をします。なので、多くの人にとっては役に立たないだろうから、そういうのに興味のない人は読まないほうがいいです。 さて、これはekmett/freeの中にあるCofre
  • ScalazのTypeclassの図作った - xuwei-k's blog

    以前「怖いScala」のときに紹介したように、すでに他の人が作ったクラス図が存在したり http://leifwarner.net/scalaz.svg また、自動で生成されるクラス図のサイトかなり昔に作ったこともありますが http://class-diagrams.herokuapp.com/scalaz.MonadPlus.svg https://github.com/xuwei-k/heroku-class-diagrams また別のもの作りました。 継承関係を線で結んで表すのもいいけど、いわゆる「ベン図(Venn diagram)」という、 論理和とか論理積を表すときによく使われるような、円が重なっていて集合の関係がわかりやすいやつ使ったらどうかな?と思って、svg-editというオンラインのSVGエディタ使って、地味に作ってた、結構時間かかった(なんて暇人なのでしょうか・・・)

    ScalazのTypeclassの図作った - xuwei-k's blog
    quassia88
    quassia88 2013/12/14
    以前「怖いScala」のときに紹介したように、すでに他の人が作ったクラス図が存在したり http://leifwarner.net/scalaz.svg また、自動で生成されるクラス図のサイトかなり昔に作ったこともありますが http://class-diagrams.herokuapp.com/scala
  • 型パラメータをとらないcase classのコンパニオンはFunctionを継承する - xuwei-k's blog

    知っててもそれほど頻繁には役にたたない(?)、トリビア的なもの。説明するよりコード示したほうがわかりやすい気がするので、まずはコード Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_45). Type in expressions to have them evaluated. Type :help for more information. scala> case class Foo(a: Int, b: String) defined class Foo scala> Foo.getClass.getSuperclass res0: Class[?0] forSome { type ?0 >: ?0; type ?0 <: Foo.type } = class scala.ru

    型パラメータをとらないcase classのコンパニオンはFunctionを継承する - xuwei-k's blog
    quassia88
    quassia88 2013/12/10
    知っててもそれほど頻繁にはたたない、トリビア的なもの。説明するよりコード示したほうがわかりやすい気がするので、まずはコード Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_45). Type in expressions to have them
  • 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
    quassia88
    quassia88 2013/12/02
    例のごとく、最初に注意書き まだfinalがでていないので、細かい部分変わるかもしれません*1 個人的に、「大きい変更点だなと思ったもの」「ライブラリ側のユーザーが直接使うクラス関連*2」「なんとなく興味があるもの
  • Scala2.11の警告機能がとても親切で素晴らしい件 - xuwei-k's blog

    何回かtweetした気もするけど、素晴らしいので別記事として書いておきましょう。まず以下の例みてください。 "-Xlint" のオプションをつけた場合にマイルストーンの時点では-XlintでOKでしたが、少し問題があったため、結局Scala2.11.0のfinalでは、-Xlintには含まれず "-Ywarn-unused" と "-Ywarn-unused-import" を指定しないといけなくなったようです。*1 未使用のimport 未使用のローカル変数、未使用のprivateな変数 string interpolationのsを付け忘れていると思われる箇所 参照のみしかしていないvar(valにすることか可能なvar) 初期化順の関係で、nullになってしまうval に対して警告してくれるようになりました。 *1: その理由などは以下 https://issues.scala-la

    Scala2.11の警告機能がとても親切で素晴らしい件 - xuwei-k's blog
    quassia88
    quassia88 2013/12/02
    何回かtweetした気もするけど、素晴らしいので別記事として書いておきましょう。まず以下の例みてください。 &quot;-Xlint&quot; のオプションをつけた場合に*1 未使用のimport 未使用のローカル変数、未使用のprivateな変数 string i