一人情シスのつぶやき

名古屋の中小企業で一人情シスをしている作者が、日々の業務で思うことをつぶやきます。

iPhoneのすばらしさに気づく(いまさら)

今日は有給をとって近くをドライブした。 Web+DBでYahooマップの記事があったので、ナビを使ってみようと思ったのだ。

そもそもにしてYahooマップとYahooナビは別アプリなのだが...

手持ちのNexus5Xで試した。アプリの機能としては問題ないと思うのだが... それよりもバッテリーのヘリが気になってしまう。充電しながら使っているのだが、それでも2,30分で10%は減る。これでは、そもそも長距離ドライブには使えない。ナビなんて長距離でしか使わないのに...

で、会社で支給されているiPhone7にGoogle Mapを入れてナビを使ってみたところ、充電中は電池が減らないどころか、少しずつ充電されてる!!! iPhone使ってる人や、バッテリの持ちの良いAndroid使ってる人なら当然かもしれないが、その世界を知らない僕はふつうに驚いた。

やはり、Androidスマホと比較するとiPhoneは素晴らしいと。今回はバッテリーでその点に気付いたが、社内のスマホに関する障害の問い合わせもiPhoneよりAndroidの方が圧倒的に多い。

それも当然で、AndroidiPhoneでは1機種にかける開発・保守費用が全然違う。Androidの代表としてGoogleのPixelを参照したとしても1桁どころか2,3桁は違うのではないだろうか。 ソフトウェアと違ってハードウェアはかけた金額が性能により効いてくると思う。正直Appleにばかり儲けさせるのは気に食わないという気持ちもあるが、価格以上の性能、信頼性があるのだと実感する。 この構造は、独禁法などで介入でもされない限り今後も当面変わらないのではないか。

今後は、Androidでしかないアプリがあるとか、ハードも含めてガンガンいじって開発したいとかでなければiPhoneを薦めたいと思う。公私ともに。 自分はAndroidが好きなので使うが、割り切って安いモデルを2年間使い倒すのが、今のAndroidには合っていると思われる。iPhoneのように長く使うには向いていない。

zabbix share のtemplteは素晴らしい

社内にて、UPS(Buffalo Terastation)、NAS(APC)の切替を行った。 社内の機器の監視はzabbixで行っており、これらの設定をする際、Zabbix Share のテンプレートが使えたのは非常にありがたかった。

Terastationは3.2用のテンプレートだったが、社内では3.0を運用しているためバージョンの指定を変更後、mokeblogさんのエントリを参考に不要なタグを削除してインポートした。 APCは2.0用だったが、バージョンの指定を変更するだけでインポートできた。(電圧上限、下弦の閾値は200V前提となっていたため、下限:190->90,上限250->120に修正した)

これらのSNMP MIBを調べて設定するのは時間がかかるので、こういうのが公開されているのは時間がない管理者としてはありがたい。細かいところを自社に合わせて修正して利用しようと思う。

ファイルサーバーの移行

以下の要件で、ファイルサーバーの移行を行った。

  • 移行元サーバー: Windows Server 2008 R2 (Enterprise)
  • 移行先サーバー: Windows Server 2016 (Standard)
  • 移行容量: 150GB程度
  • 移行に使用した方法: Windows Server移行ツール

結果は、権限はNTFS、共有のものも含めて完璧に移行できた。移行後は既に公開設定が済んだ状態となっていた。 時間は8時間ちょっとかかった。複数の対象フォルダがあったため、Powershellでのバッチを作成して両方で動作させたため、つきっきりだったわけではない。

移行は2段階で行い、最初に10GBほどのフォルダの移行を行った。この移行では暗号化を行うのだが、これによるCPUの負荷が大きいことに気付き、2段階目ではCPUを2->4に増強した(共にHyper-V上のVM)。 2段階目において、Trend Micro Business Securityのスキャンが開始されたことに気付いたのだが、管理者権限で停止しようとしても受け付けてもらえず、結局アンインストールすることで停止するしかなかった。その間1.5時間ほどメモリ、ディスクIOがかなり高い状態だった。

上記の問題がなかったとしても6-7時間はかかったと思われる。容量に対してあまりに時間がかかりすぎている。同ツールでは移行後に権限だけ付け直す「-Include Share」オプションがあるようなので、robocopyでファイルだけ移行し、「-Include Share」オプションで権限を移行する方法が最も時間をかけずに確実に移行できたのではないかと思う。

テーブル定義の移行でよく使う方法

