【ワイヤレスイヤホン】SONY WF-SP800Nで実際に走ってみた!

今日の札幌は、昼間久しぶりの晴れだったので、WF-SP800Nを装着して走ってみました。

WF-SP800NはスマホとペアリングしていてAmazon Music HDで音楽を再生しながら(&DQW起動しながら)走ってみました。

まず、上の開封記事でも書いたのですが、イヤーピースが耳の窪みにフィットして外れないという話。

これはね、マジで外れない。

走っている最中であってもポジション設定にイヤホンを触ることは無かった。

それだけ耳に完全にフィットして、走っていても外れません。

それともう一つ試したかったのがノイズキャンセリング。

気になったのは、風の音ぐらい。

風がイヤホンのマイクに当たって、ちょっと強めに聞こえるような感じがした。

でも気になったのはそれぐらいで、あとは車の音とかかな、それ以外のノイズはほとんど聞こえなかった。

すれ違った人達の会話もほとんど気にならなかったし。

それだけスマホで再生した音楽がきれいに聞こえます。

※これは余談ですが、Amazon Music HDってダウンロードしたらflac形式のファイルなんですよ。

WF-SP800Nはハイレゾ対応なので、ハイレゾ品質の音楽が聴けるのですよ。

お金+1000円かかるけどね。

これだけの物を買ってしまったらもうしばらくワイヤレスイヤホンは買わなくて良いね。

高いお金出して買った価値がある。非常に満足です。

これからも大事に使っていきたいと思います。

【北海道大戦】マップと都市をリンクする

前回までの状況はこちら。

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/HokkaidoWar

前回はマップ同士のリンクを作成しました。

ここ、もうちょっと改良します。

すぐ終わります。

