タグ

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

  • Scala初心者がPlay2.2を使ってtwitter連携アプリを作ろうとしたときにハマった罠 - xuwei-k's blog

    飛び入りで、芸者東京さんの勉強会で、初心者にScalaを教えるという勉強会をしてきた時の話です http://partake.in/events/5c793335-6b54-43f5-ac6f-6234b0847308 事例1 sbt0.12.xのlauncherがインストールされていた ↓ それで、Play2.2やろうとすると、エラーでる(0.13のlauncherが必要) ↓ 初心者だとそのエラーの意味が、すぐにはわからない ↓ 「sbtどうやって入れた?いつ頃入れた?」 ↓ 「homebrewでいれました」 ↓ brew updateする ↓ sbt以外のものも大量にupdateされて、とても時間を消費する 事例2 sbtでOutOfMemoryエラーでる ↓ インストール方法によるが、少なくともhomebrewは、デフォルトではJVMのオプション設定されないらしい*1 ↓ 結論とし

    Scala初心者がPlay2.2を使ってtwitter連携アプリを作ろうとしたときにハマった罠 - xuwei-k's blog
  • dottyという新しいScalaコンパイラ実装 - xuwei-k's blog

    公開されてました。たぶん1年くらいclosed sourceで開発されていたらしい? https://github.com/lampepfl/dotty https://groups.google.com/d/topic/scala-internals/6HL6lVLI3bQ/discussion グラフみると、小田好先生がほぼ一人で開発してます。 https://github.com/lampepfl/dotty/graphs/contributors また、小田好先生が、scala体に全くコミットしなくなった時期*1と完全に重なりますね。 (scala/scalaの最後のコミットが2012年10月31日。dottyの最初のコミットが2012年12月6日) https://github.com/scala/scala/commits?author=odersky https://git

    dottyという新しいScalaコンパイラ実装 - xuwei-k's blog
  • 関数型RubyとScalaとKleisli - xuwei-k's blog

    以下のエントリ 「関数型Ruby」という病(6) - 関数合成と文脈、Proc#liftとProc#>=、そしてモナ に便乗して、(一部の例を)Scalaに翻訳してみるのと、ScalazのKleisliの話をします。Scalaや関数型に興味のない人は読まないほうがいいかもしれません。わざとMonadとかFunctorの用語も出します。また、もとのエントリの良し悪しとか、Rubyでああいうことをやることの是非などはあまり話しません、というか、それが主目的ではありません。とにかく便乗してScalaの話するのと、あえて元記事では避けている「関数型の用語を出した説明」を少しします。 まず、(nilはOptionを使うということにして)もとの>=の例を直訳すると以下 val f = (_: List[Int]).headOption val g = (_: Int) + 1 val h = (_:

    関数型RubyとScalaとKleisli - xuwei-k's blog
  • デブサミ2014「OSSコミッタ大集合」というので登壇してきた - xuwei-k's blog

    http://event.shoeisha.jp/devsumi/20140213/session/394 https://docs.google.com/presentation/d/1eh7fMYMEUA1CriyUxay4wkYaWtnxLkg0l4jtd9CXLv4/htmlpresent http://togetter.com/li/628956 謎のScalaz枠で。Scalazへの具体的な貢献は、2013年の年末にも書いた 2013年のScalaz ので、まぁそんな感じです。3月から働きますが、引き続き2014年も1月2月無職だったので、ここ数ヶ月(versionでいうと、7.1.0-M3から7.1.0-M5あたりの変更点)の半分以上のコミットが自分という、謎の貢献度です。前回も書きましたが、あくまでコミット数ベースで、細かいどうでもいい最適化とかも多いのでそうなってるわけで

    デブサミ2014「OSSコミッタ大集合」というので登壇してきた - xuwei-k's blog
  • sbt-web pluginとplayframework2.3 - xuwei-k's blog

    rpscalaで「typesafehubのアカウントで色々web関連のplugin作ってるけどなんだろう?次期play2.3に向けての何かかな?」とか言いましたが、やはり大体予想通りだったようです。 PlayのMLでアナウンスがありました https://github.com/typesafehub/sbt-web https://groups.google.com/d/msg/play-framework/YLPAEnaE0FE/0G_rmv26uG8J play2.3では、デフォルトでこれに依存するみたいです。そして、設定すれば現状の2.2でも使えるようなこといってますね。 「なぜplay体の内部で開発せず、独立したsbt pluginとして開発してるのだろう?」 という疑問がありましたが、2.2系でも使えるようにするという理由だったのでしょうか? あとは、勝手な予想としては「pla

    sbt-web pluginとplayframework2.3 - xuwei-k's blog
  • Scala、sbt、playframeworkのversion切り替えツールの使いどころ - xuwei-k's blog

    さて、以下の様なものがありますが Scalaのversion切り替えツール https://github.com/yuroyoro/svm sbtのversion切り替えツール https://github.com/paulp/sbt-extras playframeworkのversion切り替えツール https://github.com/kaiinkinen/pvm そもそも、なぜこういったものが必要なんでしょうか?そもそも当に全員にこういったものが必要なのでしょうか?必要になる人は、どんな人でしょうか?実際どのくらい使うのでしょうか?などの、初心者にはとてもわかりづらいあたりの説明を書いてみます。 書こうと思ったきっかけは、以下のエントリです rbenvがすばらしすぎるので #Scala, #sbt, #PlayFramework 版をつくってみた。 が、とくにscalaenv、

    Scala、sbt、playframeworkのversion切り替えツールの使いどころ - xuwei-k's blog
  • Scalaで、FutureやOptionやListがネストしてしまったときに、いい感じに変換する方法 - xuwei-k's blog

    Optionで説明してますが、ListやEitherでも同じはずです。とりあえずsequenceとjoinで、どんなにネストしていても、大概変換できるはず? *1 *1:パフォーマンスとか、sequenceの呼び出し順による、細かい動作の違いとかはあれですが。もし似たような感じで困ったら、聞いて下さい

    Scalaで、FutureやOptionやListがネストしてしまったときに、いい感じに変換する方法 - xuwei-k's blog
  • sbt0.13.2-M1の新しいインクリメンタルコンパイル試したら素晴らしい結果がでた - xuwei-k's blog

    140文字 ✕ 2で表すとこんな感じ sbt 0.13.1[info] Compiling 1 Scala source[info] Compiling 7[info] Compiling 84[info] Compiling 240[success] Total time: 259 s 2014-01-10 12:56:08 via web sbt 0.13.2-M1[info] Compiling 1 Scala source[success] Total time: 15 sURL URLAwesome!!! 2014-01-10 12:56:52 via web to @xuwei_k 測定方法は Scalazの、現状の最新のcoreモジュールを使って実験 EphemeralStreamにheadOptionとtailOptionという2つのメソッドを追加するコミットを使用 htt

    sbt0.13.2-M1の新しいインクリメンタルコンパイル試したら素晴らしい結果がでた - xuwei-k's blog
  • 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
  • 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
  • Scalaで抽象メソッドをoverrideする際にoverride修飾子を付けるべきかどうかの是非 - xuwei-k's blog

    まずいきなりコップ第二版から引用(191ページ) 親クラスの具象メンバーをオーバーライドするすべてのメンバーにこの修飾子を付けなくてはならない。また、同じ名前の抽象メンバーを実装する場合、この修飾子はオプションとなるため、付けても付けなくてもよい。 この「付けても付けなくてもよい」についての話。「すでに実装があるメソッドをoverride」する場合は、必ずoverride修飾子は付けないといけない(コンパイルエラー)ので、その場合は関係ない。 あくまで「抽象メソッドをoverride」する場合に、付けるべきか?付けないべきか?の話。Scalaのversionによって違いは無いと思うけど、一応最新安定版の2.10.3という前提で。 「付けても付けなくてもよい」はある意味正しいです。しかし「ではどっちにするべきなのか?」「付けるのと付けないのとで、当に違いがないのか?」 について言及してい

    Scalaで抽象メソッドをoverrideする際にoverride修飾子を付けるべきかどうかの是非 - xuwei-k's blog
  • Scalaの正規表現 - xuwei-k's blog

    togetter 正規表現が構文として必要かどうかという話から プログラミング言語における正規表現リテラルの必要性について こういう収集がつかなそうな話題にあまり首突っ込むの好きじゃないんですが、blogに書いておけば、まぁそれはそれでScalaをあまり知らない人にとっては役に立つだろうから、丁寧に説明しておきましょう。 togetter(と、その他関連するtweet)はあまり読んでません。 とりあえずkazuhoさんがわかりやすくblogに要点まとめているので、まずそれに対応するかたちで説明しましょう。 また、大前提としてScalaに構文としての正規表現リテラルはありません。なので、以下の説明を読んで 「いや、それは単に苦しい言い訳だし、やはり正規表現リテラルは存在したほうがいいでしょ」 と思う人もいれば 「なるほど、このくらいの機能があれば、たしかにそれほど正規表現リテラル必要ないな」

    Scalaの正規表現 - xuwei-k's blog
  • 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
  • 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
  • 型パラメータをとらない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
  • 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
  • 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
  • 怖いScalaで発表してきた and 補足説明 - xuwei-k's blog

    http://xuwei-k.github.io/slides/kowai_scala http://connpass.com/event/4112/ モナド(とScalaz)を説明しようと思った動機 ↓ "怖いScala"という勉強会タイトルだったので(当はそこまで怖くないのに)必要以上にScala界隈で怖いと思われている(?)モナドを説明しよう ↓ 短い発表時間でモナドのすべてを説明するのは無理なので、少し変わった説明にしよう ↓ 「モナドとは何か?(what)」のみを説明して 「なぜモナドは便利なのか?(why)」「それぞれのモナドはどのように使うのか?(how)」「具体的にどんなモナドがあるのか?」は説明しない ↓ がくぞーさんの、以下のようなtweetがありましたが 比喩は害悪は同意だなー。最近はこの記事がわかりやすいと思ってた。 URL #fud_scala 2013-11-

    怖いScalaで発表してきた and 補足説明 - xuwei-k's blog
  • 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
  • 関数型ガチ勢から見たScalaのアンチパターン - xuwei-k's blog

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

    関数型ガチ勢から見たScalaのアンチパターン - xuwei-k's blog