つかさラボのBlog@hatena

技術系ブログのはず

Windows10でIMEで日本語入力切り替え時、「あ」や「A」を表示させない方法

いつからかWindows10で日本語入力を切り替えると、画面中央に「あ」や「A」が表示されるようになったようです。
たいした問題では無いのですが、頻繁に「あ」や「A」が、デカデカと表示されると鬱陶しいので、オフにする方法を紹介します。

1. タスクトレイの「あ」または「A」を右クリック

f:id:tsukasa-labz:20181014221114p:plain

2. メニューから「プロパティ」をクリック

f:id:tsukasa-labz:20181014215526p:plain

3. 「IME入力モード切替の通知」内の「画面中央に表示する」のチェックをはずす

f:id:tsukasa-labz:20181014221726p:plain

4. 「OK」をクリック

特に再起動等は必要なく、即時反映されます。

代替案

会社では上記の方法で標準のIMEを使っていますが、自宅ではATOKを使用しています。
f:id:tsukasa-labz:20181014223511j:plain

ATOKの紹介は別途記事にしたいと思います。

C#におけるLINQの小ネタ3

下記は仕事中に見かけた冗長なソースコードです。

if (list.Where(x => x.IsAlive == true).Count() > 0)


「IsAlive」はbool型なので「== true」の記述は不要です。
そのため下記のように記述できます。

if (list.Where(x => x.IsAlive).Count() > 0)


「Where」で条件を指定した後に「Count()」としていますが、「Count()」内に条件を指定できます。
そのため、下記のように記述できます。

if (list.Count(x => x.IsAlive) > 0)

参考:C#におけるLINQの小ネタ1

条件に合致する要素が1つでもあるかどうかを調べる場合は「Any()」が使用できます。
そのため、下記のように記述できます。

if (list.Any(x => x.IsAlive))

参考:C#におけるLINQの小ネタ2

まとめ

下記の通り、非常にスッキリしました。
どちらも動作は同じで誤りではありませんが、余計な記述は極力しないほうがバグを埋め込まなくて済むかと思います。

Before
if (list.Where(x => x.IsAlive == true).Count() > 0)
After
if (list.Any(x => x.IsAlive))


参考

f:id:tsukasa-labz:20180829231254j:plain:w200
C#ショートコードプログラミング 第3版

C#におけるLINQの小ネタ2

下記は仕事中に見かけたソースコードで、改善の余地がある記述です。

修正前ソースコード

if(users.Count(f => f.Age >= 40) > 0)
{
    Console.WriteLine("40歳以上が存在します!");
}

リスト内で条件に合致するデータが、1件でも存在する場合は「Count() > 0」とするより「Any()」としたほうが簡潔に記述できます。
参考:Qiita

修正後ソースコード

if(users.Any(f => f.Age >= 40))
{
    Console.WriteLine("40歳以上が存在します!");
}


自分でも気を抜くとたまにやってしまうので、戒めの意味を込めてブログに掲載。

ソースコード全体

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // テストデータを取得
            List<UserInfo> users = GetTestData();

            // 年齢が40以上のユーザが1人でもいる場合
            if(users.Count(f => f.Age >= 40) > 0)
            {
                Console.WriteLine("40歳以上が存在します!");
            }

            Console.Read();
        }

        /// <summary>
        /// テストデータを取得
        /// </summary>
        /// <returns>テストデータリスト</returns>
        static List<UserInfo> GetTestData()
        {
            List<UserInfo> list = new List<UserInfo>();
            list.Add(new UserInfo() { UserID = "UserA", UserName = "ユーザA", Age = 18 });
            list.Add(new UserInfo() { UserID = "UserB", UserName = "ユーザB", Age = 34 });
            list.Add(new UserInfo() { UserID = "UserC", UserName = "ユーザC", Age = 30 });
            list.Add(new UserInfo() { UserID = "UserD", UserName = "ユーザD", Age = 38 });
            list.Add(new UserInfo() { UserID = "UserE", UserName = "ユーザE", Age = 45 });
            list.Add(new UserInfo() { UserID = "UserF", UserName = "ユーザF", Age = 24 });
            list.Add(new UserInfo() { UserID = "UserG", UserName = "ユーザG", Age = 32 });
            list.Add(new UserInfo() { UserID = "UserH", UserName = "ユーザH", Age = 19 });
            list.Add(new UserInfo() { UserID = "UserI", UserName = "ユーザI", Age = 23 });

            return list;
        }
    }

    /// <summary>
    /// ユーザ情報を保持するクラス
    /// </summary>
    class UserInfo
    {
        /// <summary>
        /// ユーザID
        /// </summary>
        public string UserID { get; set; }

        /// <summary>
        /// ユーザ名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 年齢
        /// </summary>
        public int Age { get; set; }
    }
}


