2011年2月16日水曜日

adbが無いんだけど・・・

今、ちょっとAndroidアプリの構築をお試し中で、開発環境を構築しています。

で、環境構築中にadbの利用とあります。
このadbを利用するには事前にtoolsというフォルダにパスを通しておくことが必要なんですが、
パスを通したのにadbコマンドをたたいてもそんなの無いよ、と言われます。
(ちなみに、Windowsで環境を構築しています)

で、よくよく見てみたら、android-sdkの中に、toolsとは別に「platform-tools」というフォルダがあって、そちらにadb.exeというものを見つけました。

うん、これだ。

ここにパスを通すことで、使えるようになりました。

2011年2月8日火曜日

GMAILの便利機能

こんにちは。部隊長です。
今回はちょっと脱線してGMAILの便利機能を1個ご紹介。

ご存じGMAILは他のPOPメールアカウントからメールを受信する事ができます。
これのお蔭で、ローカルにたまっていたメール本体がネット上に置ける事になり、
実質どこでもお仕事状態です。怨みます

しかしながら、POPアカウントからの受信は、
設定→アカウント→各アカウントでメールをチェックをクリック
しないとオンデマンドで受信できなかったんですよね。

しかし最近Laboをなんとなく見ていると発見しました







これだ!

「POPアカウントの更新」



こいつを有効にしておくと、
受信トレイの更新ボタン



で他のPOPアカウントを受信してくれるんですね!
さすがGoogle先生!太っ腹!


ちなみに僕はGmailの受信トレイは未消化のタスク置き場として使っています。
消化したものはタグつけてさっさとアーカイブです。
メルマガとか揮発性の情報はタグもつけずアーカイブか削除です。


また便利機能が見つかったらまたUPしようと思います。おもうだけかもしれません。

2011年2月1日火曜日

[Excel]VBAコードのバージョン管理

こんばんは。部隊長です。
今回も引き続きExcelVBAのネタです。

Excelでの開発は、Excelファイル本体がバイナリであるため
バージョン管理を行う事が困難です。
(2007以降はzip解凍してxml形式になるようですが・・・)

また、VBAのモジュールは開発が進むにつれ、履歴がたまりファイルサイズが大きくなります。
モジュール自体が破損する事も多いようですね。
そういうときの対処として、モジュールを全てエクスポートし、インポートし直すと最適化される、
というのがネットに載っています。

それであれば、モジュール自体でソース管理してしまった方が良いでしょう。
モジュールはテキストファイルですので、バージョン管理ソフトとの親和性も高いです。

そこで、モジュールファイルを一括してエクスポート、
または全て解放後、一括してインポートするコードをご紹介します。

本体のファイル直下にForm、Class、Module、それぞれのフォルダを作成し、エクスポートするコードと、それらのフォルダからインポートするコードです。

一括エクスポートした後はVSSなりSVNなりにコミットしたって下さい。

''-----------------------------------------------------------------------
'' 全プロジェクトファイルエクスポート(ブック・シートに付随するコード以外)
'' 事前にマクロのセキュリティ→VBAのオブジェクトモデルへのアクセスを許可する事(実行時エラーになります。)
''-----------------------------------------------------------------------
Private Sub Export_All()

    Dim Path As String
    Dim i As Integer
    
    Const cls As String = "\Class\"
    Const FRM As String = "\Form\"
    Const MODL As String = "\Module\"
    
    Const EXT_MODL As String = ".bas"
    Const EXT_CLS As String = ".cls"
    Const EXT_FRM As String = ".frm"
    
    Path = ThisWorkbook.Path
    
    '' エクスポートフォルダ
    If Dir(Path & cls) = "" Then MkDir (Path & cls)
    If Dir(Path & FRM) = "" Then MkDir (Path & FRM)
    If Dir(Path & MODL) = "" Then MkDir (Path & MODL)
    
    With ActiveWorkbook.VBProject
    
        For i = 1 To .VBComponents.Count
        
            Select Case .VBComponents(i).Type
            Case 1  '' vbCompTypeModul
                .VBComponents(i).Export Path & MODL & .VBComponents(i).Name & EXT_MODL
            Case 2 '' vbCompTypeClassModul
                .VBComponents(i).Export Path & cls & .VBComponents(i).Name & EXT_CLS
            Case 3 '' vbCompTypeUserform
                .VBComponents(i).Export Path & FRM & .VBComponents(i).Name & EXT_FRM
            End Select
        Next
    
    End With
    
End Sub


''-----------------------------------------------
''--プロジェクトファイル洗い替え-----------------
''-----------------------------------------------
Private Sub Refresh()

    Call Release_All
    Call Import_All

