[Ubuntu 12.04] Dash を自動的に隠す

Ubuntu を 12.04 にアップグレードしたら、ランチャー (Dash) が常に表示されるようになっていた。これは少しうっとうしいので、設定を元の挙動に戻した。



  1. [外観] - [挙動]
  2. Launcher を自動的に隠す → ON

[Firefox] Do Not Track によるプライバシー保護

Firefox では、バージョン 11 から実装された機能だ。
  1. [オプション] - [プライバシー] - [トラッキング]
  2. トラッキングの拒否を Web サイトに通知するt
Do Not Track (DNT) とは、Web サイトにアクセスした際にユーザーの行動追跡 (他にどのようなサイトを閲覧しているか、どのリンクをクリックしたか等) を行うような場合、それを拒否する意思を示すものだ。
意思を示すものであるし、現時点では効力を発揮しないのが実情だが、プライバシーの意識の高まりから、今後実装が進むと思われる。
Tracking Preference Expression - W3C
Do Not Track Test Page - Microsoft

[Firefox 12] 新機能 (サイレントアップデート) を設定

Firefox 12 リリースノート
http://mozilla.jp/firefox/12.0/releasenotes/
サイレントアップデートと、地味にソースに行番号追加w


サイレントアップデートは、オプションで更新の動作を変更する必要があるのかな? (デフォルトでは従来通りの動作に設定されていた)
  1. 設定タブを開く
    [ツール] - [オプション] - [詳細] - [更新]
  2. Firefox の更新を、"自動的に更新をインストールする" に変更。
Windows2000 と Fireefox3.6 系のサポートが終了するそうだ。
portableapps.com では Firefox3.6.28 も今のところダウンロード可能だが、サポート終了に伴い今後どうなるのだろうか。セキュリティを考えると、最新バージョンを使用するのは必然ではあるがね。

[SkyDrive] 容量を増やす

Skydrive のツールが発表されたのだが、新規登録時にはその容量が 7G になってしまうそうだ(今までは 25G )。なんだかいきなり損した気分だがw 既存のユーザーも一時的に 7G になってしまっている。 SkyDrive にログインして容量を追加しないと 7G のままになってしまうので、既存ユーザーはログインして容量を増やしておこう。

[ASP.NET] 認証ページに例外を追加して CSS やスクリプトファイルを反映させる

Form 認証を行う際に、アプリケーションルートに対して認証をかけてしまうと、その下にある外部ファイルが参照できなくなる時がある(CSS が反映されない等)。

[アプリケーション直下にログインページを置いて認証させている例]
    
        
            
            
        
        
            
        
    

この場合は、特定のフォルダやファイルに対して認証を外す必要がある。
[Styles フォルダ以下は認証しない]
    
        
            
                
            
        
    
location 要素は、system.web 要素の外に記述する。適切なアクセス制限をかけたいものだ。

