2014年9月25日木曜日

GoogleSiteにGistコードを埋め込む方法(正解編)

GoogleサイトにはGistのコード埋め込みスクリプトを直接埋め込むことができない、、、という問題があり、以前、
という試みをしましたが、そんな面倒なことをしなくてもいいということがわかりました。

Googleガジェット経由で直接呼ぶ
もともとは、
にあるように、fork元のコードを利用しようとしたのですが、フォントサイズとかの変更がうまく行かず、独自に作るしかない、、、と勘違いしてしまったわけです。

しかしながら、フォント設定を可能にするスクリプトがGistに公開されており、
のような記述により、フォントサイズ等を設定できるGoogleガジェットを利用可能となりました(元ソースは fork元を参照)。

使い方
  1. 挿入→ その他のガジェット → URLを指定してガジェットを追加
  2. https://gist.githubusercontent.com/ochilab/11a718344aca679711f0/raw/ を指定
  3. Gist IDを指定
という手順により、ページに合ったフォントサイズでGistのコードスニペットを挿入できます。

これで、どんどんGistにコードを流して、サイトにガンガン埋め込んでいくという夢のコンテンツ作成体制が実現できます。


2014年9月23日火曜日

OpenCVSharpにてMatを利用してピクセルのRGB値を変更する

OpenCVSharpにて、Matを利用してピクセル操作する例です。



OpenCvSharpExtern.dll' を読み込めないためにMatが利用できない場合の対処法

OpenCVは、歴史的経緯よりIplImageクラスからMatクラスへと利用する流れになっています。Matはピクセル単位のデータアクセスが容易なため、個人的にも積極的に使っていこうと考えています。

Matクラスが使えない場合がある?
先日、OpenCVSharpが使えている環境で、Matクラスを利用すると(インスタンスを生成するだけで)プログラムが
Invokeエラー:OpenCvSharpExtern.dll' を読み込めない(見つからない)
といったエラーを起こしてしまうという事象が起きました。
おさらいですが、OpenCVSharpを使うには、母体であるOpenCVに対して
  • プラットフォーム(32 or 64 bit)を共通にする
  • バージョンを共通にする
といった注意点があるのは周知の事実です。さらに、OpenCvSharpExtern.dllについては

  • プロパティの「出力ディレクトリにコピーをする」

という設定が必要です。

これらを注意し、IplImageを利用したサンプルプログラムの動作を確認しても、Matを使う時にはダメ、、、という意味不明な事象。エラーはInvoke関係のエラーで、エラーメッセージの注意書きにあるように
  • OpenCVのパス確認
  • Visual C++ Redistributable Package(再頒布可能パッケージ)のインストール
  • プラットフォームの一致(32bit or 64bit)
と点に不備があると発生するようです。

Visual C++ 再頒布可能パッケージに罠があった!
で、今回のエラーでは上記条件は全てクリアしており、原因究明に試行錯誤していたのですが、原因はVisual C++ Redistributable Package(再頒布可能パッケージ)にありました。
今回の開発環境はVisual Studio 2010ですので、Visual studio 2010の再頒布可能パッケージをインストールすればいいと思っておりました。。。が、Dependency Walkerで依存ファイルを見てみると
msvcr110.dllがない
ということが発覚。これは、Visual Studio 2012の再頒布可能パッケージに付随するものです。つまり、Visual studio 2010を使っているから2010用の再頒布可能パッケージがあればいいのではないということ。これは盲点でした。早速、、Visual Studio 2012の再頒布可能パッケージをインストールして解決したわけです。

なお、OpenCVSharp系のエラーはDependency Walkerで原因究明しろと作者も述べているのでインストールしておくとよいでしょう。


2014年9月17日水曜日

Linux: NTPで時刻の自動設定をする

NTPとは時刻同期のためのプロトコルで、これを利用することで正確な時刻にすることができます。下記はLinuxでの設定メモ書きです。なお、ntpのパッケージは入っていることを前提とします。

(1)/etc/ntp.confに下記を追記。
server ntp.nict.jp
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
該当箇所のほかは消しておいて下さい。サーバは、nict以外でもOK。 

(2)tcpとudpの123番ポートを開けておく

(3)強制同期。下記のコマンドを入力
ntpdate ntp.nict.jp
(4)サービスとして起動
/etc/rc.d/init.d/ntpd start