Mac の Edge で検索エンジンを Google に変更する

Chromium 版 Microsoft Edge は非常にパフォーマンスが高く、Mac でも使う価値があります。

ただ、ひとつ気になる点としては、デフォルトの検索エンジンが Bing だということです。

これを使い慣れた Google に変更するための方法です。

アドレスバーで使用する検索エンジン

設定( command + , )を開き、「プライバシー、検索、サービス」を選択。
一番下の方にある、サービスにある「アドレスバーと検索」をクリックします。

アドレスバーで使用する検索エンジンを「Google」に変更します。(Yahoo に設定することもできます。あまりいないかもしれませんが、百度に設定することもできます。。)

空白タブは Bing のまま。。

新しいタブを開いた時にあるテキストボックスから検索すると、Bing のままです。
これに関しては、拡張機能をインストールしないと修正できません(!)。

そして、せっかくインストールしても勝手に無効にされます。Microsoft らしい囲い込みですw

これは拡張機能の設定画面で、トグルスイッチをオンにすれば有効化します。

サクラエディタで対となるカッコを強調表示


サクラエディタ

対となるカッコがどこにあるかわかるように、強調表示してほしい時があります。
サクラエディタでは、デフォルトではそういう表示になっていません。

タイプ別設定

[ 設定 ] - [ タイプ別設定 ]、「カラー」タブを開きます。

「対括弧の強調表示」を選択し、「色分け/表示」にチェックします。

サクラエディタで対となるカッコを強調表示

対となるカッコが強調表示されるようになりました。

サクラエディタで C# の強調キーワードを設定する

サクラエディタで C# や JavaScript などの強調表示をする方法です。

サクラエディタは GitHub からダウンロードしない

サクラエディタのダウンロード

サクラエディタの Web サイトから最新版をダウンロードしようとすると、GitHub に遷移します。しかし、ここからダウンロードしたサクラエディタでは C# の強調表示はできませんでした。(強調表示するためのファイルが無い)

少し古いですが、SOURCEFORGE からダウンロードできる インストーラー版 SAKURA Editer であれば、強調表示ができます。

サクラエディタをインストール

サクラエディタをインストール

ダウンロードした .exe からサクラエディタをインストールします。


この Keyword フォルダに、強調表示設定ファイルが揃っています。

キーワードセットの表示

インストールが完了したら、まず、強調キーワード設定の元となるキーワードセットを設定します。

サクラエディタを起動。
[ 設定 ] - [ 共通設定 ] を開いたあと、「セット追加」をクリックして、キーワードのセットを追加します。

C# のキーワードセットを追加

サクラエディタをインストールしたフォルダにある Keyword フォルダがありますので、その中にある csharp.kwd ファイルを選択します。

インストールフォルダは、変更していなければ、
C:\Program Files (x86)\sakura\keyword
のはずです。

C# の強調キーワードが定義されました。

タイプ別設定で C# を強調表示

次は、C# の タイプ別設定を行います。

サクラエディタのメニューから、[ 設定 ] - [ タイプ別設定一覧 ] を開きます。

タイプ別設定一覧

「追加」ボタンで新たなタイプを追加し、「設定変更」ボタンを押下します。

タイプ別設定


タイプ別設定が開くので、スクリーンタブに以下の通り入力します。
設定の名前:C#(これは何でもよいです)
ファイル拡張子:cs

カラー設定

次に「カラー」タブで、ブランクになっている強調キーワードに、先ほど追加したキーワードセット「C#」を設定します。

サクラエディタで C# の強調キーワードを設定

ここまで設定して、ようやく強調キーワードが有効化します。
Visual Studio Code でもインストールしたほうが楽ですね。。

Mac 小さくなった iTunes を戻すには左上の「X」ボタンを押す

iTunes のミニプレイヤー

ジャケットの写真をクリックすると、iTunes が「ミニプレイヤー」に変わります。でも、これを戻す方法が思いつかない。

左上の X ボタン(赤いボタン)を押すと、普通のプレイヤーに戻ります。

ASP.NET MVC で .ashx(ジェネリック HTTP ハンドラ)を呼び出す

