2016年5月2日月曜日

VisualStudioでLocalDBを使うときのメモ

照合順が異なることで日本語の文字化けが発生してしまったため作業手順をメモ

そもそも

ソリューションエクスプローラなどから追加できる「サービスベースのデータベース」は照合順序が「SQL_Latin1_General_CP1_CI_AS」となっている。
変更するにはALTER DATABASEにて行う。

実施するコマンド

ALTER DATABASE [データベースのフルパス] COLLATE Japanese_XJIS_100_CI_AI_WS

mdfの場合、物理パス名を指定する。
フルパスは以下のコマンドで取得可能

SELECT DB_NAME()

対応している照合順序を取得する方法

SELECT name, description FROM sys.fn_helpcollations()
WHERE name like '%JAP%';

エラー5072が発生したとき

発生したメッセージ

ALTER DATABASE が失敗しました。データベース 'DBNAME' の既定の
照合順序をJapanese_XJIS_100_CI_AI_WS に設定できません。

何かの接続があることが原因(のはず)

・プロセスを確認
select * from sys.sysprocesses

・KILLコマンドで該当の接続を切断(SPIDは上記SQLで取得可)
KILL [SPID]


SVN commitが失敗したうえにCleanupに失敗したときの対処

※WindowsPCで処理をしていた時の出来事です。

現象

SVN対象のフォルダに大きめのzipを作っているさなかにSVN COMMITをしてしまい、
SVN COMMIT対象としてzipの一時ファイルが認識されてしまいました。
COMMIT前にzipファイルへと置き換わってしまったため、
SVNとしては「COMMITしようとしたファイルがない」と怒ります。(当然です)

試したこと

クリーンアップをしろということで以下を試してもダメ。
・tortoirseSVNからクリーンアップ(当該フォルダ)
・tortoirseSVNからクリーンアップ(ルートのフォルダ)
・ルートフォルダをコマンドプロンプトで開き「svn cleanup」

ちなみに、コマンドプロンプトから実行したときの応答が以下
svn: E155009: Failed to run the WC DB work queue associated with 'D:\Project\dev', work item 76284 (file-commit trunk/sub1/sub2/sub3/zia09324) svn: E720002: Can't set file 'D:\Project\dev\trunk\sub1\sub2\sub3\zia09324' read-write: 指定されたファイルが見つかりません。
えぇ、zipに変わってしまいましたとも。すみません。

処置

多少無理やりかもしれませんが、上記の「見つからないファイル」⇒ここでいうところの「zia09324のファイル」を対象のフォルダに作成したうえで、ルートフォルダから svn cleanup を行うことで現象を解消することができました。
作成するファイルは何でも大丈夫です。(私はゼロバイトファイルを作りました)

追伸

原因究明のためにリポジトリブラウザから対象のフォルダがどうなっているかをのぞいてみたのですが、zip09324というファイルはありました。
作ったファイルを削除、コミットすることでリポジトリからも削除することができました。

まとめ

・コミットするときはファイル操作やめましょう。
・もし失敗したら、リポジトリ側とファイル構成を合わせてからクリーンアップしましょう。
・コマンドプロンプトからのSVN操作は細かいことも教えてくれるので役に立ちます。

2016年4月22日金曜日

利用者へのサポートについて(雑記・まとまっていません

IT業におけるサポート業務というのは環境状況において諸々あると思うのですが、
今までなんとなく対応していた業務クラウドソフトのサポート業務を
見直す機会が出てきたため、今現時点の発想をまとめておこうと思います。


注) まとめといいながら、今現時点ではまだまとまっていません。


以下、サポートの切り口です。

1) 電話

なんといっても対応が早い。日本語解釈の違いなどによる意思疎通ズレも少なくなります。
反面、時間をとられてしまうので使い方には要注意。
高度化するとCTIなどになると思いますが、現状そこまでは不要です。
やり取りした情報を、FAQとしてデータベース化するための仕組みも必要です。

