木曜日, 6月 25, 2009

[Scala] RichString!

動作は遅いのかもしれませんが、
      val tmpStr:String = '^'+args(0)+".*";
val objStr = tmpStr.r;
println(aryTmp.filter{w => {
w match {
case objStr() => { true;}
case _ => { false; }
}
}}(0));
というのが、一行で書けるScalaのRichStringは、やはり魅力です。
      println(aryTmp.filter{x => x.startsWith(args(0))});
特に意識せずに使う文字列型がコレ、というのはしかし、考えようによってはやり過ぎですが。。まぁLLと捉えればまったくありかと。

追伸:
 きちんとsplitなんかもあって。本当にLL感覚でいけて嬉しいです。

日曜日, 6月 21, 2009

[Scala] GAE/JのMemcacheサービス

Scalaで、なぜかGAE/JのMemcacheサービスをJCacheを経由して使う方法が分からない。
直接APIを使ってよいなら下のソースな感じで大丈夫なのだけど。
import com.google.appengine.api.memcache._

class memcached {
val cache:MemcacheService = MemcacheServiceFactory.getMemcacheService();

def setValue(strKey:String,strValue:String) = {
cache.put(strKey,strValue);
}

def getValue(strKey:String):String = {
cache.get(strKey).asInstanceOf[String];
}

}

JCache経由にしようとしたら、出てしまうエラー。Kってjava.util.MapのKっぽいんだけど解決方法が分からない。。
 ~snip~
[scalac] D:\work\workspace\test\src\com\digipepper\memcached.scala:51: error:
type mismatch;
[scalac] found : String
[scalac] required: K
[scalac] cache.put(key, value);
[scalac] ^
 ~snip~
お分かりの方は是非コメントください。一部ではGAE/JをPythonで使うべきかJavaで使うべきか、から発展した大変な議論が巻き起こったようですが、私はのんびりとScalaでがんばります。

土曜日, 6月 20, 2009

[Scala] GAE/JのMailサービス

本文は普通に日本語文章を与えたらOK。サブジェクトだけ自分でいじることにしました。
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;

class sendmail(strFrom:String) {

var props:Properties = new Properties();
var session:Session = Session.getDefaultInstance(props, null);

def send(strTo:String, strSubject:String, strBody:String) {
try {
var msg:Message = new MimeMessage(session);
msg.setFrom(new InternetAddress(strFrom));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress(strTo, "Mr. User"));

msg.setSubject(MimeUtility.encodeText(strSubject,"iso-2022-jp","B"));
msg.setText(strBody+"\n");

Transport.send(msg);

} catch {
case e:AddressException => printf("Exp_A(%s)\n", e.getMessage)
case e:MessagingException => printf("Exp_B(%s)\n", e.getMessage)
case e => e.printStackTrace
}
}
}
エラー処理とかとても適当ですが、何かの参考に。

[Scala] Eclipse+GAE/Jで最初にやること

GoogleAppEngineのアプリをEclipse+Scalaで開発するとき、ScalaとGAEのアドオンを入れた最初の状態では、GAEのEnhancerが失敗する(ファイルを保存する度にコンソールで「エンハンスするクラスファイルが見つからない/CLASSPATH変えろ」と言われ続ける)。
そんなときには、"eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.2.1.v200905131143\appengine-java-sdk-1.2.1\lib\tools\orm"など、GAEのプラグイン内のライブラリフォルダにScalaのライブラリを入れておくことで解決できます。

日曜日, 6月 14, 2009

[Solr] GoSenを修正!

たぶん、全文検索ライブラリluceneに入った修正(LUCENE-1636)のために、先のgosenセットがtrunkのSolrが起動すら出来なくなっていました(IllegalAccessExceptionがPosFilter初期化時に発生!)。今日までupdateしてなかったので気が付かず。

で、読めないJavaをなんとなく眺め、結局、本体の似たようなFilterのソースと同じ初期方法にかえる(superを呼ぶだけにする)ことで解消できている様子。なので、新lucene-ja-gosenセットとして置いておきます。

よかったー。と直したのはいいけど、結局(Solrの)v1.4はいつ出るんだろう。。。

月曜日, 6月 08, 2009

[Linux] libproxy

ブラウジングでロケーションが変わるとよく問題となる"Proxy情報(どうやったらインターネットにつなげるの?)の取得"は、当然アプリを自作するときもとても手間な部分です。これをサポートするライブラリが有りました。
http://code.google.com/p/libproxy/

via kwout

WPADって規格もあるんですね。