読者です 読者をやめる 読者になる 読者になる

uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

groovy

ParrotブランチでGroovy3を垣間見る

これはG*Advent callender 2016の記事です。 前日はわたし@uehajの記事でした。明日は@mshimomuさんの記事です。 はじめに Parrotブランチのコンパイル 警告 do-whileループ Java8構文 ラムダ式の記法 細かい話1 細かい話2 メソッド参照の記法 コンストラク…

List.collectManyで非決定計算

これはG*Advent callender 2016の記事です。 前日は@Ziphilさんの記事でした。明日はまた私@uehajの記事です。 出オチでタイトルオンリーです。 すごいHaksell楽しく学ぼう(以降H本)にも書かれているように、リストはモナドとみなすと「非決定計算」をあらわ…

Javaにも不変データ構造に基づいた(Cons セルベースの)リストがあるのだよ

TL;DR JDK(tools.jar)中、com.sunパッケージ配下に、javacが内部的に使っている「com.sun.tools.javac.util.List 」が含まれており、これは不変データ構造としてのリストのように(Cons セルベースのリストのように)利用できる。 はじめに ScalaのコードをGro…

Groovyをソースからコンパイルすると♪

groovyのソースをとってくるじゃろ。 % git clone https://github.com/apache/groovy.git コンパイルするじゃろ。 % cd groovy % ./gradlew installGroovy すると、頭の中であの音楽が鳴り始める♪

GroovyのクロージャとJava8のlambda式の違いについて

この両者は、似ているようでいて、基本的には別モノです。表にしてみます。 Groovyのクロージャ java8のlambda式 導入時期 2003年 2014年03月 ローカル変数へのアクセス 読み書き可能 実質的にfinal(変数そのものに対しては読み込みのみ) 実装方法 Closure型…

渋谷JVMで「いまさら始めようGroovy」を話しました

