2016年4月12日火曜日

いつもの備忘録(bash編)

日付を取得する
date +"%Y/%m/%d %p %I:%M:%S"

日付をsh内で使う

echo `date +"%Y/%m/%d %p %I:%M:%S"`
echo `date +"%Y%m%d%I%M%S"`

bashで使う比較演算子 (IBM)

http://www.ibm.com/developerworks/jp/linux/library/l-bash2.html


or xor

&& ||

if [ a = "1" ] && [ b = "2" ] ; then
fi


一から作るなんてあまりやらないのでこんなもの。
今後は増えるかな・・・・・ぁ

2016年4月8日金曜日

iReportのドキュメントを読んでみました

今回本格的にiReportを利用する機会が出てきたので、ドキュメントを探してみたところ、公式サイトに諸々のドキュメントがありました。

http://community.jaspersoft.com/documentation?version=29351

すべて英語ですが、無償でたくさんの情報が提供されています。そのなかで私が参照したのは、以下ドキュメントです。

iReport Designer
iReport Ultimate Guide (Updated Jan 15, 2013)


なお、有償ですが、日本語のドキュメントも提供されています。
http://jaspersoft.biz/document/product-manual


【ドキュメントサマリー】

総364ページ。もあり、私自身、英語読解力があるわけではないので、今回主に読んだのはプロパティ類です。それ以外の部分についても時間があれば読んでみようと思いますが、現状としては一般的なレポーティングツールの機能は備えているという前提として考えています。

【まずここは見たほうが良い】


・目次
 気になるキーワードがあれば頑張って読みましょう。

・CHAPTER3 BASIC NOTIONS OF JASPERREPORTS

この項を流し読みするだけでも、何ができるのかが想像できそうです。
  (表とか箇条書きとかサンプルコードとか)
 
 主だったところ
 ⇒3.5.1 The Type of an Expression
  Expressionは、データを表示するときに使うプロパティです。
  JasperがJavaで動いていることもあり、型を適切に処理するためには意識が必要です。
 ⇒3.5.2 Expression Operators and Object Methods
  演算子ですね。Expressionにて対応している演算子が列挙されています。
また、Expressionに定義するための記述例も書かれています。
 ⇒3.10 A Simple Program
  Javaで諸々制御ができるということが想像できます。今回はやらないので詳しく読みませんでした。

・CHAPTER5 REPORT ELEMENTS

レポートで使う要素ですね。
 ⇒5.1.3 Basic Element Attributes
  今回メインで扱う、プロパティについての説明がありました。

・CHAPTER6 FIELDS, PARAMETERS, AND VARIABLES

項目の構成要素である、フィールド(値項目)、パラメータ(引数?)、値(変数)の情報です。データでとってきた値の扱い、集計値の扱いなどはこのあたりの情報で行います。
ページ番号などもここの情報に書いてあります。

・CHAPTER 13 LISTS, TABLES, AND BARCODES

さらっと見たところ独自機能な気もしますが、簡単な操作で、表形式の帳票ができそう。
 テーブルは、グラフとかにも関係していそうです

・CHAPTER 15 CROSSTABS

見慣れない単語でしたが、内容見る限り、クロス集計のようでした。

【主なプロパティについて】


CHAPTER5に、プロパティに対する説明がありました。
「共通」のもの、「テキスト」に関するもの、「テキストフィールド」に関するものとわかれています。




【本記事のまとめ】

一つの記事で全部を書くのは難しいので今回はこれくらいです。
JasperReportはオープンソースであり、他の帳票ツールで有する機能はあったり、または
なくても有志により実装されるなどされています。

無償ドキュメントが英語なので敷居は上がりますが、ぜひ利用していきたいツールの1つかと思いました。

2016年4月6日水曜日

MySQLの接続状況の確認

運用中のMySQLに過去データを大量投入する必要があったため、接続状況を確認する方法を調べたのでメモ。

概略


