uehaj's blog

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

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

先の記事ではGroovy 2.3のtraitをかるく紹介してみました。Scalaの比較も試みましたが、なにしろScalaのtraitをあんまり知らないので、「Groovyのtraitにある機能に限っての、Scalaの対応物と比較」という比較になっておりました。その意味で、「Scalaにしか…

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

Groovy 2.3.0-beta-1とhttp://glaforge.appspot.com/article/second-beta-for-groovy-2-3title=beta-2が出たので新機能traitをかるく触ってみました。注意! 以下は現時点で2.3.0-beta-1と2の振舞いとドキュメントを調べた限りの情報です。正式リリースに向け…

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

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

Grails 2.x脆弱性情報(WEB-INF配下が読みとられる)

脆弱性情報のアナウンスがでています。http://grails.1312388.n4.nabble.com/IMPORTANT-CVE-2014-0053-Information-Disclosure-in-Grails-applications-td4654254.htmlhttp://cxsecurity.com/issue/WLB-2014020172Grails 2.xのリソースプラグインのデフォル…

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

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

HaskellにおけるIOモナドとSTモナドの関係

HaskellにおけるIOモナド(IO a型)とSTモナド(ST s a型)について整理してみました。 IOの定義から知るST IOモナドの考え方についての原論文に相当する「Lazy Functional State Threads」においては、IOの定義は newtype IO a = ST RealWorld aのようにST型を…

Haskellのforallについて理解したことを書いておく(ランクN多相限定)。

Haskellのforallについて理解したことを書いておくyo!(ランクN多相限定*1 )。 前提知識のおさらい: 型・多相型・型検査・型推論… 最初に基本概念を整理しておきます。 IntやInt->Intは単相型、aやa->aは多相型である。ここでaを型変数と呼ぶ。型変数を含む型…

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

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

プログラミング言語Frege(フレーゲ)を紹介します

これはマイナー言語 Advent Calendar 2013の21日目の記事です。 Frege(フレーゲ*1 )を紹介します。 Fregeは、Java VM上で動作するHaskell風の言語です。以下のような特徴を持っています。 純関数型言語 非正格評価(いわゆる遅延評価) Hindley-Milner型推論に…

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は、メソッドの実行結果で成功する場合と失敗する場合があるときに、その返り値で成功と失敗を表現するためのも…

モナドはなぜHaskellでしか積極的に使われていないのか?

(Haskellな日々になってるな…。)モナドというものがあり、Haskellで有名ですが、実際には、Java8のOptional、ScalaのOptionやfor内包表記などでは使用されています。ScalazというScalaのライブラリや、monadlogieというGroovyのライブラリでも使われています…

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…

Haksellでwhileを定義する

Haskell WIkiの「IO Inside」に、 Haskell's ability to work with IO actions as with any other (functional and non-functional) values allows us to define control structures of arbitrary complexity. Try, for example, to define a control struct…

IOはいかにして命令書(アクション)であるのか:(たぶん)解決編

えー、先日「IOはいかにして命令書(アクション)であるのか」という記事を書きましたが、その疑問に対する回答はすべて「IO inside」を読んだところ氷解したのでご報告します*1。 type IO a = RealWorld -> (a, RealWorld)おしまい*2。 id:nobsunさんやid:kaz…

IOはいかにして命令書(アクション)であるのか

