CLOVER🍀

That was when it all began.

Scala

Matcher#replaceAll、String#replaceAllで後方参照が使える

コロッと忘れていたようなので、メモ。java.util.regex.Matcher#replaceAllやreplaceFirst、String#replaceAllやreplaceFirstで$を使った後方参照が使えます。普段あんまりJavaで正規表現による置換を多用しないのと、Perlに頼り切ってることが多かったです…

いろんな言語で、文字コードを指定してファイル書き込み

Readをやったので、今度はWriteということで。記載パターンは、以下の2通り。 変数messageに格納された文字列を一括してファイル出力 改行を含まない文字列リストmessagesに対して、行末に改行(LF)を付与してファイル出力 今回も、前提はこんな感じです。 …

いろんな言語で、文字コードを指定してファイル読み込み

ふと、書いてみたくなりまして。だいたいスクリプト系の言語で、よく忘れてしまうのが書いた動機です…。記載パターンは、以下の2通り ファイルの中身を全て読み込んで、1つの文字列として変数contentsに格納 ファイルの中身を全て読み込んで、改行無しの1行…

ScalateをWebアプリに使ってみる

今度は、Scalateとサーブレットを組み合わせてみます。最初は、こちらを参考に。Using Scalate as Servlet filter in your Web Application http://scalate.fusesource.org/documentation/user-guide.html#using_scalate_as_servlet_filter_in_your_web_appl…

テンプレートエンジン、Scalateを使ってみる

この前、Mustacheについて調べた時に、このテンプレートのScala実装があることがわかりました。で、その実装がScalate。あ…なんか、聞いたことあります。なんですが、使ったことがなかったのでちょっと試してみることにしました。Scalate http://scalate.fus…

いろんな言語で、外部プロセス起動

前のエントリで、Groovy/Scalaでプロセス起動に関するコードをちょこちょこと書いていたのですが、ちょっと自分が割と使う言語でまとめてみることにしました。ほんの、サンプルです。サンプルのお題は、 外部プロセスの実行結果(戻り値)を取得し、変数ret…

Javaのプロパティファイルを比較するスクリプト

前回のエントリのScala版です。勢いで書いてみました。スクリプトの動作仕様には、変更ありません。 比較したプロパティファイルに差分があれば、diffコマンドっぽく出力する 出力結果がUnicodeエスケープされていた形だと見づらくてしかたがないので、java.…

package-info.javaの一括生成

だいぶ遅れているのですが、こちらのお題に参加してみることにしました。 http://npnl.hatenablog.jp/entry/2012/08/17/014930もうちょっと、早く見つけておけばよかった…なんか、Groovyが人気っぽいので、ScalaとClojureでいってみます。ターゲットのディレ…

sbt 0.12系でWARファイルを作る時の注意

前のエントリで、「TomcatにWARファイルをデプロイ…」なんてことを書いてましたが、xsbt-web-pluginを使うのにこれまたてこずっていたという…。う〜ん、久しぶりにこの辺りを触ると、だいたいハマりますね(笑)。今回使用した、sbtとxsbt-web-pluginのバー…

Tomcat 7から追加された、StuckThreadDetectionValveを使う

こちらの記事にすごーくしれっと載っているのですが http://www.atmarkit.co.jp/fjava/rensai4/tomcat7_03/03.html Tomcat 7から、StuckThreadDetectionValveというValveが追加されています。これを使うと、リクエストに時間がかかっている処理を検知するこ…

JDK 6から同梱されている、簡易HTTPサーバを使う

ちょっと試したいことがあって、HTTPサーバを用意したかったのですがApacheとかをインストールするのも面倒だったので、JDK 6から同梱されている簡易HTTPサーバを使ってみることにしました。が、実際に書いたのはJavaも面倒で、Groovyですが(笑)。参考にし…

Scalaでコレクションを並列に畳み込む

いや、Scalaに詳しい人からすると当たり前かもしれませんが、今まで知らなかったので…。通常、Scalaで例えばListの和を求めようと思うとfoldLeftとかreduceLeftとかを使うと思いますが、並列コレクションを使った場合って、これって並列に実行されると困りま…

GradleでScalaを使う

今度は、GradleでScalaを使って「Hello World」をやってみましょう。基本、ユーザガイドに沿ってやっていく感じです。 http://www.gradle.org/docs/current/userguide/scala_plugin.html Scala用のプロジェクトを作る まずはディレクトリ作成。 $ mkdir hell…

lazy valを使うと、裏で何が起こるのか?

Scalaの機能のひとつに、lazy valを使った遅延評価があります。毎回計算したくないのでメソッドじゃなくてフィールドにしたいけど、オブジェクトを生成した時にすぐに作成するにはコストが大きいような値を束縛するようなケースに使うわけですが…これの裏舞…

Scala/Clojure/Groovyで即時関数