1) \s にて、MySQLの稼働状況をチェックできる。 (今回の件とは直接関係なし)
2) show processlistにて、接続プロセス数、接続時間などを確認できる。
   接続時間(下記でいうところのTime)は、最終応答からの経過時間。

サンプル


mysql> \s
--------------
mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

Connection id:          132877
Current database:       sampledb
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.1.73 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 61 days 17 hours 51 min 29 sec

Threads: 19  Questions: 99114337  Slow queries: 531  Opens: 2600916  Flush tables: 1  Open tables: 64  Queries per second avg: 18.579
--------------

mysql> show processlist;
+--------+-------+----------------------------+-----------+---------+------+-------+------------------+
| Id     | User | Host                        | db        | Command | Time | State | Info             |
+--------+------+-----------------------------+-----------+---------+------+-------+------------------+
| 132709 | app  | location.domain.ne.jp:10486 | sampledb  | Sleep   | 7045 |       | NULL             |
| 132710 | app  | location.domain.ne.jp:10588 | sampledb  | Sleep   | 6952 |       | NULL             |
| 132711 | app  | location.domain.ne.jp:10625 | sampledb  | Sleep   | 6717 |       | NULL             |
| 132712 | app  | location.domain.ne.jp:10840 | sampledb  | Sleep   | 5968 |       | NULL             |
| 132713 | app  | location.domain.ne.jp:10841 | sampledb  | Sleep   | 6169 |       | NULL             |
| 132714 | app  | location.domain.ne.jp:10915 | sampledb  | Sleep   | 6395 |       | NULL             |
| 132715 | app  | location.domain.ne.jp:10006 | sampledb  | Sleep   | 5986 |       | NULL             |
| 132716 | app  | location.domain.ne.jp:10062 | sampledb  | Sleep   | 5666 |       | NULL             |
| 132717 | app  | location.domain.ne.jp:10168 | sampledb  | Sleep   | 5666 |       | NULL             |
| 132718 | app  | location.domain.ne.jp:10429 | sampledb  | Sleep   | 5583 |       | NULL             |
| 132719 | app  | location.domain.ne.jp:10464 | sampledb  | Sleep   | 5577 |       | NULL             |
| 132870 | app  | remote.domain.ne.jp:33063   | NULL      | Sleep   |  475 |       | NULL             |
| 132871 | app  | remote.domain.ne.jp:41295   | sampledb  | Sleep   |  396 |       | NULL             |
| 132872 | app  | remote.domain.ne.jp:38509   | sampledb  | Sleep   |  470 |       | NULL             |
| 132873 | app  | remote.domain.ne.jp:37658   | sampledb  | Sleep   |  420 |       | NULL             |
| 132874 | app  | remote.domain.ne.jp:39027   | sampledb  | Sleep   |  370 |       | NULL             |
| 132875 | app  | location.domain.ne.jp:10031 | sampledb  | Sleep   |  165 |       | NULL             |
| 132876 | app  | location.domain.ne.jp:10032 | sampledb  | Sleep   |  203 |       | NULL             |
| 132877 | root | localhost                   | sampledb  | Query   |    0 | NULL  | show processlist |
+--------+-------+----------------------------+-----------+---------+------+-------+------------------+
19 rows in set (0.00 sec)

mysql>
 

2016年4月5日火曜日

Microsoft AccessのモジュールをVSS管理している場合のTips

VBA系のプログラムを利用して開発する場合、ソース資産等の管理にひと手間必要ですが
Accessの場合、追加ソフトを入れることでVisualSourceSafeへの接続ができるのでメモ。

今回は、Access2010です。Access2007でもできるようです。


【Access2010で使う場合に必要なソフトのインストール】


Microsoft Access 2010 ソースコード管理 をインストールするとリボンに機能が現れます
https://www.microsoft.com/ja-jp/download/details.aspx?id=6840

【VSSからデータを取得する場合】

1) Accessを起動
2) 「ソース管理」リボンにある「SourceSafeから作成」を選択するとVSSが起動する
3) VSSにてパスを指定すると、関連ファイルおよびデータベースファイルが作成される