参考

f:id:tsukasa-labz:20180829231254j:plain:w200
C#ショートコードプログラミング 第3版

C#におけるLINQの小ネタ1

下記は仕事中に見かけたソースコードで、冗長になっている記述です。
「ソースコード抜粋」の①、②は共にListをLINQで絞り込み、件数を取得する処理です。
①は「Where」で条件を指定し、「Count()」で件数を取得しています。
しかし、「Count()」内にカウントする条件を指定することで簡潔に書けるため、②の記述で良いかと思います。
どちらも結果自体は同じになるため、誤りではありません。

といいつつ、自分でも気を抜くとうっかり①の記述をしていることがあるので、戒めの意味を込めてブログに掲載。

ソースコード抜粋

int count = users.Where(f => f.Age >= 20).Count(); // ①
int count = users.Count(f => f.Age >= 20);         // ②


ソースコード全体

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            // テストデータを取得
            List<UserInfo> users = GetTestData();

            // 年齢が20以上のユーザ数を取得
            int count = users.Where(f => f.Age >= 20).Count(); // ①
            int count = users.Count(f => f.Age >= 20);         // ②

            Console.WriteLine("件数:{0}", count);
            Console.Read();
        }

        /// <summary>
        /// テストデータを取得
        /// </summary>
        /// <returns>テストデータリスト</returns>
        static List<UserInfo> GetTestData()
        {
            List<UserInfo> list = new List<UserInfo>();
            list.Add(new UserInfo() { UserID = "UserA", UserName = "ユーザA", Age = 18 });
            list.Add(new UserInfo() { UserID = "UserB", UserName = "ユーザB", Age = 34 });
            list.Add(new UserInfo() { UserID = "UserC", UserName = "ユーザC", Age = 30 });
            list.Add(new UserInfo() { UserID = "UserD", UserName = "ユーザD", Age = 38 });
            list.Add(new UserInfo() { UserID = "UserE", UserName = "ユーザE", Age = 45 });
            list.Add(new UserInfo() { UserID = "UserF", UserName = "ユーザF", Age = 24 });
            list.Add(new UserInfo() { UserID = "UserG", UserName = "ユーザG", Age = 32 });
            list.Add(new UserInfo() { UserID = "UserH", UserName = "ユーザH", Age = 19 });
            list.Add(new UserInfo() { UserID = "UserI", UserName = "ユーザI", Age = 23 });

            return list;
        }
    }

    /// <summary>
    /// ユーザ情報を保持するクラス
    /// </summary>
    class UserInfo
    {
        /// <summary>
        /// ユーザID
        /// </summary>
        public string UserID { get; set; }

        /// <summary>
        /// ユーザ名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 年齢
        /// </summary>
        public int Age { get; set; }
    }
}


※上記ソースコードを実行する場合は「int count = ~」となっている①、②のどちらかをコメントアウトしてください

LINQとは

統合言語クエリ (LINQ) は、クエリ機能を C# 言語 (および Visual Basic や場合によってその他の .NET 言語) に直接統合する一連の技術の名前です。 LINQ を使用すると、クエリは、クラス、メソッド、イベントなどと同じように、高度な機能を備えた言語構成要素になります。

クエリを記述する開発者の場合、LINQ で最も違いを認識できる "統合言語" 部分はクエリ式です。 クエリ式は、C# 3.0 で導入された宣言クエリ構文で記述します。 クエリ構文を使用すると、データ ソースに対する複雑なフィルター処理、順序付け、およびグループ化の操作を最小限のコードで実行できます。 同じ基本的なクエリ式のパターンを使用して、SQL データベース、ADO.NET データセット、XML ドキュメントとストリーム、および .NET コレクション内のデータを照会および変換します。