あまり意味のない小ネタです。JavaScriptで使われるテクニックとして、即時関数というものがあると思います。こういうやつですね。 immediate_func.js (function (firstName, lastName) { println("Hello! [" + firstName + " " + lastName + "]"); })("Taro…

Netty Http Snoop Clientを、SSL化する

せっかくなら、クライアント側もやってしまえ、ということで。 http://d.hatena.ne.jp/Kazuhira/20120610/1339323448クライアント側のSSLContextを作成するために、HttpsContextFactoryに修正を加えます。 HttpsContextFactory.scala import java.io.{Buffer…

Netty Http Snoop Serverを、SSL化する

そろそろ、Nettyを使ったSSLサーバの作成をやってみようと思います。ExampleのHTTP(Snoop)は、SecureChatで使用しているSSL系のクラスを使用していますが、今回はkeytoolで作った証明書を使って、SSL化します。では、まずKeyStoreを作成します。KeyStoreの…

NettyでChat Server/Clientを書く

久々のNettyネタです。まあ、写経ですが…なかなかNettyネタだけで突っ走るのも難しいのですが、知識が衰えないように時々書いておかないと(笑)。Nettyのサンプルとして、SecureChatというのがあるのですが、今回はこれを書いてみようと思います。ただ、今…

isInstanceOf、asInstanceOfをnullに対して適用すると?

Nettyのコードを写経したりといった、Java関連のコードを置き換えている時にいつも気になっていたので。 *コメントいただいたので、もう少し内容を見直しましたScalaでは、Javaでいうinstanceof演算子とキャストがそれぞれAny#isInstanceOf、Any#asInstance…

Clojure(とScalaとGroovy)でEcho Serverを書く

Clojureの入出力系の関数を一通り目を通した(と思っている)ので、ちゃんとアプリっぽいものを書いてみようとClojureでEcho Serverを書くことにチャレンジしてみました。今回のEcho Serverの動作は、以下の通りです。 起動引数にポート番号、またはホスト名…

sbt 0.11.3とxsbt-web-plugin 0.2.11.1でサーブレットプログラミング

以前sbtでサーブレットプログラミングの環境構築に関するエントリを書いたのですが、xsbt-web-pluginのバージョンが0.1から0.2に変わった時にコマンドが変わったらしく、当時のエントリを参照してもうまく動かないという記述をちらほらと見かけるようになっ…

Scalaで正規表現

今まであまり触れてこなかったので、メモを兼ねて試してみることにしました。 普通にメソッド呼び出し val targetString = "Hello 1234 World 5678" val numberPattern = """\d+""".r val alphaPattern = """[a-zA-Z]+""".r // Regex#findFirstIn => Option[…

Nettyで簡易HTTPサーバを書く

久しぶりにNettyネタです。まあ、今回は写経ものですが。ところで、今年の1月頃にNettyを触っていた時はバージョン3.3.0.Finalだったのですが、今はすでにバージョン3.4.2.Finalとなっています。上がるの早いなぁ…。んで、今回はHTTPサーバを書いてみたいと…

Groovy、Clojureでもっと関数合成(オマケでScala)

珍しくトラックバックなどいただいたので、もうちょっとこのネタを書いてみることにしました。関数合成して何が嬉しいのか…ですが、前の例みたいな足し算、掛け算なんか書いても、確かにあんまりまあ現実味ないですからねぇ。それに、こういう単純なメソッド…

Groovy、Scala、Clojureで関数合成

あまり使ったことがないので、メモを兼ねて試してみます。 Groovy Groovyの場合は、Closureクラスのインスタンスを合成します。使用するメソッドは、leftShift(>)です。 def add2 = { x -> x + 2 } def multiply3 = { x -> x * 3 } def multiply3AndAdd2 =…

superキーワードで、呼び出す継承元クラスまたはMix-inしたトレイトを指定する

ちょっとしたことから、Scalaのscala.collection.MapLikeのソースを見ていたのですが、こんな記述があるのを見つけました。 // Source from Scala 2.9.2 ... package scala.collection import generic._ import mutable.{ Builder, MapBuilder } import anno…

IntelliJ 11でfscを使う

以前に、IntelliJでfscとsbtの設定方法をまとめたことがありましたが、ちょっと前にリリースされたIntelliJ 11の新機能に以下のような記載がありました。 Fast Scala Compiler support (FSC) http://www.jetbrains.com/idea/whatsnew/index.html はて?前もf…

Scalaのfor式で扱えるクラスを書いてみる

ちょっと前に、Continuationモナドの勉強ってことでファイル入出力の例を写経しつつ、自分でも少し書いてみました。今度は、for式に使えるクラスを自分で書けるようになることも目的にしつつ、もうちょっと実装難易度を下げてfor式で入出力を扱えるようなプ…

Pipelineに組み込まれたChannelHandlerの実行順を確認する[クライアント編&まとめ]

前に、NettyのTelnetサーバのサンプルを写経して、Pipelineに組み込まれたChannelHandlerがどういう順番に呼び出されていくのかを確認しました。今度は、クライアント側を見ていこうと思います。というわけで、TelnetクライアントのサンプルをScalaでアレン…

NettyでPipelineの構成を動的に変更する

前回は、Pipelineに組み込まれたChannelHandlerがどう呼ばれているのかをトレースしました。今度は、Pipeline内のChannelHandlerを動的に変更してみたいと思います。これ自体は、実は前にWebSocketの例を写経した時に書いているんですよね。まあ、当時は「何…