マップのプロパティにUp、Down、Left、Rightを追加してそこから隣接するマップを取得させましょう。

    class Map
    {
        public Map Up { 
            get {
                var field = Singleton.GetFieldMap();
                return field.GetMap(_x, _y - 1);
            }
        }

        public Map Down
        {
            get
            {
                var field = Singleton.GetFieldMap();
                return field.GetMap(_x, _y + 1);
            }
        }

        public Map Left
        {
            get
            {
                var field = Singleton.GetFieldMap();
                return field.GetMap(_x - 1, _y);
            }
        }

        public Map Right
        {
            get
            {
                var field = Singleton.GetFieldMap();
                return field.GetMap(_x + 1, _y);
            }
        }
    class FieldMap
    {
        public Map GetMap(int x, int y)
        {
            if(x < 0 || x >= MaxX || y < 0 || y >= MaxY)
            {
                return null;
            }
            else
            {
                return _map[x, y];
            }
        }

これでだいぶ扱いやすくなったはず。

動作結果は前回と同じ。

で、ここからが今回の本題。

マップと都市のリンクを作成します。

マップから所属する都市を取得できるようにします。

まぁ、やっていることは簡単ですが。

    class Map
    {
        public void SetCity(City city)
        {
            _city = city;
        }

        public City GetCity()
        {
            return _city;
        }
    class City
    {
        public City(string name, Point[] points, int population)
        {
            _name = name;
            _population = population;
            _maps = new List<Map>();
            var r = Singleton.GetRandom();
            _color = new asd.Color((byte)r.Next(0, 255), (byte)r.Next(0, 255), (byte)r.Next(0, 255));

            var fieldMap = Singleton.GetFieldMap();

            foreach (var p in points)
            {
                Map m = new Map(p.x, p.y, _color);
                m.SetCity(this);
                _maps.Add(m);
                fieldMap.SetMap(m);
            }
        }

マップに都市を設定する所を追加、マップの生成と一緒に自分自身のオブジェクトを設定する、というようにしました。

で、これを検証するために、選択した都市と隣接する都市の色を変えようと思います。

        private List<City> GetLinkedCities()
        {
            List<City> cities = new List<City>();
            foreach (var m in _maps)
            {
                if (m.Up != null)
                {
                    var c = m.Up.GetCity();
                    if (cities.Contains(c) == false && c != this)
                    {
                        cities.Add(c);
                    }
                }
                if (m.Down != null)
                {
                    var c = m.Down.GetCity();
                    if (cities.Contains(c) == false && c != this)
                    {
                        cities.Add(c);
                    }
                }
                if (m.Left != null)
                {
                    var c = m.Left.GetCity();
                    if (cities.Contains(c) == false && c != this)
                    {
                        cities.Add(c);
                    }
                }
                if (m.Right != null)
                {
                    var c = m.Right.GetCity();
                    if (cities.Contains(c) == false && c != this)
                    {
                        cities.Add(c);
                    }
                }
            }
            return cities;
        }
        public void OnMouse(asd.Vector2DF pos)
        {
            foreach (var m in _maps)
            {
                if(m.IsOnMouse(pos))
                {
                    var info = Singleton.GetInfomationWindow();
                    info.ShowText(pos, _name + "\r\n" + _population.ToString());
                    // test
                    var cities = GetLinkedCities();
                    foreach (var c in cities)
                    {
                        c.linkedCity();
                    }
                }
            }
        }
        //test
        private void linkedCity()
        {
            foreach(var m in _maps)
            {
                m.linkedMap();
            }
        }
    class HokkaidoWar
    {
        public void Run()
        {
            while (asd.Engine.DoEvents())
            {
                FieldMap fieldMap = Singleton.GetFieldMap();
                fieldMap.unlinkMap();

List.Contains(Obj)を使用すると、Listの中にObjと同じ物があるかを確認できます。

自分の都市の隣接する都市なので、自分自身は含めていません。

実行結果はこうなりました。

お前ら、マイナポイント(9月~)の準備はできたか?

今年の9月からマイナポイントが始まります。

利用するためにはマイナンバーカードの他にもアプリの設定が必要なのです。

ストアアプリからマイナポイントで検索するとヒットしますので、アプリをインストールしてください。

アプリをダウンロードした後は、マイキーIDの発行が必要になります。

アプリからマイナポイントの予約(マイキーIDの発行)を選択します。

画面の指示に従って、マイナンバーカードをスマホの読取り部にタッチしてください。

※読み取ったらブルって振動しますが、まだマイナンバーカードとの通信がありますので、マイナンバーカードはそのまま動かさないでください。

暗証番号4桁の入力が求められますので、マイナンバーカード発行時に登録した4桁の暗証番号を入力してください。

マイキーIDが発行されれば準備OKです。

事業開始までお待ちください。

ちなみに、マイナポイントをどうやって使用するかというと、

キャッシュレス決済サービス1つと連携し、チャージまたは決済を行った場合にポイントが付与されます。※記載を修正しました。

プレミアム分のボーナスは25%。

つまり、10000円分購入すれば2500ポイント、20000円分購入すれば5000ポイント、ボーナスでもらえます。

これはかなり大きくないですか?

使用方法等詳しいことは今後の情報を待ちましょう。

【Laravel】【ダイエット支援】グラフをもっと簡潔に【完成】

前回までの状況はこちら。

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/diet-mng

このプログラムはこちらのリンク先で運用中です。

https://taki-lab.site:8443

前回からあれこれ考えたのですが、

3つのデータを1つのグラフに表示させようというのがよろしくないという結論になりました。

リンクのクリックでグラフを体重、体脂肪率、BMIで切り替えるようにしました。

たいした修正では無いので、ソースは書きませんが、gitHubのソースコードを参照してもらえればと思います。

ついでに軸の設定も変えました。(最大値と最小値)

かなりスッキリして見やすくなったかな。

やっぱりグラフは多くて2つまでかな、と思います。

さて、体重記録機能はほぼ完了しました。

次は・・・食事記録かな・・・。

【ラズパイ】【GLCD】倉田ましろを書いてみる。

こちらのネームクリップの絵がシンプルなデザインなので、この絵を表示させてみたいと思いました。

https://bang-dream.com/goods/1883

InkScapeで画像からトレースして線を書いて、

ドット絵ナニカのサイトで64×64ドットの画像に変換してExcelで出力。

http://dot-e-nanika.com

これを8×8に区分けして、16進数のドットパターンデータに変換(手作業)。

Array = [
    [
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
        0x40, 0x40, 0x20, 0x20, 0x10, 0x10, 0x20, 0x20,
        0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
    ],
    [
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40,
        0x20, 0x10, 0x08, 0x04, 0x02, 0x82, 0x81, 0x40,
        0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x03, 0x00,
        0x80, 0x41, 0x3B, 0x20, 0x20, 0x20, 0x20, 0x40,
        0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    ],
    [
def drowMashiro():
    for page in range(8):
        for addr in range(64):
            if addr < 32:
                SelectIC(1)
                SetPage(page)
                SetAddress(addr + 32)
            else:
                SelectIC(2)
                SetPage(page)
                SetAddress(addr - 32)
            WriteData(mashiro.Array[page][addr])

で、表示できました。

なかなか良い感じに映っております。

スマホのAlexaアプリが勝手にradikoを起動する問題

こういうのマジでびびるから勘弁して。。。

WF-SP800Nを使い始めた当たりから、スマホのAlexaアプリが勝手にradikoを起動して、通知欄に居残るという現象が現れました。

Alexaアプリが悪さしているのは確実なんですが、なぜWF-SP800Nとのペアリングを契機にこうなったのか。

使用前は特に問題ありませんでしたし、

だからといって、Amazon Echoなどデバイスやスキルの設定もこのアプリで行うため、削除することもできません。

まぁ、原因はわかったんですが。

アプリの通知設定画面から、

上のAlexaという所のスイッチをOFFにして通知を切れば解消しました。

おそらくですが、WF-SP800NとAlexaを連携させたことにより、これらの通知がONに変更されたのが原因でしょう。

しかし、この画面、同じような項目が沢山あって訳が分からんよ。

なんとかしてください。Amazonさん。

【北海道大戦】マップデータを管理する

前回までの状況はこちら。

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/HokkaidoWar

さて、現状マップデータの管理は、都市オブジェクトの中に所属するマップが格納されていると言う状態で、マップ同士の横のつながりがありません。

このままでは「隣接するマップ」を取り出すことが出来ないので、整理して管理したいと思います。

マップデータは横44マス、縦35マスで構成されているので、二次元配列にするのが最適でしょう。

なので、このデータを管理するクラスを作成し、シングルトンで使用します。

    class FieldMap
    {
        public int MaxX { get { return 44; } }
        public int MaxY { get { return 35; } }

        private Map[,] _map;
        public FieldMap()
        {
            _map = new Map[44, 35];
        }

        public Map GetMap(int x, int y)
        {
            return _map[x, y];
        }

        public void SetMap(Map map)
        {
            _map[map.X, map.Y] = map;
        }

    class Singleton
    {
        private static FieldMap _map = null;
        public static FieldMap GetFieldMap()
        {
            if (_map == null)
            {
                _map = new FieldMap();
            }
            return _map;
        }

で、都市オブジェクトからマップオブジェクトを作成する際に、このクラスにマップオブジェクトも保持させます。

        public City(string name, Point[] points, int population)
        {
            _name = name;
            _population = population;
            _maps = new List<Map>();
            var r = Singleton.GetRandom();
            _color = new asd.Color((byte)r.Next(0, 255), (byte)r.Next(0, 255), (byte)r.Next(0, 255));

            var fieldMap = Singleton.GetFieldMap();

            foreach (var p in points)
            {
                Map m = new Map(p.x, p.y, _color);
                _maps.Add(m);
                fieldMap.SetMap(m);
            }
        }

たぶん、これだけでOKのはずなので、うまく管理出来ているか、テストコードで確認したいと思います。

マウスカーソルのあるマップの隣にあるマップの色を変化させます。

    class City
    {
        public void OnMouse(asd.Vector2DF pos)
        {
            var fieldMap = Singleton.GetFieldMap();
            foreach (var m in _maps)
            {
                if(m.IsOnMouse(pos))
                {
                    var info = Singleton.GetInfomationWindow();
                    info.ShowText(pos, _name + "\r\n" + _population.ToString());
                    // test
                    fieldMap.onMouse(m);
                }
            }
        }
    class FieldMap
    {
        // Test
        public void onMouse(Map map)
        {
            for(int x = 0; x < MaxX; x++)
            {
                for(int y = 0; y < MaxY; y++)
                {
                    if(_map[x,y] != null)
                    {
                        _map[x, y].unlinkedMap();
                    }
                }
            }
            if(map.X > 0)
            {
                if (_map[map.X + 1, map.Y] != null)
                {
                    _map[map.X + 1, map.Y].linkedMap();
                }
            }
            if (map.X < MaxX)
            {
                if (_map[map.X - 1, map.Y] != null)
                {
                    _map[map.X - 1, map.Y].linkedMap();
                }
            }
            if (map.Y > 0)
            {
                if (_map[map.X, map.Y - 1] != null)
                {
                    _map[map.X, map.Y - 1].linkedMap();
                }
            }
            if (map.Y < MaxY)
            {
                if (_map[map.X, map.Y + 1] != null)
                {
                    _map[map.X, map.Y + 1].linkedMap();
                }
            }
        }
    class Map
    {
        // Test
        public void linkedMap()
        {
            var changeColor = new asd.Color(200, 200, 200);
           _geometryObj.Color = changeColor;
        }

        public void unlinkedMap()
        {
            _geometryObj.Color = _color;
        }

うまくいけていると思います。

【給付金で買った物】【ワイヤレスイヤホン】Sony WF-SP800N

Sony WF-SP800N

リリースされたての最新モデルです。

27000円。

特徴としては、ノイズキャンセル機能も持ちながら、スポーツ用途に特化した防水仕様になっています。

防水仕様になっていないと、汗でイヤホンが壊れるらしいよ。

開封。

接続の仕方が書いてありました。

充電はUSB-Cです。

さすが。最新モデルは違うね。

イヤホンをケースに入れて充電中にアプリを準備。

アプリを入れ終わったら、アプリの指示通りにイヤホンをケースから取り出し、スマホ本体をイヤホンに近づけるとペアリングが完了します。

思った以上に簡単でした。

実際に使ってみての感想。

今まで使用していた

(確か)メルカリで数千円で購入したものと比較します。

まず装着感。

WF-SP800Nは耳に入れる部分がこうなってて。

イヤーピースが耳の窪みにハマる構造になっているんですよ。

見事にフィットするので、激しい運動しても耳から外れる気がしない。

安物は静止してても耳から外れようとするからね。

あと、コントロールは左右それぞれにタッチ部分があり、

ここっす。

左耳側がGoogleアシスタントまたはAlexaの起動ボタンで、どちらにするかはアプリで選択できます。

右耳側が音楽の再生、停止、スキップなどの操作ができるようになっています。

ポイントは操作ボタンが、「イヤホン全体」では無くて、「一部」ということです。

多分、イヤホン自体が大きいから出来るんだろうな。

安物はイヤホン全体がスイッチ部分になっていて、ポジション変更しようとして誤操作が頻繁に起こっててストレスになっていました。

WF-SP800Nはそもそも完全にフィットしているのでポジション変更する必要が無いのですが、全体がスイッチ部分ではないので、誤操作することがありません。

むしろ、操作しようとしてもうまくスイッチが入らないぐらい(え。

あと、ノイズキャンセル機能もいいですね。

ノイズキャンセル機能がもっと強力なモデルもあるのですが、そちらは防水仕様になっていないので、こちらを選択しました。

でも、性能としては十分で、たとえば、パソコン作業しているとPCファンの音とかは全く聞こえないですね。

音楽を再生すると、その音のクオリティにびっくりしました。

作業に集中できるが、お客さんがピンポンしても気がつかないレベル。

これは、最高ですわ。満足。

存分に活用させて頂きます。

【ダイエット】実践していることその2、1つだけでいいから生活習慣を変えるべし

その1についてはこちら。

体重計を買って毎日体重を量っていても、今までと同じ生活を送っていては何も変わりません。

なので、次にやることは、生活習慣を変えることです。

1つだけで十分です。

ただし、必ず守らなければいけないことがあって、

毎日出来ることを実行してください。

例えば、○○食べるだけダイエットを実施したとしましょう。

これを実行すれば一時的に痩せることは可能でしょう。

でも、それを今後一生続けることは出来ますか?

絶対無理だと思います。

生活習慣を変えることは、今後一生その生活を続けると言うことです。

なので、必ず毎日出来ることをやらなければ痩せられないのです。

※毎日と言っていますが、目的は生活習慣を変えることなので、無理して毎日しなくちゃいけないということでは無いですよ。

人間の体って、思っている以上にわかりやすくて単純なんですよ。

自分の体は、全て自分で食べたもので出来ていますし、運動を続ければ、それに適した体につくり変わっていきます。

なので、少しでも良いので今までの生活に変化を付けてください。

オイラの場合は、週の半分は、白米の代わりに発芽玄米パックを食べています。

そして、晴れている日はできるだけ外を走るようにしています。1回40分程度のジョギングです。

あとは筋トレとプロテインをやってますね。

ちょっとだけの生活習慣の変化でも、続ければ確実に体に変化が出てきますよ。

今のオイラの状況はと言うと、

火曜日に焼肉を食べに行ったので、少し体重が増えてしまいましたが、腹筋をやったおかげか、ベルトの穴が1つ内側になりました。

排泄も順調なので、暴飲暴食しなければ良い感じに落ちると思います。

ただ、しばらく雨でジョギングできないんですよねー。

【給付金で買った物】ディスプレイ

iMacが置いてあった場所。

ディスプレイを新規購入してここに設置しました。

12000円。

部屋の角に3画面態勢が完成しました。

大丈夫、マシンのリソースは十分にある。(メインメモリ32GB、VRAM8G)

なんならもう一台ディスプレイ追加できる(置き場所無いけど)

Dportでマシンと接続していて、HDMIと入力を切り替えることができます。

なので、このディスプレイを、ケーブル差し替え無しで、ラズパイ用ディスプレイとしても使用できます。

さらに、もう一つメリットができまして、

中央がメインディスプレイなので、そっちにキーボードとマウスの向きを変えたところ、

マウスを操作する際に、肘を置くスペースができました。

マウス操作がめちゃくちゃ楽です。