【データをVSSから切り離す場合】


1)  リボン「ファイル」を選択「情報」から、「データベースの最適化/修復」を選択
2)  「最適化したデータベースをSource Code Controlから削除しますか?」と聞かれたら「はい」を選択

2016年4月4日月曜日

Win+MySQL5.1環境にMySQL5.7を共存させる方法

MySQL5.1で運用しているシステムがあり、検証評価のために5.7系を利用したいと思い
とりあえずとして自分で使えるWin+MySQL5.1の環境に対してMySQL5.7を導入した時のメモです。

【環境】

・Windows8 Pro(x64) + MySQL5.1(インストーラにてインストール)の環境
・MySQL5.7は公式サイトよりZipで取得


【手順】

・ダウンロードしてきたzipファイルを展開。パスは任意でよいと思いますが、私の場合ProgramFilesの中に直接ディレクトリを作って展開しました。
C:\Program Files\MySQL57

・my.iniを作成

・初期化を実施
mysqld --initialize

・コンソールにて起動

・別コンソールにてmysqlクライアントを起動

・パスワードを変更

ALTER USER 'root'@'localhost' IDENTIFIED BY 'aaaaaaaa';

・mysqld.logに記載

・コンソールの終了

・サービスとしてインストール
mysqld --install MySQL57
※サービスの削除は、mysqld --remove MySQL57

・サービスの起動
net start mysql

ひとまず起動したので、別途、マイグレーションの手順をメモしたいと思います。


2016年3月23日水曜日

MySQL 4.x系ではCREATE USERの構文が違う

ついつい忘れてしまうMySQLのCREATE USERですが、今回改めて実施したところ
はまってしまったので備忘録です。

結果としては、CREATE USER は、MySQL 5.x系からであり、MySQL4.xで実施する際には
構文が違うということでした。

NGケース


mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near
'USER'test1'@'%' IDENTIFIED BY 'test12345'' at line 1

というわけで

OKケース


GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password';

2016年3月20日日曜日

iReportsで、グループ毎の集計値を合算して合計として表示する方法

見出しだけだとわかりづらいので例とともに。

データ例


伝票A 合計100円 , 明細 20円 30円 50円
伝票B 合計250円 , 明細 80円 170円

ここで、100円と250円を合算したい。
明細だと、一部計算がずれる場合があるので明細からの合計は行わない。


その他要件

・伝票毎で、グループが切ってある。


手順


1) Variablesを作成

 V_DENPYO_GOUKEI (名前は何でもよい) を作成、以下プロパティを設定。
 ・Cauculation : Sum
 ・Reset type : Report (これ重要)
 ・Increment Type : Group
 ・Increment group : DenpyoのGrou
 ・Variable Expression : $F{DENPYO_GOUKEI}.equals(null)? 0 : new Double($F{DENPYO_GOUKEI})

ResetTypeをReport以外に指定すると、想定値と異なる値を取得してきてしまいました。


解消できるまでに小2時間。


レポーティングツール類はプロパティの使い方が肝となることが多いと感じました。



追伸:

設定するフィールド側
text field expression : $V{V_DENPYO_GOUKEI}
Evaluation Time : Report

2016年2月22日月曜日

iReportで固定行数明細を作成する

iReportで、明細帳票を作成したい場合、シンプルにやろうとした場合にはDetailの各オブジェクトに罫線を引いて作成することが多いかと思いますが、ページの下段まで計算を引きたい場合などにはこの方法は利用できません。

Backgroundオブジェクトを利用すると、固定行数の表を持つ帳票を作ることが可能です。


【Backgroundオブジェクトの利用方法】

・Report Inspectorから、「BackGround」を選択して、「Maximize Background」をクリック
 自動でBackground用のレイアウト領域が表示されます。

その後、必要に応じてオブジェクトを配置します。

これだけで、実際のデータと関係なく、Backgroundに配置した情報が表示されるようになります。




