Brandoo WordPressで¥を入力できない。

Brandoo WordPressにてコンテンツに/(半角バックスラッシュ)や¥(半角円マーク)を入力していると、更新ボタンを押しても変更内容が保存されずに、元に戻ってしまう。

暫定的な対策としては、テキスト編集画面で¥と入力すればBlog上は半角の¥マークを表示することが出来る。だが一度ビジュアルエディタの編集画面に戻ってしまうと、¥から¥に変換されてしまうので、あまり現実的な解決方法ではない。

この現象は既に公式にもバグと認識されており、GitHubのCannot add post containing a % characterでも次のリリースにて修正される予定になっている。ただ実は、ちょっと困ったことにGitHubのサイトは放置気味になっている。Text Replacerのプラグインを使ってみたが、プラグインの設定を保存する部分でも¥が失われてしまうため、ちょっと一朝一夕にはいきそうもない。

自作を試みてみるかな・・・

通信プログラムを送信スレッドと受信スレッドに別けては駄目

TCP/IPやシリアル通信において、データの受信と送信を別々のスレッドでおこなえば、アプリケーションを単純化し、パフォーマンスも向上するように感じるかもしれない。これは初級から中級のプログラマがやりがちなことだが、多くの場合は徒労に終わる。

一つ目の問題として、実はOSは送信と受信を同時に実行することが出来ない。アプリケーションからドライバに対する要求はFIFOキューに格納される。デバイスドライバはFIFOキューに格納された命令を順番に処理していく。してがってAスレッドの受信命令と、Bスレッドの送信命令がキューに格納されている場合、Aスレッドの受信命令の処理が終わらない限り、Bスレッドの送信命令も待機することになる。アプリケーション側のスレッドを単純に分けただけでは、送信と受信を非同期におこなう事は出来ない。

送信と受信をほぼ同時に処理するにはノンブロッキングモードを使う必要がある。ノンブロッキングモードなら、ドライバはデータの有無に拘わらず直ちに応答を返して次の処理に進むので、受信と送信をほぼ同時に実行することが出来る。

二つ目の問題として、殆どのプロトコルにおいて、送信が正常に行われたか判断するためには受信データが必要になることにある。送信処理と受信処理は互いに深く関係した密結合となる。そのため送信処理と受信処理との間で情報を交換するためにフラグや排他制御が必要になる。正常処理だけなら良いか、これに異常時のリカバリ処理まで含むと状態遷移が複雑になり、余程慎重に設計しないとスパゲティのように絡み合ったソースコードになってしまうはずだ。

通信プロトコルが送信とその応答を非同期的に処理することを前提に設計されていたり、あるいは非同期的に処理することでパフォーマンスの向上を臨んでいるなら、送信と受信を分離する価値はあるだろう。そうでないなら、止めた方が無難だ。

ではどのような設計なら良いのだろうか。私見だが「他スレッドからFifo Queue等で要求を受付け、コマンドの送信、応答の受信、必要に応じてエラーリカバリ処理を行って、要求元スレッドに応答を返すようなスレッド」を作るのが良いと思う。この方法だと通信に伴って発生する状態遷移を単一スレッドの中に閉じ込めることが出来るので、複雑さが増す事を避けて実装する事が出来る。

OneDriveをWebDAVでマウントする

OneDrive(旧SkyDrive)にて提供されているアプリケーションは、パソコン上のドライブに保管されているファイルと、SkyDrive上の指定したフォルダとが同一の状態になるように、ファイルをコピーするだけの物でしか無い。いわゆるミラーリングする機能でしかない。この方法ではOneDrive上の全てのデータをファイルをパソコン上のファイルと同じように扱えるようにしようとすると、OneDriveと同一のストレージ容量が必要になる。ストレージ容量が数十GB程度のうちは良いが、Office365を契約した場合は数TBとなり、あまり現実的ではない。

