Skip to content

Instantly share code, notes, and snippets.

@taichi
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save taichi/11133472 to your computer and use it in GitHub Desktop.
Save taichi/11133472 to your computer and use it in GitHub Desktop.
起動引数として受け取ったURLを短縮して標準出力し、その短縮したURLに対するリダイレクトを提供するサーバをエラー処理しないことで、どれだけ短く書けるかという遊び。言語に付随する標準APIのみを利用して実装すること。
public class Rx {
public static void main(String[] args) throws Exception {
rx.Observable.from(args)
.map(s -> java.util.Arrays.asList(Integer.toHexString( s.hashCode()), s))
.reduce(com.sun.net.httpserver.HttpServer.create(new java.net.InetSocketAddress(8080), 0), (s, e) -> {
System.out.printf("http://localhost:%d/%s -> %s%n",s.getAddress().getPort(), e.get(0), e.get(1));
return s.createContext("/" + e.get(0), ctx -> {
ctx.getResponseHeaders().add("Location", e.get(1));
ctx.sendResponseHeaders(302, 0);
ctx.close();
}).getServer();
}).subscribe(serv -> serv.start());
}
}
args.collect {return [ k: Integer.toHexString( it.hashCode()), v:it ]}.inject(com.sun.net.httpserver.HttpServer.create(new InetSocketAddress(8080), 0), { s, e ->
println "http://localhost:$s.address.port/$e.k -> $e.v"
return s.createContext("/$e.k", {
it.responseHeaders["Location"] = e.v
it.sendResponseHeaders(302,0)
it.close()
} as com.sun.net.httpserver.HttpHandler ).server
}).start()
public class Us {
public static void main(String... args) throws Exception {
java.util.stream.Stream.of(args)
.map(s -> java.util.Arrays.asList(Integer.toHexString( s.hashCode()), s))
.collect(Us::create, (s, e) -> {
System.out.printf("http://localhost:%d/%s -> %s%n",
s.getAddress().getPort(), e.get(0), e.get(1));
s.createContext("/" + e.get(0), ctx -> {
ctx.getResponseHeaders().add("Location", e.get(1));
ctx.sendResponseHeaders(302, 0);
ctx.close();
});
}, (f,b) -> {}).start();
}
static com.sun.net.httpserver.HttpServer create() {
try {
return com.sun.net.httpserver.HttpServer.create(new java.net.InetSocketAddress(8080), 0);
} catch(Exception e) {
throw new RuntimeException(e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment