Facebook セキュリティコードの取得方法


Facebook にログイン認証を設定していると、ログイン時にセキュリティコードの入力が促されるのだが、このセキュリティコードが届かない場合、アプリから生成するか、事前にコードを取得していなければならない。

コードの取得方法

  1. 設定(画面右上の ▼)
  2. セキュリティ
  3. ログイン認証
  4. 携帯電話を持っていない時に使用すためコードを取得
  5. ログイン認証コード(8 桁)をメモしておく(他のクラウドサービス等に保存しておくといいかもしれない)

ソリューション エクスプローラのドラッグを無効に

システム開発では、ソリューション エクスプローラに大量のファイルやフォルダが作られるのだが、マウスでクリックしようとしてドラッグ&ドロップになってしまい、意図しない場所にファイルが移動されてしまうことがある。

これは Windows のエクスプローラーと同じなので、Esc キーを押下するとキャンセルすることができる。
同様に、Ctrl キーを押下しながら動かすとコピーすることができる。
ただ、このコピーは単純なコピーなので、名前空間等はそのままになってしまうので注意が必要である。

数値を bool 型に変換する。

文字型の "1" や "0" を bool 型に変換するには、少し工夫が必要になる。
【注意】以下の例は厳密にキャストしているわけではない。"0" を "false" とし、それ以外は "true" が返されることを理解した上で使用する。
string t = "1", f = "0";
// true
bool result1 = Convert.ToBoolean(Convert.ToInt32(t));
// false
bool result2 = Convert.ToBoolean(Convert.ToInt32(f));
VB.NET の場合。
Dim t = "1", f = "0"
' True
Dim result1 = Convert.ToBoolean(Convert.ToInt32(t))
' False
Dim result2 = Convert.ToBoolean(Convert.ToInt32(f))
理想的なことを言うと、もしこのような変換が必要な場面があったとしたら、それは設計自体再考すべきであると思うが……。

オブジェクトを DBNull から他のタイプにキャストすることはできません。

オブジェクトを DBNull から他のタイプにキャストすることはできません。
場所 System.DBNull.System.IConvertible.ToInt32(IFormatProvider provider)
場所 System.Convert.ToInt32(Object value)
SqlCommand.ExecuteScalar メソッドの戻り値のキャストが失敗すると、以上のようなエラーが出る。この ExecuteScalar メソッドの挙動は少々クセがあるようだ。
SQL コマンドとパラメータを与えてメソッドを実行するのだが、SQL コマンドで SUM をしていると、0 ではなく、System.DbNull が返される。
そのため、null チェックとともに DBNull.Value のチェックも行わなければならない(DBNull.Value では TryParse もできない)。
// obj は Object 型の変数
if (obj == null || obj == DBNull.Value)
{
 // 戻り値がない。
}
SqlCommand.ExecuteScalar メソッド
https://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.executescalar%28v=VS.90%29.aspx

[VB.NET] イミディエイトウィンドウに変数の中身を表示

Visual Studio のイミディエイトウィンドウにおいて変数の中身を確認する場合、言語によって動作が異なっているようだ。

C#

C# の場合は変数名をイミディエイトウィンドウに入力すれば確認できる。

VB.NET

「 >?」か「?」を入力してから変数名を続ける。
そうしないと、式はメソッドではありません、という悲しいエラーが出る。
ちなみに、イミディエイトウィンドウは、[デバッグ] - [ウィンドウ] で表示させる。

Evernote Web でスタックが作成できない(2014 ベータ)


2014 年 10 月頃に Evernote Web がベータ版へとアップデートされた。しかし、残念ながらベータ版からはスタックが作れないらしい。

ベータ版を元に戻す

元のバージョンに戻したい場合は、以下の手順で戻すことができる。
  1. 左下の設定から、アカウントの概要を開く。
  2. [ベータ版] 項目から、古いバージョンに戻す、をクリックする。
スタック機能を使わないなら、新しいデザインの方が使い勝手は良さそうである。早く対応してもらいたいものだ。