End Sub


'' 全プロジェクトファイルリリース
Private Sub Release_All()

    Dim i As Integer
    Dim colComName As New Collection
    
    With ThisWorkbook.VBProject
   
        For i = 1 To .VBComponents.Count
            If .VBComponents(i).Type = 1 Or .VBComponents(i).Type = 2 Or .VBComponents(i).Type = 3 Then
                colComName.Add (.VBComponents(i).Name)
            End If
        Next
    
        For i = 1 To colComName.Count
            .VBComponents.Remove .VBComponents(colComName(i))
        Next
    
    End With
    
    Set colComName = Nothing
    

End Sub

'' 全プロジェクトファイルインポート
Private Sub Import_All()

    Dim Path As String
    Dim i As Integer
    
    Const cls As String = "\Class\"
    Const FRM As String = "\Form\"
    Const MODL As String = "\Module\"
    
    Const EXT_MODL As String = ".bas"
    Const EXT_CLS As String = ".cls"
    Const EXT_FRM As String = ".frm"
    
    Path = ThisWorkbook.Path
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim fileList As Object
    
    '' Cls
    Set fileList = fso.GetFolder(Path & cls).Files
    For Each file In fileList
        ActiveWorkbook.VBProject.VBComponents.Import Path & cls & file.Name
    Next
    
    '' Form
    Set fileList = fso.GetFolder(Path & FRM).Files
    For Each file In fileList
        If Right(file.Name, 4) = EXT_FRM Then
            ActiveWorkbook.VBProject.VBComponents.Import Path & FRM & file.Name
        End If
    Next
    
    '' Module
    Set fileList = fso.GetFolder(Path & MODL).Files
    For Each file In fileList
        ActiveWorkbook.VBProject.VBComponents.Import Path & MODL & file.Name
    Next
    

End Sub




これをアドインにしてインストールして置くと便利。
但し、シートオブジェクトやブックオブジェクトに記述されているコードは対象外となるので、
そこらへんは手作業なのが玉に傷。



ネタ元はネットに散らばっていた情報ですので、ご利用は自己責任でお願いいたします・・・ 

2011年1月29日土曜日

[EXCEL]Chart.Export makes 0byte File

こんちは。Azureの続きをやるやる詐欺続行中の部隊長です。
今回もAzureはちょっとおいといて、絶賛進行中のプロジェクトから1ネタ。


現在進行中のプロジェクトで、某社販促グッズとして提供している某Excelブック(以下ツール)の改修を行っております。なんのこっちゃですね。

このツールでは集計したデータでグラフを作成し、それをフォームで表示するために一旦gifにExportしているんですね。

こんな感じで。

'' グラフタイトル設定
        .ChartObjects(1).Chart.ChartTitle.Text = GRAPHTITLE_ALL & " n=" & .Range(VALUE_N).Value        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL

このコードはExcel2000から2007まで問題なく動作します(97以前も動くかもしれんけど)
で、基本的に2010でも動くはず。

と思ったら、フォーム側のImageにロードする時にエラーが・・・


何故だと思ったら、出力されたファイルが0kbなんですね。空っぽです。
ググっても殆ど情報は出てきません・・・

そこで試しに簡単なサンプルを書いたら問題なく動作します。なんで?




対象のグラフが載ってるシートは非表示・・・!サンプルは表示・・・!


というわけでVisibleにしてやったらちゃんと動いた、というわけでした。
しかし、このブックはパスワードでロックされていて、表示するにはUnLockしなければならない・・・


というわけでこうゆう事になりました

'' Visible Befor Export (for Excel2010)
     ThisWorkbook.UnProtect password:="XXXXXXXXX"
        .Visible = xlSheetVisible
        
        '' 画像ファイルのExport
        .ChartObjects(1).Chart.Export ThisWorkbook.Path & GRAPHPICT_ALL
        
        .Visible = xlSheetHidden
     ThisWorkbook.Protect password:="XXXXXXXXXX"
        '' --

これはちょっと行き当たりばったり過ぎだろJK・・・
つかこんなとこにパスワード書くなよ。書き直し。


教訓:非表示シートを弄る際はお気をつけ下さい。

2011年1月24日月曜日

喫煙所検索サイト

喫煙所検索サイトを復活させてくれました。
といってもiPhone用だけど。
なので、IEでは上手く見えません。
http://kensaku.serve55.net

ちなみに、喫煙所の登録が可能!
問題は、GPSの精度だけど、きっと解決してくれるハズ。