実はOneDrive上のファイルを、コンピューター上にインストールしたMicrosoft Officeから扱う場合、背後ではWebDAVにてアクセスしている。従ってWindowsのファイルシステムとして、OneDrive上のフォルダをWebDAVとしてマウントし、エクスプローラーや普通のアプリケーションからアクセスすることが出来る。

  1. Internet ExplorerからOneDriveに接続する。その後適当にWORDのファイルを作成する。
  2. Word Onlineのページが表示され、先ほど作成したWORDファイルが編集状態になっているはずです。ここでWord Onlineのメニューにある「WORDで開く」を選択します。
  3. コンピューターにインストールしてあるMS-Wordが起動して、先ほどOneDrive上で新規に作成したファイルが編集可能な状態になります。この操作によりOneDrive上にWevDAVでマウントするためのURLが作成されます。
  4. MS-Wordのメニューから「名前を付けて保存」を選択すると、保存先が「http://d.docs.live.net/[英数16文字]」となっている。このURLが貴方のOneDriveをWevDAVで操作するためのURLとなる。
  5. エクスプローラーのコンピューターから「ネットワークドライブの割り当て」を選択する。フォルダーに先のURL「http://d.docs.live.net/[英数16文字]」を指定して完了をクリックすれば良い。
  6. マウントしたドライブにアクセスを試みるとユーザーIDとパスワードを要求される。ここでOneDriveに接続するときに使っている、LiveIDのユーザーIDとパスワードを入力するとエクスプローラーからOneDriveにアクセス出来る。

もちろん、ドライブレターを与えているので、エクスプローラー以外の殆どのWindowsアプリケーションからもローカルのファイルと同様にアクセスすることが出来ます。

通信販売に関する法律

ネタがないので、IT系の法律の話とか。

まず、特定の法律に関係なく、一般的な話をしておく。良く法律だけ読んで分かった気になって話す人が居るが、これはやめた法がよい。法文には明記されてない行間があったり、用語の使い方が日常の文書と異なったり、別の法律と補完相克関係にあったり、行政判断に委ねてる部分があったりする。だから必ず行政の通達や、裁判の判例もあわせて見ないと、とんでもない誤解をする事になる。

 Ⅰ.売買契約

通信販売に関する法律には特定商取引法がある。もともとは訪問販売法として、いわゆる押し売りを規制するための法律としてあったのが、電話勧誘完売とか、通信販売とか、いくつかの特定の方法を用いた販売方法について規制する法律として焼き直されたものだ。

通信販売に関して法律で規定されていることは大きく3つになる。

 1.商品や売買契約に関する情報の表示だ。

通信販売では、商品表示(広告)の内容についての規定があり、価格(送料など取引において発生する金額すべて)、住所氏名(メールアドレスも含む)、支払方法、商品の瑕疵、返品などに関する特約事項、その他の販売条件などの表示が義務づけられる。また商品広告の内容は客観的な事実に基づくものでなくてはなりません。

 2.返品(契約解除)への応諾義務

通信販売での返品について、多い誤解にクーリングオフがある。実は通信販売にクーリングオフという制度はない。クーリングオフは売り手側からコンタクトをとる訪問販売や電話勧誘に対する規制で、買い手側からコンタクトを取る通信販売では、対象にならない。

では、通信販売は返品に応ずる必要が無いかというと、そうではない。返品に関する特約事項を買い手に伝えていない場合は、商品到着後8日以内なら無制限に返品に応じる義務が発生する。この時に消費者が負担しなければならない金額は、商品の返送にかかる送料のみとなる。
返品に関する契約を規定しないと、食品を既に全部食べ終わって、包装紙だけになっていても返品に応じる事になる。逆に返品出来ない事を明確にしていれば、返品に応じる必要は無い。
返品に近い事柄にとして、民法上の錯誤による無効がある。商品説明の重要事項や契約事項が分かりにくいところに書いてあったりした場合には、勘違いで購入したとして、契約を無効にする事が出来る。特定商取引法上の契約解除は、民法上の錯誤無効と異なり、契約を解除にしたことによって発生した損害について、賠償する必要がない点で異なる。

 3.わかりやすく表示する義務

