作成者別アーカイブ: the-takeo

計算式(文字列)の計算結果を出す方法

ユーザーに123+456みたいな計算式を入力させ、その結果を算出したい。
やろうと思えば、「+等の演算子でSplitして、各変数を格納して・・・」という感じでできるかもしれないが、
こんな操作、どうしても既存のメソッドがある気がしてならない。

調べてみたところ、色々な方法が見つかった。
私的に一番わかりやすいのはDataTable.Computeメソッドを使うというものだ。

こんな感じ。
DataTableが完全にただの傀儡でちょっと気持ち悪いが、一番短く、分かりやすくかける方法だと思う。
なお、DataTable自体は割かし重いので、繰り返し実行する場合はメモリ使用量やパフォーマンスに注意が必要。


アフィを入れてみたけど、アドブロックでちゃんと非表示になった。
優秀やなぁ。
bitFlyer ビットコインを始めるなら安心・安全な取引所で

Office Web Apps Serverでファイルを開くとエラーになってしまうときの対処法

現在、SharePoint Foundation 2013を用いたシステムを運用している。
Excelブック等のOfficeファイルを今時風にブラウザ上で閲覧、編集したいという要望が出てきた。
確かにSharePoint Onlineでできるのだから、Foundationでもできそうである。

調査したところ、Office Web Apps Serverを別途立てればできるということが分かった。
Office Web Apps サーバーの概要

ボリュームライセンスが要るので、個人ではまず無理だと思う。
幸いこの会社ではライセンスを持っていたので、Office Web Apps Serverを立て、ブラウザ上での閲覧、編集ができることを確認した。

しかし、運用して数ヶ月、突然「ブラウザーで閲覧」をするとエラーが発生するようになった。
エラー画面は
「’/x’ アプリケーションでサーバーエラーが発生しました。」
で以下、ランタイムエラーである旨が記述されている。

イベントログを見たが、SharePoint Server側には特にエラーはなかった。
が、Office Web Apps Server側にはアクセス毎にエラーログが出力されていた。
詳細な内容は割愛するが、「ファイルが見つかりません」というもの。

Office Web Apps Server自体、かなり資料が少なく、調査に難航したが、
何とか解決できた。
なお、既に数回この現象には遭遇しており、それぞれの対処法を記述する。

・再バインドする

調査したところ「Office Web Apps Serverを再インストールすればいい」という回答があった。
Web Apps Server ASP .NET error code 3005 event ID 1309 same key already added
しかし、今回、問題のOffice Web Apps Serverと連携している別のSharePoint Serverがあり、こちらは問題なく動作していた。
よって、これはOffice Web Apps Server側ではなく、SharePoint Server側に問題があると思われ、この回答は当てにならなかった。

さらに回答を辿ると、再バインドでも解消する場合があるという記載があった。
これに従い、以下のコマンドをSharePoint管理シェルから実行して再バインドを行った。
なお、Office Web Apps Serverを「OWA-Server.company.com」とし、SSL通信を前提とする。

なんと、これだけで解消した。
どんだけ不安定なソフトウェアなんだ。。。

・FWで弾かれている

上記対応から数日後、また再発したが、今度は上記の方法では解消しなかった。
途方に暮れていると、ネットワーク管理者がFWの設定を変更したとの情報が。
確認したところ、SharePoint Serverへのアクセスを特定部署のIPのみに制限していた。
一見問題なさそうなのだが、その結果、Office Web Apps ServerからSharePoint Serverへのアクセスができなくなり、
「ファイルが見つかりません」エラーが発生していた。

Office Web Apps ServerからSharePoint Serverへの443ポートを開放してもらい、問題は無事解決した。


MS製品の情報は少ないものもあり、あまり仕事という責任が伴う場では使いたくないのが正直なところ。
責任がなければ、色々実験できて楽しいんだけど。

IEのイントラネット識別方法

Internet Explorerでは、現在アクセスしているページが
以下のように4種類に分類される。

* インターネット
* ローカルイントラネット
* 信頼済みサイト
* 制限付きサイト

「信頼済みサイト」は手動で任意のサイトを登録して初めて分類される。
例えば、ある程度権限が無いと上手く動作しないサイトでは
ユーザーに予め登録をお願いし、セキュリティを弱くすることでサイトが正常に動作するようにすることができる。
「制限付きサイト」はその逆と考えて差し支えない(業務上、今まで使たことは無いが)。

ただ、そんなセキュリティを弱くしないといけないほどのシステムなんて、大抵は社内イントラネットだ。
なので、普通ならは信頼済みサイトへの登録なんてせずとも、自動でローカルイントラネットに識別され、システムは問題なく動作する。
(デフォルトでは「ローカルイントラネット」の方が「信頼済みサイト」よりセキュリティが弱く設定されている)

・・・と思っていたが、色んな会社を回っていると、どうもそうとも限らないらしい。
社内システムの筈なのに、IE上は「インターネット」に分類されている場合がある。
そこで、この分類され方について調べてみた。