完全なクエリ操作の例を次に示します。 完全な操作には、データ ソースの作成、クエリ式の定義、および foreach ステートメントでのクエリの実行が含まれます。

LINQ クエリ式 (C# プログラミング ガイド)より

Xamarin 有償トレーニングに参加しました

f:id:tsukasa-labz:20180716205906p:plain

Xamarinとは

Xamarin(ザマリンと読みます)とは、Gnome,Monoの開発者であるMigeldeIcaza(ミゲル・デ・イカザ)氏が立ち上げた企業名であり、C#でAndroid,iOS,Macのネイティブアプリを作成できる開発ツール郡(Xamarin.Android、Xamarin.iOS、Xamarin.Mac、XamarinStudioなど)のブランド名です。

Xamarin 日本語情報より引用

参加コース

初級 2日コース
Xamarin を使用した iOS、Android クロスプラットフォーム対応のモバイルアプリの開発トレーニング

XLSOFTより引用

講座概要

Visual Studio から Xamarin を使用し、iOS (iPhone, iPad) や Android 向けのネイティブアプリを、C# で開発する方法を習得します。

XLSOFTより引用

1日目

Xamarin 概要
  • Visual Studio + Xamarin インストールの注意点
Xamarin.iOS で iOS アプリの作成
  • ユーザーインターフェースの開発
  • ビジネスロジックの開発
  • アプリケーションの実行とデバッグ
iOS/Android クロスプラットフォーム アプリの開発
  • ロジックの共通化
  • Xamarin ネイティブ、Xamarin.Forms の違い

2日目

Xamarin.Android で Android アプリの作成
  • ユーザーインターフェースの開発
  • ビジネスロジックの開発
  • アプリケーションの実行とデバッグ
Xamarin Forms 概要
  • ユーザーインターフェースの開発
  • ビジネスロジックの開発
  • アプリケーションの実行とデバッグ

受講した感想

1日目

進行はテキストを書き写す形で進められました。
内容が濃く、特に初日のXamarin.Nativeはネイティブ開発の知識が必須となるため、中々理解出来ませんでした。
Android開発は2012年頃、少しだけやっていたのでまだ何とか理解できましたが、iOSアプリ開発に関しては一切やったことがありません。
開発用にとその昔購入したiPhone 5Sがありますが、正直ほとんど使っていないので、iOSアプリの一般的なUIすら理解していません。
講師の田淵さんから「普段からAndroidとiPhone両方使っておいてください」と言われましたが、全くもってその通りだと思いました。
サッカー未経験者がいきなり監督をやるようなものでしょうか。
普段からiPhoneを使用していないのにiOSアプリを作るのは難しいですね。
ちなみに講師の田淵さんは普段からAndroid端末とiPhoneを併用されているそうです。

2日目

2日目のXamrin.FormsはXamarin.Nativeと比べ、使用できるコントロールが各プラットフォームで使用できるコントロールの最大公約数になるなどの制約はあるものの比較的簡単に進められました。
各プラットフォーム固有の機能(センサーなど)を使用する場合には当然、ネイティブの知識が必要になりますが、JSON形式のデータを取得してListViewに一覧を表示→詳細情報を表示、音声読み上げを行うアプリではプラットフォーム固有の処理が無いため、1ソースでAndroidアプリとiOSアプリを作ることができました。
f:id:tsukasa-labz:20180716204032p:plain f:id:tsukasa-labz:20180716204040p:plain ちょまど氏のリポジトリより

環境面

VisualStudioとXamarinがインストール済みのWindowsノートPCを持参しました。
iOSアプリの開発を行うにあたり、会場で用意して頂いたMacBookProにVisualStudioから接続し、シミュレータで動作確認を行いました。
この接続が不安定で、ID/パスワードが合っているにも関わらず、何度か接続しないといけなかったり、頻繁に接続が切れていました。
iOSアプリの開発やリリースにはMacが必要になることなどを考えると、Macを購入しVisualStudio for Macで開発するのが良いかと思います。
環境構築で躓くと心が折れてしまいますので。

感想

朝から晩まで2日間みっちりでしたので、正直結構疲れました。
受講人数が数名でとても質問しやすい雰囲気でした。
Xamarinから脱線してIoTやチャットボット、ガジェットの話題まで雑談でも勉強になりました。
講師の田淵さんが大きめのピアスをされていて見た目がいかつい感じでしたが、喋り方がとても優しい感じだったのが印象的でした(笑)

講座情報

  • 場所:泉岳寺
  • 期間:2日間
  • 時間:10:00~17:30
  • 費用:97,200円 (税込)

持ち物

  • ノートPC(VisualStudioを事前にインストール ※1)

参考書籍

私のお昼をちょっと豪華にしてもいいよという方は下記から

田淵さんのお昼をちょっと豪華にしてもいいよという方はこちらから

※1
「.NETによるモバイル開発」にチェック f:id:tsukasa-labz:20180716183424p:plain

Ruby Associationに寄付してみました

f:id:tsukasa-labz:20180522220724p:plain
Ruby Association

Ruby Associationとは

Ruby Associationは、プログラミング言語Rubyの普及と発展のための非営利団体です。
Ruby関連のプロジェクトやコミュニティ、ビジネスの関係を強化し、Rubyの利用に関する諸問題の解決に取り組みます。

個人寄付

Rubyアソシエーションは、Rubyの普及・発展を目指す非営利の団体です。事業費の多くは企業や個人様からの協賛金により賄われています。
Rubyアソシエーションが実施している事業に賛同支援していただいける個人からの寄付を随時受け付けています。

Ruby Association Supporters

Ruby Association Supportersとは当財団の寄付活動の呼称です。
寄付をしていただいた方はその年度毎にサポータとして芳名録(任意)に掲載させていただきます。
f:id:tsukasa-labz:20180522222110p:plain 2018年度 Ruby Association Supporters

寄付の額

一口5000円から受付しております。

寄付控除の取り扱い

一般財団法人であるため「寄付控除」の対象となりません。

なぜ寄付したのか

ふとしたきっかけで、#シャボン玉ツイート に寄付をした際、Rubyにも寄付できないかと考えました。
Ruby技術者認定試験の運営等を行っているRuby Associationに個人寄付ができるということで、一口(5000円)寄付してみました。
寄付を申し込むと振込先の口座情報がメールで送られてくるのですが、私の場合は迷惑メールに振り分けられており対応が遅れました。
Ruby Associationへ寄付を検討されている方は参考までに。

私は普段、街頭募金等を含め、寄付は一切してきませんでした。
しかし、今後は気になるOSSコミュニティやWEBサービス、アプリ等へは積極的に寄付をしていきたいと思います。
次はバージョン1からお世話になっているFirefox辺りにでも。


サクラエディタで文字コードを変更する方法

サクラエディタとは

サクラエディタ ( Sakura Editor )は、Windows上で動作する高機能な日本語テキストエディタです。
ソフトウェア開発のためのソースコード編集にも向いており、充実したマクロ機能、複数ファイル指定のGrep機能、高度なカスタマイズ機能といった特徴があります。
MS Windows 95/98/NT/2000/XP/Vista/7の日本語版が必要です。

OSDNより引用

一時的に文字コードを変更する方法

1. 赤枠部分をダブルクリック

f:id:tsukasa-labz:20180317184819p:plain 2. ダイアログで任意の文字コードを指定
3. OKをクリック

f:id:tsukasa-labz:20180317184825p:plain

恒久的に文字コードを変更する方法

1. ツールバーから「設定(O)」をクリック
2. 「タイプ別設定(Y)...」の順にクリック
3. ウィンドウで任意の文字コードを指定
4. OKをクリック

f:id:tsukasa-labz:20180317184836p:plain

総括

サクラエディタは無料で使えるため、SIer御用達のツールで様々な会社で使用されています。
私は自宅でも使用しておりますが、デフォルトの文字コードがSJISになっており色々と不都合がありました。
今更ながら恒久的に文字コードを変更する方法を調べたため、メモ。

その他

サクラエディタのダウンロードは下記のバナーより