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

sbt(simple-build-tool) のカスタムアクションでScalaのビルドを制御する

sbt の導入については blog1.mammb.com を参照してください。 カスタムアクション sbt のアクション(compile, test, run など)は、sbt.DefaultProject.scala という Scala コードにて定義されています(実際には BasicScalaProject という抽象クラス)。この D…

MacPorts で Scala 2.8 のインストール

port install Scala2.8 から scala27 と scala28 の 2つが選べるようになってます。 port search scalascala27 @2.7.7 (lang, java) The Scala Programming Language scala28 @2.8.0 (lang, java) The Scala Programming Language scala28 をインストール。 …

MacPorts のインストール

etc

MacPorts FreeBSD の ports、apt や yum と同類のパッケージ管理システムです。インストールしてあったかどうかも定かでなかったのでメモとして残しとこ.. Xcode Tools Xcode Toolsをインストールしておく。 OSのインストールディスクの Xcode Tools/XcodeTo…

MacVim のインストールと環境設定

etc

MacVim-KaoriYa 「香り屋さんのWindows版の使い勝手に近いMacVim」として dmg で公開してくれてます。 http://code.google.com/p/macvim-kaoriya/インストールは上記からdmgを落としてインストール(MacVim.app を アプリケーション フォルダにドロップ)する…

Scala 2.8.0 の先に

Scala 2.8.1 2.8のバージョンアップで大きな問題は発生しなかったが、2010年9月から10月を目処にの小規模のバグフィックスリリースが予定されているとのこと。 Scala 2.9 ライブラリの強化を行い 2010年の12月から2011年の1月を目処にリリースが予定されてい…

覚えてられないCSSに関するメモ#1

etc

CSSの読み込み link要素でCSSファイルを読み込む <link rel="stylesheet" type="text/css" href="css/styles.css" /> importでCSSファイルを読み込む <style type="text/css"> @import "css/style.css"; </style> CSSの文字コード指定 CSSファイルの1行目に以下を記述することでCSSの文字コードを指定 @charset "UTF-8"; 1行目じゃなきゃだめ セレクタ 名前 </link>…

関数プロトタイプの拡張

Function.prototype の拡張 Function.prototype に methodメソッドを追加することで prototype オブジェクトにメソッドを追加できる。以下の例では該当するメソッドが存在しなかった場合に指定したメソッドを追加する。 Function.prototype.method = functio…

値のデフォルト値

undefined にデフォルト値を設定 存在しないメンバを取得しようとすると undefined が返される。||を使ってデフォルト値を設定することができる。 flight.departure; // undefined flight.departure || "None"; サンプル <html lang="ja"> <head> </head></html>

Scala IDE for Eclipse for Scala 2.8

Helios 実験的サポート Scala IDE for Eclipse が Helios 実験的サポートになってたので入れてみた。nightly だけど・・ The Scala IDE のアップデートサイト http://download.scala-ide.org/nightly-update-helios-2.8.0.final パースペクティブで Scala 選…

URLにマッチする正規表現

etc