社内DBを試行錯誤しているため、DB間データ移行の前段としてテーブル定義をコピーしたいことがある。 大抵のDBでは無料でもツールが充実しており、ODBCライブラリを入れればよっぽど問題ないと思うのだが...

Windows 10 Pro 64bitで、SSMSからOracleにアクセスしようとしたところ、どうにもエラーでうまく行かない。64bitのInstant Client + ODBCをインストールし、OSのODBC管理ツールでテスト接続は成功しているのだが...

で、こういう時はAccessODBC経由でリンクを貼る分にはまず失敗しない。この状態でテーブルをAccessにテーブル定義のみコピーし、そのAccessのテーブルをSSMSでインポートするとうまくいく。

redmine, zabbixのActive Directory(LDAP)認証

redmine, zabbix共にActive DirectoryLDAP機能を利用して認証の統合ができる。が、設定方法が引っかかった。

redmineはアカウントごとに認証方式の設定が可能。「管理」の「LDAP認証」にAD認証の設定をしたうえで、AD認証したいアカウントを作成して認証方法をADと指定してやればよい。

一方、zabbixは認証方法を変えるとそれが全ユーザーに適用される。ユーザーグループごとに認証方式が指定できるのだが、既定では「デフォルト」となっている。 認証を変えると、この「デフォルト」の認証方式が変わるので、結果として全ユーザーグループの認証方式が変更されてしまう。なので、「Zabbix administrators」グループの認証方式を事前にローカルに変更しておく必要がある。

だが、インストール時に作成される管理者アカウントでログインした状態だと、この「Zabbix administrators」グループの認証方式を変更できない。自分、及び自分のプライマリグループに関する情報は変更できないらしい。なので、別のユーザーグループを作成し、そこに所属するアカウントを作成。アカウントに「Zabbix特権管理者」権限を付与。そのアカウントでログインして「Zabbix administrators」グループの認証方式を「Zabbixデータベース内のユーザー情報」に変更する、という手順を踏む必要がある。 zabbixめんどい。

ClosedXMLの画像追加におけるWorksheetの取り扱いについて

C#でClosedXMLを使用してExcelに画像を追加する処理をしていた際、なぜかWorkbookの保存時にObjectDisposedExceptionが発生するという事態になりました。

以下のようなコードです

            using (XLWorkbook wb = new XLWorkbook(filePath))
            {
                IXLWorksheet ws_src = wb.Worksheet("Template");

                using (IXLWorksheet ws = ws_src.CopyTo("1"))
                {
                    var image = ws.AddPicture(imagePath1);
                    image.MoveTo(ws.Cell(3, 3).Address);
                    image.Scale(.5);

                    image = ws.AddPicture(imagePath2);
                    image.MoveTo(ws.Cell(20, 3).Address);
                    image.Scale(2);

                }

                using (IXLWorksheet ws = ws_src.CopyTo("2"))
                {
                    var image = ws.AddPicture(imagePath3);
                    image.MoveTo(ws.Cell(3, 3).Address);
                    image.Scale(.5);
                }

                ws_src.Delete();

                wb.Save();
            }

wb.Save() を実行すると例外が発生します。imageの処理をコメントアウトするとエラーは発生しません。

結論として、Worksheetを割り当てるusing句を外したところ、正常に動作するようになりました。エラー調査の際にOpenXMLのコードもちらっと見たのですが、おそらく画像を追加する際にいったんWorksheetの情報を更新して再割り当てするような処理が必要となります。usingを使っていると再割り当てができないのでエラーになったのではないかと。

ただ、エラー箇所がusing句の中ではなく、Saveを実行した場所というのはよくわからないのですが... 再割り当てできない状態で内部変数をいろいろいじくって、それをファイルに保存する際にそれが検知されてエラーとなる、とかではないかと。

ClosedXMLのサンプルコードを見ていると、Workbookにusing句を使用するものはあるが、Worksheetに使用するものはほとんどない。WorkbookのDisposeで配下のすべてのリソースが解放されるので不要なのだろう。上記書き方が一般的ではないのかも。

MySQL Workbenchに切り替え

前回の記事で、HeidiSQLがうまく動作しない(DEFAULT CURRENT_TIMESTAMPを表示できない)件で、クライアントをMySQL Workbenchに切り替えた。

実は以前も試していたのだが、ホスト名のみで指定した場合に、Test Connectionは成功するのに実際に接続する際にエラーで落ちてしまっていて中止していた。IPアドレスで指定したところ正常に動作したので、こちらに切り替えることにした。