uehaj's blog

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

Dockerを使ってGrails開発

Grails開発でdockerを使用するためのDockerfileを、備忘録兼ねて晒します。開発中に使うものです。運用用は、別のものになるでしょうかね。 onesysadmin/docker-grailsを元にして、Proxy設定を行い、いくつかの工夫をしております(プロキシ設定については、D…

PHPのようにGrailsを使う方法

GrailsアプリケーションではGSPのビューは以下の方法で表示できます(他にもあるかも)。 コントローラーアクションの結果として表示 renderで指定したビュー コントローラ名とアクション名から定まるデフォルトのビュー ビューを直接表示する URLMappingでURL…

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

「ヒアドキュメント」をなんで「ヒアドキュメント」っていうかを調べてみた。以下が参考ページ。 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のテストデータを生成する

JCUnitというすばらしいJUnitの拡張があります。 JCUnit ブログ JCUnit JCUnitではペアワイズ法もしくはオールペア法という手法でテストデータを生成します。ペアワイズ法というのは、試験対象コードに対するパラメタのバリエーションテストをする際に、より…

Elmでやってみるシリーズ13:あらためてシダを描く

間が少しあいちゃいましたが、実は続いていたこのシリーズ、「あらためてシダを描く」です。この図形は「バーンズリー(バーンズレイ)のシダ」と呼ばれる有名な図形で、以前各種の言語で実装するのが少し前に流行ったのが記憶に新しいところです。アルゴリズ…

Elmでやってみるシリーズ12:遅延ストリームで多段階選抜

Elmでやってみるシリーズ12:遅延ストリームで多段階選抜 横浜へなちょこプログラミング勉強会の過去問より、「多段階選抜 2014.8.2 問題というのをやってみます。以下が方針。 無限長データ構造を使えといわんばかりの問題である。Haskellならそのまんまであ…

Elmでやってみるシリーズ11:お絵描きツール

Elmでやってみるシリーズ11:お絵描きツール 今回は、マウスボタンをクリックすると、半径4の赤いドットが描画され、押下したままドラッグすると線が描けるというもの。以下が実行イメージ。しかし今回は、いきなり完成させるのではなく、2ステップでやってみ…

elmでやってみるシリーズ10: ボールの衝突回数で円周率を計算する

Elmでやってみるシリーズ10:ボールの衝突回数で円周率を計算する id:wamanさんからひっそりと提案もらいましたので、やってみました。 今回は記事自身もElmで書きましたので、github-pages上の全画面(github上のソース)からどうぞ。以下にも一応hatena blog…

elmでやってみるシリーズ9: JavaScript連携(JSのevalを呼ぶ)

Elmでやってみるシリーズ9: JavaScript連携(JSのevalを呼ぶ) Elmではportというものを使用することで、ElmからJSの機能を呼ぶことができます(→Ports: Communicate with JS)。 portは名前がJS側に公開されるSignalです。 portには入力portと出力portがありま…

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. ------------------------------------------------------------------------------------------…

elmでやってみるシリーズ8: 赤いドットが回っているかのように見えるけど実は直進運動な錯視

Elmでやってみるシリーズ8: 赤いドットが回っているかのように見えるけど実は直進運動な錯視 少し前に、「このくるくる回る白いドット、実は真っ直ぐ往復してるだけなんだぜ」という記事がありましたが、これをElmで再現してみようというのが今回のネタ。 (…

elmでやってみるシリーズ7: elm-htmlでTwitter Bootstrapを適用

Elmでやってみるシリーズ7: elm-htmlでTwitter Bootstrapを適用。つい先日、「Blazing Fast HTML」と銘打って、elm-htmlライブラリが公開されました。これはElmでDOMツリーを構築・更新するための低レベルライブラリであり、Virtual DOMという技術を使ってい…

elmでやってみるシリーズ6: 今日の天気予報を表示する(フォーム入力とWebAPI呼び出しとJSONで)

Elmでやってみるシリーズ6: 今日の天気予報を表示する。今回は、以下の手順でお天気情報を表示します。 Graphics.Input.dropDownとGraphics.Input.Field.fieldで、場所情報を入力させる 上記の2つはInputを共有させる 変更があったらHttp.sendGetでhttp://op…

elmでやってみるシリーズ5: 逆ポーランド電卓

Elmでやってみるシリーズ5: 逆ポーランド電卓。いわゆる一つの逆ポーランド記法(Reverse Polish Notation, RPN)電卓です。入力フォームをSignalに結びつけて入力として使う例になります。私は本物のRPN電卓を使ったことがないので本物とはたぶん動作が違いま…

elmでやってみるシリーズ4: 画像ギャラリー

elmでやってみるシリーズ4: 画像ギャラリー。論文「"Concurrent FRP for Functional GUIs"」にものってた、画像ギャラリー的なもの。キーボードの矢印キーの左右で画像を選択できます。 import Keyboard -- WikipediaのURL(各画像URLの共通部分) base = "htt…

elmでやってみるシリーズ3: xeyesっぽい目が動く

elmでやってみるシリーズ3: xeyesっぽい目が動く。 import Mouse -- 目の輪郭を書く eyeframe x y = move (x,y) <| outlined { defaultLine | width <- 5 } <| oval 40 50 -- 目玉を書く eyeball x y = move (x,y) <| filled black <| circle 5 -- 目(=目玉+…

elmでやってみるシリーズ2: ●を往復させる

import Window import Debug (log) -- 旧速度vと、現在位置xから、新しい速度を求める。(はじっこだったら速度を反転する) newv : Int -> Int -> Int newv v x = if (x<= -10 || 10<=x) then -v else v -- 状態を表わす(現在位置、速度)のタプルに対して、次…

elmでやってみるシリーズ1: ●を動かす

elmでやってみるシリーズ1: ●を動かす。 import Window pos : Signal Int pos =let f = \tmp -> (tmp `mod` 30) - 10 in f <~ foldp (\it acc-> acc + 1) 0 (fps 50) drawCircle : Float -> Float -> Form drawCircle x y = move (x,y) <| filled red (circl…

Grails 3.0先取り!? Spring Boot入門ハンズオン

次回G*Workshopは、8/1 「Grails 3.0先取り!? Spring Boot入門ハンズオン」です。 ふるってのご参加をお待ちしております。 Grails 3.0先取り!? Spring Boot入門ハンズオン申し込みはこちらから> Grails 3.0先取り!? Spring Boot入門ハンズオン予定の内容Gra…

「プログラムでシダを描画する」をelmで描画する

やや乗り遅れているネタとして、シダを描くというのを、elm言語でやってみました。elm言語は、基本はHaskellライク文法(サブセット方向)に、F#とOCaml風味の演算子・文法を振り掛けた、ヒンドリーミルナー型推論・純粋関数型・正格評価の言語で、repl上もし…

Groovyのtraitを使い倒す!

JGGUG G*Workshopに久々に参加しまして、GroovyのTraitについて、以下を話してきました! Introduce Groovy 2.3 trait from Junji Uehara 盛況でした。いくにんかAndroid開発をされている人もいらっしゃったようで、Groovy on Androidが注目されているのも理…

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

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

オブジェクト指向だけじゃない開発宣言

Manifesto for Not Only Object-Oriented Development、オブジェクト指向だけじゃない開発宣言、というのが出てましたのでごにょと訳してみました*1。 オブジェクト指向だけじゃない開発宣言私たちは、ソフトウェア開発の実践 あるいは実践を手助けをする活…

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

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

Rustを30分で紹介する(訳)

以下は30 minute introduction to Rustという文書(現在ではオフィシャルドキュメントの一部)の翻訳メモです。C/C++の代替に(将来的に?)なり得る言語として興味を持っています。Heartbleed問題について、ソースが汚いとか、レビュー体制がどうのとか、そもそ…

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の振舞いとドキュメントを調べた限りの情報です。正式リリースに向けて変更される可能性があります。20140726追記: GroovyのTraitを使い倒す…

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の「新」品川オフィスです。 つまりビルが前々回までと異なります。 ご注意くだだい。