[C#] 正規表現で半角英数以外を弾く

バリデーションチェックを手動で追加する際に、つい忘れてしまいがちな正規表現をメモ。
using System.Text.RegularExpressions;

// あいうえおabcde がチェック対象。
if (!(Regex.Match("あいうえおabcde", "^[a-zA-Z0-9]+$")).Success)
{
  // 半角英数以外の文字が含まれています。
}
ちなみに、主要なチェックは以下の通り。

数値 : ^[0-9]+$
郵便番号 : ^[0-9]{3}[-][0-9]{4}$
電話番号 : ^[0-9]{2,5}-[0-9]{1,4}-[0-9]{4}$
全角かな : ^[ぁ-ん!ー]+$
全角カナ : ^[ァ-ヴ!ー]+$
半角カナ : ^[ア-゙]+$

[Plantronics M100] Bluetooth ヘッドセットはスマートフォンには必需品


これがおすすめらしいとのことで試してみた。
音がいいとか聞き取りやすいとかはよくわからないが、必要最低限の機能は満たしていると思うので不満は出ない。屋外で使用しても相手先にしっかり声が届いているようだし。
それ以外の部分で、個人的に気になったところをいくつか。

[良かったところ]
  1. 意外と電池が持つ
    iPhone ではアプリと連動して電池容量が表示されるようだ。
    ようだ、というのは私は iPhone ではないのでわからないからそのメリットを享受できない。
  2. 悪くないフィット感
    寝転がりながらでも、うつむきながらでもズレることはない。当たり前かもしれないが。
[ダメなところ]
  1. ボタンが押しづらい
    真ん中が通話終了などのボタンを兼ねているのだが、これがうっかり押しやすい。デザインは確かにいいと思うが、もう少しなんとかならなかったものかね。
  2. 電源ボタンが固い
    電源の ON, OFF は横にスライドするのだが、これが固い。
    また、動かす時に真ん中のボタンを押してしまうことがある。使いづらい。
ちなみに、ガイダンスはすべて英語。「turn on」とか「connected」だとかw
それほどバカ高いわけではないので、はじめに書いた通りおおむね満足。
が、ネットで言われるように大絶賛されるものかというと……どうだろう。
他社のものが相当ひどいのかもしれない(笑)。

[MSDN] この記事は翻訳者によって翻訳されたものです。 記事の文章にポインターを重ねると、原文のテキストが表示されます。

原文テキストの表示がうっとうしすぎるんだが(笑)。
これを変更するには、右上の歯車のアイコンをクリックして設定を変えればよい。

スクリプトなし、を選択すると高速で読み込まれる。

記事の文章にポインターを重ねるといいつつ、マウスのホイールでスクロールをさせる場合は記事にポインターが当たりっぱなしになるわけで。
この機能を実装するときに、だれも何も言わなかったのだろうかと思う。

[Salesforce] API からログインする際のパスワード

Salesforce に API からログインする際には、パスワードの末尾にセキュリティトークンを付与する必要がある。
トークンの発行は、[設定] - [私の個人情報] - [私のセキュリティトークンのリセット] から行う。設定してあるメールアドレスに、トークンを記載したメールが送信されるはずだ。

[C#] DataTable の作成

度忘れすることが多い(?)、DataTable の作成(初期化)方法。
基本的な流れとしては、
  1. インスタンス化。
  2. テーブル列定義。
  3. テーブル行にデータ追加。
  4. DataTable 自体に追加。
である。

// DataTable 作成。
var dt = new DataTable();

// 行定義
// このセクションを無視すると、列 ' ' はテーブル  に属していません。というエラーが出る。
dt.Columns.Add("Name", typeof(string));        // 文字列
dt.Columns.Add("Score", typeof(int));           // 数値
dt.Columns.Add("Entry", typeof(DateTime));  // 日付

// 行追加
var dr = dt.NewRow();
dr["Name"] = "ほげ太郎";
dr["Score"] = "100";
dr["Entry"] = DateTime.Now;
dt.Rows.Add(dr);
var dr2 = dt.NewRow();
dr2["Name"] = "ほげ次郎";
dr2["Score"] = "40";
dr2["Entry"] = DateTime.MinValue;
dt.Rows.Add(dr2);

// GridView にバインド
GridView1.DataSource = dt;
GridView1.DataBind();
行の定義で定義した型を順守する。
数値型や日付型なら有効な日付を入力しないとエラーで落ちる。
' DataTable 作成。
Dim dt = New DataTable()

' 行定義
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Score", GetType(Integer))
dt.Columns.Add("Entry", GetType(DateTime))

' 行追加
Dim dr = dt.NewRow()
dr("Name") = "ほげ太郎"
dr("Score") = "100"
dr("Entry") = DateTime.Now
dt.Rows.Add(dr)

  1. VBではこんな感じ。

[Access] 指定した名前は予約語です。

Access 2002 およびそれ以降のバージョンの Access の予約語の一覧 - Microsoft

name とか user, memo なんていうのまで使えないのね……。

[SSO] SAML でハマりがちなこと

シングルサインオン(SSO)は、言ってみれば SAML という認証情報を POST するだけなのだが、この肝となる SAML がむしろ一番ハマりやすい気がする。気を付けないといけないポイントは以下の通りだと思う。
  1. 日付はすべて標準時。
    SAML に埋め込む日付はすべて標準時でなければいけない。
  2. 認証の有効期限
    すべての発効日は、NotOnOrAfter や InResponseTo の間である必要がある。
  3. 証明書のパスワード
    証明書を XML 署名する際に、パスワードは正しものをセットしなければいけない。ただ、証明書自体の有効期限は切れていても認証可能のようである。
  4. XML 署名の方式
    .NETのサンプルソースを使った場合だけだろうが、Google Appsでは RSAKeyValue (RSA 公開鍵) で署名するのだが、Salesforce では KeyInfoX509Data (X.509 形式) で証明する。Salesforce では BASE64 形式でエンコードしたものを POST しなければならなかったため、これはその差異ということだろうか……。

[ASP.NET] 自動的に名前が付けられたデータベースをアタッチできませんでした

アプリケーションでサーバーエラーが発生しました。
自動的に名前が付けられたデータベースをアタッチできませんでした。
同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、UNC 共有に配置されています。

ログインフォームがあるサンプルプロジェクト等の作成で、App_Data 配下にある mdf ファイルを IIS で公開設定。参照するとエラーになる。
IIS で公開するときには、Web.config ファイルの接続文字列を変更しなければならない。

フォーム認証によるユーザーの認証 - ASP.NET デベロッパー センター
http://msdn.microsoft.com/ja-jp/asp.net/ff650902

[IIS] アクセス許可がないため構成ファイルを読み取ることができません

仮想ディレクトリに設定したフォルダにアクセス権限がない場合にこのようなエラーが出る。このような場合には、IIS_IUSRS を設定する必要がある。

該当のフォルダを右クリックして、[セキュリティ] - [編集] - [追加]
IIS_IUSRS を入力すると、「コンピュータ名 \IIS_IUSRS」 が追加される。

IIS 7.0 でホストされている Web サイトを参照するとエラー メッセージ:「HTTP エラー 500.19-内部サーバー エラー」 - Microsoft

[Windows7] 拡大鏡ツールを終了させるショートカットキー

個人的には全く必要性を感じないツールだが、うっかり起動してしまった時に終了させるショートカットキーである。

Windows キー + Esc

画面上の項目を拡大して表示する (拡大鏡) - Microsoft

[SSO] テキストボックスの名前は SAMLResponse でなければならない

Salesforce への Single Sign-On の際に少しはまったのだが、画面読み込み時に SAML のレスポンスを textarea に格納していたのだが、POST しても "https://login.salesforce.com/" に飛ぶだけでログインできなかった。色々と試してみたら、textarea の名前が SAMLResponse ではなかったことが原因だった。
TxtSAMLResponse とかダメ。samlresponseでもダメ。
名前、固定なのね……。

[ASP.NET] ログインコントロール内部のテキストボックスにデフォルトフォーカスを設定する

ログインフォームを作成するための Login コントロールというものがあるのだが、
この内部に設定してあるテキストボックスに初期フォーカスを与えようとしたが意外とめんどくさかった。

.Focus() や、.SetFocus() などではできなかったために、 .FindControl() でテキストボックスを取得してからフォーカスを与えてあげた。他にいい方法があるのか調べるのも面倒だったので、とりあえずこの方法で実装。絶対もっと簡単な方法があるはずだ……。

// 型を厳密に指定するなら TextBox
var txt = LoginUser.FindControl("UserName");
if (txt != null) txt.Focus();

ちなみに、こんな方法もある。
[ASP.NET]Webフォーム上のフォーカスを制御するには?[2.0、3.0、3.5、C#、VB] - @IT

[GOM PLAYER] mkv ファイルで FLAC の音が出ない...

Core FLAC Audio Decoder を入れろ!
……だめだった。
カスタマイズをしてもだめだった。

ffdshowを入れろ!
……音が出た!

ffdshow のページはわかりづらすぎるのだが、ダウンロードページの「システム要件」のところから環境に合わせたものをダウンロードすれば OK である。
GOM PLAYER の公式サイトによると、この方法でも出ない環境があるのでその場合は個別対応するとか書いてある。すごいな……。

[X509Certificate2] 指定されたネットワーク パスワードが間違っています

X509Certificate2 クラスから証明書を読み込ませる際に、ファイルのパスの他にパスワードも入力するのだが、
パスワードが正しくないと 「指定されたネットワーク パスワードが間違っています。」 となりエラーで落ちる。
パスだけではなく、パスワードも正しいものを入力しなければならない。

パスワードだが、.pfx ファイルをダブルクリックするとインポートウィザードが起動するので、そこで確認できる。
とはいえ、忘れてしまったのでは全く意味がないのだが……。

X509Certificate2 クラス
http://msdn.microsoft.com/ja-jp/library/system.security.cryptography.x509certificates.x509certificate2(v=vs.80).aspx

[pvk2pfx.exe] Windows7 x64 で使用する

Windows7 64bit では、以下の場所に置いてある。
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\pvk2pfx.exe
通常は、以下の場所。
C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\pvk2pfx.exe

[C#] ファイル名に使用できない文字が含まれていないか調べる

string s ="?%*.txt";                
if (s.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) >= 0)
{
 // NG
}
Path.GetInvalidFileNameChars メソッドは、ファイル名に使用できない文字を char[] で返してくれる。 これを利用することでファイル名に使用できない文字をチェックすることができる。 http://msdn.microsoft.com/ja-jp/library/system.io.path.getinvalidfilenamechars(v=vs.80).aspx

[C#] 無効な文字を変換してから base64 形式へエンコード

// 無効文字を変換
 s = System.Security.SecurityElement.Escape("<\>&");

// "utf-8" 等でも OK 。
Encoding enc = Encoding.GetEncoding(50220);
byte[] byt = enc.GetBytes(s);
string base64 = Convert.ToBase64String(byt);                

文字列のエスケープに関しては、.NET Framework 4.0 より SecurityElement.Escape というメソッドが追加された。今さらという印象があるが……。
http://msdn.microsoft.com/ja-jp/library/system.security.securityelement.escape.aspx - msdn

base64 への変換に関しては、無効な文字列が存在していると落ちてしまうため、
このように一度エスケープ処理をかませてから変換したほうがよいだろう。
ちなみに、GetEncoding の引数はコードで指定しているが、文字列でも良い。
コードに関しては以下のページが参考になる。
http://www.atmarkit.co.jp/fdotnet/dotnettips/013enumenc/enumenc.html -@IT

ASP.NET SAML Component による Salesforce への SSO 実装テスト

Salesforce にシングルサインオンさせるためのサンプルでよく見かけるのは Active Directory と連携したものばかりのようなのだが、ATP Inc のコンポーネントを使用すると設定をいじるだけで簡単に実装することができるようだ。
だが、実際に試してみると少々ハマるポイントがあったのでメモを残しておく。

【手順書】
http://www.samlcomponent.net/?tag=singlesignon

【手順】
  1. コンポーネントをダウンロードする。サンプルはマイドキュメントにコピーされる。
    自分は saml2Salesforce を試した。
  2. Visual Studio 2010 で開くのだが、2010 ( .NET Framework 4.0) だとセキュリティの関係上うまく動かなかった。


    オーバーライド中に、継承セキュリティ ルールの違反が発生しました。オーバーライドするメソッドのセキュリティ アクセシビリティは、オーバーライドされるメソッドのセキュリティ アクセシビリティと一致している必要があります。
    CASが廃止。.NET 4のセキュリティはどうなるのか? - @it

    とりあえず、.NET Framework 3.5 で試してみた。
    .NET Framework のバージョンを変更するには、参照設定を変更しなければならないが、
    C:\Program Files (x86)\Atp\UltimateSaml v5.0.1211\Bin 配下に
    それぞれのバージョンの dll がある。
  3. .NET Framework 3.5 であれば、問題なくサンプルは動作するはず。
【Web.config の変更箇所】
  1. SalesforceUserId
    これは Salesforce のログイン ID にする。
  2. CertificateIssuer
    サンプルに付属する証明書を使うなら、XYZ Company でOKだ。
  • ほかの箇所は変更しなくてよい。
  • 証明書は SP_X509Certificate_ForSalesforce.cer を Salesforce にアップロードして使用する。期限は切れているがテスト用途なので問題なく動作する。
  • ポート番号は、プロジェクトのプロパティの中にある Web タブで設定し直せる。デフォルトは33181番を使用している。

[windows7] 管理者権限でアプリケーションを実行するショートカットキー

Windows7 において、管理者権限でアプリケーションを実行する方法はふたつある。

  1. 右クリック → 管理者として実行。
  2. 「Ctrl + Shift」 を押下しながら実行。
特に「2」のケースでは、キーボードから実行できるので、一番使用するであろうコマンドプロンプトを管理者権限で実行する場合は以下の通りにタイプする。
  1. Windows キー押下 (Ctrl + Esc でも可)。
  2. 「cmd」 とタイプ。
  3. コマンドプロンプト (cmd.exe) が検索されるので、「Ctrl + Shift + Enter」 を押下する。
知っていると便利だ。

[Google App] ASP.NETからのSSO実装テスト

Google AppsではSAMLベースのシングルサインオン(SSO)ができる。
C#用のサンプルを探していたのだが、少し古いながらもあった
まぁ、ドキュメントが付属しているのでその通りにやればすぐにテスト実装できるのだが、備忘録としてまとめる。
手順としては、以下の通り。

  1. サンプルソースビルド
    C#2.0用のソースなので、Visual Studio2005が入っていない限りはアップグレードさせることになるだろう。アップグレードしても問題は発生しなかった。
  2. IIS設定
    「Google.Apps.SingleSignOn.Web」の方を登録する。
  3. 証明書作成
    「makecert.exe」および「pvk2pfx.exe」を使うのが便利。コマンドラインから生成するが、実行ファイルの場所が環境によって異なるかもしれない。
    なお、作成した鍵に対してASP.NETアプリケーションが読み込める権限も与えなければいけない。
  4. Google AppsでのSSO設定
    Google Appsの管理者にてログインし、管理画面を開く。
    →高度なツール→シングルサインオン(SSO)設定
    →シングルサインオンページに、
     http://localhost/GoogleAppsSso/Prompt.aspx を設定する。
     この設定が正しく反映されると、
     ローカルページへのリダイレクトが行われるようになる。
  5. Google Appsへの証明書登録
    3で作成した証明書をアップロードする。
  6. http://mail.google.com/a/<ドメイン名> にアクセス。
    ローカルホストへリダイレクトされるはずなので、そこで認証情報を入力。
  7. 認証情報が正しければログインできる。上記サンプルだとGmailにログインできているはずだ。
と、いう感じにやっていけばOKなはずだ。
ポイントは、Web.configの「Google.Apps.SingleSignOn.Url」ローカルのシングルサインオン用ページのパスを入れること。「Google.Apps.SingleSignOn.PfxFile」に鍵の情報を設定しておくこと。

自分はWindows7 & ASP.NET4.0で動作させてみたが、認証することができた。
ただ、Google Appsのアカウントが無償版だと設定できなかったかな。

【参考】
http://code.google.com/intl/ja-JP/apis/apps/sso/saml_reference_implementation.html

http://code.google.com/intl/ja-JP/googleapps/domain/sso/saml_reference_implementation_web.html

[IIS7.5] ハンドラー"PageHandlerFactory-Integrated"のモジュール リストにあるモジュール"ManagedPipelineHandler"が正しくありません

ASP.NET4.0がインストールされていないらしい。
C:\Windows\Microsoft.NET\Framework64\ 配下にある、バージョンに移動。
コマンドプロンプトから、「aspnet_regiis.exe -i」を実行するとインストールが開始される。

[makecert.exe] 証明書作成ツールを使う

テスト用に自己署名証明書を作成したいときには、Visual Studioに付属しているツールが便利だ。
Google AppのSAMLを試そうとしたときに、リファレンスにはツールの場所は、
"C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\makecert.exe"
と、なっていたのだが、Windows7(64ビット)では、どうもその位置には実行ファイルが存在しない。
検索してみると、
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64"
に、存在していた。


このツールだが、コマンドプロンプトから実行する。
keyを出力したい所に移動して、makecert.exeを実行する。
オプション等はここが参考になる。

[IIS7] ASP.NETのインストール


Windows7の「Windowsの機能」からIISをインストールする際に、単純に「インターネット インフォメーション サービス」をクリックすると、ASP.NETがインストールされないようだ。これは手動でチェックする必要があるらしい。

また、Visual Studio2010から仮想ディレクトリを作成する際には「IIS メタベースおよび IIS 6 構成互換性」もインストールする必要がある。

Chrome18でMacTypeを適用させる

Chrome18になり、GDI++が使えなくなってしまったのでMacTypeに移行した人も多いと思う。
自分もその一人。
これでまたきれいな文字に戻るぞ!と、意気込んだものの、Chromeではやっぱり適用されずに orz になってしまった。

どうやらもう一手順必要なようだ(環境にもよるのかもしれない)。
ちなみに、自分の環境は「Windows7 Ultimate 32bit」である。

【解決方法】
MacTypeベータ版モジュールに入れ替える。

【手順】
※いつまでこの手順が使えるか不明。この手順で正しいかも不明。自分はできた。
  1. このサイトに行く。中国語は英語より馴染みがないが、「MacTray 内部测试版」というボタンをクリック。
  2. 「下载」が「ダウンロード」である。
  3. 10個ほどモジュールがあるので、それをMacType(portable版かな?)のフォルダに上書き。
    ※App\MacTypeの配下かもしれない。
  4. MacTypeとChromeを再起動させてみる。

いいかげんWindowsも、こんなことしなくてもきれいなフォントを出してほしいものだ。