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

uehaj's blog

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

Grails 3ってどうよ+ LT大会 - 日本Grails/Groovyユーザーグループ

連休明け5/13に、JGGUG(日本Grails/Groovyユーザ会)より、上記イベントがございます。 Sring BootをGSPとscaffold、GORMなどでさらに使いやすくしたフルスタックフレームワーク、Grails3について、実務適用している人たちとの情報提供、議論を行います。また…

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

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

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

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

React Meets Grails 〜ReactはエンタープライズSPAの夢を見るか?〜

本記事は、G*Advent Calendar 2015の24日目の記事です。 昨日は it__sseiさんの記事で、明日はtouchez_du_boisさんの記事です。 (2016/1/22追記) id:bati11_ さんが、本記事で作成しているボイラープレートコードのReact部分について、ステップバイステップ…

(Babel 5における)ES6のモジュールを解説してみた

警告 以下でのモジュールの説明はトランスパイラであるBabel 5,6で動作を確認した振舞いについての記述です。2015年11月現時点で、ECMAScriptのモジュール仕様策定範囲は、本来の全体範囲のまだ一部であるとのことです。その状況でのBabelの実装は、良く言え…

Reactはリアクティブプログラミングなのか?

Reactとは 設計をとりもどす Reactでやってみる Elm-HtmlとReactの対応 ReactはFRPか? ReactはFPか? FPとOOPの真の関係 まとめ 追記 Reactとは Reactは、Facebookが開発した、JSのUIフームワークもしくはライブラリです。Reactが提供する中核機能は以下です…

JCUnitのBuilder APIをためす

以前、以下の記事で紹介した、JCUnitの開発がすすんでいます。(開発ブログ, ソース) uehaj.hatenablog.com 主な拡張としては、状態機械をモデリングしてテスト生成、ビルダーAPIの整備などなど*1 Spockからの利用サンプルをかきなおしてみました。ビルダーAP…

今こそッ、始めようGrailsブートキャンプ!!!!

以下のイベントが予定されています。 Grails3対応のGrailsブートキャンプです。 Grails3というのが出たタイミングで、ちょっと取り組み直しみよう、という向きに最適です。 jggug.doorkeeper.jp 山本さん(id:yamkazu)NTTSOFTが講師です。 ご興味があればぜひ…

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

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

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

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

TaPLのML実装をRustでやってみるシリーズ まとめ

型システム入門 −プログラミング言語と型の理論−、を読んでおります。 型システム入門 −プログラミング言語と型の理論−posted with amazlet at 15.04.13Benjamin C. Pierce オーム社 売り上げランキング: 336,081Amazon.co.jpで詳細を見る これをちまちまと…

関数型とかの論争について

身と蓋がナッシング まず身も蓋もないことをいうと、結局はCPUの命令セットとして動く言語ですからして、大差はないんですよね。 でもこういうことを言うのは、「どうせ宇宙なんて原子の集合だろ!」という小学生なみです。 なので言わない。でもその認識を捨…

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*技術をテーマに、ハンズオンや…

Elmでやってみるシリーズ16: マウスストーカーを実装する

「リアクティブプログラミングの技術を用いてマウスストーカーを実装する - はこべブログ ♨」という記事があり、興味深いのでElmのリアクティブプログラミングで似たようなことをやってみました。 全画面表示はこちらから。 コードは以下で、プロジェクト全…

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

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

Elmでやってみるシリーズ15: Json.Decodeで9個以上のフィールドを持つobjectをデコードしてみる

本記事では、ElmのコアライブラリにおけるJSONデコードパッケージJson.Decodeを用いて、9個以上のフィールドをもつオブジェクトのデコード方法について説明する。 2015 08 31追記あり(andMapを使用する) その前に その前にJson.Decodeを簡単に説明する。 Jso…

Elmにおけるimportの使い方

Elmにおけるインポートの方法を説明する。本説明が対応するElmのバージョンはElm 0.14かそれ以降、ただしインポートの仕様は今後大きく変更される可能性がある(今後についての関連情報)。 他モジュールで定義され、エクスポートされた識別子(型コンストラク…

「Elmでやってみる」シリーズのまとめエントリ

このブログ記載のElmの記事で、動作するElmの実行プログラムをiframeで貼っていたのですが、いくつも動かなくなっていたので、動くようにしました。 ちなみに動かなくなっていた原因は2つありました。 Elmのコード共有サイトshare-elmの仕様がかわった。対処…

enumに継承を! traitとenumの妙な関係、もしくはGrailsのドメインクラスの選択フィールドを国際化表示するのにtraitが便利

Grailsのドメインクラスにおいて、いくつかの候補の数値のいずれか、というフィールドを作成し、scaffoldで生成した画面からCRUD操作したいとします。簡単なのは、こうですね。 class Domain { Integer something static constraints = { something inList:[…

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

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

Elmでやってみるシリーズ14:ライブラリを公開する

この記事は「Elm Advent Calendar 2014」の23日目として書きました。 今回は、作成したElmのライブラリをElmコミュニティライブラリに公開してみます。公開するブツは以前こっそりと作成してすでに登録していた「IntRange」というもので、たいしたものじゃご…

XML形式のlog4j設定(log4j.xml)をGrailsで使用する

Grailsではロギングの設定がConfig.groovyで設定できますが、なんらかの理由でXML形式の設定(log4j.xml)で行ないたいことがあるかもしれません。しかし、その場合log4j.xmlをどこに置くか、という問題があり得ます。この問題を説明します。まずGrailsでlog4j…

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

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

Grailsで、tomcatを起動するというだけの目的でファンクショナルテストを設定する方法

Grailsでコントローラの試験を、モックを使わず実際の通信を使って試験したいケースがある。たとえば、Rest APIを開発する場合、Rest APIはブラウザを使用しなくても簡単に呼び出せるものなので、ユニットテストがしたいです。もちろんGrailsにはコントロー…

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

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

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のテストデータを生成する

(関連記事:http://uehaj.hatenablog.com/entry/2015/10/18/155107 ) 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風味の演算子・文法を振り掛けた、ヒンドリーミルナー型推論・純粋関数型・…

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をインクルードするのにも使えます。…