2013.10.9 AM6:21「追記その2」として「おぼろに全容として思いついた理解」を追記しました。 Haskellおもろいで この1ヶ月ぐらいHaskellをかじってます。Haskellはこれ以上ないってぐらいエキサイティングな言語で楽しいものですね。まだ初心者ですが40半ば…

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というのがあったのですが(…

周知: JGGUG名物・ライトじゃないLT大会 - JGGUG G*ワークショップZ Sep 2013 #jggug

http://jggug.doorkeeper.jp/events/5745 G*ワークショップZは日本Grails/Groovyユーザーグループ(JGGUG)の定例イベントです。 Groovy、 Grails、 Griffon、 GradleといったG*技術をテーマに、ハンズオンやコードリーディング、読書会など参加型の内容で毎月…

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

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

夏サミ2013「中堅SIerにおいて、
先進的なフルスタックフレームワークGrailsを全社的に普及推進してみた。」

デブサミSummer(夏サミ)にて発表します。物語1:エンタープライズGrails 中堅SIerにおいて、 先進的なフルスタックフレームワークGrailsを全社的に普及推進してみた。 残席わずかとのことなので、ご興味のある方はお早めに是非どうぞ。 http://event.shoeisha…

HATEOASって何だ?

Grails 2.3のRest機能のドキュメントを読んでいたら、拡張の一つとして「8.1.7 Hypermedia as the Engine of Application State」というのが書いてあって、調べると面白かったので、この資料(REST: From GET to HATEOAS)を読んだだけでの、私の理解する限り…

G*ワークショップZ Jun 2013 - GR8Conf報告&ライブコーディング&GroovyServ/Improx

今週末は、G*Workshopです。 http://jggug.doorkeeper.jp/events/3873 ご興味のあるかたは是非どうぞご参加下さい。 今回も、前回に引き続きNTTSOFTの「新」品川オフィスです。 つまりビルが前々回までと異なります。 ご注意くだだい。

Java8におけるindyとLambdaの絶妙な関係、もしくはSAMタイプを継承する内部クラスの.classファイルはどこへ行ったの?

JJUG CCC 2013 Springのさくらばさんのセッションで「Java 8の怖い話」として、Lambda式をJVM上で実行するにあたり、 invokedynamicを使っている Lambda式の仕様は、意味的にはSamタイプを継承する内部クラスのインスタンスのはずだが、lambda式を使っている…

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

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

JJUG CCC 2013 Springに参加してきました #jjug #jjug_ccc

今日は朝早くから、西新宿でJJUG CCC 2013 Springに参加してきました。(まとめ) 久々の1日の勉強会で楽しかったです。あと都庁を間近かで見れてよかった。 ブログ書くまでが勉強会、という基本を新ためて学んだので、書きます。 基調講演-1 Javaのこれからを…

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.*; impo…

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

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

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

Groovy-MLで議論も始まっており、Groovyは将来的にはJava8正式対応するかと思いますが、世の中ではJava8アーリーアクセス版とかで話題になってるので、試してみました。シンタックスのレベルでは、当然GroovyはLambda式を扱えませんが(決まってないし!)、Lam…

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でより機能強化…

初夢語り: Groovyの野望と未来を2.1.0に垣間見る #jggug

G*ワークショップ 2013新春SP #jggugにいってきました。報告はid:orange_cloverさんのこちらを。メインとして、@_y_u_さんによる、GG純度100%のとても濃いGGEXの参加報告がありました。興味深い数多くのセッション紹介があり、後でいくつかは元セッションを…

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

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

3年間の進歩

過去のブログを見ていて、"10分でコーディング"という記事があったので、かつ内容を完全に忘れていたので、あらためてチャレンジ。問題はこちら。 def func(int n, String cards) { cards = cards.substring(0, cards.size() - cards.size() % n) def resu…

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の新…

ヘッドレスGrails

"昨日"の記事ではあんなことを書きましたが、単に「Grailsでバッチ処理ができるよ」と言う話では無いと私は思います。つまり、Grailsが、Webアプリに限定されない、アプリ開発のフレームワークになるということです。デスクトップGUIアプリの分野はGriffonに…

Grailsでバッチ処理を実行

Webアプリ機能は使用せずに、GORMやサービスなどのGrailsのすべての機能を使いたい場合があります。たとえばデータベースにデータをバッチ的にひたすらインポートするような処理です。GORMを使いたいですね。その目的のためにbatch-launcher-pluginというプ…

Staticalizer - G* Advent Calendar 2012-

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

QuartzプラグインでTriggerのスケジューリングタイミングを動的に変更する

GrailsのQuartzプラグインを使っている場合に、ジョブスケジューリングを動的に変更したいときがあります*1。一見、こちらにある「Dynamic Jobs Scheduling」にある方法で変更できそうにも思えますが、ジョブ名やトリガー名を与えることができないインターフ…

HowToPublisher

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

静的リソース機能はGrails 2において中核的価値の一つである

タイトルは釣りっぽくもありますが、G*MagazineのVol.3とVol4にも紹介されているGrails Resoucesプラグインについて熱く語ってみます。 Grails ResouceプラグインはGrails 2.0からGrails本体に同梱される標準プラグインとなりました。つまり明示的にインスト…

Kickstart with Bootstrapプラグインがかっこいいぞ

GrailsにはKickstart with Bootstrapプラグインというのがあって、サイトの雛形として使える便利ものですが、実にかっちょ良い。 スキャッフォルドも手が加わっていて、Twitter Bootstrap対応になっています。 こういうテンプレートがいっぱいあると良いなあ…

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

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