2010年12月29日水曜日

年末も差し迫った中でADO?にはまってみました。「現在の Recordset は更新をサポートしていません。」

変なところではまってしまった・・・
こんなの知らなかったんだけど。

VB.netで

現在の Recordset は更新をサポートしていません。プロバイダか、選択されたロックタイプの限界の可能性があります。

と言われて、調べてたんだけどわからん。
ロジックはどうなっているのかというと、

dim sWkCd as string = "01"
dim strSQL as string
dim objRS as adodb.recordset 

コネクションうんちゃら・・・・やってSQLにSQLを書いて。
objRS.Open(strSQL, objCon, 3)



ここまでは問題なし。 objRS.Fields("フィード").Valueの値もちゃんと取れている。

dim l_HP = New cls_Holiday(sWkCd, objRS.Fields("フィード").Value)

ちなみに、 cls_Holidayでは新たなデータを取得して、l_HPのプロパティに検索結果をセット。
んだけど、なぜか落ちる!

で、結局、

dim_HP = New cls_Holiday(sWkCd, objRS.Fields("フィード").Value)
この赤字を別の領域に退避してやってみたらすんなりといきやんした。

dim swk as string

swk =objRS.Fields("フィード").Value
dim l_HP = New cls_Holiday(sWkCd, swk )

ってことは、と思ってcls_Holidayのパラメータを確認したら・・・・

ByRefで定義・・・・

ウップス・・・・

2010年12月24日金曜日

年末年始休業期間のお知らせ

当社の年末年始の休業期間は下記の通りです。

〔年末年始休業期間〕12月28日(火)~1月5日(水)

新年は1月6日(木)9:30より営業開始となります。
休業期間中にご不明な点などございました際には
メールにてご連絡くださいますと幸いです。



2010年12月10日金曜日

BugLog.me公開!

こんにちは。そろそろクリスマスです。イブの予定は埋まりましたか?
ビジネスサービス事業部隊長です。

さて、以前から作成していたインシデント管理サービスBuglogがいよいよ公開されましたのでお知らせします。

といっても紹介ページとかなんも用意してないのですが・・・

Buglog
は、システムやWebサイトの構築における障害情報、改善要望、問合せ等のインシデントをネット上で共有するサービスです。

[多彩な集計]
インシデントについて、プロジェクト毎に集計結果をグラフで表示します。
バグ収束率の報告書類って作るの大変なんですよね!
あと、メンバー毎の対応状況や報告者の確認状況も一目瞭然。
アサインされまくってパンクしちゃってるのにリーダーが気づかない。よくあります。身に覚えも・・・

[プロジェクトメンバー]
インシデントを報告するにあたって、誰をアサインするのか、といった所って管理大変ですよね。
「あれどうなった?」
「あれってなんすか?」
「バグだよ。致命的なやつあったじゃん」
「えー!聞いてませんよ!」
「こないだ君に頼んだよ!」
「いやいや、聞いてませんって!」
みたいな下り。火吹くとよく聞きますよね。聞きませんかそうですか。


BugLogでは、インシデント毎にアサインするメンバーを決定できますので、
こんなやりとりは減るんじゃないでしょうか!
また、プロジェクト毎にアサインするメンバーを設定できるので、閲覧対象者のフィルタリングが容易です!
見られたくないプロジェクトにはアサインしなきゃOK。

[通知]
アサインされると、対象メンバーにはインシデントの更新情報がメールで通知されます。
アサインされてなくても、インシデント毎に購読すればメール受信できちゃいます!

[添付ファイル]
インシデントにはファイルを添付する事ができますので、情報はweb、ファイルはローカル、といったような情報の分断が起こりません。

[データのダウンロード]
事象をドキュメントにしてユーザーに提出!なんて事もよくありますね。
BugLogでは、大体のデータはcsv形式でダウンロードが可能です!


通常こういった事象管理は、現場ごとにExcelシートがあったりなかったり(どっちだよ)するんですが、
やはり問題になるのは共有だったりアクセス制限だったり添付ファイルの管理方法だったり・・・

うちの開発メンバーもExcelの方がいいって人が多かったです。
そこで、Buglogは、いかにしてExcelに勝つか、というコンセプトで企画されています。


是非一度お試しください。ご利用は無料です。





ご利用はネットにつながってればOKです。

ipadやiphoneからの利用も可能です!
※但し、ファイルのアップロードはできません


但し、IE6以前のブラウザですと表示が乱れます。
あと、現在Firefoxで一部機能が動作しない事象が報告されています。




BugLogは今後もどんどん進化していきます。ご要望やバグ報告、大歓迎です!


