Facebook SDK C#

Facebook SDK C# 5.4.1を使ってみた。

http://facebooksdk.codeplex.com/

いいね!を押したか押してないかでページ切り替えでちょっと躓いたのでメモ。

前までは

var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, SignedRequest);

だったのだけれど、FacebookContextは廃止されて

var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookApplication.Current.AppSecret, SignedRequest);

となっている。

で、いいね!を押したかどうかの全体コード。

using Facebook;
using Facebook.Web;
protected void Page_Load(object sender, EventArgs e)
{
  if (Request.Params["signed_request"] != null)
    {
      var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookApplication.Current.AppSecret, Request.Params["signed_request"]);

      var RawRequestData = (IDictionary<string, object>)DecodedSignedRequest.Data;
      JsonObject RawPageData = (Facebook.JsonObject)RawRequestData["page"];
 
      if((bool)RawPageData["liked"]))
      {
        //いいね押された
      }
      else
      {
        //おされてない
      }
    }
}

例外チェック等はあまあまだけど、とりあえず。

Windows 2008 ServerでUPSと連動させた自動シャットダウン時のタスク実行

東日本大震災の被災者の方々に心からお見舞いを申し上げます。

まだまだ余震が続き、計画停電が続く中、UPSに接続したサーバシャットダウン時に別サーバ(UPSと非連動)へシャットダウンイベントを渡したくなった。
Windows 2008 Serverのタスクスケジューラをみても「シャットダウン時に実行」という項目が見当たらない。
調べてみるとWindows Vista以降のOSでは(Windows XPが手元にないのでVista前では未確認)シャットダウン時にタスクを自動実行できないようだ。

UPSの電源を抜き差ししながらイベントログを見ていると

警告:APC UPS Service
停電のためUPSはバッテリ運転に移行しました。
ログの名前:アプリケーション
ソース:APC UPS Service
イベントID:174
レベル:警告
ユーザ:SYSTEM

とでている。
また、電源を戻した際には

情報:APC UPS Service
UPSは商用電源に移行しました。
ログの名前:アプリケーション
ソース:APC UPS Service
イベントID:61455
レベル:情報
ユーザ:SYSTEM

なので、下記のようなスクリプトを作成
shutdown.vbs

Dim ws
Dim strProgram
Dim lockFile
Dim waitMilSec

lockFile = "lock.txt"
waitMilSec = 300000

'initialize
Set ws = Wscript.CreateObject("Wscript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
strProgram = """C:\WINDOWS\system32\SHUTDOWN.EXE"""

'Create the lock file
If objFSO.FileExists(lockFile) Then
	'objFSO.DeleteFile(lockFile)
Else
	objFSO.CreateTextFile(lockFile)
End If

'Now we wait before shutdown
WScript.Sleep waitMilSec 

'If the lock file still exists
If objFSO.FileExists(lockFile) Then
	'Do whatever needed before shutdow

	ws(strProgram & " -s -t 0")
Else
	'aborted
End If

abort.vbs

Dim lockFile

lockFile = "lock.txt"

'initialize
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

'Delete the lock file
If objFSO.FileExists(lockFile) Then
	objFSO.DeleteFile(lockFile)
End If

スクリプトとしては、UPS運転に切り替わるとshutdown.vbsが実行され「lock.txt」を作成する。5分後に再度「lock.txt」が存在するか確認して、存在する場合はシャットダウンを行う。
UPSから通常電源に戻ると「lock.txt」を削除する。これでshutdown.vbsが実行されていても「lock.txt」が存在しないのでシャットダウンはされない。

次にタスクの登録。
タスクスケジューラで「タスクの作成」を行う。
トリガを新規作成し「タスクの開始」プルダウンから「イベント時」を選択する。
設定で下記のように設定を行う

ログ:アプリケーション
ソース:APC UPS Service
イベントID:174

これで上記shutdown.vbsを登録すればOK。同じようにabort.vbsも登録するが、こちらは下記のような条件で登録する

ログ:アプリケーション
ソース:APC UPS Service
イベントID:61455

UPSのコンセントを抜いたときに「lock.txt」が作成されれば動く。

Windows7のTunnel adapter Local Area Connectionを消す

Windows7Vistaもか?)でipconfigをすると、Tunnel adapter Local Area Connection 番号と大量に表示されることがある。
これはこれで気持ち悪いし、コマンドプロンプトの表示上限を超えて表示するから肝心な情報が見れないし(バッファサイズを大きくすれば見れるが)、なによりリソース不足?になってExplorer接続できなくなることがある…。

なにもいいことない。
あ、IPv6を使ってるならいいことあるかも。
それぐらい。

で、対処法。

◆サービスの停止
[Windows]キーを押しながらR→「services.msc」でサービス一覧を表示。
「IP Helper」サービスが開始/自動になっているので停止/無効にする。

IPv6をオフ
[Windows]キーを押しながらR→「ncpa.cpl」でネットワークアダプタ一覧を表示。
利用しているアダプタのプロパティを開いて、「インターネットプロトコル バージョン6(TCP/IPv6)」のチェックをはずす。

◆デバイスの削除
バイスマネージャーを開いて、「表示」→「非表示のデバイスの表示」にチェック。
ネットワークデバイスの下に番号付きでアダプタが大量表示されているので手動で削除。

Google Chromeが英語になってしまう

インストール後になぜかGoogle Chromeが英語になっている場合の修正方法
(特に問題はないけれど、日本語ページを表示するさいにフォントがいけてない)

C:\Users\ユーザ名\AppData\Local\Google\Chrome\User Data\Local State

上記ファイルのen部分を、Google Chromeを閉じた状態でjaに変更

   "intl": {
      "app_locale": "en"
   },

ASP.NETでの国際化(ブラウザの言語設定を使う)

ASP.NETでの国際化は簡単だけど、ディフォルトではブラウザの言語設定が利用されないので、テストが難しい。
解決方法は簡単でWeb.configに一行追加するだけでブラウザの言語設定を使ってくれるようになる。

<page>
 //...
 <globalization uiCulture="auto" culture="auto"/>
</page>

SQL Server 2008で設定の保存(上書き)ができない

SQL Server 2008のManagment Studio上でテーブルに変更を行った後に保存しようとした場合、
下記のようなエラーが表示されることがある。

変更の保存が許可されていません。 行った変更には、次のテーブルを削除して再作成することが必要になります。 再作成できないテーブルに変更を行ったか、テーブルの再作成を必要とする変更を保存できないようにするオプションが有効になっています。

これは、「テーブルの再作成を必要とする変更を保存できないようにする」がディフォルトでオンになっている為。
Management Studioのツール→オプション→デザイナーで該当チェックをはずせばOK。