何とこれ、実際にイントラネットかは全く判定していなかった。
URLに.(ドット)が入っていない場合は「ローカルイントラネット」、入っている場合は「インターネット」を分類しているに過ぎなかった。
FQDN または IP アドレスを使用すると、イントラネット サイトがインターネット サイトとして判別される

だから、社内システムでもURLが「http://CompanySystem.com」みたいになっている場合は「インターネット」識別になっていたのだ。
極端な話、hostsファイルを弄って「http://google」で「http://google.com」にアクセスするように設定去れば、
Googleのページすら「ローカルイントラネット」判定される。

いくら何でも雑な分類すぎませんかね。。。
まぁ、もうIEも消えてゆくはずだし、いいか。

複数のWordファイルを一括でPDF化する

仕様書やマニュアルをWordで作成した後、納品用にPDF化、時刻設定を行う。
段々と1製品に対するマニュアル数が増えてきており、手作業が面倒になったので、
一括で全部の操作を行えるようにプログラムを作成した。
作成したというより、下のページのほぼ丸写しではある。
C#でWordファイルをPDFに変換する

予め、

  • Wordがインストールされていること
  • [COM]-[Microsoft Word 15.0 Object Library]の参照追加が必要。

であることに注意。
なお、Word2010なら14.0、2013なら15.0、2016なら16.0である。

いやー、びっくりするぐらい書くことがない。
怠惰な毎日を過ごした結果、技術ネタも尽きている。

Windows Server(Core)でエクスプローラを使う方法

Windows Serverは基本的にGUIがついているが、
Windows Server(Core)や、Hyper-V Server等、CUIしかないものも存在する。

これらはサイズも軽く、負荷も少ない(多分)という面で便利なのだが、
エクスプローラもないため、ちょっとしたファイルコピー、フォルダ権限付けを行いたいときもイチイチコマンドで行わなくてはならない。
共有フォルダなら外部のエクスプローラからアクセスすればよいが、そうでないとやはりコマンドでの実行になってしまう。正直、ちょっとした作業なのに一々コマンドを打つのも面倒だ。

ややハック的だが、Coreサーバーでもエクスプローラ(的)なものを使う方法がある。

1. コマンドプロンプトでnotepadと入力し、Enterを押下する
2. メモ帳が起動するので、「ファイル」の「開く」をクリックする
3. このダイアログ上でエクスプローラとほぼ同等の操作ができる

ちょっとした操作ならこの方がミスも少ないと思う。
ネットワークの共有フォルダを見たい場合は「ファイル名」の部分に「\\<アドレス>」を入力すればアクセス可能だ。
ex)\\TEST_Server

僕はcopyコマンドでコピー元とコピー先と間違える阿呆なので、この方法をよく使う。

IISRESETを行うbatが動かない・・・と思ったら(2017年初投稿)

本当に更新を定期的に実行するのは難しい。
今日は多分、今まででも1,2を争うレベルのくだらないミス。


WindowsでWebサーバーを構築する場合、
一般的にはIIS(インターネットインフォメーションサービス)を利用すると思う。
そして、キャッシュの開放や、IISで実行するコンポーネントを変更した場合には、IISを再起動するケースは多々ある。

IISの再起動は大変容易で、コマンドプロンプト(管理者権限)で
IISRESET
と入力し、Enterを押下するだけでよい。

夜間、定期的にIIS再起動行うするために、IIS再起動batを作成した。

間違えるような要素もないので、まず問題ないだろうと思っていた。
しかし、このbat、実行すると思うような動作をしてくれない。
下記のようになってしまう。

何故上手く実行されないか悩んでいたが、原因は単純だった。
ファイル名を「IISRESET.bat」にしていることが問題だった。
IISRESETにより、「IIS再起動」ではなく「IISRESET.bat」が再帰され、無限ループになっていた。

なので、「IISRESET実行.bat」とか、適当な名前に変更し、問題は解消した。


気付きそうで気付かないことろでした。これで1時間ぐらい悩んでしまった。。。

SmtpClientをSSL有効でメール送信する場合の注意点

SmtpClientクラスを用いて、メールを送信するプログラムがあるのだが、
どうもgmailをホストに指定した場合に動作しない。
設定値は以下の通り。

最初は何かしら設定が間違っているのだろうと思ったが、
下記のVBScriptでは問題なく送信ができる。
なので、設定値に間違いはなく、C#コードのコーディングミスと判断し、調査していた。

しかし、どうもミスらしき場所が見つからない。
エラーも「送信できませんでした」以上のことがでず、八方ふさがりとなった。

色々調べて、以下で解決した。

・ポートを465でなく587を用いる。

つまり、18行目あたりを以下のように修正し、問題は解消した。

どうやらこれは.NETの仕様で、
SmtpClientクラスはポート465をサポートしていないのだ。