【罫線の引き方】


もしかしたらもっと良い方法があるかもしれません。が、現状やった方法

1) 必要行数分の、横罫線をコピーペーストなどで作成する。
2) 一番上と、一番下に罫線を正規の位置(Topプロパティできっちり調整)に配置し、あとは適当においておく。
3) 全部の罫線を選択し、メニューバーの「Format」->「Vertical Spacing」->「Equal Vert Space」を選択すると、均等に配置される。



ページごとに【Background】を変える。


あまりたくさんあると大変かもしれませんが、以下のような設定で可能です。

1) 両方のオブジェクトを貼っておく。
2) Print When Expressinonに評価式を設定
  例) ($V{PAGE_NUMBER}.toString()).equals("1") ? Boolean.FALSE : Boolean.TRUE
  ⇒TRUEまたはFALSEを返す条件式が必要です。
  この式を設定した場合、2ページ目以降にしか出ないオブジェクトとなります。



【その他】

・ページ計を出したい場合
 Variablesを作成。
 例) 数量計
   Variable名:SURYO_TOTAL
   Variable Expression:$F{SURYO}.equals(null)?0:new Double($F{SURYO})
Calculation:Sum
Reset Type:Page
あとは未指定

Page Footerに、テキストを配置し、Text Field Expressionに、上記名前を割当
Text Field Expression:$V{SURYO_TOTAL}

2016年2月4日木曜日

ActiveReportsにてDistinctFieldプロパティを活用する。

【事例】

・伝票をまとめた、請求書のようなものがある。
・出力情報としては、
 ・伝票明細の情報を一覧として
 ・日毎で集計行を出力
 ・最後に、合計行を出力
・データとしては、単価金額は明細に持っていて、消費税は伝票毎に持っている。
・データ抽出処理で、伝票情報と明細情報を一緒に持ってきている。
 ⇒そのため、各明細に伝票の情報もついてくる

起きたこと
・日毎の集計行には税込みを出す必要があったので、税込みの項目をSumするのだけども
 当然ながら、複数行明細の場合にはそのままSumすると倍々になってしまう。


【対処】

・グループヘッダのプロパティにて「日」を条件とした枠を作る。
 ⇒これはまぁ普通の処理
・税込み金額を出すテキストのDistinctFieldプロパティに、「伝票番号」を指定
 SummaryFunc : DSum ←SumではなくDSum
 SummaryGroup:GroupHeaderxx
 SummaryRunning:Group
 SummaryType:SubTotal

伝票番号でDistinctしてくれて、Sumしてくれるようになりました。


ヘルプ
http://docs.grapecity.com/help/activereports-9/GrapeCity.ActiveReports.v9~GrapeCity.ActiveReports.SectionReportModel.TextBox~DistinctField.html

2016年2月1日月曜日

iReport DesignerからJaspersoft Studioへ移行が推奨されています

掲題の件

しばらく情報を追っていなかったら、iReport DesignerはJaspersoft Studioへの
移行を推奨していました。

【iReport Designer サイト】
http://community.jaspersoft.com/project/ireport-designer

英文サイトだったのでスルーしてましたが、きっちりわかりやすく書いてあります。

【JasperSoft Studio サイト】
http://community.jaspersoft.com/project/jaspersoft-studio

iReportのサイトからもリンクで飛ぶことができます。



現在の手持ち資産がiReport Designer 4.0.2で作成したころのデザイナファイルなので
そのまま移行できるかがまだわかりませんが、
なぜやろうとしたかというと、別件の技術調査でJasperReports Serverを利用する検討を
始めたからです。

JasperReports Serverに上記4.0.2のデザイナを読み込ませてみたところ、
一覧表形式でよくあるような、表のヘッダ部分に定義してあるタイトル文字が出てこなかったため
バージョンの問題だろうかと思った次第です。



この辺はJasperReports Server側の話題になるので本資料では割愛しますが
別途まとめておきたいと思います。