2) メール

双方とも、時間を気にせず発信できるのがメリットです。
文章(データ)として残るので、あとあとのためにも役に立ちます。
CC等の活用により、関係者とも情報共有できるのも強みです。

3) 訪問

対応で言ったら一番早いですよね。問題は立地や移動時間やそこで発生する実費。
サービス対価を頂けるのであれば問題ない方法です。

4) 遠隔リモート

立地は関係なし。直接環境を見れるのでズレが少ない。
デメリットがあるとすれば、リモート環境構築までに少しだけ、手間が発生するということ。
この楽さに利用者が慣れてしまうと、いつでもどこでも聞いていて「リモートで見てほしい」となってしまう事でしょうか。
⇒メリットとするケースもあると思うのでケースバイケースです。

5) チャット・メッセージングツール

メールと、電話の中間でしょうか?
時間がとられつつ、データは残りつつ、問い合わせは解消できる。

6) 掲示板

メールとほぼ類似だとは思いますが、登録した情報が第三者にも見れるという点では、メリットはあると思います。

7) ホームページ等での周知・公開

ホームページに関わらず、最近ではTwitterやLINEなどでも情報発信が行われています。
先手を打って情報公開する事により、メリットは出てきそうです。

結局は?

まだ整理の途中(上記以外の手段もまだまだあるはずです)ですが、結局は、ニーズを把握して、リソースを適切に割り当てられる方法を採用する事になると思います。

業務クラウドソフトのサポートであり、料金もクラウドに即した体系となっているため訪問は見合いませんし、とはいえ、訪問による利用者の信頼度向上は間違いないので、一方的に切り捨てる判断も難しい。

まだまだ検討・整理段階ではありますが、アイデアを絞って利用者のためになるサポート体系を構築・運用する必要があると思いました。

2016年4月14日木曜日

ActiveReportsのベーシックな利用方法

たまに使うので、いつも忘れてしまいます。

備忘録として

グループヘッダにグループ毎の集計を出力する方法は?
https://www.grapecity.com/tools/support/technical/knowledge_detail.asp?id=27280

グループフッタで集計
SummaryFunc = Sum
SummaryGroup = グループヘッダ名
SummaryRunning = Group
SummaryType = SubTotal

グループヘッダで集計
SummaryFunc = Sum
SummaryGroup = グループヘッダ名
SummaryRunning = None
SummaryType = SubTotal

書式

OutputFormat

WrapModeとCanShrinkのプロパティは切る

グループごとにページ

SummaryFunc = Sum
SummaryGroup = グループヘッダ名
SummaryRunning = Group
SummaryType = SubTotal


罫線など


レポートを複数作って、overlayでいける

2016年4月12日火曜日

ODB2 + Bluetoothで、車から各種情報を取り出すことが可能

まだ備忘録ですが。
※2014年あたりに実施した記事が下書きのまま残ってたのですがここにきて公開。
※価格等は当時のものです。

カーナビやデジタルタコメータなど、車から発信される各種信号を元に
データとの組み合わせで製品を構成しているものは多々あります。

そんな情報を、自分で思うように取り出してみよう。と思いました。


【用意したもの】

1) OBD2 の信号をBluetoothで取り出せるアダプタ (ELM327内蔵)
2) Androidスマートフォンおよびタブレット (いずれもAndroid 4.x系)
3) 車 (1台だとおもろくないので2台)
4) パソコン(Windows8搭載、Windows7のブートも可能) および、Bluetoothアダプタ

【結論】
・結構簡単にできます。
・車のメーカー、車種、販売開始時期により、取得できるデータはバラバラ。
・Bluetooth通信は、ペアリングでうまくいかないときがあるので、
 PCとかで通信を試みるなら、有線ものがお勧め。(USBとか232Cとか)


【詳細】