新規のご登録は下記からどうぞ!

BugLog Me !

2010年12月7日火曜日

Access mdbでのSQLチューニング

こんばんは。(略)部隊長です。

早師走ですね。当部隊もご多分に漏れず、年末進行中です。
クリスマス以降は仕事しません!



今回はまたWindowsAzureから遠ざかり、
AccessMdbをバックエンドに使ったシステムでパフォーマンス悪いぞ!
というご指摘がありまして、
それの対応で へー と思った事があったので書いておきます。


今更mdb?、とかいわない。実際多いでしょ。


【今回の要件】
1.メインテーブル(物件)に、サブテーブル(価格)がぶら下がっている
2.価格は逐次更新され、更新日とともに追加登録される。
3.一覧画面では、最新の価格が取りたい
4.価格テーブルには、価格の他、価格登録時のメモなんかもあり、一緒に取りたい

【改修前のサブクエリ】

SELECT S.物件ID, S.価格ID, S.価格, S.価格設定日, S.お値段メモ
FROM お値段TBL S
WHERE EXISTS (
 SELECT *
 FROM (
  SELECT 物件ID, MAX(価格設定日) as Dt
  FROM お値段TBL
  Group by 物件ID
 ) q
WHERE S.物件ID = q.物件ID
AND S.価格設定日 = q.Dt

サブクエリ内でWhere Exists し、
その中で物件IDでグループした最新価格日を取得しています。
Indexは物件IDだけで、価格設定日には張っていませんでしたが、
これが超遅い。3秒位かかる。

本体はこういうLEFT JOINのサブクエリが4つほどあり、
全部合わせると10秒超える勢い。
全く以て実用に耐え得る性能じゃない。


で、色々試行錯誤した結果、一瞬で結果が返るのがこれ(found by シャチョー)


【改修後のサブクエリ】

SELECT S.物件ID, S.価格ID, S.価格, S.価格設定日, S.お値段メモ 
FROM (
お値段TBL S
INNER JOIN (
 SELECT 物件ID, MAX(価格設定日) as Dt 
 FROM お値段TBL 
 Group By 物件ID
) as sp
ON S.物件ID = sp.物件ID AND S.価格設定日 = sp.Dt)
) 

これで一瞬です。本体のWHERE EXISTSを全てINNER JOINに変更したら、
本体自体一瞬で結果が返るようになりました。


私今まで内部結合で絞り込みをするのはダメかと思っておりましたが・・・
大体なぜこれで速いのか、改善前はなぜ遅いのか、追及してまいりたいと思います。

2010年12月3日金曜日

レンタルサーバーでBuglogを

インフルエンザの注射を打ってきました。

こんにちは。ビジネスサービス事業部隊長です。
でも重症化予防ワクチンだそうで、罹らないってわけではないそうです。なんか残念・・・

さて、AzureのBlobにアレやコレを保存して幸せになる方法を書く予定でしたが、
色々と重なってしまい追及できておりません。でもやります。近々。

WindowsAzureのアプリケーションは、「http://アプリ名.cloudapp.net/」というURLがあてがわれます。
これだとちょっと長いしドメインも欲しいので、レンタルサーバーを借りる事にしました。

レンサバに入口だけ作ってAzureに誘導、でもいいのですが、
どうせなら動かしてしまえっつことで、
SQLServer2008R2が利用できる且つ安い所を探して見つけたのがここ
月735円でSQLServerも10G。ヤスイネー。

実はちょっと前に別のレンサバに載せようとしたんです。Buglog。
しかし、ユーザー定義テーブル型を使ってたおかげでSQLServer2005には乗らず、
別の方法を考えたもののデータ回りとストアド全修正になるという苦行しか思い浮かばなかったのでそこのレンサバは1か月分だけお支払して撤退です。
社長すみませんm(__)m

話が反れました。
で、今回は2008R2ですからユーザー定義テーブル型もばっちりです。
ローカル環境からも問題なくテスト完了、さあデプロイだ!


















System.Web.DataVisualization? デジャヴ?

で、先方にお問い合わせしました所、mschartは現状使えませんと。
インストールは会議にかけねばならんそうでして、結果は1週間以内にわかるようです。

また使えんかったらどうしましょうかね。
チャート出すページだけAzureにすっか。

とある規格化されたコード

世の中こんなもんまで規格化されていますよ、というお話 https://ja.wikipedia.org/wiki/ISO_5218 この辺が大変良くできた、ためになる(?)解説記事です。(長い https://qiita.com/aoshirobo/items/32deb...