人気ブログランキング | 話題のタグを見る
JsTestDriverを使ったJavaScriptのテスト
JsTestDriverを使用するとJavaScriptの自動テストができます。
http://code.google.com/p/js-test-driver/

テストの手順は次のような感じです。
1.JsTestDriverのサーバーを起動します。
java -jar JsTestDriver.jar --port 4224

2.テストを実行したいブラウザで上記のサーバーに接続します。
FireFox、IE,Safariなど一度に複数のクライアントが接続できます。

3.テストを記述します。また、同時にフォルダの構成などを記述する設定ファイルを書きます。
このあたりの書き方は以下を参照
http://blog.asial.co.jp/1051

4.テストを記述したフォルダで以下のようなコマンドを実行します。
java -jar JsTestDriver.jar --tests all

これにより、現在、port4224に接続していた全クライアントのブラウザで同じテストがじっこうされます。


さて、問題はテストのログに日本語を使うと文字化けすることです。
http://qiita.com/opengl-8080/items/009eb0a2b89f3751ecd1

じつは、この問題は、パッチで回避できます。
http://confluence.jetbrains.com/display/WI/Patched+JsTestDriver-1.3.5
上記のページからJARファイルを直接ダウンロードもできますし、
1.3.5のバージョンに差分をあてる方法があります。
以下のソースをもとに
http://js-test-driver.googlecode.com/archive/v1.3.5.zip

下記の内容を適用してビルドすればよいでしょう。
http://git.jetbrains.org/?p=idea/contrib.git;a=blob_plain;f=JsTestDriver/lib/jstestdriver-core/jstd-1.3.5-issue-85-fix.patch;hb=HEAD

gitで開発中のバージョンをみると上記のパッチは次回のリリースに適用されそうな感じです。

テストケースのメソッド名は"test xxxx"とつけないと認識しないようだ。
TestCase("ObservableNotifyObserversTest", {
  "エラーが発生してもNotifyが実行される : function() {
    // これは認識しない
  },
  "test エラーが発生してもNotifyが実行される" :function() {
    // これは認識する
  }
});


# by mima_ita | 2013-12-29 21:23 | テスト
node.jsでチャットプログラムを作る
node.js で簡単なチャットをつくる。
こんな感じポーリングしないでリアルタイムに動く。

1.現在チャット中の部屋の一覧がでるので、名前と入りたいルーム名(もしくは新規の名前)を作って入室
node.jsでチャットプログラムを作る_b0232065_23461731.png
2.入室したら、色を適当に変えて発言しよう
node.jsでチャットプログラムを作る_b0232065_23471494.png
3.人さまからはこんな感じでみえる。
node.jsでチャットプログラムを作る_b0232065_23475532.png




More
# by mima_ita | 2013-12-27 23:57 | node.js
PythonでPostgresqlを操作する
目的
PythonでPostgresqlを操作する

環境
Python 2.x / 3.c
PostgresSQL 9.3
psycopg2をつかう
Windowsの場合は以下のページからダウンロードしてExeを実行
http://www.stickpeople.com/projects/python/win-psycopg/