処理の裏側でサーバー側にリクエストを送りたい場合など、昔の ASP.NET Web Form では ジェネリック HTTP ハンドラを使う事がありました。
.ashx というファイルです。

この懐かしのファイルを ASP.NET MVC で使うにはどうすれば良いのでしょうか。

ASP.NET MVC で ジェネリック HTTP ハンドラーを作成して呼び出す

.ashx ファイルを追加する

ASP.NET MVC でも、「新しい項目」として .ashx ファイル(ジェネリックハンドラー)を追加すれば使えます。

この例では、ashx ファイルはプロジェクト直下に置きました。
ルーティングの都合上、その方が面倒がないからです。

ドメインルートにある .ashx ファイルを叩くと、リクエストがサーバーに送られます。
ASP.NET MVC でファイルを直に指定するのは斬新です。

C# DataTable を Distinct して重複を除外する

DataTable の中身の重複を除外する方法です。

重複した DataTable

このような重複データを、ラムダ式で Distinct します。

 
var ret = dt.AsEnumerable().Select(row => new
{
    ShishaName = row.Field<string>("ShishaName"),
    BushoName = row.Field<string>("BushoName"),
}).Distinct();

重複が除外されました。
列が大量にある場合は、列名をいちいち定義しているので少々つらいかもしれません。

foreach (var item in ret)
{
    var shisha = item.ShishaName;
}

ただ、列名に名前を付けているので、その後の扱いは便利です。
名前で参照することができます。

以上の方法で DataTable から重複データを削除することができます。
しかし、もしこの DataTable が DB から取得しているデータだとしたら、データの取得方法がおかしいか、データベース設計がおかしいか、疑いを持つべきです。

データを取得する時点で、重複しないようにするのがあるべき姿です。
なぜなら、無駄なデータを取得するだけでコストがかかるからです。
すぐにプログラム側でなんとかするというアプローチに走るのは、よい実装とは言えません。

DataTable の中身を確認して Excel に貼り付ける方法

DataTable に何が入っているのかを確認するために、イミディエイトウィンドウで dt.Rows[0][0] とかやって消耗していないだろうか?

DataTable の中身は、Excel のように視覚的に確認することができます。

DataTable ビジュアライザー

対象の DataTable オブジェクトを右クリックしてクイックウォッチを開きます(Shift + F9 でも可)。

DataTable の値の所は {} となっています。
右側にある虫眼鏡をクリックします。

DataTable Visualizer

「DataTable ビジュアライザー」という機能で、中身を視覚的に確認することができます。

Excel にもそのまま貼り付け可能

Copy DataTable Visualizer

DataTable ビジュアライザーの左上のマスをクリックして中身を全選択して、Ctrl + C でコピーします。

Excel に DataTable の中身を貼り付ける
Excel に DataTable の中身を貼り付ける

Excel で、Ctrl + V を押して貼り付けます。

もう DataTable で消耗する必要はありません。

C# で Excel の列名インデックス(AA, AB..)を生成する

Excel の列名インデックスを生成するメソッドです。

 
const int ColumnBase = 26;
const int DigitMax = 7; // ceil(log26(Int32.Max))
const string Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

/// <summary>
/// 文字列のインデックスを取得する
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
public static string IndexToColumn(int index)
{
    if (index <= 0)
    {
	throw new IndexOutOfRangeException("インデックスは正数を指定してください。");
    }

    if (index <= ColumnBase)
    {
	// 26文字目までは単純にインデックスから取得。
	return Digits[index - 1].ToString();
    }

    // 26文字以降の処理。
    var sb = new StringBuilder().Append(' ', DigitMax);
    var current = index;
    var offset = DigitMax;
    while (current > 0)
    {
	// 末尾となる文字列のインデックスをセット。
	sb[--offset] = Digits[--current % ColumnBase];
	current /= ColumnBase;
    }
    // 整形して返却。
    return sb.ToString(offset, DigitMax - offset);
}

使用例。

 
for (int i = 1; i < 1000; i++)
{
    var col = IndexToColumn(i);
    Console.WriteLine(col);
}

参考;Integer to Alphabet string (“A”, “B”, …“Z”, “AA”, “AB”…)