2012年5月30日水曜日

JSON in Javaのサンプル

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class JSONTest {

 public static void main(String[] args) {
  JSONObject chat = new JSONObject();
  JSONArray messages = new JSONArray();
  JSONObject message = new JSONObject();
  try {
   chat.put("username", "fc");
   chat.put("chat", messages);
   messages.put(message);
   message.put("username", "user1");
   message.put("message", "hello");
   System.out.println(chat.toString());
  } catch (JSONException e) {
   e.printStackTrace();
  }

 }

}
JSONライブラリには色々ありますがJSON公式のorg.json.*パッケージをまずは使いますよね? ライブラリはJSON in Javaから入手できます。 このうちJSONObjectとJSONArrayを使ったサンプルプログラムを作ってみました。 これを動かすと以下のようなJSONが出力されます。 たぶん複雑になると直に書くより楽になるはず。
{"username":"fc","chat":[{"message":"hello","username":"user1"}]}

setIntervalとclearIntervalのサンプル

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-31j">
<title>Count Test</title>
</head>
<body>
 <script language="JavaScript">
  var id = setInterval("count()", 300);
  var i = 0;
  function count() {
   var counter = document.getElementById("counter");
   counter.value = i;
   i++;

  }
  function stop() {
   clearInterval(id);
  }
 </script>
 <input type="text" id="counter"></input>
 <button type="button" onclick="stop()">stop</button>
</body>
</html>
ただカウントしていってボタンを押すとストップするだけです。 Count Test

2012年5月19日土曜日

HelloWorld(Socket編)

Socketを使ったHelloWorldです。
クライアントがサーバにアクセスするとhelloという文字列が返却されます。

ServerTest.java
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTest {
 public static void main(String[] args) {
  int port = 5000;
  try {
   ServerSocket serverSocket = new ServerSocket(port);
   while (true) {
    Socket socket = serverSocket.accept();
    OutputStream os = socket.getOutputStream();
    DataOutputStream dos = new DataOutputStream(os);
    dos.writeBytes("hello");
    socket.close();
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}
ClientTest.java
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import java.net.Socket;

public class ClientTest {
  public static void main(String[] args) {
  String host = "localhost";
  int port = 5000;
  Socket socket = new Socket();
  try {
   socket.connect(new InetSocketAddress(host, port));
   InputStream is = socket.getInputStream();
   DataInputStream dis = new DataInputStream(is);
   byte[] buffer = new byte[1024];
   StringBuffer sb = new StringBuffer();
   int length = 0;
   while ((length = dis.read(buffer)) != -1) {
    sb.append(new String(buffer, 0, length));
    System.out.println(sb.toString());
   }
   socket.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}

2012年5月14日月曜日

Cookieの参照方法(Chrome編)


ChromeでCookieの参照方法を調べたところ3つあったのでメモします。

1)JavaScript documentオブジェクトを参照する。
 
 ①アドレス欄にjavascript:document.cookie;と入力する。

 こちらはどのブラウザでも確認できると思います。

2)開発ツールを利用する。

 ①右クリック後に要素を検証を選択。
 ②Developer Toolsダイアログの表示後にResourcesタブを選択。
 ③Cookiesの要素を選択するとCookieの内容を確認できる。

3)設定画面から確認する。

 ①設定画面を開く。
 ②高度な設定を選択する。
 ③コンテンツの設定を選択。
 ④すべてのCookieとサイトデータを選択。

 これを確認するとすべてのCookieとサイトデータ(ローカルストレージなど)が確認できます。

 動作をみるとタブごとにCookieの情報は保持していて新しいタブを開いて新規のURLにアクセスする
 とすべてのCookieとサイトデータからアクセスしようとしているURLに対応しているCookieを
 取り出して新しいタブから他のタブですでにログインしているサイトにアクセスしている場合も
 ログイン状態などを確保しているようだ。

 Cookieの実際のデータはSQLiteを利用しているのでそれを直接見る方法も考えられるが
 少しめんどくさそうなのでやめておく。。

2012年3月13日火曜日

JavaPathFinderのインストール方法(コマンドライン編)

Debian LinuxにJavaPathFinderをコマンドラインで動くようにインストールしたのでメモします。

1) /etc/apt/source.listを修正

   SunのJDKをインストールするため/etc/apt/source.listの以下記載を修正

[修正前]deb http://ftp.jp.debian.org/debian/ squeeze main
[修正後]deb http://ftp.jp.debian.org/debian/ squeeze main non-free

2)リポジトリを更新

> apt-get update 

3)JDK6をインストール

> apt-get install sun-java6-jdk

4)利用するJavaを変更する

以下コマンドよりインストールしたSunのJavaを選択する。
> update-alternatives --config java 

選択するJavaのパスは以下。
/usr/lib/jvm/java-6-sun/jre/bin/java 

JavaPathFinderのビルドはSunのJavaに

5)Antをインストール

> apt-get install ant

6)Mercurialをインストール

> apt-get install mercurial

7)JPFをクローン

> hg clone http://babelfish.arc.nasa.gov/hg/jpf/jpf-core

8)ビルド

クローンしたjpf-coreフォルダに移動してantコマンドを実行

9)サンプルを動作確認

> bin/jpf HelloWorld

以下のように表示されたらインストール完了

JavaPathfinder v6.0 (rev 679) - (C) RIACS/NASA Ames Research Center


====================================================== system under test
application: HelloWorld.java

====================================================== search started: 12/03/13 22:27
I won't say it!

====================================================== results
no errors detected

====================================================== statistics
elapsed time:       00:00:00
states:             new=1, visited=0, backtracked=1, end=1
search:             maxDepth=1, constraints hit=0
choice generators:  thread=1 (signal=0, lock=1, shared ref=0), data=0
heap:               new=319, released=11, max live=319, gc-cycles=1
instructions:       2902
max memory:         15MB
loaded code:        classes=74, methods=956

====================================================== search finished: 12/03/13 22:27

10)任意のクラスを検証する場合

> <jpf-core-dir>/bin/jpf +classpath=. <application-main-class>



2012年2月20日月曜日

2012年2月16日木曜日

レジ

レジでものすごい量の商品を買う人の後ろで待っているとすごく時間がかかってしまった。こんな時はRFIDを利用したレジがあればすぐに清算が終わるのになあと思ってしまった。けれどキウイを数えたりする場合など生ものの場合は扱うのが難しそうだ。またRFIDのレジが普及してもレジの人がいなくなるのはさびしい気がした。それにしてもRFIDのレジは結構昔からできているはずだけどなんで普及しないのだろう。