・使ったアダプタについて
 複数用意しました。
 これは、各方面いろいろ情報を調べていると、「壊れやすい」「当たりはずれがある」「同梱CDにはウィルスがある」など不安定、不確定要素満載だったためです。


 左から 1,000円、1,000円、4,500円 いずれもAmazonです。 obd2で検索すればヒットすると思います。
 最後のだけ高いのは、日本の会社から出荷、アプリがセット、到着までが早い。(1日でした)という理由で、残りの2つは海外からの直送、到着までに10~20日ほどかかるというのが理由です。

 また、ウィルスがどうこう言われているもの、海外直送の安いものです。(私の所では検出しませんでしたので時期にもよるのかも ⇒ 複数のウィルスソフトで検出なし)


・Bluetoothで接続 (Android編)

 先述のとおり、Android4.x系です。
 まずはアプリ同梱の製品を試してみました。
 ・ステップワゴン (DBA-RK1) ⇒ ほぼ OK
 ・カローラ (型忘れました 初年度登録 2004年) ⇒ ほぼNG

 使ったアプリは、OBD InfoSan! というものですが、ステップワゴンでは各種情報が画面へ出てきたのに対し、カローラではほぼ無応答でした。(唯一バッテリー情報が取れたので接続はできたのだと思います)

 他の無料アプリもいろいろ試したのですが同様でした。
 どうやら、カローラでは検証できないようです。

 ちなみに、この記事を書いている時点で、ステップワゴン + 他のODB2機器の組み合わせは試せていません。


・Bluetoothで接続 (PC編)

 PCとBluetoothでペアリング。そして、PCで使えるアプリを幾つか入手して試してみました。
 現在継続中ではありますが、入手可能なアプリはバージョン違いによって動かなかったり、
 アプリが動いても [ELM327が正規品ではないですよ」というメッセージが出たり(ScanTool.net for Windows v1.21)
 ダウンロードまではできたけども、英語で、かつライセンスを求められて挫折したりと、

 結果、入手可能なアプリはいずれも今現時点動いていません。
 
 そのなかにWindows7じゃないと起動すらしない。ってものもあったりして、結果
 PCにおける検証はほぼWindows7でやっていました。

 たぶんWin8でも行けるんでしょうけどね。

 メインであれこれ検証していたのがカローラ。ってのもあって、なかなか進まない。
 とはいえ進めないといけないので、えいや。とアプリを作ってみる事にしました。


・アプリを作ってみる。

 今回使っているハードウェアの仕様としては

 PC (またはAndroid) <-> ELM327 <-> CANインターフェース (OBD2プロトコル)

 という構成のため、ELM327のコマンドを理解すれば良さそうです。

 ELM327は、データシートが公開されてます。これを理解すればOK
 http://elmelectronics.com/DSheets/ELM327DS.pdf

 また、ELM327の一部では、ODB2プロトコルを直接使えるとの事なので、以下を使えばOK
 http://en.wikipedia.org/wiki/OBD-II_PIDs#Standard_PIDs


 結果、PCアプリとして簡単に機器と通信できるものを作成して、以下のことまでは
 できるようになりました。
 スクリーンショットなど、いいものは用意してませんでした。。。


 ※先述の、カローラでの試行状況です。

・Bluetoothインターフェースを経由して、機器への接続 ⇒ OK
 ・[AT Z]コマンドを投げて、結果をもらう。 ⇒ ELMのバージョンが返ってきます。 OK
 ・[AT RV] コマンドを投げて、ボルテージを返してもらう ⇒ OK
 ・OBD2コマンド を投げて、[CAN ERROR] が返ってくる ⇒残念

 結果、全ては試せていませんが、ELMのコマンドは受け付けたようです。
 OBD2コマンドは、数値2桁 + 数値2桁で投げるようですが、間にはスペース要です。
 また、CRが必要です。


遊びでやるにしても、なかなか時間がかかりそうです。

暫く継続しそうなので続報あればまた纏めたいと思います。



いつもの備忘録(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

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