ダーツ

久しぶりにやった。手を伸ばす、狙いをつける、ぱっと手を離す、といったあたり気をつけてできるようになりたい。

com.sun.net.httpserver.HttpServer

Java SE 6 から、com.sun.net.httpserver.HttpServer という簡易Webサーバが内蔵されているということなので、それを使ってみる簡単なプログラムを作成してみました。Jettyを使うまでもないときに重宝しそうです。

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class Httpd {
  final static private int PORT = 8081;
  private String message = "Hello com.sun.net.httpserver.HttpServer.";
  private HttpServer server;
  private HttpHandler handler;
  public Httpd() {
    handler = new HttpHandler() {
      public void handle(HttpExchange he) throws IOException {
        System.out.print(new java.util.Date());
        OutputStream os = null;
        try {
          os = he.getResponseBody();
          he.sendResponseHeaders(200, 0);
          os.write(message.getBytes());
        } finally {
          if (os != null) os.close();
        }
        System.out.println("\t" + message);
      }
    };
  }
  public void run() {
    try {
      server = HttpServer.create(new InetSocketAddress(PORT), 0);
    } catch (IOException e) {
      e.printStackTrace();
    }
    server.createContext("/", handler);
    server.start();
  }
  public static void main(String[] args) {
    try {
      Httpd httpd = new Httpd();
      httpd.run();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

ブラウザで http://localhost:8081/ へアクセスすると、下記のような実行結果になります。

>java Httpd
Sat Apr 03 15:03:09 JST 2010    Hello com.sun.net.httpserver.HttpServer.

ブラウザには下記メッセージが表示されます。
Hello com.sun.net.httpserver.HttpServer.

4/2

もうすでに3月が終わって、4/2になってしまった。早すぎる…

4/1

エープリルフールのメールを出したら、返事が返ってこなかった。

Perl配列

Perlの配列変数は、@で始まります。添字は0から始まります。

$ cat array.pl
#!/usr/bin/perl
@a = ( ‘Perl’, ‘Java’ ); 
$a[2] = ‘Ruby’;
@a[3..4] = ( ‘Python’, ‘C’ );
print "\@a:";
print @a;
print "\n\$a[0]:";
print $a[0];
print "\n\@a[0..2]:";
print @a[0..2];
print "\n";

実行結果は次の通り

$ ./array.pl 
@a:PerlJavaRubyPythonC
$a[0]:Perl
@a[0..2]:PerlJavaRuby

perlの$_

下記のread_stdio_x.plとread_stdio_d.plは同じ動作をします。最初のプログラムでは変数xを使っていますが、これを省略することができます。省略した場合は、「x」の代わりに「$_」という変数が使われます。

$ cat read_stdio_x.pl 
#!/usr/bin/perl
while ($x = <STDIN>) {
  print $x;
}
$ cat read_stdio_d.pl 
#!/usr/bin/perl
while (<STDIN>) {
  print;
}

$ chmod 755 read_stdio_*.pl 
$ ./read_stdio_x.pl
abc
abc
^C
$ ./read_stdio_d.pl 
def
def
^C

プログラムを停止するには、キーボードで[Ctrl]と[C]を同時に押します(画面上の^Cは、その意味です)。