SmtpClient.EnableSsl プロパティ
How can I send emails through SSL SMTP with the .NET Framework?

言われれば「なんだぁ」だが、VBScriptで送信できたことで、設定値を疑うことが遅れてしまった。
こういうことがあるから、MSDNはよく確認しなくては。

冬の軽井沢

既に寒い。
10月初めから既に寒かったけど、もうストーブなしで過ごすのはもう難しい。
来週、いや、もう今週か、今週スキー場が開くらしい。
おいおいもう冬か。秋とは何だったのか。

iOSのアップデートでPPTPが使えなくなったので、IPSecサーバーを構築中。
何度もめんどくさく成って挫折中。
LINUXで構築するより、なんかもう、IPSec機能付きルータ買った方が良い気がしてきた。

びっくりするぐらい最近は語る内容がない。
とりあえず、生存報告がてら、更新。

MyDNSの割当IPを定期的に更新(設定)する方法

以前の記事でVPN構築をしたとき、MyDNSについて触れることを予告していたので、書いておく。

一応、簡単にMyDNSが必要な理由をまとめておく。
VPNを構築して外部から自宅ネットワークにアクセスできるようにしても、
自宅のIPはプロバイダによって定期的に変わってしまう。
そのたびにイチイチ各機器の接続先IPを変えていては大変だし、
いざ外出先で気づいても変更後IPがわからないとどうしようもない。

そこで、IPと結びつくホスト名を取得する。それがDDNSだ。
ホスト名とIPを紐付けすることで、IPが変更されてもその変更後IPをホスト名に設定すれば、
引き続きホスト名からVPN接続ができるようになる。

そのDDNSサービスの1つがMyDNSである。
登録は簡単だし無料なので、上記リンクから画面に従えば良い。

さて、ここで「その変更後IPをホスト名に設定」と述べたが、
それは手動でやる必要がある。
しかし、できることなら自動でやりたい。

Windowsであれば、diceというアプリケーションを用いれば良い。
俺はMac環境なので上記方法は使えない。
おとなしく、以下のコマンドを実行する方法を取る。

<masterID>:と<password>の部分は自身の情報に変更する。
このアドレスにアクセスすればアクセス元IPがホスト名と紐づくので、curlコマンドでアクセスだけしている、という仕組み。

勿論手動でイチイチ起動するのは嫌なので、
Launchdで毎晩定期実行するように設定した。

LaunchdはMac版タスクスケジューラのようなものです。
このあたりで書いているのでご参考に。


新車を買いました。
引っ越し代金合わせて今月の出費は300万円ぐらいです。
ちょっと流石にきついかな。気持ち的に。

軽井沢移住

仕事の都合と自分の事情が絶妙にマッチした結果、8/1から軽井沢に移住した。
軽井沢というブランドに単純に憧れがあるし、この時期なら避暑になって丁度いい。
家賃が高そうなイメージがあったけど、東京に比べれば断然安い。
1SLDKの鉄筋コンクリートマンションに一人暮らし、さらに駐車場を別に借りるという贅沢をしているけど、それでも10万も行かない。
東京ならいくらかかるか、想像もしたくない。

ただ、ゴミの分類が面倒だ。
専用ごみ袋が必要だし、何より7時までに出せってなんだそれは。
夏季期間以外なら8時でもいいらしいが、東京の時は9時過ぎに出していたので結構堪える。
なので、まとめてごみ出しできる塵芥処理場を週一ぐらいのペースで使っている。
段ボールとはの資源ごみは普通のゴミ捨て場では受け付けてくれないので、もう全部塵芥処理場に持っていく生活になっている。

軽井沢は生活しにくいかと思っていたが、
スーパー(MATSUYAやTSURUYA)、コンビニがあるので何も不自由しない。
中軽井沢まで出ればラーメン屋も多いし、佐久平ぐらいまで行けば何でもある。

というか、Amazonがあるから本当に何も困らない。それを言っちゃあおしまいなんだけど。

机、椅子、本棚とかの家具は全てAmazonで揃えた。
Amazon便利すぎる。宅配業者さんいつもありがとうございます。
仕事で不在なのが申し訳なさすぎるので置き配してもらってもいいんですけど、まぁやってくれない誠実な業者が多いので中々。
そんなわけで、会社に送るという裏技を使いまくっているんですけどね。
会社今のところ俺しかいないし。
快適すぎるだろこれは。

TV買っていないので、NHK解約しなくちゃな。
ただ、調べると手順面倒なんですね。
完全に「全国民TVを持っている」という前提の制度になっているね。
地デジにしたのに、なんでBCASに課金という制度にしなかったんでしょうか。

めろんぶっくすとかが近くにないけど、まぁ通販あるのでそれも大丈夫。
というか、そこまで頻繁に行くところではないし。

まぁ、後は冬ですね。
スキーは楽しみだけど、寒さに耐えられるか、こうご期待。