「未分類」カテゴリーアーカイブ

今のコロナウイルスの状況を中二病(厨二病?)的に整理してみた。

中国武漢で発生した新型コロナウイルス感染症。

瞬く間に世界中に広がり、パンデミック状態になりました。

ここで、世界に突きつけられた選択肢は以下の二つでした。

  1. コロナウイルスに感染して死ぬ。
  2. 経済的(お金が無くなる)に死ぬ。

どっちを選択しても結局は死んでしまう。

ある国(ニュージーランド等)は①での死を嫌って、コロナウイルスに感染するのを国境で防ごうとしました。

また、ある国(ブラジル等)は②での死を嫌って、マスクなんて不要、いつも通り生活しようと訴えました。

果たして、選択肢は上の二つしか無いのでしょうか?

もし、第三の選択肢があったら、中二病的に嬉しくないっすか?

いや、ラノベに親しんでいる人達がいたら、①、②とは異なる、第三の選択肢を探して頑張る姿の方がカッコイイっすよね?

いや、もはや、ラノベの定石ですよね。

①を回避しようと訴える人達は、主に医療関係の人達で、

②を回避しようと訴える人達は、主に事業者関係の人達です。

今、日本が目指しているのは、①でも②でもない、第三の選択肢です。

言うなれば、コロナウイルスで死なない、経済的にも死なない結末を目指して、頑張っています。

特に頑張っているのは、三権分立の、行政に当たる部分(決められた予算を執行する機関)です。

そのリーダーが総理大臣であり、その下に国務大臣がいて、都道府県の知事がいて、市町村の長がいます。

彼らは、今、第三の選択肢、①でも②でもない第三の選択肢、どうするのが正解なのかを、頑張って探しています。

いろんなしがらみを抱えつつも、現在進行中の状態なのです。

果たして、世界の未来はどうなっていくのでしょうか。

Fortniteがストアアプリから削除されたことについて思うこと。

Epic Gamesも大胆な事をしちゃったね。

元々はEpic Gamesがアプリ内課金をストアアプリ経由ではなく、自前の課金システムを使用していた、と言う事みたいなんですが、

(Fortniteプレイしていないので)

結局はEpic GamesとApple、Google間の問題でしょ?

と考えるあなた。

甘い。

確かに、ユーザー視点からしたら課金すること自体には何も変わりは無いですが、

問題は、その課金するためのクレジット情報をどこが管理しているか、ということです。

ストア経由ならば、一括してAppleがGoogleが管理していますが、

Fortniteの場合は第三者側で管理することになります。

今回の場合、Epic GamesはPCで独自のプラットフォームを持っており、そのノウハウがあれば安全かと思われますが、

どちらかというと、AppleやGoogle側が、一度そういう行為を許すと、いろんなアプリ開発メーカーが独自の課金システムを使用する流れになる、というのを防ぎたいのが一番の目的だと思います。

もしそうなった場合、個人情報の管理が出来なくなり、どこかで個人情報流出が起きると、大混乱になりますよね。

個人としては、一番信頼できる、Apple、Googleで一括管理して貰った方が安心と思いますが、どうでしょうか?

【いろいろ計測モニター】WindowsでHTTPクライアントを作成する。

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

ラズパイにHTTPサーバを実装したので、今回はHTTPクライアントをWindowsに作成します。

以前こちらで作成したのは、HTTPサーバですが、基本的にはこれを流用します。

なので、ソースコードはほとんど似ています。

違いはサーバ処理しているところをクライアント処理しているところぐらいです。

<Window x:Class="IroiroMonitor.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="{Binding Title}" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Label Grid.Row="0" Grid.Column="0" Content="温度" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10" Width="239" Height="86" FontSize="48"/>
        <Label Grid.Row="1" Grid.Column="0" Content="湿度" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="48" Margin="10" Width="239" Height="87"/>
        <Label Grid.Row="0" Grid.Column="1" Content="{Binding Temperature}"  HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="48"/>
        <Label Grid.Row="1" Grid.Column="1" Content="{Binding Humidity}" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="48"/>
    </Grid>
