2012年12月30日日曜日

ブログ記事データの変換(MovableType形式->BloggerAtom形式)

ブログをテーマごとに分けて作っていたのですが、
そもそも更新頻度が低く、意味があまりなかったので集約することにしました。
はてなダイアリー/FC2からBloggerへ過去記事を移行した際の手順をメモ。


①はてなダイアリー/FC2で記事エクスポート(MovableType形式)

②Bloggerでインポート
  ⇒エラー発生

③下記サイトを使って、エクスポートした記事データをMovableType形式からBloggerAtom形式へ変換する。
http://movabletype2blogger.appspot.com/

④変換したデータをダウンロードする。

⑤ダウンロードしたデータでBloggerにインポートする。


以上

2012年12月29日土曜日

【備忘録】Windows7でのSendToパス

Windows7のSendToのパスは
C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\SendTo

2012年12月22日土曜日

BPMSについて勉強してきた@関西IT勉強宴会

昨日、関西IT勉強宴会に参加してきたので個人メモ。
詳細なまとめは専門サイトなり勉強会のまとめなりで。
お題はBPM(Business Process Management)。

まず、BPMってよく分からない。

BusinessをProcess化してManagementする。
ちょっと具体的に書くと、業務をフローにして運用する。
継続的に分析して、改善して…の繰り返し。
ここまでの考え方はまぁ分かる。

概念が何となーく分かったところで、BPMを扱うツールたる「BPMS」の使い方や、既存システムとの連携の仕方が分からないとどうにもならない。
なので、以下に簡単にまとめます。

■BPMSの使い方
①プロセスとデータをモデリングする。(描く)
 プロセスはフロー、データはテーブルレイアウトのイメージ。
 ※データが複数レコード持てるのかは不明。
②プロセスインスタンスを生成する。
 バッチキックのイメージ。
 例えば、既存システムからあるタイミングでキックされることで、プロセスが開始される。
③各プロセスを実行(処理)する。
 例えば、データの値を入力する、承認する、など定義したプロセスの内容を実施して
 Questetraが勝手に抽出してくれるWebフォームで入力できる。

と、これが基本。
今回の勉強会ではあまり触れなかったが、恐らく色々と分析ができるはず。
あと、データはプロセスに紐付くプロセスデータとプロセスを跨るテーブルデータがあるらしい。

■既存システムとの連携の仕方
①Http
②API
③メール
④スケジュールにもリアルにもできるみたい。
既存→BPMSならリアルもスケジュールもないんだろうけど、
BPMS→既存でリアルにするなら、既存側に常駐が要りそう。

■BPMの観点
 ①人間中心
 ②システム中心
 ③ドキュメント中心
があるとのこと。


さて、ここまでがBPMSとは、使い方、連携方法、について。
次に、どういうケースで適用できるのか、について。


■業務の一部を切り出す
①棚卸業務の一部(実際の棚卸作業)のみをBPMSにしてしまう。
 1)既存システムで担当者割り振りして、BPMSに引き渡す。
  ※特定のレコードデータを渡してプロセスを生成する。
 2)BPMSで実際の棚卸作業を実施する。
 3)BPMSのプロセス完了で既存システムにデータを返す。

■業務全体をBPMSにしてしまう。
①サブシステム丸ごとBPMSにしてみました!な感じ。
②BPMが、経営レベルの観点で見て、全体のプロセスを改善・最適化することが目的なので、ある意味正解のはず。

■まとめ
①ポイント(勉強会での)
 ・部分抽出するなら、
  単純なステータスの繊維とみなせるDBのサブセットを切り出す。
  (BPMS引渡し済み、返却済みのステータスが必要)
 ・既存システムとBPMSの関連は、サブシステム同士の関係に似てる。
  ※連携はリアルにかなり近く、密接だが。

②所感
 ・余り疎結合じゃない。
  SOAとかその辺を意識するなら疎結合な仕様の検討は必要かもしれない。
 →そもそも、とりあえず業務を切り出して、プロセスフローの継続的改善を目的にしてるので、
  最初から疎結合にする必要性もないし、するべきではないと思う。
 ・適用範囲や深さは如何様にもできるので、色々試してみるといいかも。
  1)適用範囲が「大きい」のは対象が経営レベルで、「小さい」のは各業務レベル。
  2)深さは、適用範囲が大きい場合に、どこまで細かくBPMSで扱うか。
 ・サブシステムとして考えてしまうと、システム的な切り出し方をしてしまいそう。
  あくまでBusinessProcessのManagemetであることを忘れないようにしよう。


