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

  • sbt 1.4からのpipeline機能を試したら3割compile時間短縮された - xuwei-k's blog

    3割というのは、もちろんprojectの構成だったり、計測方法やその他色々によるわけですが、とにかく自分が計測した場合には3割短縮されました。114秒が80秒になりました。 pipeline機能自体の説明は最後に書きます。先に、測定方法や具体的な結果。 測定方法 travis-ci上で、他の条件を同じにして clean update test:compile を(50分制約でtimeoutするまで)ひたすら繰り返して test:compile にかかった時間(sbtが [success] 表示する)を計測、集計する JVMの暖まりを考慮して 上記のサイクルを繰り返すにあたって、sbtは起動させたまま 最初は遅くなるので、ある程度遅かった最初の8つは除いて、それ以外で平均や中央値を計算 測定に使ったのは、このblog書いてる時点でのscalazの最新master branch(7.4.x用)

    sbt 1.4からのpipeline機能を試したら3割compile時間短縮された - xuwei-k's blog
    i000i0
    i000i0 2020/10/24
  • sbtにおけるテストの並列実行の設定詳細解説 - xuwei-k's blog

    いきなり題というか、一番言いたいことを書くと、まず テストの fork の設定によってぜんぜん違う。 という点があまり知られていない気がします。 *1 というか、自分も今回調べるまで、微妙に古い知識のままで完璧に知らなかったので、今一度理解した現時点での詳細を今書いています。 sbtにおいて、テストがどう並列化されるか?に関して、関係するというか、今回話すのは、以下の点です Test / parallelExecutionというkey Test / fork が true か falseか concurrentRestrictionsというkey testForkedParallelというkey また、今から話すのはsbt 1.3.8時点の情報です。 さらに前提として、マシンのCPUのコア数によって挙動が異なる可能性がありますが、ひとまずそれなりに十分にコア数がある、として話を進めます。

    sbtにおけるテストの並列実行の設定詳細解説 - xuwei-k's blog
    i000i0
    i000i0 2020/03/15
  • ドワンゴを退職しました - xuwei-k's blog

    4年11ヶ月勤めたドワンゴを退職しました。2019年1月17日が最終出社日で、1月中は有給休暇消化期間で、2月から新しいところで働きます。 4年11ヶ月と書きましたが、半年間育児休暇をとっていたので、その期間を引くと実際働いたのは4年5ヶ月です。 4年制の大学(の文学部書道学科)を卒業して、新卒でとある会社に就職して、いろいろあってドワンゴは4社目でしたが、それ以外の会社で最長で2年程度しか勤めたことがなかったので、そう考えると5年近くも続いたのが感慨深いですね。 このblogを読んでいる人ならばある程度の人は知っているかもしれませんが、気づいたら個人的にScalaにとても詳しくなってコミッターにもなって、ドワンゴでの仕事も、ほぼずっとScala書いていました。 もちろん、デプロイツールやちょっとした管理ツール、細かい運用上のなにかで、多少Python, ansible, shell sc

    ドワンゴを退職しました - xuwei-k's blog
    i000i0
    i000i0 2019/01/18
  • 半年間育児休暇を取った - xuwei-k's blog

    以下、普段と違いプログラミングの話題があまり出てこない、あくまで個人が育児休暇取った話を書くだけなのでご注意(?)ください。 最後の方に少しだけプログラミングの話出てきます。 まず時系列での大まかな流れ 2月後半に生まれる ↓ の入院中は数日休んで、病院通ったり役所行くなどする ↓ 3月いっぱいまでは働く(はそのあいだの実家) ↓ 4月から半年間育児休暇 ↓ 9月いっぱいまで休みで、10月から復帰予定 (イマココ という感じです。 そもそも育児休暇とは?とか、そのあいだのお金のこととか、ググればいくらでも正確なわかりやすいサイト出てくるはずなので、詳細に説明はしませんが、簡単に書くと 国が決めてる制度なので、原理的には会社によらず、一定の条件(一定期間勤務してるなど)を満たしていれば、男女関係なく1年くらい取れる(細かいことはもっと色々ありますが) その間の給料は"会社からは"出ない

    半年間育児休暇を取った - xuwei-k's blog
    i000i0
    i000i0 2018/09/30
  • Scala本体に貢献(pull request)してみる話 - xuwei-k's blog

    以前にも増して、普段ずっとgithubしかやっていないわけで、githubでの活動のことに関してはいくらでも書くことがあるというか、逆に全部をblogに書いていたらとても書ききれないわけで、よってあまり特別なことがない限りblog書かないわけですが、なんとなくScala体にまとまってpull requestするのは自分にとっては多少は珍しいし、特定のプログラミング言語体にpull requestするのが、どの程度敷居高いのか、どういうpull requestが受け入れられるのか?を少しでも誰かの参考になればと思い、書いてみます。 以下全部、最近1、2ヶ月でpull reqしてmergeされたものです。このblog書いてる時点で38個でしょうか。 (ここ1、2ヶ月という制約をかけなければ、もっと多く送ったことはあります) 一つずつ簡単に解説書きます。 長いので先に結論というか、感想書いて

    Scala本体に貢献(pull request)してみる話 - xuwei-k's blog
    i000i0
    i000i0 2018/06/18
  • 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
    i000i0
    i000i0 2017/11/20
  • Scalaでwebpushのサンプルを作った - xuwei-k's blog

    https://webpush-scala.herokuapp.com 世間に、JavaScript(Node.js)で全部やるサンプルはいくつかあったけど、(コレ作った時点で)JavaScalaのサンプルがほぼ見当たらなかったので。 https://github.com/xuwei-k/webpush-scala うまくいくと、以下のような感じで、右上にぴょこっと出ます webpushといえば、個人的に身近なところ(?)だと、gitterのwebのクライアントとかでしょうかね。 webpush自体の説明は、あまり詳細な説明しませんが(ググったほうが正確でわかりやすい説明あるのでは)、一応適当に簡単に説明すると、 最近標準化されつつある*1やつで、コレ書いてる2016年9月時点では、ChromeとFirefoxしか対応してません。 一度登録すれば、ブラウザさえ開いてあれば、そのwebペー

    Scalaでwebpushのサンプルを作った - xuwei-k's blog
    i000i0
    i000i0 2016/09/21
  • Scalaにおけるカリー化と型推論 - xuwei-k's blog

    わりと何回か説明する機会あるので、blogにも貼っておく https://gist.github.com/xuwei-k/81d966bdff21a94a725794f1bf3e2041

    Scalaにおけるカリー化と型推論 - xuwei-k's blog
    i000i0
    i000i0 2016/06/02
  • ScalaのREPLでASTを表示する機能 - xuwei-k's blog

    showのほうは2.11.0から(?)あって、printは2.11.8から Neat trick I just discovered: add `// show` in the Scala REPL to see the actual code that gets compiled. 2016-03-30 23:19:15 via Twitter for Mac @jaguarul starting 2.11.8, add `// print` and hit tab, it will show the de-sugared version of your code (without the REPL's wrappers) 2016-03-31 00:38:16 via Twitter Web Client to @jaguarul scala -Xprint:typer などとすれば、

    ScalaのREPLでASTを表示する機能 - xuwei-k's blog
    i000i0
    i000i0 2016/04/04
  • scala.collection.JavaConversionsが非推奨になるかもしれないらしい - xuwei-k's blog

    めでたい https://github.com/scala/scala.github.com/pull/509 https://github.com/scala/scala/pull/5064 JavaConvertersのほうはたぶん残ります。 ConversionsとConvertersの詳細な違いはググってください。 一言で言っておくと、非推奨になるJavaConversionsのほうは、暗黙に変換されすぎて意図しないわかりづらいバグを生む可能性があるので、いろんなプロジェクトや規約でも、わりと避ける傾向が大昔からありました。 たとえば、こういう罠 https://gist.github.com/xuwei-k/8870ea35c4bb6a4de05c (仕事でも、少なくとも新規コードでは使うな、みたいなことを個人的に言っている) これでもっと積極的にJavaConversions使

    scala.collection.JavaConversionsが非推奨になるかもしれないらしい - xuwei-k's blog
    i000i0
    i000i0 2016/03/29
  • Joda-timeではなくJava8のtimeを使おう - xuwei-k's blog

    と作者も言ってる(?)ので、そうしましょう。 Joda-Time now in maintenance mode as Java 8 usage rises. Usage questions at Stack Overflow: URL URL 2016-02-22 08:09:02 via TweetDeck https://github.com/JodaOrg/joda-time/blob/84aeb139de0149dd13a022120890985df5f1080a/.github/pull_request_template.md https://github.com/JodaOrg/joda-time/blob/84aeb139de0149dd13a022120890985df5f1080a/.github/issue_template.md ちなみにnscala-timeに(j

    Joda-timeではなくJava8のtimeを使おう - xuwei-k's blog
    i000i0
    i000i0 2016/02/24
  • 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
    i000i0
    i000i0 2016/02/22
  • 代数的データ型と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
    i000i0
    i000i0 2016/01/31
  • 継承ではなくself typeを使って型クラスの関係を表現する - xuwei-k's blog

    https://github.com/xuwei-k/scalaz-prototype scalaz8に向けて継承やめよう、みたいなissueがかるく盛り上がっていたので、自分が思いついた別の方法貼っておきました https://github.com/scalaz/scalaz/issues/1084 型クラスで継承使ってるデメリットは、たとえば classではなくtraitにしないといけなくて、メソッド追加時のバイナリ互換維持ができない 型クラスのインスタンス定義時にimplicitの衝突回避の工夫をする必要がある(継承順によりimplicitの優先順位が変えることが可能なので、そのためのclassかtraitを大量に作る) その他にも色々ある気がする ですが、自分が思いついたやつは「型クラスのインスタンス定義時にimplicitの衝突回避の工夫」を軽減するものです。 現状、相変わらずt

    継承ではなくself typeを使って型クラスの関係を表現する - xuwei-k's blog
    i000i0
    i000i0 2016/01/23
  • リフレクションで無理やりplayframework2.4のroutesのコメントを取得しつつURL一覧を返すAPIを作る - xuwei-k's blog

    タイトルの通りのものをやってみたので解説を書きます。 前提として、とても内部実装に依存した話なので、すぐ動かなくなる可能性があります、ご注意ください(play2.4.6の情報) 解説はいいから、コード見せろ、という人はこちらご覧ください https://github.com/xuwei-k/dependency-graph/commit/9d2a7e3ba3 http://dependency-graph.herokuapp.com さて、リフレクションの説明に入る前に、そもそもplay2.4には、routesのurl一覧取得メソッドがあります。 router.Routes.documentation で Seq[(String, String, String)] な (httpメソッド、url、Scala上の実装のclass名 + メソッド名) のTuple3のSeqが返ってきます。 こ

    リフレクションで無理やりplayframework2.4のroutesのコメントを取得しつつURL一覧を返すAPIを作る - xuwei-k's blog
    i000i0
    i000i0 2016/01/18
  • travis-ciが設定してあるリポジトリにpull requestする前にやるべきこと - xuwei-k's blog

    自分の中では、これはわりと常識になっている感があるが、やってくれない人多いので、あらためて説明を書いてみる。 前提として、プログラミング言語関係ない話です。 あと、travis-ciにも限らない話です。が、全部ひっくるめてなんて呼べばいいかわからないので(オンラインCIサービスとか?)travis-ciのような何かを意味的には全部含めて、以下単にtravis-ciといいます。 これから書くことは 「プロジェクトのコミッター側のレビューのコストの減らすため」 の話です。プロジェクトによっては 「中途半端な状態でもどんどんpull reqしてもらっていい(丁寧に対応してくれる)」 とか、そもそもOSSじゃなく仕事だったり、pull reqの種類(議論するために中途半端な状態でわざとpull req)によっては当てはまらない場合があるかもしれません。 さて、題に入ります。一言で言うと 「pul

    travis-ciが設定してあるリポジトリにpull requestする前にやるべきこと - xuwei-k's blog
    i000i0
    i000i0 2015/12/07
  • scalazに関する日本語ドキュメントを書いている - xuwei-k's blog

    これはScalaアドベントカレンダー2015(adventar版)の2日目です。 http://www.adventar.org/calendars/904 1日目はkuchitamaさんの"解剖!シェアウィズPlayプロジェクトを構成するライブラリ"でした。 さて、題というか、基このURL貼り付けるだけで終わりなのですが http://xuwei-k.github.io/scalaz-docs/ https://github.com/xuwei-k/scalaz-docs なんとなく書き始めました。どういう構成にするとか、いつまでにどれほど書くのか、などは全部未定です、気分次第です。 飽きるまで地道にやります。 pull reqも受け付ける?けど、まだ構成ぐちゃぐちゃだし、自分でもどうしたいのかよくわからないので、(細かいミスの指摘以外は)もう少し形になってからpull reqもらっ

    scalazに関する日本語ドキュメントを書いている - xuwei-k's blog
    i000i0
    i000i0 2015/12/02
  • ScalaMatsuriの応募者を有名ライブラリ作者中心に勝手に紹介 - xuwei-k's blog

    どーも。Scala祭実行委員なのか、実行委員ではないのか、よくわからない立場な人です。 個人的な事情を書いておくと、去年手伝った関係上、今年も一応実行委員のチャットなどには入ってるけど、あまり手伝えてないので、心苦しいのと実行委員の仕事やらないといけない責任から逃れるため(?)と、もう結局あとから多少手伝うことになったとしても個人スポンサー的な意味合いを込めて、普通にチケット買いました。 というわけで、実行委員の立場というよりは、これは一個人として勝手に書いてます。 さてそれはどうでもいいとして、皆さんご存じの通り?今年のScala祭は、招待枠は全くなしでCFPで投票する感じになりました。詳細は以下 「グローバルな技術カンファレンス」と「日のコミュニティの交流」の両立 - ScalaMatsuri運営ブログ] というわけで、これ書いてる時点では、CFP締め切られ、投票開始にむけて絶賛準備

    ScalaMatsuriの応募者を有名ライブラリ作者中心に勝手に紹介 - xuwei-k's blog
    i000i0
    i000i0 2015/10/16
  • 竹添さんが紹介してないScalaのWebフレームワークも含めて2015年現在の状況を色々紹介 - xuwei-k's blog

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

    竹添さんが紹介してないScalaのWebフレームワークも含めて2015年現在の状況を色々紹介 - xuwei-k's blog
    i000i0
    i000i0 2015/10/08
  • sbtにおけるKeyとは何か? 〜 有向非巡回グラフ(Directed Acyclic Graph)とsbt - xuwei-k's blog

    sbtを使ったことがある人なら、たいていSettingKeyやTaskKeyという言葉を聞いたことがあるはずです。もし聞いたことがなくても、1度でもsbtを使ったことがあるなら、すでに知らないうちにそれらに触れているはずでしょう。 それらSettingKeyやTaskKeyを含んだsbtの内部DSLについては、その独特さゆえに、好みが分かれることが多いと思います。 そもそも なぜSettingKeyやTaskKeyという概念が必要なのか? それらは一体何なのか? ということに関して、少し別の視点から考察や解説をしてみることによって、sbt自体の理解の手助けとなることを目的として、このエントリを書いてみます。 なんだか、少しばかり堅苦しい始まり(?)にしてみましたが、つまり 「sbtのKeyは有向非巡回グラフにおけるNodeであり、build.sbtは有向非巡回グラフを組み立てるDSLである

    sbtにおけるKeyとは何か? 〜 有向非巡回グラフ(Directed Acyclic Graph)とsbt - xuwei-k's blog
    i000i0
    i000i0 2015/08/05