/^(?:([A-Za-z]+):)?(\/{0,3})([0-9.\-A-Za-z]+)(?::(\d+))?(?:\/([^?#]*))?(?:\?([^#]*))?(?:#(.*))?$/

reflectionToString で再帰的出力

ToStringBuilder の reflectionToString たとえばこんなコード List<Hoge> l = Arrays.asList(new Hoge("S1", 1), new Hoge("S2", 2)); Bar bar = new Bar(100, l); System.out.println(ToStringBuilder.reflectionToString(bar)); 以下のような出力が得られる。 e</hoge>…

Cassandra を Java から使う

プロジェクト作成 Eclipse からの利用。新規Javaプロジェクト作成し、cassandra の lib 配下の jar をコピーしてクラスパスに追加します。conf ディレクトリを作成し、log4j.properties と storage-conf.xml を作成します。log4j.properties は以下の内容 lo…

最近話題の NoSQL Cassandra を試す

etc

Apache Cassandra とは Cassandra は最近取りざたされている NoSQL(Not only SQL) の一つです。Key Value Store のデータベースでスケーラビリティに優れています。公式サイトは http://cassandra.apache.org/ となり、現在バージョンは 0.6.2 となっていま…

Scala IDE for Eclipse for Scala 2.8.0.RC4

The Scala IDE for Eclipse for Scala 2.8.0.RC4 available now ということで、Eclipse Helios (3.6 RC4) に入れてみた。 Scala IDE のサイト http://www.scala-ide.org/ では"Eclipse 3.6 is not yet supported"とうたわれているが、入れちゃいます。 The S…

ProcessBuilder は使いたくはないけど・

ProcessBuilder は使いたくはないけど致し方ない場面がありますね。 ProcessBuilder ProcessBuilder は標準出力や標準エラー出力から読み出さずにいるとロックしたりしてあんまり気軽に使えなくて、いつも以下のようなの作るはめになるので書いとこ・・ impo…

リモートシェルの終了ステータス

ssh を使うので利用機会は無いと思うけど・・ リモートシェルの利用確認 リモート側でechoして接続確認。 #!/bin/sh rsh host "echo test > /dev/null" if [ $? -n 0 ]; then echo "Connection faild." 1>&2 exit 1 fi リモート先のログインシェルを強要する…

Thred からデバッグ情報を取得する

Thredからのデバッグ情報の取得 Thread のスタック情報から現在のメソッド名や行数などのデバッグ情報を取得。 public class Debug { public static String currentFile() { return Thread.currentThread().getStackTrace()[2].getFileName(); } public stat…

メソッドの戻り値推論

これは普通に戻り値 4 def method() = { 2 * 2 } println(method) // 4 これも戻り値 4 def method() = 2 * 2 println(method) // 4 こうするとUnit def method() { 2 * 2 } println(method) // () こうすると当然戻り値 4 def method():Int = { 2 * 2 } pri…

foldLeft と foldRight のエイリアス

foldLeft 初期値を1として、arrの和を得る。 val arr = List(2, 3, 4) arr.foldLeft(1){(x, y) => x + y} 1 + 2 + 3 + 4 で 10 となる。短く書くと、 arr.foldLeft(1)( _ + _ ) foldLeft には /: というエイリアスがあり、以下のように書ける。 (1 /: arr){_…

可変長引数としてリストを渡す

可変長引数の定義 可変長引数にするには以下のように書けば def output(strs: String*) { strs.foreach(print) } output("hge1 ", "hoge2 ", "hoge3 ") 以下の出力が得られます。 hge1 hoge2 hoge3 List[String]を渡す 可変長引数を取る関数にListを渡すと、…

Scala の各種起動方法

今更ながらScalaの起動方法まとめ。 Scala インタープリタ ちょいと試すにはインタープリタ。 >scala Welcome to Scala version 2.8.0.RC2 (Java HotSpot(TM) Client VM, Java 1.6.0_12). Type in expressions to have them evaluated. Type :help for more …

vim の Scala プラグイン

sbaz にて scala-tool を取得すると、各種ツールのプラグインが入手できます。ここでは vimプラグインを適用してみます。 sbaz によるscala-tool-supportの取得 以下のコマンドにてscala-tool-supportを取得します。 > sbaz install scala-tool-support plan…

eclipse のScalaプラグインがバギーなのでNetBeanプラグインを試してみた

scala 2.8 のダウンロード http://www.scala-lang.org/downloads から最新版ダウンロード(scala-2.8.0.RC2.zip) パスにスペースを含まないディレクトリに解凍。ここでは C:\scala\scala-2.8.0.RC2 とした。 環境変数に以下を設定 SET SCALA_HOME=C:\scala\sc…

trait のミックスインはwithだけのがきれいだと思うのですが

トレイトのミックスインには extends か with を使いますが、何が違うのでしょうか。以下のトレイトがあった場合、 trait traitA trait traitB Foo クラスに traitA をミックインするには以下のようにします。 class Foo extends traitA traitB のミックイン…

型パラメータの境界とは

パラメータ境界 型パラメータには以下の3つの境界が設定できる。 上限境界(upper bound) 例 hoge[A <: T] A が T のサブタイプでなければならない 下限境界(lower bound) 例 hoge[A >: T] A は T のスーパータイプでなければならない 可視境界(view bound) 例 hoge[A A が T として扱える(暗黙の型変換により変換可能または A が T のサブタ</:>…

型パラメータの変位指定

型パラメータの変位 型パラメータには + や - の変位アノテーションを付けることで変位指定ができる。型パラメータの変位には以下の3つがある。 不変(nonvariant) : [A] 共変(covariant) : [+A] 反変(contravariant) : [-A] 不変 不変とした場合、funcの引数…

Scala における列挙(Enumeration)

Scala の列挙サポート Scala では列挙を言語の構文としてではなく、scala.Enumerationというライブラリとして提供している。Color の列挙を定義するには以下のようにする。 package etc9 object Color extends Enumeration { val Red, Green, Blue = Value }…

Scalaのためのシンプルなビルドツール SBT

SBTとは SBT(simple-build-tool)はScalaのためのシンプルなビルドツールです。google code でホストされています。 http://code.google.com/p/simple-build-tool/今回はWindows環境にてSBTを使用してみます。現在の最新版である sbt-launch-0.7.3.jar を使用…

Scala の JDBC ライブラリ scala.dbc について

scala.dbc は Scala に添付のデータベース操作用のライブラリです。ORM ではなくて、JDBCのラッパです。メンテナンスもあまりアクティブでないため、そのうち無くなると思いますが、SQL を DSL のようにタイプセーフで書けるので勉強になるかも・一応 H2 を…

関数は Function トレイトである

第一級関数 Scala において、関数は第一級関数 first-class function です。第一級関数なので、関数を値の様にして扱うことができます。例えば以下のように関数を f という値として定義できます。 val f:Int=>Int = x=>x*x println(f(3)) 結果は 9 が出力さ…