■最後に
今回の勉強会で使用したのは「Questetra BPMS」。

Saas型でブラウザ上で完結する。
詳細は別途調べてみる予定。


※非常に簡便なBPMSなので、大手ベンダーのBPMSとは仕様や勝手が異なるはず。




2012年6月19日火曜日

貧乏暇なしをどう打開するか


短納期のプロジェクトにて時間がないために、
えいやーで設計書を作成しとけ!
もしくは、テスト工程を圧縮するんだ!
その結果、品質が悪化し対応に追われる。

なんとか終わった!
よし、次のプロジェクトだ!
ところが先に納品した既存システムでトラブルが続出し、ただでさえ短納期の新プロジェクトがさらに圧迫される。

さらには連日の残業による疲労が蓄積して作業ミス、そこからトラブル発生。
そして、負担が更に増える対策。
「作業は必ず二人以上で実施、二重チェックします!」

以下スパイラル・・・

よくありますよね、こんな話。
まさしく目の前で日々繰り広げられています。
エンドレスに地獄行き。
いや、既に地獄かもしれない。

デスマーチは終わりがあるけど、この場合は終わりがない。


さて、こういう状況でどうやってカイゼンするの?というお話。
カイゼンしようにも恒常的に時間がないのでどうしようもない、みたいな。


私見で拙いですが、道はひとつしかないと思っています。

時間を作って、手間のかからないカイゼン案を考えて、実施する。
ダメなら別の案を考えて…もう単純にPDCA回すしかないと思うのです。

こんなこと言うと、当然「だから時間がないっつってんだろうがバカヤロウ」と言われます。
この「時間を作る」が難しいんですよね。

色々考えてみたんですが、結局、【人を増やす】以外にないです。
するとまた「単純に人を増やしても余計に手間が取られるだけ」と言われます。
特に現場から。
僕も言いそうです。

いやでもね、人増やして何かしらカイゼンしていかないと、ずっとしんどいんですよ?
だったらとりあえず人を増やして時間作れるようにしましょうよ。

ただ、何の考えもなしにとりあえずで人を増やすのはあり得ないです。
人を増やして何をしてもらって、どういう状況になれば、時間が作れるのか。
まずはこれを検討/実施してPDCAを回しましょう。
それは、「ドキュメントを整備して、調査を迅速にする」だったり「作業の自動化ツールを作成して、作業時間が圧縮する」だったりするわけです。

なお、これら第1段階のPDCAを回すために必要な人材は、業務システムの構築をやっているチームであれば、その(業務システムの構築の)経験がある人が望ましいです。
違和感が少なく参画できますからね。


さて、ここでやっと時間ができる状況がやってきます。
おそらくこの時点まで半年〜1年くらいかかるのでは、と思います。

この状態のままでは、コスト過多の状態ですので、恒常的に負荷を下げ、かつ品質を向上する必要があります。
それは、アジャイルなのかウォーターフォールなのか、はたまたスクラッチなのかパッケージなのか、といった要因により変わってくるので、ここではパッケージ利用の場合で考えます。

現時点で、僕が関わるPJの殆どがパッケージ利用ですので。
(もはや職場に提案しようとしている内容・・・)

最初に、単体テスト/結合テストの自動化を進めます。
パッケージ利用であれば、運用シナリオの根幹は同じはずです。
当然ユーザによってカスタマイズが入ってシナリオの変更や追加が発生しますが、基本の路線は同じでしょう。
ですので、基本となる運用(テスト)シナリオを作成し、テストの粒度も統一します。

次に、環境構築を半自動化します。
環境構築時のミスに起因する障害って案外多いですよね。
ですので、環境構築を反自動化してしまいます。
ちなみに「半」としているのは、パラメータ設定で柔軟に対応できるようにするためです。