購入の申し込みなのか、有償なのかということがわかりやすい表示を義務付けている。購入ページで規約のチェックボックスをつけたり、ボタンを購入としてるのは、錯誤が発生しないことをUIレベルで担保するために行われている。「ほしい人はここをクリック」などのボタンを押したとしても売買契約とは認められない。
過去に通信販売事業者で摘発を受けた業者の多くは広告表示の不備によるものです。商品の広告内容に虚偽があったため、多くの開運グッズの通信販売事業者が摘発を受けています。~大師のような架空の人物の紹介文を載せたりしていたことが原因です。
また、契約解除にあたって特約として明記していない賠償を請求したことにより、摘発を受けた事業者もあります。

Windows Vista以降のドライバのアンインストール

Windows Vista以降のOSではDriverStore(C:\Windows\System32\DriverStore)という特殊なフォルダにインストールしたドライバのコピーが保管されており、ハードウェアが接続したときにこのフォルダからドライバが検索されインストールされます。そのためdrivers(C:\Windows\System32\drivers)からファイルを削除したり、デバイスマネージャからドライバをアンインストールしただけでは、再起動時にドライバが再インストールされてしまいます。コンピューターに一度インストールしたドライバを完全に削除するには、pnputilコマンドを使ってDriverStoreからドライバを削除する必要があります。
まず最初に管理者権限でコマンドプロンプトを開き、以下のコマンドを実行します。

pnputil -e

そうすると以下のように現在DriveStoreに登録されているドライバの一覧が表示されます。
画面に表示される一覧からアンインストールするドライバを特定したら、以下のようにコマンドを入力してドライバファイルを削除します。

pnputil -d oem3.inf

デバイスマネージャ上で使用されているドライバは削除できないので、事前にデバイスマネージャもしくはdevcon.exeを使用してドライバをアンインストールするのを忘れないでください。

コマンドラインからドライバをインストールする

コマンドラインからデバイスドライバのインストール/アンインストールを行うには二つの方法があります。ひとつはrundll32を呼び出してINFファイルのDefaultInstallセクションを実行する方法。もうひとつはマイクロソフトが無償で配布しているコマンドラインからデバイスマネージャ相当の事を行うツール(devcon)を使用する方法です。

rundll32を使用する

インストール:
rundll32.exe  syssetup,SetupInfObjectInstallAction DefaultInstall 128 sample.inf
アンインストール:
rundll32.exe  syssetup,SetupInfObjectInstallAction DefaultUninstall 128 sample.inf

rundll32.exeのコマンドラインパラメータに上記のように指定します。128という数字はインストール動作を指定するオプションです。インストール後に再起動したい場合には129などと指定します。

モード 意味
0 システムが用意した .inf ファイル。
128 .inf ファイルがあるディレクトリを指定。
+0 コンピュータを再起動しない。
+1 コンピュータを再起動する。
+2 ユーザに確認をとってから再起動する。
+3 必要があればユーザの同意を得ずに再起動する。
+4 必要があればユーザに確認をとってから再起動する。

残念ながら、この方法はすべてのドライバに使えるわけではありません。DefaultInstallセクションが記述されているINFファイルだけに使えます。DefaultInstallが記述されてない場合にはエラーになります。
アンインストールを行いたい場合には、同じようにDefaultUninstallセクションを呼び出します。

devconを使用したインストール

devconはMicrosoftが配布するコマンドラインツールです。こちらのURLからダウンロードできます。

インストール:
devcon.exe  install sample.inf
devcon.exe  update sample.inf
アンインストール:
devcon.exe  remove sample.inf 

デバイス名に”&”などが含まれる場合には、デバイス名をダブルクォーテーションで囲む必要があります。
レガシーデバイスの場合にはinstallコマンドで、PnPデバイスの場合にはデバイスを装着した状態でupdateコマンドを使用します。