Skip to content

Instantly share code, notes, and snippets.

View takawitter's full-sized avatar

Takao Nakaguchi takawitter

View GitHub Profile
@takawitter
takawitter / Sample.java
Created June 27, 2012 12:30
Trie4J sample code
import org.trie4j.doublearray.DoubleArray;
import org.trie4j.louds.LOUDSTrie;
import org.trie4j.patricia.simple.PatriciaTrie;
public class Sample {
public static void main(String[] args) throws Exception{
PatriciaTrie pat = new PatriciaTrie();
pat.insert("Hello");
pat.insert("World");
pat.insert("Wonder");
@takawitter
takawitter / LimitClassReferenceWhenDeserializingObject.java
Last active November 11, 2015 02:51
Limit class reference when deserializing object by using custom class loader.
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectStreamClass;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Paths;
import java.util.HashMap;
@takawitter
takawitter / Seimei.java
Last active December 12, 2015 12:09
姓名判断プログラム in Java8 lambda and stream interface
package seimei;
import jp.go.nict.langrid.commons.util.Pair;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
@takawitter
takawitter / MsgPackTest.java
Last active December 14, 2015 04:39
MessagePack JavaでListを使うテスト。
public class MsgPackTest {
public static void main(String[] args) throws Exception {
MessagePack msgpack = new MessagePack();
List<String> lines = Arrays.asList("hello", "world");
byte[] bytes = msgpack.write(lines);
msgpack.register(List.class, new ListTemplate(ValueTemplate.getInstance()));
for(Value v: (List<Value>)msgpack.read(bytes, List.class)){
System.out.println(new String(v.asRawValue().getByteArray(), "UTF-8"));
}
}
@takawitter
takawitter / gist:5477296
Created April 28, 2013 15:49
libディレクトリの全jarファイルをクラスパスとして連結。
Arrays.stream(new File("lib").listFiles(f -> f.getName().endsWith(".jar")))
.map(f -> f.getAbsolutePath())
.reduce(".", (l, r) -> l + File.pathSeparator + r)
@takawitter
takawitter / CpToUrls.java
Created May 22, 2013 02:27
classpathを":"で区切ってURL配列にする。CollectionUtilとかFunctionはservicegridのライブラリ(http://sourceforge.net/p/servicegrid/code/HEAD/tree/service-grid-server/trunk/jp.go.nict.langrid.commons/ )内のクラス。
URL[] paths = CollectionUtil.stream(Arrays.asList(cp.split(File.pathSeparator)))
.map(new Function<String, URL>() {
public URL apply(String value) {
try {
return new File(value).toURI().toURL();
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
})
@takawitter
takawitter / LZEnd.java
Created May 25, 2013 06:18
とりあえずLZ77.javaを改造してLZEndを実装。まだ完備辞書使ってないのでちゃんとしたLZEndではないし、圧縮率もめちゃ悪い(というかたいてい増える)。あと構築方法もLZEndのものとは異なる。でもLZEndの特徴であるランダムアクセスは実現できてるし、そのおかげで展開時に展開済み文字列にアクセスしなくても良いようになってる。
public class LZEnd {
static class Phrase{
public Phrase() {
}
public Phrase(int phraseNum, int ref, int len, char nonMatchedChar) {
this.phraseNum = phraseNum;
this.ref = ref;
this.len = len;
this.nonMatchedChar = nonMatchedChar;
}
@takawitter
takawitter / ScalaInvoke.java
Created June 13, 2013 23:51
JavaからScalaを呼び出すコード。カレントディレクトリ直下のlibディレクトリに関連ライブラリ(Scala本体含む)が入っている前提。 Settingsのclasspathに利用するライブラリのjar(Scala自体のもの含む)を追加して、setByUserをtrueに。それをIMainに渡すことでクラスパスが通る。 変数bind時の出力を押さえるためにquietBindを使ってる。
package scalatest;
import java.io.File;
import scala.tools.nsc.Settings;
import scala.tools.nsc.interpreter.IMain;
import scala.tools.nsc.interpreter.NamedParamClass;
public class ScalaInvoke {
public static void main(String[] args) throws Exception{
@takawitter
takawitter / gist:5895868
Last active December 19, 2015 04:18
ThreadPoolExecutorに値を返すlambda(or closure)をsubmitしたい。submit(Callable<T> task)が呼ばれればOKなんだけど、ThreadPoolExecutorにはsubmit(Runnable task)も存在するので、普通にlambdaを渡すと曖昧性が解消できない。そのためCallable<T>を明示する必要があるが、その方法が言語によって違うって話。 ScalaとJythonとJRubyは直接やる方法が無さそうなので、ラッパークラスをかましてる。
/*
* tp は Executors.newCachedThreadPool 等を使って生成
*/
// Rhino(JavaScript)
tp.submit(new Callable({call: function(){ return 1;}}));
// Groovy
tp.submit({1} as Callable)
@takawitter
takawitter / InvokeJavaFromScheme.java
Last active December 19, 2015 16:39
kawaでJavaオブジェクトのメソッドを呼び出す方法は複数あるけど、匿名クラス(やpublicではないクラス)の場合挙動が変わってくる。そのまとめ。kawaはのバージョンは1.13。
import kawa.standard.Scheme;
public class InvokeJavaFromScheme {
public static void main(String[] args) throws Throwable{
Scheme s = Scheme.getInstance();
// objにRunnableを実装した匿名クラスのインスタンスを設定。
// runメソッドはRunnableインタフェースのメソッドだから、問題なく呼べるはず。
s.define("obj", new Runnable(){
public void run() {
System.out.println("hello");