最後に、ユーザ単位にCI環境を構築し、週に1度は実行します。
もしくは、ハード的には全ユーザを1ヶ所でもかまいません。
全ユーザを1カ所にする場合、2番目に作成した環境構築ツールを使用します。
流れとしては、1)環境構築ツール、2)結合テストシナリオ、3)環境構築ツール・・・以下ループ。

ここまでテストの工程を自動化すれば、品質の向上は十分見込めるのではないかな、と考えています。
ま、結果が出なければまた別の策で試してみるしかないです。

なお、カイゼンの効果が出てくるのは1年半〜3年程度かかるのではないでしょうか。
カイゼン策は慣れないツールを使う場合も多いでしょうから、習得にも時間がかかるでしょう。
何より、それくらい長い目で捉えて考えないと長期的に通用するカイゼンにはならないと思います。


以上、貧乏暇なしをどう打開するか。
とるITエンジニアの拙い意見でした。

2012年6月10日日曜日

【流通小売知識】分類(カテゴリ)

分類(カテゴリ)について。

1.分類

売上情報の分析や販売手法の効率化、店内レイアウトのために、商品を分類する。
分類は、いくつかの階層に分けて行われる。

大分類/中分類/小分類の3階層をベースに、
足りない場合は大分類の上位分類を定義したり、小分類の下位分類を定義したりする。

よくあるインターネットショッピングサイトのカテゴリを想像すると分かりやすい。
ただし、階層の深さがバラバラだと、分類の管理コストがかかったり、システムが作りづらくなってしまう。
よって、3階層なら3階層になるように統一すべき。


2.メーカー分類

上記の分類とは別に「メーカー分類」を設定する場合がある。
この「メーカー」は、製造メーカーを指す。

「どのメーカーが売れたのか」という分析、特定メーカーの販促に活用する。
(追記)
 メーカー指定でセールをするのにも使う。
 例:資生堂製品20%offなど

なお、1.の分類にメーカー分類を取り込む場合もある。
しかし、階層の深さが決まっている中でメーカー分類で1階層使ってしまうのは勿体ないため、メーカー分類は別になることが多い。

【流通小売知識】販売手法:バンドル/セットマッチ/ミックスマッチ

一般的な販売手法としてよくあるもの。
呼称は企業によって異なる場合があるが、販売手法の考え方は同じであることが多い。

【バンドル】 …まとめ値引き
  ・特定商品を一定数購入することで、値引き/割引する。
  ※一定数は、N個ちょうど、N個以上のパターンがある。
  ※2個の場合、3個の場合、4個の場合、、、など複数段階での設定もある。

【セットマッチ】 …セット値引き
 (商品単位)
   ・特定商品AとBを合わせて購入で、値引き/割引する。
   ※設定した各商品を1つずつ購入すること。

 (グルーピング設定)
   ・特定商品グループAの中から1商品、
    特定商品グループBの中から1商品を購入で、値引き/割引する。 

【ミックスマッチ】 …よりどり値引き
  ・特定商品A、B、Cのなかから一定数購入することで、値引き/割引する。
  ※設定した商品群から一定数を購入すること。
   つまり、商品Aだけを一定数購入してもよい。
  ※一定数は、N個ちょうど、N個以上のパターンがある。

2012年5月20日日曜日

【流通小売知識】客注

客注/客注販売


客注とは、お客様が、店頭に在庫がない商品を注文して、後日商品が店頭に届いてから受けとる取引のこと。

客注の商品を店頭に並ばせてはいけない。
(注文していただいたお客様以外の方に売ってしまう可能性があるため。)

このための仕組みやルールを店舗独自、または本部として整備しておく必要がある。
本部として仕組みを作る場合があるため、店舗システムへの要望として上がる場合もある。




2012年3月21日水曜日

【Java-Excel】POIをソースからjarにする時にコンパイルエラー(文字化け)が出たときの対処

POIを使用したExcel入出力のあるシステムで一部サーバー環境の変化に起因してレスポンス悪化が発生。

原因調査の一環でapache POIのソースコードにログ出力を埋め込むことになった。
単体でclassだけ作るか悩んでいたところ、普通にbuild.xmlが付いてるのでまとめてコンパイルすることにした。