昨日、渋谷JVM 渋谷JVM (2015/04/18 13:00〜)d-cube.connpass.com にて発表させていただきました。 アテンドいただきましたコミュニティのみなさん、ビズリーチさま、聞いてくださったみなさん、ありがとうございました。また懇親会ごちそうさまでした(たこ…

G*Magazine Vol.8に記事をかきました

G*Magazine Vol.8に、Groovy 2.3, Groovy 2.4β4までで導入された新機能の解説記事を書きました。 PDF版もありますが、ブラウザで見れる以下のリンクを紹介します。 Groovy臨機応変(第三回)〜Groovy 2.3の新機能〜 - MyBetaBook Groovy臨機応変(第四回)〜…

G*なWeb API

Grails3もカウントダウンな感じのおり、イベント紹介です。以下引用。 G*ワークショップZは日本Grails/Groovyユーザーグループの定例イベントです。Java仮想マシン上で動作するGroovy、Grails、Gradle、Spock、vert.xといったG*技術をテーマに、ハンズオンや…

Grails/Groovyのサイトを構築している、名もなき静的サイトジェネレータ

Grails/Groovyのサイトは、静的サイトジェネレータで作成されています。Groovyサイトは去年ぐらいからそうだったのですが、最近Grailsもそうなりました*1。 しかしこの静的サイトジェネレータの名前がわかりません。ソースコード上は、単に「generator/SiteG…

実装から学ぶ型クラス…Groovyで型クラスを実現することを例にして

これは2014年のG*アドベントカレンダーの第23日目の記事のつもりでしたが、12時すぎてしまいましたorz。 HaskellやScalaやRustには型クラスという言語機能があり、個人的感想として、理解が難しかったものの一つです。いわく、インターフェースのようなもの…

(周知) 予告: JGGUG大忘年会LT大会と、LondonのG*なカンファレンス行ってきた報告!+合宿の報告もあるよ! #jggug

今週末は、JGGUG忘年会です。あしたビアバッシュのピザなどを予約しますんで、参加希望のかたは今日中にぜひどうぞ。JGGUG大忘年会LT大会と、LondonのG*なカンファレンス行ってきた報告!+合宿の報告もあるよ! - 日本Grails/Groovyユーザーグループ | Doork…

Grails/Groovyでのカバレッジ取得に関してのTIPS

プリミティブ最適化を抑制することでブランチカバレッジをましなものに Grailsでは、コードカバレッジは以下で取得できる。 Test Code Coverage Plugin(http://grails.org/plugin/code-coverage) しかし、上記を使用した場合、分岐網羅(ブランチカバレッジ)…

ヒアドキュメントと複数行文字列について

「ヒアドキュメント」をなんで「ヒアドキュメント」っていうかを調べてみた。以下が参考ページ。 http://programmers.stackexchange.com/questions/143918/why-is-it-called-a-here-document http://ja.wikipedia.org/wiki/%E3%83%86%E3%83%AC%E3%82%BF%E3%8…

ペアワイズ法でSpockのテストデータを生成する

(関連記事:http://uehaj.hatenablog.com/entry/2015/10/18/155107 ) JCUnitというすばらしいJUnitの拡張があります。 JCUnit ブログ JCUnit JCUnitではペアワイズ法もしくはオールペア法という手法でテストデータを生成します。ペアワイズ法というのは、試…

Groovy 2.4のgroovyshでは、defが効くようになった。

https://jira.codehaus.org/browse/GROOVY-6623 で対処されました。 % groovysh Groovy Shell (2.4.0-beta-1, JVM: 1.8.0_11) Type ':help' or ':h' for help. ------------------------------------------------------------------------------------------…

SpockにおけるMock、Stub、Spyの違い

テスティングフレームワークSpockで相互作用中心のテストをする場合、いわゆるテストダブルとして、MockとStubとSpyの3種類を使えます。それぞれの意味などを簡単に解説します。 Spock全体含め詳しい解説はこちらなどを参照ください。 Mockに関しては、id:ya…

@BaseScriptアノテーションはscriptをインクルードするのに使えます

Groovy 2.2以降、@BaseScriptアノテーションというのが導入され、Scriptの基底クラスを指定することができる*1ようになりました。これは主目的としては、専用目的の便利機能追加・DSLの作成だと思いますが、単にscriptをインクルードするのにも使えます。例…

Groovyを勉強したい人に贈る、astprintコマンド

今ごろ言うな、って話かもしれませんが、自分で2年ほど前にこっそり作っていて最高に便利だと思っているコマンド「astprint」を紹介します。astprintの内容は以下のようにシェルスクリプトです。 #!/bin/sh groovy -e 'groovy.inspect.swingui.AstNodeToScri…

Groovy 2.3のtraitをもうちょっと調べてみるついでにScalaのtraitを理解する

(訂正2014/4/17)以下の記事ではGroovy 2.3のtaritはスタッカブルには使えない、と書いておりますが、以下によれば次のベータ(Groovy 2.3-beta-3かな)ではスタッカブルトレイトが利用可能になるようです。 次βでGroovy 2.3のtraitはスタッカブルになるようで…

Groovy 2.3.0-betaが出たのでtraitを触ってみたメモ

Groovy 2.3.0-beta-1とbeta-2が出たので新機能traitをかるく触ってみました。注意! 以下は現時点で2.3.0-beta-1と2の振舞いとドキュメントを調べた限りの情報です。正式リリースに向けて変更される可能性があります。 関連記事 Introduce Groovy 2.3 trait G…

Java VM上の言語の覇者を決める(但しJava以外)スクリプトボウルの履歴

米国開催のJavaOneカンファレンスで恒例の人気セッションとなっている「スクリプト・ボウル」というのがあります。Java VM上で動作する言語同士のガチ勝負で、コード例とか、技術力とかいろいろな側面からパネルセッションでバトルして、その年勝者を決める…

Hindley-Milner型推論アルゴリズムをGroovyで書いてみた

こないだ「Haskellのforallについて理解したことを書いておく(ランクN多相限定)」の記事を書いたときにHindley-Milner型推論アルゴリズム*1を調査するにあたって、こちらにある「Scala by Example」の16章にあるScalaでの実装例をGroovyに書きなおしたので晒…

Groovyで内包表記を作ってみた #gadvent

G*アドベントカレンダー2013第23日目の記事です。大域AST変換と拡張メソッドを使って、Groovyでリスト内包表記を使えるようにしてみます。リスト内包表記(list comprehension)というのは、HaskellとかScalaとかPythonにも似たものがある便利な言語機能であり…

Java8のStreamでフィボナッチ数を計算する

フィボナッチ数ってあるじゃないですか。 Java8のStreamを使って書いてみます。Groovyで。 import static java.util.stream.Collectors.* import java.util.stream.* println Stream.iterate([1l, 1l]) { (old1, old2) = it [old1+old2, old1] }.map{it[1]}.…

Java 8のOptionalをGroovyから超簡潔に使用する

結論 Java8のOptionalは超すっきり扱えるよ、そう、Groovyならね。 Optionalって何? Java 8で導入される新規クラスの一つ、java.util.Optionalは、メソッドの実行結果で成功する場合と失敗する場合があるときに、その返り値で成功と失敗を表現するためのもの…

Groovyでリストモナド(orリストアプリカティブ)を書いてみる

Groovyでモナドを書くシリーズその3、「Groovyでリストモナド(orリストアプリカティブ)を書いてみる」です。(参考: GroovyでMaybeモナドを書いてみた、GroovyでStateモナドを書いてみる)。Haskellではリストは、「要素が非決定計算のそれぞれの可能性を表す…

GroovyでStateモナドを書いてみる

4年前に、GroovyでMaybe Monadを書いてみた。という記事を書きましたが、続編としてStateモナドをGroovyで書いてみます。 いかに当時わかってなかったかが判りました。 abstract class Monad { abstract Monad bind(Closure c); Monad rightShiftUnsigned(Cl…

Bytecode DSL & Indy & Brainf*ck、副題「Indyを世界一簡単に扱う方法」です。

G*Workshop Z「JGGUG名物・ライトじゃないLT大会 - JGGUG G*ワークショップZ Sep 2013」でLTをしました。http://www.slideshare.net/uehaj/gws-lt-20130920keyBytecode DSL & Indy & Brainf*ck、副題「Indyを世界一簡単に扱う方法」です。 Indy(Invokedynami…

「Groovyスクリプト100本斬り」回顧編

2010年のJGGUG合宿で、企画Groovy: 「Groovyスクリプト100本斬り」 お題(公募中!)を事前に100個用意しておき、みんなでスクリプトを書きまくります。 詳細はこちら:http://www.jggug.org/Home/ibento-shiryoushuu/g100pon.pdfというのがあったのですが(…

indyでBrainfuckを実装してみよう!

唐突ですが、indy*1を使用して、Brainfuck言語処理系を実装してみます。Brainfuckはいわゆる一つの奇妙なプログラミング言語ですが、処理系の実装が容易であることを重視して設計されたチューリング完全な言語であり、試しに実装してみるのには良いでしょう…

内部から見たVert.xとNode.jsとの比較

socket.ioがJavaやGrailsから扱えるかを調べている関係でvert.xを調べていて興味深かったので、こちらにあるVert.xの記事を翻訳してみました。JGGUG G*Workshopにおける杉浦さんのVert.x資料もお奨めです。Vert.xは急速に発達つつあるサーバ・フレームワーク…

G*ワークショップZ May 2013 - Spockハンズオン5/17

G*ワークショップZ Spockハンズオンのおしらせ。Spockを試してみたいかたは是非どうぞ。 http://jggug.doorkeeper.jp/events/3872:title=http://jggug.doorkeeper.jp/events/3872 日時 2013/05/17 (金) 19:00 - 21:00 開催場所 NTTソフトウェア品川本社 品川…

オフラインどう書く第九回の問題をJava 8 Lambdaでやってみた。

オフラインどう書く第九回の問題をやってみた オフラインどう書く第九回の問題をCompileStatic指定してやってみた という記事を書きましたが、今回はJava 8 Lambda式を使って書きなおしてみました。 import java.util.*; import java.util.function.*; impor…

オフラインどう書く第九回の問題をCompileStatic指定してやってみた。

オフラインどう書く第九回の問題をやってみたという記事を書きましたが、今回はCompileStaticアノテーションを使って書きなおしてみました。 import groovy.transform.* @CompileStatic int ceil10(int n) { (Math.ceil(n/10) * 10) as Integer } @CompileSt…

てっとり早くGroovyでJava8のLambdaを使う

追記 http://groovy.codehaus.org/Groovy+2.3+release+notes#Groovy2.3releasenotes-OfficialsupportforrunningGroovyonJDK8groovy 2.3以降、Goovyクロージャはfunctinal interface(sum型)が要求される場所で使用される場合、自動的にそのインターフェースに…

RubyライクにGroovyを書く

誰得なエントリ、かつ「これはひどい」ネタ。まず、以下のようなコンパイラ設定ファイルを書いておき、例えば~/.groovy/config.groovyなどに保存しておきます。 import org.codehaus.groovy.control.* import org.codehaus.groovy.antlr.* import org.codeha…

オフラインどう書く第九回の問題をやってみた。

id:torazukaさんのところで紹介されていたオフラインどう書くの問題をやってみた。 問題はこちらです。 バス代 横へな 2013.4.6 http://nabetani.sakura.ne.jp/hena/ord9busfare/ def ceil10(n) { (Math.ceil(n/10) * 10) as Integer } def half(n) { ceil10…

JJUG CCC 2013 Springにて発表致します

5月11日に、「JJUG CCC 2013 Springにて発表致します。わたしは、Groovy2.Xの新機能を包括的に紹介する予定です。他にもさまざまに興味深いセッションがありますので、ご興味あるかたは、是非登録下さい。

Groovy基礎勉強会で発表してきました

@kyon_mmさんたちが企画した、Groovy基礎勉強会で発表してきました。 機会を頂きありがとうございました>kyonさん、スタッフの皆様、場所を提供頂いたオラクルのみなさん。「コンパイラ処理系としてのGroovyの中身」を覗いてみよう、というのが今回のテーマ…

G*Magazine Vol.6に寄稿しました

日本で唯一のGroovy/Grails関連技術専門オンラインマガジン「G*Magazine Vol6 に寄稿しました。 Groovy 臨機応変(第一回) 〜動中の静...Groovy 2.1.0の新機能 その1 〜 私のは時期的にはちょっと逸しておりますが、他の記事はみな読み応えありです。 相変ら…

動的型情報に基づく静的型チェックというアイデア(Groovy 2.1リリース記念)

Groovy 2.1がリリースされました。おめでとう! 「Groovy 2.1.0は凄い」で自力で調べた以上の情報がリリースノートには書いてあります。まあ、そうなるわな。これを記念して、こないだ作った静的型支援ツール「Staticalizer」を、Groovy 2.1.0でより機能強化…

G*ワークショップ 2013新春SP #jggug

G*Workshopが今週末開催されます。 http://kokucheese.com/event/index/68561/いろいろと楽しい話が聞けると思いますので是非どうぞ。 私も、LTにて、Groovy 2.1.0の濃いところを話します。いや話したい。いや話せれば。がんばります。

Groovy 2.1の初回βがリリースされました(翻訳)

A Groovy New Year!(挨拶) みなさまあけましておめでとうございます。今年もよろしくお願いします。ということで、去年の21 December, 2012 (2 weeks ago)に、Groovy 2.1の初回βがリリースされていましたが、Guillaume Laforge氏のブログエントリの翻訳をし…

プログラミングGROOVY別冊:第8章 Groovy 2.0の新機能]

今年のG*アドベントカレンダーも無事におわりましたね。なかなか濃い内容でした。最後の関谷さんの記事の末尾にありましたが書籍「プログラミングGroovy」の執筆チームからのクリスマスプレゼントとして、 プログラミングGROOVY別冊:第8章 Groovy 2.0の新…

Staticalizer - G* Advent Calendar 2012-

今年もやってまいりました恒例行事「G* Advent Calendar 2012」その4日目ということで、私が作ったプログラム「Staticalizer」を紹介します。発音は「スタティカライザー」で二〜三回舌を噛む感じで発音します。これは、Groovy2.0で導入された静的Groovy機能…

HowToPublisher

Grailsのハウツー文書を、Peter Ledbrookさんがまとめております。これはかなり参考になります。今回の本題は、このHOWTOの内容ではなくて、このHOWTOがどのようにHTMLとして作られているかです。調べると、github上のプロジェクトとして管理されています。…

G*Workshop「Groovy2.0の新機能」を発表してきました

10/26金曜日は、JGGUG G*Workshopでした。 五十嵐さんのJavaOne報告、杉浦さんのVert.xなど盛り沢山で、G*としては大変盛況でした。参加者各位および発表者の皆さまにおかれましては、ありがとうございました。 以下は@kimukou2628さんによるまとめです。あ…

GVM: Groovy enVironment Manager

GVM Toolというのがありますので入れてみました。Groovyを始めとするgroovy関連のツール・フレームワーク類をインストールして、複数のバージョンを切り替えて使用したりするためのものです。RubyのRVM相当のものとのこと。 % curl -s get.gvmtool.net | bas…

G*Workshop in 福岡(Groovy 2.xの新機能)

もう1週間たっちゃいましたが、先週はG*Workshop初の九州開催ということで、福岡博多にて開催してまいりました。@orange_cloverさんによるまとめ(ありがとうございます!)はこちら。 個人的には ラーメン旨い 替え玉を頼まないと負けになる 九州の人はみな熱…

Groovy 2.0でindyを使う

Java 7では、Java VM上での動的言語の実行を効率化することを目的とした一連の機能拡張(JSR 292: Supporting Dynamically Typed Languages on the Java Platform,日本語解説)がなされました。具体的にはたとえば、Java Bytecode命令の1つにinvokedynamicとい…