</Window>
namespace IroiroMonitor
{
    [JsonObject("sensorModel")]
    public class Sensor
    {
        [JsonProperty("datetime")]
        public string datetime { get; set; }
        [JsonProperty("temperature")]
        public string temperature { get; set; }
        [JsonProperty("humidity")]
        public string humidity { get; set; }
    }
}
namespace IroiroMonitor.ViewModels
{
    public class MainWindowViewModel : BindableBase
    {
        private string _title = "いろいろ計測モニター";
        public string Title
        {
            get { return _title; }
            set { SetProperty(ref _title, value); }
        }

        private double _temperature;
        private double _humidity;

        public double Temperature
        {
            get { return _temperature; }
            set { SetProperty(ref _temperature, value); }
        }
        public double Humidity
        {
            get { return _humidity; }
            set { SetProperty(ref _humidity, value); }
        }

        public MainWindowViewModel()
        {
            Thread thread = new Thread(new ThreadStart(async () => {
                try
                {
                    HttpClient client = new HttpClient();
                    while (true)
                    {
                        HttpResponseMessage response = await client.GetAsync("http://192.168.1.15:8000/");
                        response.EnsureSuccessStatusCode();
                        string responseBody = await response.Content.ReadAsStringAsync();
                        Sensor sensor = JsonConvert.DeserializeObject<Sensor>(responseBody);
                        double temp = 0;
                        double hum = 0;
                        double.TryParse(sensor.temperature,out temp);
                        double.TryParse(sensor.humidity, out hum);
                        Temperature = temp;
                        Humidity = hum;
                        Thread.Sleep(1000);
                    }
                }
                catch (Exception ex)
                {
                }
            }));

            thread.Start();
        }
    }
}

スマートフォンのバッテリーを長持ちさせる方法

Microsoft社員のちょまどさんが所有しているPixel3のバッテリーが膨張したという話を聞いて。

スマホに負荷をかけ続けていると、その負荷がバッテリーにもかかり、結果的にバッテリーに損傷を与えます。(バッテリー膨張という形で)

ちょっと前だったらiPhoneでよく見られた現象ですが、Androidでも起きるんですね。

最近のスマホって、PC並みの性能を持っている一方で、PCでは当たり前のCPUファンがスマホでは実装できない、という弱点を持っているのですよ。

なので、スマホ延命策の基本として、

熱いと思ったら自然放熱を待つ

というのが、基本的なスマホの発熱ケアと言えます。

この間、スマホの操作も、スマホの充電も禁止です。

スマホの充電は、その行為だけでバッテリーは熱を発しますし、最近のスマホゲームはCPUパワーを大量に使いますので、熱を発します。

なので、スマホが熱いと思ったら、熱が収まるまで放置するのが最善です。

特に、スマホケースを使用している方は、スマホケースによって放熱を阻害しているので、すぐにケースから外したほうがいいです。

ちょまどさんみたいに、「あったかーいホッカイロみたい」と思っていてはダメです。

さらに付け加えるとすると、

スマホが熱いからと言って、冷蔵庫や冷却剤などで強制的に冷却するのもNGです。

強制的に冷却すると、スマホの内部で結露し、スマホ基板自体が損傷する可能性があります。

これは防水機能の有無とか関係なく起こります。

じゃあ、どうするのが一番良いのかというと、自分が考えるのはスマホクーラーなどで風を送り続けて冷やすことです。

この方法ならば、結露すること無く、スマホを効率よく冷やすことが出来ます。

ちなみに、

オイラはPixel3を手帳型スマホケースに入れて使用していますが、自宅に帰ると、すぐにスマホケースから外して、スマホクーラーの風に当ててます。

その甲斐もあって、オイラのPixel3は未だにバッテリー膨張することなく、未だに現役で使い続けることが出来ます。

今持っているスマホを少しでも長く使いたいならば、スマホクーラーを使用することも一つの案です。

最近のスマホクーラーはサイズも小さくて良いっすね。

(オイラは一世代昔のスマホクーラー使用)

【北海道大戦】市町村選択処理を実装する。

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

https://github.com/takishita2nd/HokkaidoWar

前回作成したこれ。

これの「担当市町村を選択」の処理を作成していきます。