以下、簡単に流れを整理。
 1.ソースコードをZIPで入手。
 2.antを入手してインストール
 3.ZIPを解凍したところでant jarを実行
  →文字化け発生。(MS932でない)
   testcase.org.apache.poi.hpsf.basic.TestMetaDataIPIで文字化けしてる。
   WindowsXP環境だとMS932に勝手に変えてるのか?
  →で、結局、build.xmlのjavacタグにencoding="utf-8"を追記して解決。

そもそもTestMetaDataIPI.javaはテキストエディタ(秀丸)で開いても文字コードが違うと言われた。。。



2012年2月21日火曜日

【Excel2003】名前定義削除(マクロ)

Excel2003で名前定義を削除したい時、文字化けして削除できないときが多々ある。
それごと削除できるマクロを見つけたのでメモメモ。

ちなみに、2007以降では標準機能で一括削除できる。
名前定義の文字化けは未確認。

Public Declare Function SetTimer Lib "user32.dll" _
(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32.dll" _
(ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Sub DeleteDefinedNames()
Dim beforeReferenceStyle As Variant
beforeReferenceStyle = Application.ReferenceStyle
Dim timerID As Long
timerID = SetTimer(0, 0, 100, AddressOf TimerProc)
If beforeReferenceStyle = xlR1C1 Then
Application.ReferenceStyle = xlA1
Else
Application.ReferenceStyle = xlR1C1
End If
Dim n As Name
For Each n In ActiveWorkbook.Names
If Not n.Name Like "*!Print_Area" And _
Not n.Name Like "*!Print_Titles" Then
n.Delete
End If
Next
Application.ReferenceStyle = beforeReferenceStyle
KillTimer 0, timerID
End Sub
Private Sub TimerProc()
Dim hwnd As Long
hwnd = FindWindow("bosa_sdm_XL9", "名前の重複")
If hwnd > 0 Then
SendKeys getRandomString(3, 20), 10
SendKeys "{ENTER}"
End If
End Sub
Private Function getRandomString(min As Long, max As Long) As String
Dim s As String
Dim i As Long
max = Int(max * Rnd)
For i = 0 To min + max
Randomize
s = s & Chr(65 + Int(26 * Rnd))
Next
getRandomString = s
End Function


○参考ブログ
http://alphafocus.cocolog-nifty.com/blog/2011/05/tips-excel-14b4.html
○コード元
http://trash-area.com/archives/677
こういうの本当に助かります。
ありがとうございます。

2012年1月26日木曜日

トランザクション分離レベル

トランザクションに疎いのでメモ。

○トランザクション同時実行時の問題とトランザクション分離レベル
 http://d.hatena.ne.jp/zecl/20080204/p3


■ITメディア
 ○トランザクション処理に詳しくなろう─ 分離レベルとロックの種類 ─
  http://itpro.nikkeibp.co.jp/article/COLUMN/20080123/291846/



2012年1月18日水曜日

.NET系テストツールメモ

自動テストツールとかまとめ。
■自動テスト
 ◎NUNIT
  (ダウンロードページ)
   http://www.nunit.org/index.php?p=download
  (解説ページ)
   http://akabeko.sakura.ne.jp/blog/2011/02/nunit-%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B/

■カバレッジ(網羅度)
 ◎PartCover
  (ダウンロードページ)
   http://sourceforge.net/projects/partcover/
  (解説ページ)
   http://blog.livedoor.jp/akf0/archives/51559011.html
  (旧バージョン2.3.0系)
   http://sourceforge.net/projects/partcover/files/PartCover/dev/partcover.setup-2.3.0.35109.msi/download

■コードチェック
 ◎FxCop
  【10.0】
  http://www.microsoft.com/download/en/details.aspx?id=6544
  【1.36】
  ★未確認
  http://www.microsoft.com/download/en/details.aspx?id=3138
  ※Windows SDKに同梱  
   (Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1)
  http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8279
   (Microsoft Windows SDK for Windows 7 and .NET Framework 4)


■所感
業務システムを構築する上で、ほぼ必ずテストするのってDBへのinsertやupdateなんよね。
なので今回は簡易まとめを作成したけど使ってない。

コンソールプログラムなのでパターン別にBatファイル作って、ちょいちょい実行中。
DBへの準備作業やエビデンス取得作業も自動化中。

んー、手作り自動テストツールか。。。