タグ

ブックマーク / eed3si9n.com (14)

  • Twitter での 2年 · eed3si9n

    2022-11-20 僕は Twitter社の Build/Bazel Migration チームでスタッフ・エンジニアとして勤務していた。信じられないような 2年の後、2022年11月17日をもって退職した (企業買収後のレイオフでも任意でもあんまり関係無いが、僕は任意退職希望のオファーを取った)。Twitter社は、切磋琢磨、多様性、そして Flock を構成する全ての人に対して溢れ出る優しさというかなり特別な文化を持った職場だった。これを間近で経験して、その一員となる機会を得たことに感謝している。(Flock は「鳥の群れ」の意で、社内での Twitter社の通称) 以下は過去2年の簡単な振り返りだ。尚稿での情報は、既に公開されているトークやデータに基づいている。買収後、うちのチームだけでも 10名以上のメンバーが Twitter社を抜けたので、在籍・元含め LinkedIn プロ

  • Scala 3 マクロ入門 · eed3si9n

    2021-09-06 / scala はじめに マクロは楽しくかつ強力なツールだが、使いすぎは害もある。責任を持って適度にマクロを楽しんでほしい。 マクロとは何だろうか? よくある説明はマクロはコードを入力として受け取り、コードを出力するプログラムだとされる。それ自体は正しいが、map {...} のような高階関数や名前渡しパラメータのように一見コードのブロックを渡して回っている機能に親しんでいる Scala プログラマには「コードを入力として受け取る」の意味が一見分かりづらいかもしれない。 以下は、僕が Scala 3 にも移植した Expecty という assersion マクロの用例だ: scala> import com.eed3si9n.expecty.Expecty.assert import com.eed3si9n.expecty.Expecty.assert scala

  • Iterator パターンの本質 · eed3si9n

    2011-12-17 これは Scala Advent Calendar 2011 の 17日目の記事です。 specs2 の作者であり、@etorreborre としても活発に発言を続けるシドニーの強豪 Eric Torreborre さんが書いた “The Essence of the Iterator Pattern” を翻訳しました。翻訳の公開は人より許諾済みです。翻訳の間違い等があれば遠慮なくご指摘ください。 2011年6月24日 Eric Torreborre 著 2011年12月17日 e.e d3si9n 訳 去年読んだ論文で一番気に入ったのは “The Essence of the Iterator Pattern”(以下、EIP)だ。これを読んだ後で、今まで何年も使い続けてきたあるものに対する考えがガラリと変わった。それは、for ループだ。 この論文の中からいくつか

  • sbt でのコンパイルキャッシュ · eed3si9n

    2020-05-06 / sbt Google のビルドインフラ Blaze (現在は Bazel としてオープンソース化されている) のことを知ってから Scala のツールチェインにも似たような仕組みが欲しいとずっと思い続けてきた。これは特に独創的な発想という訳では無く、Peter Vlugter さんと Ben Dougherty さんの nailgun Zinc での機能 (Pants で使われていた?) や、Krzysztof Romanowski さんの Hoarder など先行研究もある。それらは、作業ディレクトリに合わせて Zinc Analsis ファイル内に格納されている絶対パスを変換するというアイディアから成り立っている。 僕の作業の詳細に入る前に、問題スペースをざっとデモしよう。 ビルドのマシン依存性 Akka の akka-actor/compile を sbt

  • 猫番 — 型を司るもの、カインド

    型を司るもの、カインド すごいHaskellたのしく学ぼう 曰く: 型とは、値について何らかの推論をするために付いている小さなラベルです。そして、型にも小さなラベルが付いているんです。その名は種類 (kind)。 … 種類とはそもそも何者で、何の役に立つのでしょう?さっそく GHCi の :k コマンドを使って、型の種類を調べてみましょう。 Scala 2.10 時点では Scala REPL に :k コマンドが無かったので、ひとつ書いてみた: kind.scala。 George Leontiev 氏 (@folone) その他のお陰で、Scala 2.11 より :kind コマンドは標準機能として取り込まれた。使ってみよう: scala> :k Int scala.Int's kind is A scala> :k -v Int scala.Int's kind is A * Th

  • 依存性解決のセマンティクス · eed3si9n

    2019-07-29 / scala 依存性リゾルバー 依存性リゾルバー (dependency resolver)、もしくはパッケージマネージャーは、ユーザーによって与えられた制約の集合を元に矛盾しないモジュールの集合を決定するプログラムだ。通常この制約要件はモジュール名とそれらのバージョン番号を含む。JVM エコシステムにおける Maven モジュールは organization (group id) も指定に用いられる。その他の制約として、バージョン範囲、除外モジュール、バージョンオーバーライドなどもある。 パッケージングは大まかに OS パッケージ (Homebrew、Debian packages など)、特定のプログラミング言語のモジュール (CPAN、RubyGem、Maven など)、特定のアプリケーションのためのエクステンション (Eclipse プラグイン、Intell

  • Creative Scala (日本語版)

    Creative Scala (日語版) Dave Gurnell, Noel Welsh 著 Eugene Yokota 訳 May 2018 Creative Scala (日語版) Copyright 2015-2019 Dave Gurnell, Noel Welsh 著 Eugene Yokota 訳. Licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Published by Underscore Consulting LLP, Brighton, UK. Copies of this, and related topics, can be found at http://underscore.io/training. Team di

  • learning Scalaz — \/

    \/ LYAHFGG: The Either e a type on the other hand, allows us to incorporate a context of possible failure to our values while also being able to attach values to the failure, so that they can describe what went wrong or provide some other useful info regarding the failure. We know Either[A, B] from the standard library, but Scalaz 7 implements its own Either equivalent named \/: sealed trait \/[+A

  • sbt のための super shell | eed3si9n

    2018-10-01 / sbt 週末中に sbt のための super shell の実装がまとまってきたのでここに報告する。大まかな概要としては、ターミナル画面の下 n行を乗っ取って今走っているタスクを表示させる。 ログを現状報告に使うことの限界 ログは多くの場面で有用で、時としては何が起こっているかを知るための唯一の現実解であったりする。だけども、sbt のようなコンソールアプリにおいては、ログを使ってビルド・ユーザに現在なにが起こっているかを報告するのはうまくいかないことがある。 仮に sbt が一切ログを表示しなかったとすると、sbt が長時間走るタスクを実行して一見固まってしまったときに何が起きているか分からなくなる。そのため、update のようなタスクは “Updating blabla subproject” と “Done updating” といった開始、終了ログを表

  • -Xlint, -Xfatal-warnings, そして Scalafix を用いた Scala の厳格化 | eed3si9n

    -Xlint, -Xfatal-warnings, そして Scalafix を用いた Scala の厳格化 2018-09-20 / scala コンパイルする、さもなければコンパイルしない。警告などいらない。最近気に入っている Scala コンパイラのフラグは "-Xlint" と "-Xfatal-warnings" の 2つだ。 以下は、サブプロジェクトと共に使えるセッティングの例だ: ThisBuild / scalaVersion := "2.12.6" lazy val commonSettings = List( scalacOptions ++= Seq( "-encoding", "utf8", "-deprecation", "-unchecked", "-Xlint", "-feature", "-language:existentials", "-language

  • 君達の JDK は全て jabba がいただいた · eed3si9n

    2018-06-11 / scala OpenJDK 11-ea, GraalVM, Eclipse OpenJ9 を試してみたり、未だに OpenJDK 6 でビルドしなければいけなかったりしたとしても jabba なら万全だ。jabba は Stanley Shyiko (@shyiko) さんが作ったクロスプラットフォームな Java のバージョンマネージャーだ。 AdoptOpenJDK 8 and 11 以下は jabba を使って Travis CI 上で AdoptOpenJDK 8 と 11 を用いてクロスビルドする方法だ: sudo: false dist: trusty group: stable language: scala scala: - 2.12.7 env: global: - JABBA_HOME=/home/travis/.jabba matrix: i

  • Neovim と sbt server · eed3si9n

    2017-12-18 / sbt sbt server 統合シリーズ・パート3 は Neovim だ。これまでに VS Code とSublime Text 3 をカバーした。 sbt server のための Neovim のセットアップ方法 まず Python 3 と Node をマシンにインストールする。次に、Neovim クライアントライブラリを更新する。

  • sbt 1.0.0 はじめました · eed3si9n

    Fri, Aug 11, 2017 sbt 1.0.0 Lightbend の技術系ブログ Tech Hub blog に sbt 1.0.0 is now available という記事を書いたので、訳しました。 詳細は sbt 1.0.0 リリースノートを見てください。 Eugene Yokota (@eed3si9n) 2017年8月11日 著 Lightbend社 Tooling チームに代わって sbt 1.0.0 のリリースを発表します! Mark Harrah さんが 2008 年に最初にリリースした sbt から数えると、sbt 1 は何年もかけて開発された大きな里程標であると言える。直近のメジャーリリースの sbt 0.13.x も、最初のリリースが 2013年8月なので 4年間続いたことになる。 Lightbend社 Tooling チームは 0.13 のメンテと並行し

  • Contraband、case class の代替案 · eed3si9n

    Mon, Mar 6, 2017 しばらく考えている疑問がいくつかある: データや API はどう書かれるべきだろうか? そのデータは JavaScala ではどう表現されるべきか? そのデータは JSON などのワイヤーフォーマットにどう変換することができるか? そのデータをどうやってバイナリ互換性を崩さずに進化させることができるか? case class の限界 Scala でデータ型を表現する慣用的な方法は sealed trait と case class だが、バイナリ互換性を保ったままフィールドを追加することができない。簡単な Greeting という case class を例に取って、それがどのようなクラスとコンパニオンオブジェクトに展開されるか考察してみよう: package com.example class Greeting(name: String) { ov

  • 1