テーブル定義
CREATE TABLE t01prefecture
(
  pref_cd integer NOT NULL,
  pref_name character varying(10),
  CONSTRAINT t01prefecture_pkey PRIMARY KEY (pref_cd)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE t01prefecture
  OWNER TO postgres;

PostgresSQLのユーザ定義関数
CREATE OR REPLACE FUNCTION test_sp(IN from_cd integer, IN to_cd integer)
  RETURNS TABLE(code integer, name varchar) AS
$$
DECLARE
BEGIN
    RETURN QUERY SELECT PREF_CD,PREF_NAME FROM t01Prefecture
            WHERE PREF_CD BETWEEN from_cd AND to_cd;
END;
$$ LANGUAGE plpgsql;

Python3.x
# -*- coding: cp932 -*-
# Winddows の場合は以下からダウンロード
#  http://www.stickpeople.com/projects/python/win-psycopg/
#

import psycopg2

try:
    cnn = psycopg2.connect("dbname=Sample001 host=localhost user=postgres password=xxxx")
    cur = cnn.cursor()

    #試験データの整理
    pref_cd = 100
    cur.execute("""DELETE FROM t01prefecture WHERE PREF_CD >= %d"""
                % (pref_cd,))
    cnn.commit()

    print("単純なSELECT文==========================")
    from_id = 45
    to_id = 999
    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], row[1]))

    print("コミットの試験==========================")
    pref_cd = 100
    pref_name = "モテモテ国"
    cur.execute("""INSERT INTO t01prefecture(PREF_CD, PREF_NAME)
                VALUES ('%s', '%s')""" % (pref_cd, pref_name))

    pref_cd = 101
    pref_name = "野望の国"
    cur.execute("""INSERT INTO t01prefecture(PREF_CD,PREF_NAME)
                VALUES ('%s', '%s')""" % (pref_cd, pref_name,))
    cnn.commit()
    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], row[1]))


    print("ロールバックの試験==========================")
    pref_cd = 102
    pref_name = "ロール"
    cur.execute("""INSERT INTO t01prefecture(PREF_CD,PREF_NAME)
                VALUES ('%s', '%s')""" % (pref_cd, pref_name,))

    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], row[1]))

    print("-------------------------")
    cnn.rollback()
    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], row[1]))

    print("ユーザー定義==========================")
    cur.execute("""SELECT * FROM test_sp(%d,%d)""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], row[1]))

    cur.close()
    cnn.close()

except (psycopg2.OperationalError) as e:
    print (e)
python2.x
# -*- coding: cp932 -*-
# Winddows の場合は以下からダウンロード
#  http://www.stickpeople.com/projects/python/win-psycopg/
#

import psycopg2

try:
    cnn = psycopg2.connect("dbname=Sample001 host=localhost user=postgres password=xxxxx")
    cur = cnn.cursor()

    #試験データの整理
    pref_cd = 100
    cur.execute("""DELETE FROM t01prefecture WHERE PREF_CD >= %d"""
                % (pref_cd,))
    cnn.commit()

    print("単純なSELECT文==========================")
    from_id = 45
    to_id = 999
    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], unicode(row[1],'utf-8')))

    print("コミットの試験==========================")
    pref_cd = 100
    pref_name = u"モテモテ国"
    cur.execute(u"""INSERT INTO t01prefecture(PREF_CD, PREF_NAME)
                VALUES ('%s', '%s')""" % (pref_cd, pref_name))

    pref_cd = 101
    pref_name = u"野望の国"
    cur.execute(u"""INSERT INTO t01prefecture(PREF_CD,PREF_NAME)
                VALUES ('%s', '%s')""" % (pref_cd, pref_name,))
    cnn.commit()
    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0],unicode(row[1],'utf-8')))


    print("ロールバックの試験==========================")
    pref_cd = 102
    pref_name = u"ロール"
    cur.execute(u"""INSERT INTO t01prefecture(PREF_CD,PREF_NAME)
                VALUES ('%s', '%s')""" % (pref_cd, pref_name,))

    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], unicode(row[1],'utf-8')))

    print("-------------------------")
    cnn.rollback()
    cur.execute("""SELECT PREF_CD,PREF_NAME FROM t01prefecture
                WHERE PREF_CD BETWEEN %d AND %d""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], unicode(row[1],'utf-8')))

    print("ユーザー定義==========================")
    cur.execute("""SELECT * FROM test_sp(%d,%d)""" % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], unicode(row[1],'utf-8')))

    cur.close()
    cnn.close()

except (psycopg2.OperationalError) as e:
    print (e)
雑感
Python3系は文字コードを意識しなくてもよさげ、Python2.XはUTF8で帰ってくるので、一旦UNICODEに変換してやらねばならない。

ストアドプロシージャーはORACLEのPL/SQLに近い。ただ、テーブル型を戻り値にする関数を指定できるので、ORACLEほど結果セットを返すのがしんどくない。


# by mima_ita | 2013-12-23 11:16 | python
pgAdminで作成した型をみる方法
PostgreSQLでは下記のSQLで独自の型が作成できる。

CREATE TYPE int_txt_type AS (code integer, name varchar);

作成後にこの型をpgAdminで確認するには次のようにする。


