2016年2月16日火曜日

呼出先WinアプリでSQLite の「unable to open database file」が出たら

自分用メモ。

普通はSQLiteのDBファイル、およびDBファイルがあるディレクトリに書き込み権限がない場合がほとんどだと思いますが、以下のような特殊な状況の場合の対応策。

シチュエーション

DBにSQLiteを使っているWindowsアプリケーション(例:SomeApp.exe)があって、それを別のWindowsアプリ(例:MyApp.exe)から引数2つを付けて呼び出さないといけない。
DBファイル(例:SomeApp.db)は、呼出先のEXEと同じ階層にある。

現象

MyApp.exeのコード(C#)から、SomeApp.exeをこんな感じで起動させようとする。引数は、「user001」と「C:\\work」の2つ。
[C#]
System.Diagnostics.Process p =
 System.Diagnostics.Process.Start(
  "C:\\SomeApp\\SomeApps.exe",
  "user001 C:\\work");
そうすると、件のエラー「unable to open database file」が出てしまう。

原因

SomeApp.exeが、「カレントディレクトリにあるDBファイル(SomeApp.db)を開く」という処理をしているため、別アプリから起動すると、別アプリ自体があるディレクトリをカレントディレクトリとして認識してしまうため、当然「カレントにDBファイルはないよ」となっている。まぁ、単純な話。

対応

以下の2つの手順を踏んで、無理やりSomeApp.exeがある場所がカレントになるようにSomeApp.exeを実行してあげる。

(1)SomeApp.exeの場所に移動してSomeApp.exeを起動するbatファイルを作る。
(2)呼出元のMyApp.exeからは、上記1のbatファイルをキックする。

まず、(1)のbatファイルはこんな感じ。
[kick.bat]
SomeApp.exeがあるフォルダに移動
cd "C:\\SomeApp" batファイル起動時の引数2つをそのまま渡す
SomeApp.exe %1 %2

次に、(2)の呼出方をこう変える。
[C#]
System.Diagnostics.Process p =
 System.Diagnostics.Process.Start(
  "C:\\Path\\to\\kick.bat",
  "user001 C:\\work");
以上、こんな状況、他にあるのか知らないけど備忘録として。

2015年4月1日水曜日

【誰得】Excelで画面設計書作る人向け。丸番号を生成するExcelマクロ。


昔から「日本のシステム屋は、Excelで設計書を作るんだぜ。まったくイカれてるぜ!」と言われておりますが、Excelがお絵描きツールだと思っているボクにとっては至極自然な感覚でございます。すいません。

さて、今日はこのクレイジーな文化をさらに助長するツールを作ったので、共有します。
例によって、世の中の3人ぐらいにビビっとくれば、本望です。

これは何ですか

画面設計書で、こういうのを求められる場合ってあるじゃないですか。画面のキャプチャとかを貼って、項目1つ1つに番号振って、その項目一覧表を別紙に書いて…みたいな。

(出典)

この番号振りが、意外と地味に堪える作業なわけですよ。
なんかもう、地味に面倒で時間がかかる。
しかもまったく生産的な作業じゃない。
ならば一気に生成できるようにしようじゃないか!

というものです。

使い方

ここからダウンロードしたら、ダブルクリックで起動して、マクロを有効にしてください。
まず最初に、色を決めます。

「色選択」を押しましょう。


カラーパレットで、好きな色を選べます。親切ですね。


選択した色がA1のセルに反映されたら、もう半分ぐらいできたようなもんです。


「丸番号を作る」というボタンを押すと、開始番号と終了番号を入れるダイアログが出ます。
素直に「1」から作りたければ開始に「1」、途中から作りたければ「5」とか入れます。
終了番号は当然、開始番号より大きい数字で。


ダイアログの、なんか「■■■」みたいなボタンを押したら、あら不思議。
ドバっと生成されます。

ちなみに、ひたすら右に配置していくので、調子に乗って100個とか作ると「BD」列ぐらいまで行っちゃってめんどくさい。

でも、手で作成するよりは、まぁマシでしょ。っていう。
ロジックで「何個まで作ったら折り返し」とかしたらいいんだけど、めんどくさいし。
はぁ?なんでそこまでしなきゃいけないの?っていう逆ギレ。

免責事項

まぁ使う人もそういないだろうから、「マクロの記録」で作った感じのままアップしてます。気の利いた機能とかエラーチェックとか、ほぼありません。
ご利用は自己責任でお願いします(まぁ、特別なにか悪さをすることはありませんが)。
心配な方は、Alt + F11でソース見たらいいし。
このExcelマクロを使ったせいでExcelがちょくちょく「応答なし」になる、そもそもWindowsは使いにくい、iPhoneの電池の減りが早い、今日のお昼はおにぎり一個しか食えなかった、などの苦情は一切受け付けません。

ダウンロード

こちらです。
http://www.boldweb.jp/apps/marumacro.zip

※万が一気に入っても、Facebookで「いいね」とかしなくていいですよ!

2015年3月17日火曜日

【誰得】テスト用MACアドレス(っぽいもの)を生成するもの

とあるシステムのテストで、MACアドレスをやたらと入力しないといけない事があったんだけど、テストとはいえ意外とランダムにMACアドレス風の文字列を作るのが面倒だったので、ランダムにMACアドレス風のものを生成するものを作りました。

この広い世界で3人ぐらいに「こういうの欲しかった!」って言ってもらえれば、本望です。

■MACアドレスっぽいものを生成する
http://www.boldweb.jp/genmac/

2013年10月23日水曜日

【営業】大切なことはすべてIR情報が教えてくれた

友人(いや、向こうからしたらまだ「知人」かもしれないがボクは友人だと思い込んでいる)が、営業フェーズや案件を固めていく際にとても役に立つノウハウをブログに書いていました。

2つの愛を守るために立ち上がった、ディレクターの仕事効率化②

で、ボクは最近こっちのブログはかなり放置気味で、あっちのブログでクダラナイことを書くことに命を燃やしているんですけど、そうか、ボクもいい歳だし、ちゃんとしたこと書かないといけないなぁ、と急に恥ずかしくなってきたので、当たり前だと思ってたけどこれってどう?的な営業ノウハウを書いてみようかな、と思います(割にタイトル釣り気味)。

事前の情報収集に命をかける

これから書くのは、例えば問合せを受けて、あるいは紹介されて初めて先方の企業にお話を伺いに行く場合を想定しています。
大枠の流れは、先述の友人(知人じゃなくて友人だもんね)のブログに書いてあることを実践すれば良いので、ここではその中の「情報収集」について少し掘り下げてみようと思います。

さて、初めて問合せを受けてその企業に訪問する前、当然その企業のことや業界全体のこと、競合のことは調べていくかと思います。ただ、まだ案件の影や形もハッキリしない時、事前の情報収集って何をすればいいのでしょうか

ボクがよくやっていたのは、先方のホームページ、特にIR情報とトップメッセージをくまなくチェックする、という方法です。

上場企業であれば必ずHPでIR情報を出してくれていますね。IR情報のページで、決算説明会の資料や、短信資料なんかを開いてみると、
  • 中期経営目標がこれなんですが、
  • この事業は去年から順調ですけど、この事業は去年より悪くて、
  • 原因は販管費が嵩んでしまったからでして、
  • ですからそこを重点的に改善しまして
  • さらに新規需要が見込まれるこの事業にも積極的に力を入れていきまして
  • 全体として目標に向けて順調に推移しております
的なことが暴露されていますね。

つまりここで「販管費を削減するようなソリューションに興味あるかもな」とか、「新事業についてこの辺の関連情報を持って行くとウケるかなぁ」などと仮説を立てることが出来ます。

さらに同業他社のものと比較して見たりすると、その企業の特色がより浮いて出てくるので(というか比較して初めてわかる)、とにかく多くの企業のIR情報を見てアレコレ考えてみると良いと思います。

※決算書読むのが苦手だ…という方は、簡単にでも読めるようになるとより具体的にその企業が抱える課題が見えてくるので、ぜひ学習されることをお勧めします。
ど素人が読める決算書の本(Amazonへ)
あとは上場企業の場合だと企業価値検索サービス Ullet(ユーレット)とかが便利ですね。


そして2つ目のトップメッセージ 未上場企業でIR情報が載っていなくても、経営者のメッセージというのは大抵掲載されていますね。
たとえばそのメッセージの中に「ホニャララへ挑戦し」とか「ナンチャラの改革を実行し」とか書いてあれば、それは即ち「ホニャララという状態に早くなりたい」「ウチの課題はナンチャラ」と言ってるようなもんですから、それをベースに仮設を立てていけば良いわけです。


事前の情報収集に命をかけた感をふんわりと出す

さて、そうやって集めた情報で仮説も立てて、いざ先方の会社へ。俺の情報収集力と仮説力を見せつけてやるぜ!と意気込んで行っても、残念ながら大抵ハズします。俺のあの1時間は何だったの?というぐらいにハズすことなんてザラにあります。

そりゃ先方は毎日その課題や目標のことを考えているので、話はもっと先に進んでいて当たり前ですよね。

ただ、例え仮説が全部ハズレても、そうやって事前に情報を収集しているだけである程度業界知識が(一夜漬けレベルであっても)頭に入りますので、初めてのお客さんと話す場合もスムーズになりますし、専門用語などの不明点が少なくなっている分、無駄な質問(先方にとっては常識的なこと)をすることもなくなりヒアリング精度も上がります。

そして何より、「事前にガッツリ調べてきた感」をそこはかとなく出せると、先方のテンションも上がってきます

ポイントは、そこはかとなく出すことで、どういうことかと言うと、先方のお話を聞きながら相槌を打つ際に「(ライバルの)○○商事さんも確かそうでしたよね」と挟んでみたり、「ホニャララっていうのを実践されてるお客様がいらしたんですけど」など、相手の頭の中にあるであろうキーワードを差し込みつつ話す。
そうするだけで、先方は「あ、しっかり調べてきてるな」と感じ取ってくれますし、もう少し突っ込んだ情報を出してくれるかもしれません。

間違ってもやってはいけないのは、自分で立てた仮説を話しまくること。これはただの自己満足なので、「せっかく調べたし考えたんだから言いたい!」という気持ちをグッとこらえて、キーワードを差し込みながら先方にお話してもらう。そうするといつの間にか「あの人は分かってるな」なんて思ってもらえて、営業で一番大事な「信頼感」も生まれやすくなります。



以上、長々と当たり前のことを書いた上に、内容がタイトルからどんどん逸れていって結局別のことを書いたような気がしますが、また気が向いたら(もっと長々と)書いてみようと思います。

あとがき

営業はよく、恋愛というか、女性を口説くのと同じ、と例えられたりしますね。接触頻度を少し高めて存在感を示す、とか、相手の期待してそうなことを事前に準備しておく、とか、人の心を捉える、という意味では共通的なノウハウが多いですね(たぶんね)。
でも、今回の「初めて訪問する前の情報収集」ノウハウに関しては、実践するとただの気持ち悪いストーカーまがいになるので、絶対に恋愛には応用しないでくださいね。

ただ、友人(間違いない)のブログにもあるように、やはり必要なのは「愛」ですよね。声をかけてきてくれた先方を愛し、感謝の気持ちで向かい合えば、良い関係が築ける。はず。

2013年10月18日金曜日

Amazon EC2のインスタンスに接続できない

クライアントの担当者さんから「(Amazon EC2で)運用中のサイトにアクセス出来ない、落ちてるのでは…」と連絡が来た。
試しにサイトにアクセスしてもリモートデスクトップで繋ごうとしてもエラーになるばかり。
EC2の管理画面でインスタンスの状態(Status)を見ても、完全に正常稼働中で、落ちているどころか何のトラブルも発生していないように見える。

これは厄介かも…と思いながら Elastic IPsの設定を見てみると、見事にIPアドレスとインスタンスの紐付けが外れてました…。 そりゃアクセスできるわけがない。

インスタンスを再起動するとElastic IPの設定は外れちゃうってことだから(確かに「起動中のインスタンスに割り当てる」仕組みだから、そりゃそうだ)気を付けよう!

ってことで、紐付け再設定して事なきを得ました。
#以下、自分用メモ。

EC2管理コンソールで「Elastic IPs」を選択。

該当のIPアドレスで右クリックして「Assosiate Adderss」を選択。

割当先のインスタンスを選んで「Assosiate」押す。
以上で設定完了。しばらくしたらアクセス!