holmesのメモ帳

始めなければ始まらない。頭の中で考えているだけなのは終わりにして手を動かして色々と作っていこう。

Windows Server 2012 R2 Essensials のクライアントバックアップをドメインに参加せずに接続する

今までWindows Home Server 2011を使ってクライアントPCのバックアップを取っていたのだけど動作が怪しくなってきたので前から考えていたWindows Server 2012 R2 Essensialsに移行する事にした。

Windows Server 2012 R2 Essensials のセットアップが終わり、いざバックアップの設定をしようとするとドメインに参加したユーザーを作るように促される。

一度試してみたけど、これをやると今までドメインに参加していなかったクライアントPCの中に別のユーザーができて色々設定してある環境が使えなくなってしまうので困った。


どうしようかと思っていたらこの記事を発見
[http://satsumahomeserver.com/blog/775:title=[FAQ:WSE]Windows Server 2012 Essentials にクライアントを接続する際に、ドメインに参加させずに接続する方法]

レジストリに1つ追加するだけで解決しました。

f:id:holmes:20140719110247p:plain


ただし注意事項もあった。これは仕方ない。

注意事項:
ドメイン認証や、グループポリシー、VPNなどドメインに参加していることが前提となる機能は、ドメインに参加していないクライアントでは利用出来ません。

ドメインに参加していることが条件となるような3rdパーティー製のアドインが登場した場合、そのアドインが正しく動作しないことがあります。

・オフプレミス クライアント(イベントの際に照会した、LAN外からのクライアントインストール)ではドメイン参加が必須となります。

・このソリューションが利用出来るのは、以下のSKUに限定されます。
  Windows 7 Professinal
  Windows 7 Enterprise
  Windows 7 Ultimate
  Windows 8 Pro
  Windows 8 Enterprise

Windows Server 2012 でISOをマウント

Windows Home Server 2011 が動いていたPCを
Windows Server 2012 R2 Essentials に変えることにした。

でインストールが終わった後で
ふとISOファイルのアイコンを右クリックしたら「マウント」とあったので選択してみると何故かエラーに・・

調べてみるとサーバーマネージャーから機能を有効化しないと使えないみたい

手順はこちらを参考にさせてもらいました。
 ↓
Windows Server 2012 betaでISOをマウントする方法

請求書管理サービスmisocaを使ってみた

少し前から請求書の管理にmisocaというサービスを使っている。

http://www.misoca.jp/

基本料無料というのが良い。

そして請求書の郵送を1通180円でお願いできるのがとても便利。

簡単にできすぎて取引先にちゃんと届いているかメールとか電話で確認したくらい。


でも1つだけ問題がある。

ただでさえ用事がなければ家に引きこもっている事が多いのに
misocaを使う事で毎月の1回の外出が減るという事に気がついた。

近所の郵便局へ自転車で行くというだけの少しの気分転換の時間が無くなったのである。

misocaが悪いわけじゃないんだけどね。


あと、関係ないけどmisocaのサイトってアプリの部分以外はWordpressでできてるんだね
http://www.misoca.jp/

VirtualBox+Ubuntu14.04で解像度が640x480に固定されてしまう

f:id:holmes:20140513111854p:plain

タイトルのままなんだけど
VirtualBoxにUbuntu14.04を入れて起動してみたら
画面の解像度が640×480に固定されてしまい変更できない状態になってしまった。

調べても良くわからないのでUbuntu13.10を入れてみたら問題なかった。

しかしUbuntu13.10使ってたら「最新版(14.04)にアップデートしますか?」と聞いてくるので試しにアップデートしてみた。

すると再起動後また同じように640×480に...


ちょっとしたテスト環境が欲しかっただけなのでとりあえずは13.10にしとく。

Access97からAccess2013への移行のご依頼

複数のMDBがあってリンクテーブルを使っている様子。

Access2010でとりあえず開いてみようとしたらエラーが出て開けない・・

Shift押しながら開く事もできない。


Access97から2010が飛躍しすぎかもと思い
Access2003を試してみたら開けた。

一部の機能で未解決のエラーはあるが移行できないという感じではなさそうだ。


Access97 → Access2003 → Access2010 → Access2013

という感じで試してみよう。


あ、Access2013持ってないや \(^o^)/


Office365 とか使えば良いのかな?
ちょっと調べてみよう。

プログラムからPDFファイルを印刷する方法

ずいぶん前に作ってまだ客先で動いているVB6のプログラムに手を加えることになった。

当時Acrobat(製品版)が各端末に入っていたのでPDFファイルの印刷もshellを使って以下のように書いていた。
たぶんAcrobat7だったと思う。

Acrobat.exe /cjs /n /p /h [ファイル名]

やりたい事はPDFファイルの印刷だけど
画面にAcrobat(又はReader)を表示せず、印刷ダイヤログも表示せずプリンタへ直接印刷するという事。



新しい環境ではAdobeReaderXにするのでそれへの対応

ところがこれで結構はまった。

AdobeReaderXの実行ファイルは AcroRd32.exe なので以下のように変えてみたが動かない。

AcroRd32.exe /cjs /n /p /h [ファイル名]

どうやら使えなくなっている引数があるらしく
特に /csj は使えなかった。

で最新版の引数について調べてみてもあまり情報がない。

↓これは公式サイトの情報(最新情報かどうかは良くわからない)
Acrobat および Adobe Reader のコマンドラインオプション


これを見ると
AdobeReader を起動し、印刷ダイアログボックスを表示せずに PDF ファイルを印刷し、Adobe Reader を終了する
という事をやるには /t を使わないといけないみたい。

AcroRd32.exe /t path printername drivername portname

path : ファイルパス
printername : プリンタ名
drivername : プリンタドライバ名
portname : プリンタポート名

これをやるとなると複数拠点で動いているプリンタ名とかを個別に登録して設定していかないといけなくなり
そこまでの修正はお客も渋ってしまった。


なので他の方法を探す事に・・


AcroRd32.exe のオプションを色々な組み合わせで試してみるも
印刷されなかったりReaderが起動されたままになったりしてなかなか解決しない・・

さぁ困ったと思ったところで最後に試してみたのがこれ


PDF-XChange Viewer - 窓の杜ライブラリ


ヘルプを見るとこれで印刷できるっぽい

PDFXCview.exe /print [ファイル名]

各端末にパスを通すのも面倒なので実際にはフルパスで記述

C:\Program Files\Tracker Software\PDF Viewer\PDFXCview.exe /print [ファイル名]

これで問題なく動いた。


めでたしめでたし

OpenCVを使って顔を抜き出したりするやつやってみた。VBで。

画像を指定すると顔の部分だけ抜き出すという処理

やったこともないのにお客さんにできると言ってしまったので作ってみた。

VisualBasic2010 + OpenCV + OpenCvSharp(ラッパー)

f:id:holmes:20140320071734p:plain



環境などはこの辺を参考にさせて頂きました。

【PC】OpenCVをVisualStudio2012から使う(OpenCVSharp)

OpenCV(OpenCVSharp)をVB.NETで使う


OpenCvSharpを使った処理の辺りはこの辺

OpenCVを使った顔認識自作ソフトの部屋 - 開発日記 | 自作ソフトの部屋 - 開発日記




そのままだと顔認識されてくる顔の範囲はこんな感じになってしまう

f:id:holmes:20140320073604p:plain

Dim g As Graphics = Graphics.FromImage(image)

For i As Integer = 0 To faces.Total - 1


    '顔(輪郭)の位置を取得
    Dim r As CvRect = faces(i).Value.Rect

    '赤で描く
    Dim p As New Pen(Color.Red, 3)

    '顔(輪郭)を赤で囲う
    g.DrawRectangle(p, r.X, r.Y, r.Width, r.Height)

Next


なので拾ってきた範囲を広げてあげます。

この範囲が元の画像の範囲を超えてしまうとエラーになってしまうようなので
そうなった場合は画像の範囲内に収まるようにしてみました。

具体的にはこんな感じ(修正しました)

Dim g As Graphics = Graphics.FromImage(image)

'---------------------------------------------------
'線の色
'---------------------------------------------------
Dim p1 As New Pen(Color.Red, 3)
Dim p2 As New Pen(Color.Yellow, 3)

For i As Integer = 0 To faces.Total - 1

    '---------------------------------------------------
    '顔の位置を取得
    '---------------------------------------------------
    Dim r As CvRect = faces(i).Value.Rect

    '---------------------------------------------------
    '顔の位置の左上の座標と巾と高さ
    '---------------------------------------------------
    '左上の座標(左)
    Dim l1 As Integer = CInt(IIf(r.X < 0, 0, r.X))
    '左上の座標(上)
    Dim t1 As Integer = CInt(IIf(r.Y < 0, 0, r.Y))
    '範囲(巾)
    Dim w1 As Integer = CInt(IIf(r.Width > image.Width, image.Width - l1, r.Width))
    '範囲(高さ)
    Dim h1 As Integer = CInt(IIf(r.Height > image.Height, image.Height - t1, r.Height))

    '---------------------------------------------------
    '拡大した範囲の計算
    '---------------------------------------------------
    '左上の座標は拾ってきた輪郭の巾の半分だけ左から始める
    Dim l2 As Integer = CInt(IIf(r.X - (r.Width / 2) < 0, 0, r.X - (r.Width / 2)))
    '左上の座標は拾ってきた輪郭の高さの半分だけ上から始める
    Dim t2 As Integer = CInt(IIf(r.Y - (r.Height / 2) < 0, 0, r.Y - (r.Height / 2)))
    '範囲(巾)を倍に広げる
    Dim w2 As Integer = CInt(IIf((l2 + (r.Width * 2)) > image.Width, image.Width - l2, (r.Width * 2)))
    '範囲(高さ)を倍に広げる
    Dim h2 As Integer = CInt(IIf((t2 + (r.Height * 2)) > image.Height, image.Height - t2, (r.Height * 2)))


    '---------------------------------------------------
    '画像内の顔を囲う
    '---------------------------------------------------
    '顔(輪郭)を赤で囲う
    g.DrawRectangle(p1, l1, t1, w1, h1)

    '広げた範囲で顔を黄色で囲う
    g.DrawRectangle(p2, l2, t2, w2, h2)

Next


するとこんな感じになる。

f:id:holmes:20140320075511p:plain

ここまでできれば座標も解っているので
後は好きな様に画像を切り取っていけば良い。


ただこれだけではまだ問題があって
範囲を広げて巾と高さを倍に広げた結果画像をはみ出してしまう範囲になった場合に
エラーとなって「メモリ不足」と言われてしまう。
(未解決。気が向いたら直します..)

範囲を広げた左上の座標のとこをIIfを使ってマイナス値だったら0にしているのも同じ理由。



最初Webサービスを利用しようとしたけど顧客管理システムとかで使う場合には
外部に写真を出すのをお客さんが嫌がりそうなのでこの方法で行こうと思う。