saba1024のブログ

どうでも良い思いついた事とかプログラミング関係のメモとか書いていきます。

Apache Groovyで画像処理の基礎

本記事はG* Advent Calendar 2017の21日目の記事です。 ピクセル Apache Groovyでも、Javaが用意しているBufferedImageとImageIOを利用することで、ピクセル単位で画像を取り扱うことが出来ます。 各ピクセルの正体は単なるInteger(32bit)です。 そしてそ…

Rustでcatコマンドを実装

Rustでcatコマンドを実装しました。 ちゃんと標準入力からでも引数で指定されたファイルからでも読み込めます。 ミソになるのが、stdioでもFileでもBufReadというトレイトを実装しているので、そのトレイトの型を受け取って共通の処理が実現出来る点です。 u…

Apache GroovyでSSL証明書の有効期限を確認する

本記事はG* Advent Calendar 2017の19日目の記事です。 さて、2016年から正式に公開されたLet's Encryptを利用することで、誰でも無料でSSLを導入してセキュアな通信をお手軽に導入できるようになりました。 しかしLet's Encryptの証明書の有効期限は3ヶ月と…

Java標準の組み込みWebサーバをApache Groovyで利用する

本記事はG* Advent Calendar 2017の18日目の記事です。 @tyamaさんのブログで紹介されていた、@glaforgeさんのこのツイートで初めて、Javaに組み込みWebサーバが存在していることを知りました! ツイート内のコードだとシングルスレッド(HttpServer#start()…

Apache Groovy "as" オペレータの正体

これはG* Advent Calendar 17日目の記事です。 ある値を型Aから型Bに変換するといったコードは頻繁に出てきますよね。 キャストで行えるものが最もシンプルですが、キャストだと変換できないパターンというものが大量に存在します。 例えば以下のコードはそ…

Grails/Vue.jsでTodoアプリ(Deploy as war)

これはG* Advent Calendar 2017の11日目の記事です。 この記事は、以下の5つの投稿で成り立っています。 Grails/Vue.jsでTodoアプリ(環境構築) Grails/Vue.jsでTodoアプリ(CRUD) Grails/Vue.jsでTodoアプリ(認証) 1/2 Grails/Vue.jsでTodoアプリ(認証…

Grails/Vue.jsでTodoアプリ(認証) 2/2

これはG* Advent Calendar 2017の10日目の記事です。 この記事は、以下の5つの投稿で成り立っています。 Grails/Vue.jsでTodoアプリ(環境構築) Grails/Vue.jsでTodoアプリ(CRUD) Grails/Vue.jsでTodoアプリ(認証) 1/2 Grails/Vue.jsでTodoアプリ(認証…

Grails/Vue.jsでTodoアプリ(認証) 1/2

これはG* Advent Calendar 2017の9日目の記事です。 この記事は、以下の5つの投稿で成り立っています。 Grails/Vue.jsでTodoアプリ(環境構築) Grails/Vue.jsでTodoアプリ(CRUD) Grails/Vue.jsでTodoアプリ(認証) 1/2 Grails/Vue.jsでTodoアプリ(認証…

Grails/Vue.jsでTodoアプリ(CRUD)

これはG* Advent Calendar 2017の8日目の記事です。 この記事は、以下の5つの投稿で成り立っています。 Grails/Vue.jsでTodoアプリ(環境構築) Grails/Vue.jsでTodoアプリ(CRUD) Grails/Vue.jsでTodoアプリ(認証) 1/2 Grails/Vue.jsでTodoアプリ(認証…

Grails/Vue.jsでTodoアプリ(環境構築)

これはG* Advent Calendar 2017の7日目の記事です。 この記事は、以下の5つの投稿で成り立っています。 Grails/Vue.jsでTodoアプリ(環境構築) Grails/Vue.jsでTodoアプリ(CRUD) Grails/Vue.jsでTodoアプリ(認証) 1/2 Grails/Vue.jsでTodoアプリ(認証…

標準ライブラリだけでApache GroovyでWebサーバを実装(3) - 動的な値を返す

これはG* Advent Calendar 2017の4日目の記事です。 この記事は、以下の3つの投稿で成り立っています。 標準ライブラリだけでGroovyでWebサーバを実装(1) - 基礎 標準ライブラリだけでGroovyでWebサーバを実装(2) - Groovyっぽく 標準ライブラリだけでGroovy…

標準ライブラリだけでApache GroovyでWebサーバを実装(2) - Groovyっぽく

これはG* Advent Calendar 2017の3日目の記事です。 この記事は、以下の3つの投稿で成り立っています。 標準ライブラリだけでGroovyでWebサーバを実装(1) - 基礎 標準ライブラリだけでGroovyでWebサーバを実装(2) - Groovyっぽく 標準ライブラリだけでGroovy…

標準ライブラリだけでApache GroovyでWebサーバを実装(1) - 基礎

これはG* Advent Calendar 2017の2日目の記事です。 この記事は、以下の3つの投稿で成り立っています。 標準ライブラリだけでGroovyでWebサーバを実装(1) - 基礎 標準ライブラリだけでGroovyでWebサーバを実装(2) - Groovyっぽく 標準ライブラリだけでGroovy…

Apache GroovyとGrailsでApache Solrを利用する(組み込み)

これはG* Advent Calendar 2017の1日目の記事です。 さて、検索エンジンといえばElasticSearchの勢いが凄いですが、やはりApache Groovyで利用するなら同じApacheファミリーのApache Solrですよね! ただ、RESTful APIを利用してSolrとやりとりするともうソ…

RustでFizzBuzz

fn fizz_buzz(n: i32) -> String { match (n % 3, n % 5) { (0, 0) => "FizzBuzz".to_string(), (0, _) => "Fizz".to_string(), (_, 0) => "Buzz".to_string(), (_, _) => n.to_string(), } } fn main() { let result = (1..101).map(|x| fizz_buzz(x)).coll…

Rustでクロージャを使ってカウンターを実装するサンプル

クロージャのお勉強用のお題としてよくある、「ある関数から、実行する度に値をインクリメントして返すクロージャを生成して返す」をRustで実装してみました。 RustのクロージャはちょっとApache Groovyなどと比べると癖が有って難しい印象です...(所有権と…

Apache Groovy 2.6でJava8の文法が使える!

表題の通りなのですが、ParrotブランチでGroovy3を垣間見るで示されている内容が、Groovy2.6(2017/09/06時点ではalpha-1)の時点で利用できるようになりまりた。 ざっくりというと、Java8の新構文(lambdaとか)や、Java7で導入されたtry-with-resourcesが…

Apache Groovyで文章を縦書にする

String str = "Groovyを使い、textを縦書に変換するコマンドを書いたので、今後活用したい。と思う次第であります。" Integer maxCharacters = 8 List<String> eachLines = str.toList().collate(maxCharacters) eachLines.eachWithIndex {List<String> line, Integer i -> i</string></string>…

Groovyでお手軽にカレンダーを生成する

Groovyだと、2つの日付同士のレンジが..で生成できるので非常にお手軽にカレンダーを生成することが出来ます。 うるう年もちゃんと考慮されるので、例えば以下のようなことが出来ます。 String df = "yyyy/MM/dd" // うるう年のある年 Date date1 = Date.par…

Nginx Unitを試してみた

最近リリースされた、Nginx Unitを試してみました。 インストール こういう新しいツールを試すのにはやっぱりDockerですね! とうことで、Docker上にNginx Unitをインストールして見ます。 今回はUbuntuで試してみました。 # デタッチモードで起動 sudo dock…

Rust 1.20の新機能 Associated constants(関連定数)

概要 最近Rustの勉強をしています。 今まで基本的にJava、Apache Groovy畑で生きてきたので新しい概念が多くかなり苦戦しています。 さて、8月31日にRust1.20がリリースされました。この新しいバージョンでAssociated constants(関連定数)という機能が追加さ…

GroovyのGrape/Grabでdownload failedが発生する際の対処方法

Groovyでは、プログラムの実行時にMavenリポジトリから自動的に依存ライブラリのダウンロード、クラスパスの設定まで行ってくれるGrape/Grabという機能が有ります。 使い方自体は簡単で、コードの先頭に、 @Grab('org.apache.solr:solr-core:6.6.0') @Grab('…

Groovyで簡単なS式をパースするサンプル

無駄に複雑なコードになってしまっていますが、一応四則演算は実行できるS式のパーサが出来ました。 間違いなくもっとスマートな方法があるはずですが(普通にググれば10行程度でRubyで実装している方もいらっやいます)、今まで基本的にWebプログラミングし…

Ratpackを使ってJsonBuilderとJsonSlurperを試す

概要 GroovyでJSONを生成する(JsonBuilder)という記事と、 GroovyでJSONをパースする(JsonSlurper) という記事を書きました。 それぞれ独立して紹介しても実際にどういう場合に使うの?というイメージが湧きづらいので、実際にRatpackを使って簡単なWeb…

GroovyでJSONをパースする(JsonSlurper)

概要 JsonBuilderを使えば、Groovy上で簡単にJSONを生成できますが、同様に既存のJSON(テキスト)を解析してGroovyで扱う事も非常に簡単です。 そのためには、JsonSlurperというクラスを利用します。 使い方 本当に簡単なので以下のソースを見て頂ければ一…

Groovyの不思議なメソッド「call」

概要 通常のクラスであれば、インスタンスをnewで生成して、メソッドを呼び出します。 class Hoge { def test(String message) { "${message} in Hoge#test" } } def hoge = new Hoge() assert hoge.test("test") == "test in Hoge#test" Groovyのクロージャ…

GroovyでJSONを生成する(JsonBuilder)

GroovyのコードとしてJSONを生成する 特に難しい内容ではないのですが、自分で使う時に毎回ググっているので備忘録として纏めます。 JsonBuilderというGroovy標準のクラスを利用することで簡単にJSONを生成することが出来ます。 import groovy.json.* def js…

Grails3の本番環境で/dbconsoleにアクセスできるようにする

いつからか分からないけど、少なくともGrails 3.2.8では、production環境ではデフォルトで/dbconsoleにアクセスできなくなっています。(セキュリティ上の理由で) 閉じた環境だしSpringSecurityCoreとか使ってるから大丈夫!という場合は、application.yml…

Grails 3.2.8と3.2.9でSpring Security CoreとDatabase Migrationを利用する際の注意点

前提条件 Spring Security Coreラグインのバージョンは3.1.2です。 Database Migrationプラグインのバージョンは3.0.0です。 また、認証用のドメインを作成するs2-quickstartコマンドを以下のように実行したと仮定します。 s2-quickstart example User Role …

Grails3.2でのCSRF対策

CSRF対策を導入 標準だとGSPのフォームで利用する2重投稿防止用の<g:form useToken="true" ...>を使うことでCSRF対策が出来る。 ただしこの場合、当然コントローラ側でトークンが正しいかどうかのチェックをしないといけないので、 withForm { // OK! }.invalidToken { // トークンがお</g:form>…