[C#] Dictionary の値を取得

Dictionary クラスの値を、キーから値を取得する。
Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("hoge", 1);
dic.Add("gege", 2);

int hogeValue = 0;
if (dic.ContainsKey("hoge")) 
{
    // キー名が一致しない場合は例外が発生する。
    hogeValue = dic["hoge"];
}

// ほんの僅かだが、こちらの方が速いというのが一般的に言われているが、
// 逆に例外が発生しないためキー値がなかった場合の後続の処理に注意を払う必要がある。
dic.TryGetValue("hoge", out hogeValue);

Dictionary クラス
http://msdn.microsoft.com/ja-jp/library/xfhwa508%28v=vs.110%29.aspx

インターネット時刻タブがない

Windows 7 の「日付と時刻の設定」にて、[インターネット時刻] タブがない場合があるが、これは企業等で Active Directory に参加している場合には表示されない仕様らしい。その場合、手動で時刻調整を行うこともできる。
  1. コマンドプロンプトを管理者モードで起動。
    Windows キー → cmd → cmd.exe を管理者モードで起動
  2. 以下のコマンドを実行する。
    w32tm /config /syncfromflags:manual /manualpeerlist:ntp.nict.jp /update
    w32tm /resync
  3. 時刻が同期されているか確認したい場合は、以下のコマンドを実行する。
    w32tm /query /status
Windows タイムサービス の設定については、以下を参照。

w32tm
http://technet.microsoft.com/ja-jp/library/w32tm%28v=ws.10%29.aspx

Gmail で返信表示を > に

現在の Gmail のデザインでは、相手のメッセージはこんな感じに引用される。

プレーンテキストモードに変更すると…。

引用符(>)となる。
ここから本文へコピーしてもいいのだが、引用として扱いたいなら [書式] の [引用] を設定する。
どちらが良いかは好みにもよるだろうが、> に慣れている場合はこれで設定するといい。

[C#] 大文字・小文字 関係なく置換

単純に文字列を置換したいだけなら、String.Replace メソッドを使用すれば事足りるのだが、大文字・小文字を無視して置換させたいなら、Regex.Replace メソッドを使用する。
※ 表記上 <> は大文字
string originalString = "これはテストなんですよ。<br>そうですね。<BR>";
string replaced = Regex.Replace(originalString, "<br>", "", RegexOptions.IgnoreCase);
// 変換後:これはテストなんですよ。そうですね。

VB の場合。
Dim originalString = "これは VB のテストなんですよ。<br>そうですね。<BR>"
Dim replaced = Regex.Replace(originalString, "<br>", "", RegexOptions.IgnoreCase)
' 変換後:これは VB のテストなんですよ。そうですね。

RegexOptions には、上記以外にも色々と指定できる。
RegexOptions 列挙体

Git と TFS との比較と使用感

.NET 系の開発者だと、ソース管理は TFS (Team Foundation Server) を使っていることが多いと思う。化石みたいな現場だと VSS (Visual SourceSafe) が未だに現役であるかもしれない。あとは Subversion も使っている現場は多い。

個人的な結論としては、Visual Studio を使っているなら、TFS が一番シンプルだし、わかりやすいと思う。アジャイル開発におけるタスク管理等をしたいなら、逆にこれ以外は考えられない。

そんななか、Git を採用している現場があったので 3 ヶ月ほど使ってみた感想をまとめる。間違って理解している部分や、現場によってはもっとスマートに使っていることもあるだろう。
だから、もし VSS から Git へ変更しようと検討してるのならこういう声もあるということの情報共有のつもりでまとめている。

Git (ギット) の特性

Git を理解するうえで、はじめに上げたバージョン管理システムと大きく違うのが、Git は分散型バージョン管理システムである点であり、この理解がないと意味が全くわからない。
全員が同じ場所にチェックインやチェックアウトしていく TFS などと違い、まず、リモートリポジトリ、ローカルリポジトリという概念があることを理解する。リポジトリとは、ソース等を保管する場所みたいな概念である。

コミットとプッシュの違いを理解する

集中型のバージョン管理システムでは、コミット(チェックイン)を行うと、それが最新としてアップロードされるわけだが、Git の場合はコミットとはあくまでローカルにある「自分用」のリポジトリを更新する行為である。そのため、コミットしまくっても他の人には影響を及ぼさない。
他の人にも自分の修正箇所を取得させたい場合には、リモートリポジトリに「プッシュ」しなければならない。

差分は自分で解決する

私は SourceTree というソフトを使っているのだが、差分(競合という)が出た場合は自分で解決しなければならない(オプションの Diff から設定すれば WinMerge も使える)。
ソースコードをきれいにしてからみんなが触るところにアップしてね!
という考え方だ。
TFS の場合は、マージが非常に楽であるので、このコストはかなり大きいと思う。

作業の流れ

  1. ブランチを見て、自分のローカルリポジトリが最新であるか確認。リモートリポジトリに新しいコミットがあった場合は「プル」する。
  2. 修正。
  3. コミット(ローカルリポジトリに対して)。
  4. プル(競合が発生した場合はマージ)。
  5. プッシュ
こんな感じ。TFS だと、
  1. 最新の取得。
  2. 修正。
  3. チェックイン(基本的に最新のものと自動マージ。競合があった場合はマージツールが起動してくるのでソースを見ながらマージ)
という感じ。

Git を使うべき現場

個人的な印象から、こんな現場では TFS よりも便利なのかな、と思った。

外注が多い現場

社内で開発というより、外に実装等を多く出している現場。最終的にとりまとめてソースをマージして、ソースを保守してく要因が必要だが、リモートリポジトリを汚されずにきれいなソースを保管することができる。

多くのブランチを切りたいシステム

DLL を分けていたり、バージョン違いをたくさんリリースしたい場合は TFS より有効だと思われる。ただ、リモートリポジトリの保守は必須。

Git を使うべきではない現場

以下のような現場では、分散型ソース管理システムを使う意味があまりないと思う。
  • 少数の開発担当者(実装者)で開発する現場。
  • リリースするバージョンが多岐にわたらない。

結論

TFS は Microsoft らしい合理的なバージョン管理システム。
マスターのソースコードを美しく保守したいなら Git。

といった印象。最終的には好みでいいのだろう。

しかし、Git を使いこなすためには、Git マスターが必要だと思うし、教育とルールづくりをメンバーで守れる現場でないと、競合が出た時にかかるコスト(マージのコスト)が大きすぎる。ルール無視で使うと、ソースの消失やマージミスが多発する(多発した)。

[ASP.NET] セレクトボックスの値を取得

ASP.NET にて HTML のセレクトボックスの値は、Request オブジェクトに格納されている。

<select name="Prefectures">
<option value="01">北海道</option>
<option value="02">青森県</option>
<option value="03">岩手県</option>
<option value="04">宮城県</option>
<option value="05">秋田県</option>
</select>

C# のコード。
string selected = (string)Request.Form["Prefectures"];

[C#] for のカウントを減らして 年と和暦を作成する

誕生日などの生年月日の選択リストの元データを作る際、当年から何年前までの年データを作成する場合、for のループを減らしていくと簡単に作成できる。
和暦は JapaneseCalendar クラスを使用して変換すると楽。以下はデリゲートを使用しているが、それぞれ外部に共通化したほうが使い勝手は良い。
Func getwarekiName = (era) =>
{
    string warekiName = string.Empty;
    switch (era)
    {
        case 1:
   warekiName = "明治";
   break;
        case 2:
   warekiName = "大正";
   break;
        case 3:
   warekiName = "昭和";
   break;
        case 4:
   warekiName = "平成";
   break;
    }
    return warekiName;
};

int currentYear = DateTime.Today.Year;
for (; currentYear >= DateTime.Today.Year - 100; currentYear--)
{
    // 西暦だけで良ければ currentYear にセットされた値をそのまま使用すれば良い。
    Console.WriteLine(currentYear + "年");
}
currentYear = DateTime.Today.Year;
for (; currentYear >= DateTime.Today.Year - 100; currentYear--)
{
    // 和暦が欲しい場合は using System.Globalization を追加してから変換する。
    JapaneseCalendar calendar = new JapaneseCalendar();
    int wareki = calendar.GetYear(new DateTime(currentYear, 1, 1));
    int era = calendar.GetEra(new DateTime(currentYear, 1, 1));
    Console.WriteLine(currentYear + "(" + getwarekiName(era) + wareki + "年)");
}

NTT グループカードを解約

直接電話をしなければならない。連絡先は、0120-883-563(携帯電話からでも OK)。
手元にカードが無くても解約できる。必要情報は、名前・生年月日・電話番号・住所。
また、解約事由と、よく使っているカードは何かも任意で訊かれる。
解約は電話終了後にすぐに行われるそうだが、若干のタイムラグがあるそうで、即座にカードの利用を止めるかどうかも訊かれたりする。

NTT ファイナンス関係の問い合わせはここにも載っている。
http://www.ntt-finance.co.jp/contact/

2015.01 現在

[C#] ArrayList を List に変換

ArrayList を List に変換するには、以下の方法がある。.NET Framework 3.5 以降では楽に書けるようになっている。
ArrayList arr = new ArrayList();
arr.Add("山口太郎");
arr.Add("山田次郎");
arr.Add("山品三郎");

// .NET Framework 3.5 以降
List lst1 = arr.Cast().ToList();

// .NET Framework 2.0
List lst2 = new List(arr.ToArray(typeof(string)) as string[]);
// キャスト方法は以下でも良い。
List lst3 = new List((string[])arr.ToArray(typeof(string)));
特に注意しなければならないのは、ArrayList はタイプセーフ(厳密な型定義がされていない)ではないので、変換する型とは違う値がある場合は落ちる。元々、ArrayList 自体は今ではあまり推奨されないので、すでにあるソースで、確実にその型のデータが入っていることが保証されている場合のみ以上のような変換をするといい。