タグ

ブックマーク / kmizu.hatenablog.com (7)

  • 退職します - kmizuの日記

    2014年3月末をもって、株式会社ユビレジを退職することになりました。在職期間は2年3ヶ月とそれほど長くありませんが、スタートアップ企業の顧客に近い位置で仕事をすることができて、とてもいい経験が出来たと考えています。 退職に関して 新しい職場で自分の力量を試してみたくなったことと 現在のユビレジにおいて自分が果たせる役目が一通り終わったという実感 そもそもユビレジにジョインした時点で、働き始めて2年間経ったら転職先を考えようと思っていた というのが大きな理由です。 ユビレジに入った当初~去年4月までは、駒場東大前近くにある、通称ユビハウスという一軒家の1階をオフィス用として利用していました。おかげで、 柿の木から柿を収穫(!)してべた 東大駒場キャンパスの堂で昼べた タイカレーを皆で作ってべた たこやきを皆で作ってべた といった貴重な経験をすることができました…というのは冗談

    退職します - kmizuの日記
    eagletmt
    eagletmt 2014/03/29
  • Scalaはオブジェクト指向言語です(2) - kmizuの日記

    1日空いてしまいましたが、引き続きふつーのオブジェクト指向言語 としてのScalaを説明していきます。 高階関数:ただのメソッド これはジョークではなく、当にただのメソッドなのです。とりあえず、説明は後にして、代表的な高階関数である、mapScala実装を見てみましょう*1。 def map[A, B](list: List[A], fun: A => B): List[B] = { val newList = new ArrayList[B] val it = list.iterator() while(it.hasNext()) { newList.add(fun.apply(it.next())) } newList } 利用例は以下のようになります。 val a = new ArrayList[String]{ add("A"); add("B") } println(map(

    Scalaはオブジェクト指向言語です(2) - kmizuの日記
    eagletmt
    eagletmt 2011/06/16
    implicit parameter
  • JavaとScalaとC#のジェネリクス機能比較表 - Onion開発しつつ、PEGEXを開発する日記

    JavaScalaとC#のジェネリクスは、いずれも継承を持ったオブジェクト指向言語においてParametric Polymorphismを実現するための手段であり、それぞれ異なった特性を持っている。というわけで、それぞれの言語においてジェネリクスがどのようにサポートされているかを比較した表を用意してみた。後で気が向いたら、各項目の説明を追加するかも。 Java(5.0以降) Scala C#(4.0) ジェネリックなクラス ○ ○ ○ ジェネリックなメソッド ○ ○ ○ 型パラメータの上限 ○ ○ ○ 型パラメータの下限 × ○ × 型パラメータの推論 ○ ○ ○ 全ての型のサブタイプ(ScalaにおけるNothing) × ○ × definition-site variance × ○ ○ use-site variance ○(Wildcard) ○(Existential Typ

    JavaとScalaとC#のジェネリクス機能比較表 - Onion開発しつつ、PEGEXを開発する日記
  • PEG基礎文法最速マスター - kmizuの日記

    Scala基礎文法最速マスターを書こうか迷っていたら、既にyuroyoroさんに書かれてしまったので、ちょっと違う方向で。BNFを既に知っている人は、これを読めばPEGの基礎をマスターしてPEGを書くことができるようになるでしょう(ほんとか?)。 基 Parsing Expression Grammar(PEG)はBNFに似ているけど、ちょっと(かなり?)違う文法の表記法です。BNFはその文法がどのような言語を表現しているかを定めるのに対して、PEGは入力がどのように解析されるかを定めます。PEGとBNFの一番大きな違いは、PEGには曖昧さが無いことです。たとえば、プログラミング言語のif文を表現する次の擬似BNFには曖昧さがあります。 statement ::= if_statement | ...; if_statement ::= IF LPAREN expr RPAREN sta

    PEG基礎文法最速マスター - kmizuの日記
    eagletmt
    eagletmt 2010/02/03
  • Scalaの限定継続を使って、C#のyieldぽいものを実現するライブラリを書いてみた - kmizuの日記

    Scalaの限定継続を使って遊んでいたら副産物的にできたもので、実用に供することができるものではないですが、まあこんなこともできますという例として。なんかキャストとか使っていてあまり綺麗じゃないですが、型安全なように書こうとすると複雑になる上に、どうもたまたま自分の書いたコードがコンパイラのバグを踏んでしまったらしく、コンパイラが例外吐いて落ちたので仕方なくこうなっています。ただし、型安全でないのはライブラリ内部の実装だけであって、Generatorのユーザは型安全に使えるようになっている(はず)です。 //scala 2.8.0 + continuation pluginが無いとコンパイルできない import scala.continuations.ControlContext._ import scala.continuations._ import scala.collection

    Scalaの限定継続を使って、C#のyieldぽいものを実現するライブラリを書いてみた - kmizuの日記
  • 第14回 関数脳のつくり方 Second Season 〜モナドで悟りをひらく〜 - 刺激を求める技術者に捧げるScala講座:ITpro へのツッコミ - kmizuの日記

    ITProのScala連載「刺激を求める技術者に捧げるScala講座」の第14回 関数脳のつくり方 Second Season 〜モナドで悟りをひらく〜がはてなブックマークで150ブクマ超えるなど注目を集めていますが、読んで見ると初学者に誤解を与える箇所が散見されるので、一応、連載に関わってる者(といっても1回記事書いただけですが)の一人としてツッコミを入れさせていただきます。 「参照透明性を保持しながら手続き型的な記述をするための枠組み」?(p.1) モナドとは,関数型言語で,参照透明性を保持しながら手続き型的な記述をするための枠組みです。 早速ですが、これは、IOモナドやStateモナドには当てはまっても、全てのモナドについて当てはまるものではないですよね。たとえば、Maybeモナドではこれは当てはまりません。 「モナドがHaskellで必要な理由」? これはページタイトルの一部ですが

    第14回 関数脳のつくり方 Second Season 〜モナドで悟りをひらく〜 - 刺激を求める技術者に捧げるScala講座:ITpro へのツッコミ - kmizuの日記
  • ScalaでContinuationモナド - kmizuの日記

    Scalaのfor-comprehensionについて、これは単なる拡張for文みたいに機能が限定されたものではなく、モナドを使ったプログラムを簡潔に書ける汎用の構文だよーみたいな説明がよくなされる/したことがある。だが、じゃあ、実際にScalaでforで使えるモナドっぽいデータ型定義するのはどれくらい簡単にできるのか試したことが無かったので、ちょっと試してみた。よくあるMaybeやListモナドは既にOptionやList型として存在しているので、組み込みで存在しないContinuationモナドを作ってみた。 http://www.sampou.org/haskell/a-a-monads/html/contmonad.html のページの例をできるだけ忠実に再現することを目標にしたのだが、ScalaはHaskellよりも型推論が弱いので、人間型推論器となってあちこちに型注釈をしてまわ

    ScalaでContinuationモナド - kmizuの日記
  • 1