CLOVER🍀

That was when it all began.

2012-01-01から1年間の記事一覧

Netty Http Snoop Clientを、SSL化する

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

Clojureでコードのロード系関数+evalを扱う

少し前にこういうエントリを書きました。その後、元にしたブログのエントリを見ていると、evalとかそういう方向に流れていて、この時に自分が取った方法は随分と遠回りだったことがわかりました。つか、evalの発想がなかった…。まだまだ考え方は静的言語って…

Netty Http Snoop Serverを、SSL化する

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

Clojureの条件分岐を覚える

ifとかwhenとかcaseとかいろいろあって、いつも迷うので1度しっかり見てみることにしました。代表的そうなものを、以下順に。 if 最も単純な条件分岐です。最初に条件式を書き、次に条件がtrueとなった場合の処理、その次にelseの処理を書きます。戻り値は、…

NettyでChat Server/Clientを書く

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

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

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

Clojureの関数を、文字列での名前から動的に呼び出す

面白そうなチャレンジを見つけたので、別のアプローチでやってみることにしました。 *記事を執筆後、ちょっと書き直しました http://npnl.hatenablog.jp/entry/2012/06/02/150513元の記事は、文字列からシンボルを作って、それを評価しようとして四苦八苦さ…

引数違いのClass#forNameの挙動を確認する

最近、仕事でのトラブルからクラスローダー周りについて調べたことがあり、何気なく使っていたClass#forNameとかClassLoader#loadClassの挙動について1度確認したくなりました。そういえば、Class#forNameってforName(String)とforName(String, boolean, Cla…

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に変わった時にコマンドが変わったらしく、当時のエントリを参照してもうまく動かないという記述をちらほらと見かけるようになっ…

Clojureで入出力を扱う(clojure.java.io)

今回は、Clojureの入出力系の関数の中でも、比較的プリミティブなclojure.java.io名前空間の関数を扱ってみたいと思います。 file java.io.Fileを作成する関数です。 (use '[clojure.java.io :only (file)]) (println (class (file "clj_java_io.clj"))) ;; …

Clojureで正規表現

土日とゴールデンウィークが仕事ばっかりで、全然更新できていませんでしたね…。なんとか時間が作れたので、久々の更新です。前回のScalaの正規表現に続き、Clojureの正規表現を使ってみようと思います。Contribは見ずに、標準関数のみです。 re-pattern(ja…

Clojureで入出力を扱う(clojure.core)

Clojureのcoreライブラリの中でも、日常で比較的使いそうなIO系の関数をちょっと調べてみました。 read-line 標準入力から1行読み込みます。以下、サンプル。 (print "type keyword => ") (flush) (def line (read-line)) (print (str "Your typed => " line…

Scalaで正規表現

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

Ubuntu 12.04 LTSにOracle JDK7をインストールする

昨日、うちで使っているUbuntu Linuxを12.04にアップグレードしたのですが、それでもソフトウェアセンターにJDK7が入っていないので、手動でもインストールすることにしました。参考にしたのは、このサイトです。 http://www.webupd8.org/2012/01/install-or…

Nettyで簡易HTTPサーバを書く

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

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

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

Clojureで特定のパッケージ配下のクラスを検索する

なんとなく始めてみた、同じテーマでのリライトシリーズ第3弾、最後はClojureです。Javaから始めてScala、Groovyと続きましたが、Clojureが1番苦労しました…。イミュータブルなデータ構造を基本にプログラミングすることに慣れていないということを、嫌とい…

Groovyで特定のパッケージ配下のクラスを検索する

以前、JavaとScalaで同じようなタイトルのエントリを書いたことがありましたが、これには元ネタがあって、そちらは実はGroovyだったりします。元々、仕事でクラスをディレクツリーを辿って動的に走査して、見つかったクラスの継承関係やらアノテーション付与…

Groovy、Scala、Clojureで関数合成

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

Clojure 1.3.0インストール

久々に、Clojureを触ってみたくなりまして。1.1、1.2の頃は触っていたのですが、このところ全然だったので、Clojure 1.3.0をインストールすることにしました。とりあえずスクリプト的に使うことをメインにするので、Leiningenはいったん置いておきます。まず…

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

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

Emacsでのファイルの再読み込み・文字コード指定関連のTips

これまた、覚えられないキーの方々。 Emacsでカレントバッファのファイルを再読み込みする キー 意味 C-x C-v カレントバッファを別のファイルで置き換える(=そのまま同じファイルを開くと、再読み込み) M-x revert-buffer カレントバッファを捨てて、フ…

Emacsで矩形編集を行う

全然キーが覚えられない、矩形編集です。まずは、標準のキー操作で。矩形選択の最初は、通常のマーク付け(C-Space)で開始します。 キー 意味 C-x r t 矩形の先頭に文字を挿入 C-x r d 矩形領域を削除 C-x r k 矩形領域を削除して、キルリングに追加 C-x r …

Emacsのバッファ・ウィンドウ操作の基本を覚える

続いて、バッファ操作の基本をまとめておきます。バッファ一覧はよく使っていますが、バッファの選択しか使ってなかったので…。まずは、カレントバッファ上で作業する場合。 キー 意味 C-x b バッファを名前を指定して切り替える(デフォルトは、ひとつ前に…

Diredの基本操作を覚える

Emacsを使っている、使っているとは言いつつも、これまであまり大して使いこなせていなかったと思います。ホント、ちょっと便利なエディタ程度な使い方をしてますね。最近、こんな本を買って読んでみて、これならちょっとずつ進めそうな感じがしてきたので頑…

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式で入出力を扱えるようなプ…

Python実行時のバイトコードコンパイル(.pycファイル)の生成を抑止する

例えば、以下のようなモジュールをimportするPythonスクリプトがあったとして… #!/usr/bin/python # -*- coding: utf-8 -*- import hoge print 'Hello World!' インポートされる側。 #!/usr/bin/python # -*- coding: utf-8 -*- print 'hoge' これを実行する…

Pythonでカリー化を書いてみる

なんとなく、書いてみたくなったので。カリー化というのは、複数の引数を取る関数を、最初の引数のみ与えると残りの引数を取る関数に変換すること…です。なんか、書くより例を見た方が早いので…。例えば、こういう関数があったとして… def add(x, y): return…