<   2013年 12月 ( 23 )   > この月の画像一覧
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() {
    // これは認識する
  }
});


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

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




More
[PR]
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ほど結果セットを返すのがしんどくない。


[PR]
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.表示タブで型にチェックをつける

b0232065_10391117.png



[PR]
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しないと変更は破棄される。



[PR]
by mima_ita | 2013-12-20 23:32 | python
環境変数のPATHの長さをシンボリックリンクでなんとかする
環境変数のPATHの長さをシンボリックリンクでなんとかする

参考
Windowsのパスの長さ制限に引っかかったので短くしてみた
http://qiita.com/aya_eiya/items/d2677c85017a010f2772

自分の環境だと"でくくるときに最後に\がないと上手くいかなかった
mklink /d c:\Q "C:\Program Files (x86)\"
mklink /d c:\P "C:\Program Files\"


[PR]
by mima_ita | 2013-12-20 21:45 | memo
PythonでODBC経由でSQLSERVERを操作する
目的
PythonでODBC経由でSQLSERVERを操作する。

環境
Python2.7 or 3.3
pyodbcの使用
SQLSERVER EXPRESS 2012

データベースの設定
SQL SERVER接続を許可する。

テーブル
CREATE TABLE [dbo].[T01Prefecture](
    [PREF_CD] [int] NOT NULL,
    [PREF_NAME] [varchar](10) NULL,
PRIMARY KEY CLUSTERED
(
    [PREF_CD] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ストアド
CREATE PROCEDURE [dbo].[test_sp]
    @from INT,
    @to INT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * FROM T01Prefecture WHERE PREF_CD BETWEEN @from AND @to
END

CREATE PROCEDURE [dbo].[test_sp2]
    @cd1 INT,
    @cd2 INT
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT * FROM T01Prefecture WHERE PREF_CD = @cd1
    SELECT * FROM T01Prefecture WHERE PREF_CD = @cd2
END
Pythonのコード
# -*- coding: cp932 -*-
# mssqlの操作サンプル
# pymssqlはVARCHARのエンコードが上手くいかないのでやめとく。
#easy_install pypyodbc

import pyodbc

try:
    cnn = pyodbc.connect("DRIVER={SQL Server};SERVER=127.0.0.1\SQLEXPRESS;" +
                         "UID=sa;PWD=xxxxxxxxx;DATABASE=Sample001")
    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()

    print("ロールバックの試験==========================")
    pref_cd = 102
    pref_name = "ロール"
    cur.execute("""INSERT INTO t01prefecture(PREF_CD,PREF_NAME)
                VALUES ('%s', '%s')""" % (pref_cd, pref_name,))
    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("""exec test_sp %d, %d """ % (from_id, to_id, ))
    rows = cur.fetchall()
    for row in rows:
        print("%d %s" % (row[0], row[1]))

    print("ストアドプロシージャの試験 複数 ====================")
    cur.execute("""exec test_sp2 %d, %d """ % (1, 10, ))
    while True:
        print ("レコードセット...")
        rows = cur.fetchall()
        for row in rows:
            print("%d %s" % (row[0], row[1]))
        if not cur.nextset():
            break

    cur.close()
    cnn.close()

except (pyodbc.Error) as e:
    print (e.args[1])
感想
pymssqlというライブラリがあるが、エンコードがうまくいっていないので却下。そもそもPython3xでは使えない。

pypyodbcもあり、今回紹介したpyodbcと同じような感じだが、python3.xでは使えない。


[PR]
by mima_ita | 2013-12-20 17:58 | python
pythonでMySQLにつなげる
目的
PythonでMySQLを操作する

環境
Python2.7 または3.3
mysql-connector-python
MySQL 5.6.15

データベースの設定

テーブル
CREATE TABLE `t01prefecture` (
  `PREF_CD` int(3) NOT NULL DEFAULT '0',
  `PREF_NAME` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`PREF_CD`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


単一のレコードセットを返すストアド
DELIMITER $$
CREATE DEFINER=`username`@`%` PROCEDURE `test_sp`(IN fromNo INT,
                                                  IN toNo INT)
BEGIN
    select * from t01prefecture WHERE PREF_CD BETWEEN fromNo AND toNo ;
END$$
DELIMITER ;

複数のレコードセットを返すストアド
DELIMITER $$
CREATE DEFINER=`username`@`%` PROCEDURE `test_sp2`(IN cd1 INT,IN cd2 INT)
BEGIN
  select * from t01prefecture WHERE PREF_CD = cd1;
  select * from t01prefecture WHERE PREF_CD = cd2;

END$$
DELIMITER ;

Functionの例
DELIMITER $$
CREATE DEFINER=`username`@`%` FUNCTION `test_fn`(cd INT) RETURNS varchar(10) CHARSET utf8
BEGIN
    DECLARE ret VARCHAR(10);
    SELECT PREF_NAME INTO ret  FROM t01prefecture WHERE PREF_CD = cd;
   
RETURN ret;
END$$
DELIMITER ;


Pythonのコード

# -*- coding: cp932 -*-
# mysqlの操作サンプル
#easy_install mysql-connector-python
import mysql.connector

try:
    cnn = mysql.connector.connect(host='localhost',
                                  port=3306,
                                  db='Sample001',
                                  user='root',
                                  passwd='root',
                                  charset="cp932")
    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()

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

    print("ストアドプロシージャの試験==========================")
    cur.callproc("test_sp", (from_id, to_id))
    for rs in cur.stored_results():
        print("レコードセット...")
        rows = rs.fetchall()
        for row in rows:
            print ("%d %s" % (row[0], row[1]))

    print("ストアドプロシージャの試験(複数)==================")
    cur.callproc("test_sp2", (1, 100))
    for rs in cur.stored_results():
        print("レコードセット...")
        rows = rs.fetchall()
        for row in rows:
            print ("%d %s" % (row[0], row[1]))

    print("ファンクションの試験==========================")
    pref_cd = 100
    cur.execute("""SELECT test_fn(%d)""" % (pref_cd,))
    rows = cur.fetchall()
    for row in rows:
        print("code:%d name:%s" % (pref_cd, row[0]))

    cur.close()
    cnn.close()
except (mysql.connector.errors.ProgrammingError) as e:
    print (e)

MYSQLのストアドの雑感
・SQLSERVERに近い感じ。

・ストアドを実行したあとは、 cur.stored_resultsにレコードセットが入っている。。

・MySQL-pythonってライブラリもあるが3.x系で動作しないからやめとこう。使い方はだいたい同じ。
[PR]
by mima_ita | 2013-12-20 14:08 | python
MicrosoftReportを用いた帳票の作成
MicroSoftレポートとは?
MicrosoftレポートとはVisual Studioが.NETでの帳票の作成をサポートするために提供しているコントロールです。レポートのデザイン機能と、アプリケーションでレポート処理および表示をするためのReportViewerコントロールが提供されています。
次の図はMicrosoftレポートが、どのように帳票を作成するかを簡単に表したものです。

b0232065_21471767.png

データソース:
アプリケーションが使用するデータのことで特にアプリケーションで操作する必要のあることが明確なデータです。

レポート定義:
帳票のレイアウトや、どのデータを作成するかをXMLで記述したものですVisual Studioのレポートデザイナを使用して変更が可能です。

ReportViewerコントロール
データセットとレポート定義より帳票を作成します。

どんな帳票がつくれるの?


Excelのような一覧形式
b0232065_21480489.png
Excelのように一覧としてデータを表示します。
各フィールドでは書式の指定や数式の指定が行えます。必要であれば、開発者は自分の目的にあった数式を自作して利用することもできます。

自由フォーマットの単票形式
b0232065_21484210.png
単票としてデータの詳細を自由なフォーマットで表現します。
数字や、文字だけでなく、画像も使用できます

グラフとか
b0232065_21490979.png
データをグラフとして表示することができます。
棒グラフだけでなく、折れ線グラフや円グラフなど、様々な表現方法が実現できます。



チュートリアルないの?
Microsoftのページにあるけどバージョンのせいか、なんかしらないけど、チュートリアルが動きません。なので自作しました。

http://needtec.sakura.ne.jp/doc/msreport.pdf

http://needtec.sakura.ne.jp/doc/msreport.docx

おそらく、VisualStudio2013でMsレポート始める日本人はこれが一番楽だと思います。

(日本語の資料あんまりない。CodeProjectでわかりやすい資料もVS2008だったりする。マイクロソフトの公式のチュートリアルはサンプルDBすら構築させない構え・・・ヽ(゚`Д´゚)ノ゚。ウワァァァン!!


[PR]
by mima_ita | 2013-12-18 22:04 | .NET
ミルメーク別解
ミルメークの件の続き

ツイッターの検索で次のような文字をいれて検索する。



ミルメーク max_id:411728362558599168





この検索は指定のidより前のものを検索している。

これにより、検索をしていくと12/9までは毎日話題になるが、それ以降は11/1まで飛ぶ。



なので、2chスレをまとめた以下のページが間接的トリガーだと考えられる。


http://oryouri.2chblog.jp/archives/8168216.html


※ただしこれにしても、検索に引っかからない形(リツイートされな)などでミルメークという文字はあったので、ひっそりと人々の心にミルメークが住み着いている。

ここからわかるのは、人の目につくのは最後の一瞬であるが、その前からひっそりと議論がすすむその兆候をみることが可能である。

ミルメークに蓮の葉理論の事例をみた。

More
[PR]
by mima_ita | 2013-12-17 07:31 | 実験



実験ですお
検索
カテゴリ
最新の記事
.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
以前の記事
最新のトラックバック
その他のジャンル
ブログパーツ