1.ファイルメニューのオプションを選択

2.表示タブで型にチェックをつける

pgAdminで作成した型をみる方法_b0232065_10391117.png



# by mima_ita | 2013-12-23 10:40 | memo
PythonでORACLEを操作する
目的
Pythonでcx_Oracleを用いてOracleを操作する

環境
Python 2.7 または 3.3

1.Oracleクライアントをインストールする。この際、開発者用の環境をつくる。
 
2.以下からダウンロードしてインストールするか、easy_installする。
   cx_Oracle
   http://cx-oracle.sourceforge.net/

Pythonのコード
# -*- coding: cp932 -*-
# cx_Oracleを用いたPythonでのORACLE操作
#1.Oracleクライアントをインストールする。
# この際、開発者用の環境をつくる。
# (おそらく、OCIが必要?)
# 
#2.以下からダウンロードしてインストールするか、easy_installする。
#  cx_Oracle
#  http://cx-oracle.sourceforge.net/
import cx_Oracle
import os
os.environ["NLS_LANG"] = "JAPANESE_JAPAN.JA16SJISTILDE"
try:
    tns = cx_Oracle.makedsn("localhost", 1521, "Sample")
    conn = cx_Oracle.connect("user", "pass", tns)
    cur = conn.cursor()
    from_cd = 45
    to_cd = 200
    cur.execute("""SELECT * FROM T01PREFECTURE
                WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
                arg1=from_cd,
                arg2=to_cd)
    rows = cur.fetchall()
    for r in rows:
        print("%d : %s" % (r[0], r[1]))

    print ("===================")
    print ("100を消す")
    cur.execute("""DELETE FROM T01PREFECTURE WHERE PREF_CD=:arg1""",
                arg1=100)

    cur.execute("""SELECT * FROM T01PREFECTURE
                WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
                arg1=from_cd,
                arg2=to_cd)
    rows = cur.fetchall()
    for r in rows:
        print("%d : %s" % (r[0], r[1]))

    print ("------------------")
    print ("100 を追加")
    cur.execute("""INSERT INTO T01PREFECTURE
                VALUES (:arg1, :arg2)""",
                arg1=100,
                arg2="あたた")
    conn.commit()

    cur.execute("""SELECT * FROM T01PREFECTURE
                WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
                arg1=from_cd,
                arg2=to_cd)
    rows = cur.fetchall()
    for r in rows:
        print("%d : %s" % (r[0], r[1]))

    print ("===================")
    print ("101追加")
    cur.execute("""INSERT INTO T01PREFECTURE
                VALUES (:arg1, :arg2)""",
                arg1=101,
                arg2="北斗")

    cur.execute("""SELECT * FROM T01PREFECTURE
                WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
                arg1=from_cd,
                arg2=to_cd)
    rows = cur.fetchall()
    for r in rows:
        print("%d : %s" % (r[0], r[1]))

    print ("------------------")
    print ("ロールバック")
    conn.rollback()
    cur.execute("""SELECT * FROM T01PREFECTURE
                WHERE PREF_CD BETWEEN :arg1 AND :arg2""",
                arg1=from_cd,
                arg2=to_cd)
    rows = cur.fetchall()
    for r in rows:
        print("%d : %s" % (r[0], r[1]))

except (cx_Oracle.DatabaseError) as ex:
    error, = ex.args
    print (error.message)
使用感
OCI経由でやっているっぽいのでORACLEクライアントをインストールせねばならないのが結構面倒。

接続方法に癖がある。あと文字コードの指定は環境変数で。

ORACLEのPL/SQLはSQLSERVERと違って結果セット返さない。
(配列を返せるが、ここでは面倒なので実験していない)

明示的にCOMMITしないと変更は破棄される。



# by mima_ita | 2013-12-20 23:32 | python



実験ですお

by mima_ita
検索
カテゴリ
最新の記事
.NET4.5におけるasy..
at 2014-07-02 00:46
.NETでTwitterを検..
at 2014-06-29 00:49
Redmineのプラグインで..
at 2014-06-28 03:29
IO.popenのwrite..
at 2014-06-28 03:25
RedmineのWikiでU..
at 2014-06-28 03:16
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