まずは、状態の定義を作成しましょうか。

    class HokkaidoWar
    {
        Player _player = null;

        enum GameStatus
        {
            SelectCity,
            ActionEnemy,
            ActionPlayer,
            ShowResult,
            GameEnd
        }

        GameStatus gameStatus;

上からstatus=1~5に相当します。(実際に振られている値は違いますが)

        public void Run()
        {
            while (asd.Engine.DoEvents())
            {
                asd.Vector2DF pos = asd.Engine.Mouse.Position;

                switch (gameStatus)
                {
                    case GameStatus.SelectCity:
                        var info = Singleton.GetInfomationWindow();
                        info.ShowText(pos, "都市を選択してください\r\n");
                        onMouse(pos);
                        break;
                }

                if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
                {
                    switch (gameStatus)
                    {
                        case GameStatus.SelectCity:
                            _player = new Player(getCity(pos));
                            gameStatus = GameStatus.ActionEnemy;
                            break;
                    }
                }
                asd.Engine.Update();
            }
            asd.Engine.Terminate();
        }

マウスカーソルを動かすと、テキストウィンドウに「都市を選択してください」と表示されます。それに加えて、マップの上にカーソルがあると、その都市の情報も表示します。

マウスをクリックすると、その選択した都市でプレイヤーデータを作成します。

    class Player
    {
        private City city;
        public Player(City city)
        {
            this.city = city;
        }
    }

そして、statusを「敵の行動」に遷移させます。

TCL 10 Lite、26800円って安すぎじゃね?

これだけ安いのには訳があるはずだ。

スペックの数字だけを見てみると、プロセッサーはローからミドルの間ぐらいですが、

メモリ6GB、ストレージ128~256GBという数字だけ見ると、オイラがいま使用しているPixel3よりもお得に見えるが。

※ちなみに、Pixel3はメモリ4GB、ストレージ64~128GB。

スペックを見て気がついたことが2点。

まず、NFCを搭載しているものの、Felicaを搭載していないので、おサイフケータイは使用できません。

いや、それだけでここまで安くなるわけが無い、

と思ってさらに調べてみると、

急速充電未対応。

ただ、バッテリー容量が多いので、寝ている間にフル充電させれば1日持つかも。プロセッサーの性能が高くない分、消費電力も少ないはずなので。

まぁ、一番気になるのはプロセッサーの性能だよね。

Pixel5のプロセッサーはミドルレンジかも、という噂もあるしね。

Antutuのスコアを比較してみると、Snapdragonの730Gと比較すると、半分ぐらいの性能だろうか。

https://reameizu.com/antutu-benchmark-and-geekbench-reveal-qualcomm-snapdragon-665-mobile-platform/

https://reameizu.com/qualcomm-snapdragon730g-vs-snapdragon730-snapdragon712-snapdragon710-by-antutu-benchmark-and-geekbench/

まぁ、実際に触ってみないと本当の性能なんて分からないけどね。

ビックカメラに行って、あったら触ってみようかな(←あまり期待していない)

七年前の古いノートパソコンを再活用してみた。

すまん、CPUはCore iじゃなくてCeleronだった。

USBインストーラーのWindows10が結構昔に作成したものだったらしく、インストール直後、アップデート祭が発生しました。

Windows Updateでアップデートを行うと、めっちゃ時間がかかるので、

こちらのサイトで見つけた、Rufusというツールを使うと便利です。

https://www.pasoble.jp/windows/10/oogata-update-1903.html

このツール、Windowsのアップデートプログラムのisoイメージをダウンロード出来ます。

isoイメージをダウンロード完了すれば、そのファイルをマウントしてアップデートプログラムを実行すればOK。

Windows Updateを使うより早いです。

使用した感じは思った以上にサクサク動作します。

やっぱりドライブをSSDに換装したのと、メモリを8GBに増やしたのが大きいと思います。

アイドル状態でメモリ使用率が32%。

2.4GBぐらい使用している計算になります。

普段使いでは8GB使い切ることは無いですが、CPU使用率はすぐに100%行ってしまいますね。

で、なぜこのノートPCなのかというと、このノートPC、バッテリーの持ちが良いんです。

確か、購入時のスペックを確認したところ、フル充電で6時間使用できるとありました。

何のアプリを実行するかにも寄りますが、文書作成程度ならば十分普段使用に耐えられると思います。

そうだなぁ、外出先でライティング作業に使用しようか。

執筆作業とか、インターネット、ブログ更新程度なら十分使用できます。

その反面、ゲームとかプログラミングには向かないかもしれん。

まぁ所詮旧世代のCeleronだからね。

今まで家計簿が続かなかった人こそ、Line家計簿を試して頂きたい。

お金を管理して無駄遣いしないようにするためには、家計簿を付けるのが一番とわかっているのだけれど、データの入力がめんどくさいのよ。

オイラも、何度か家計簿を付けようとしたけれども、結局途中で挫折した。

我々も忙しい日々の中生きているわけだから、その中で家計簿のデータ入力というめんどくさい作業に時間をかけるのは、難しいと思うんです。

でも、Line家計簿を使ったら、以外とこれが続くんです。

理由は簡単で、レシートのデータ入力の手間を省く工夫がされているんです。

例えば、レシートをカメラで読み取って、データの読み取り。

これがね、非常に便利なのよ。

昔は、アプリからカメラ撮影して読み込んでいたけれど、最新のアップデートかしら、レシートにカメラを向けるだけで、スキャナーの役割を果たしてくれて、読み込んでくれます。

その識字率も非常に高い。我々がやることと言えば、数字が正しいかの確認だけ。

金融機関の口座と連携させれば、そのデータも読み取って、反映してくれます。

これも以外と便利。

あとは電子マネーにも対応してくれれば言うこと無いでしょう。

無駄遣いを防ぐには、常に、どこにお金がいくらあるか、を認識する必要があると思うんです。

毎日家計簿をつける習慣を付けて、日々、財布の中と口座の残高を認識すれば、無駄遣いも減ると思うんです。

皆さんも是非Line家計簿で家計管理をやってみて欲しいです。

オススメ。

LINE家計簿

LINE家計簿

LINE Pay Corporation無料posted withアプリーチ

【Laravel】【ホテル予約管理】予約時に解錠ナンバーを発行する。

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

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

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

今回は予約時に部屋の鍵を解錠する番号を発行する、という処理を作ります。

まずはマイグレーション。

class AddLockNumberUsersReserve extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('reserve_managements', function (Blueprint $table) {
            $table->string('lock_number');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('reserve_managements', function (Blueprint $table) {
            $table->dropColumn('lock_number');
        });
    }
}

解錠ナンバーは予約テーブルに追加しました。

解錠するときは、入力日時と部屋番号、解錠ナンバーがインプットとなり、一致すれば解錠される、という仕組みを考えています。

では、予約登録処理。

    public function add($param, $room, $user)
    {
        Log::debug(print_r($param ,true));
        $model = new ReserveManagement;
        foreach($this->paramNames as $name)
        {
            $model->$name = $param[$name];
        }
        $model->lock_number = $this->generateLockNumber();
        $model->save();
        $this->attachToRoom($model, $room);
        $this->attachToSchedule($model);
        $this->attachToUser($model, $user);
    }

generateLockNumber()という関数を追加しました。

この関数で解錠ナンバーを作成します。

これは、予約登録時に作成され、編集を行っても変更しません。

では、generateLockNumber()の実装。

    public function generateLockNumber()
    {
        return rand(0,9).rand(0,9).rand(0,9).rand(0,9);
    }

簡単で、0〜9の範囲の数字をrand()で発生させ、それを4つつなげるだけです。

うまくできたようです。

次回は、これをQRコードに変換する処理を作成します。

【鬱病】また体調が悪くなってしまいました。

鬱になると体調管理が難しい。

お正月の三が日、年末に買ったビール1箱飲みきってから禁酒生活していましたが、先週水曜日から体調が悪化。

体のだるさは戻ったものの、耳鳴りが止まず辛い生活をしています。

思ったより体重落ちないし。

運動してなかったというのも影響しているかもしれないけど。

とりあえず、禁酒生活7日後にお酒解禁して、落ち込み気味の気分をアルコールの力で相殺していました。

あまりやっちゃいけないことなのかもしれないけど。

仕事復帰のお声もかけてもらってもいるのですが、

今の状態じゃ仕事復帰は難しいかも。

ゴメンナサイしようかな。

明日の朝、耳鳴りが治ってなかったら、ゴメンナサイします。

こんな感じで急に体調悪化するから鬱病は怖い。

体調維持出来るルーティンを見つけなければ。

加齢も加わっているからほんと、体調管理って難しいのよ。

まあ、今日はサウナからの居酒屋ビールで気分をリフレッシュします。