【ナナオン】ガチのバンドリーマーがナナオンをプレイして見た結果。

プレイ開始から2週間ぐらい経過しましたか。

今は、

戦力としてはまずまずで、マルチでもガチプレイヤー共のルームにも入ることができます。

ここまでプレイして見た感想ですが、

見た目とは裏腹に

結構ガチ向けの音ゲー

っていう感じがしました。

例えるならガルパがちょっとぬるま湯で、ナナオンはちょっと熱めの湯って感じです。

譜面がかなりテクニカルな腕前が必要で、HARDレベルでも簡単にフルコンさせてもらえません。

ゲーセンで他のプレイヤーのプレイ画面見て研究している人達の気持ちが分かる。

ガルパは直感である程度攻略できるけど、

ナナオンは譜面を覚えて攻略法を研究しないと難しい

と思いました。

あと、

麗華様嫁にください。

【北海道大戦】人口データを作成・読み込ませる

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

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

https://github.com/takishita2nd/HokkaidoWar

北海道大戦では、人口がそのまま戦力値として使用したいと思っています。

なので、人口データを入力します。

こちらに掲載されている人口データを参照しました。

https://uub.jp/cty/hokkaido.html

EXCELマクロを修正して、出力Jsonに人口データを含めます。

あとは、プログラム本体側を修正し、人口データを読み込ませるようにします。

たいした修正では無いので、詳細はgitHubを参照してください。

実行結果はこんな感じになりました。

たぶん、一番人口が少ない音威子府。

そして、一番多いのは、言わずもがな札幌市。

ちなみに、一番人口の少ない市は歌志内市。

【給付金で買った物】ジンギスカンセット

いつか買いたいと思っていた。

カセットコンロ+ジンギスカン鍋。

カセットコンロは比較的安いイワタニ製のものを買いました。

そして、ガスもイワタニ製です。

お鍋は安定のキャプテンスタッグ製のものを購入しました。

このお鍋、鋳物なのですが、シーズニング不要の物でして、最初に洗剤で洗って錆止め剤を落とし、水気を切って、自然乾燥させて、周りに油を塗れば使用できる状態になります。

お手入れもスキレットと同じように扱えばOK。

そして、肝心のお肉はと言うと、

行者ニンニク入りの味付けラムです。

こちらは楽天で購入しました。


とにかく、おうちで本格的なジンギスカンを食べたかったのです。

ところで、行者ニンニクって道外では聞いたこと無いなぁ。

行者ニンニクの認知度ってどれくらいなんですか?

iMac(2015)をどうしようか問題

そういえば、うちにあるiMacがほとんど使われないまま机の上に鎮座しているという事実に気がついてしまった。

購入当時は、iOSのプログラミングを勉強しようと思って、10万円程度で購入しました。

CPUは催促では無かったですが、当時はそこそこのもの。第4世代のCorei5だったと思う。

一時はメインPCとして使用していましたが、結局メモリが8GBしかないことに不満があり、ノートPC(Windows、SSD、メモリ16GB)を購入して以来はほとんど使用していないままテーブルの上に存在していました。

SSDに慣れてしまったら、HDDには戻れません。

しかも結構ディスプレイが大きいのよ。

で、iMacを退かしたら、広いスペースができました。

これは・・・

ディスプレイもう一個買っちゃう?

今のメインPC、メモリ32GBだからディスプレイ余裕で一個追加できるよぉ。

なんなら4枚まで追加できるよぉ。

とりあえず、今のディスプレイと同じ大きさのディスプレイを購入しました。

12000円。

そして、最終的にiMacをどうするか問題に行き着く。

iOSのプログラミングって、そんなにやる機会って無いよね。

売るとしたら、どれくらいするんだろう?

2~3万ぐらい出るかな?

調べてみます。

【ラズパイ】【温湿度計】温湿度計AM2320を使用する。

さて、GLCDもある程度やり尽くしたので、新しいデバイスを使用することにしました。

温湿度計AM2320です。

設置。

配線はこんな感じ。

このデバイスはI2Cバスを使用して温湿度を取得することができます。

I2Cバスってなんぞや?ということなんですが、SDL/SDAの2ピンを使ってデータを送受信できるみたいです。

具体的には、SDLにクロック信号と組み合わせてSDAにデータを送信して・・・

って難しいことを考えなくても、ラズパイにはI2Cに対応したモジュール・ライブラリがあるんです。

ちょっと設定を弄るんですけどね。

こちらのサイトを参考にさせて頂きました。

https://qiita.com/twinoze/items/c960eea23c57e342ea4b

先人の知恵を借りるのは大事。

sudo raspi-config

でコンフィグメニューが出るので、

これでI2Cが有効になります。

i2cdetect -y 1

5cと表示できれば認識しているとのことです。

が、100%認識できるかというと、大体50%ぐらいの確立で認識できないケースがありました。

バスリピータを使えば回避できるとのことですが、こう何度も発注を繰り返すと送料が高く付いてしまうので、プログラム側で回避することにしました。

このようにサンプルコードを作成しました。

import time
import smbus

i2c = smbus.SMBus(1)
address = 0x5c

loop = True
block = []
while loop:
    try:
        i2c.write_i2c_block_data(address, 0x00,[])
        i2c.write_i2c_block_data(address, 0x03,[0x00, 0x04])

        time.sleep(0.05)

        block = i2c.read_i2c_block_data(address, 0, 6)
        loop = False
    except IOError:
        pass

hum = block[2] << 8 | block[3]
temp = block[4] << 8 | block[5]

print('hum : ' + format( hum/10) + ' %Rh')
print('temp: ' + format(temp/10) + ' digC')

smbusというライブラリを使えば、I2Cバスへのアクセスが簡単になります。

タイミングチャートとか意識する必要なく、全部ライブラリでやってくれます。

やるべきことは、

  • 初期化
  • ファンクションコード0x03にスタートアドレスとレジスタ数を書き込み
  • データを読み取り

これだけ。

これはデータシートにある、

この部分に合致しています。

そして、I2Cにアクセスできない場合がある問題はtry/catch処理で回避させました。

エラーが発生したら、アクセスが成功するまで再試行を繰り返します。

これで100%アクセスに成功できます。

さて、次回はこれをライブラリ化させてGLCDに表示させましょうか。

BOOK☆WALKER読み放題

以前はマガジンウォーカーというサービスを利用していましたが、

ちょっと昔にマガジンウォーカーのサービスがBOOK☆WALKER読み放題に移管され、マガジンウォーカーのサービス自体は終了してしまいました。

マガジンウォーカーは主にカドカワが刊行する月刊マガジン雑誌が定額で読み放題になるので、月刊マガジン雑誌を全部買うよりも遙かに安く済みます。

いろんな雑誌のマンガを読みたいときには非常に助かります。

オイラもカドカワの月刊誌を読んでいたので、マガジンウォーカーサービス終了に伴い、BOOK☆WALKER読み放題に登録しました。

サービス乗り換えで良かった点。

読める雑誌が増えた。ラノベも読み放題。

特にきらら関連の雑誌が増えたのは嬉しい。

しかし、デメリットもありまして、

専用アプリが絶望的に使いづらい

たぶん、Webで読んだ方がマシかも。

週刊アスキーが読めなくなった。

週刊アスキーに限らず、一般週刊誌のラインナップは全部消えました。

結局、週刊アスキーが読みたくて、Dマガジン再利用開始しました。

・・・結果的に高く付いてしまったかも。

はぁ・・・

【給付金で買った物】FitBit Versa2はただのFitBit+Alexaではなかった。

買っちった。

FitBitのスマートウォッチです。

いままではFitBit InspireHRを使用していましたが、ちょうど障害年金・雇用保険が入って、同じタイミングで父の日クーポンが送られてきたので(父ではありませんが)買っちゃいました。

いろいろ値引きして17000円程度でした。

開封。

本体と換えのバンド、充電記が入っていました。

早速充電。

スマートフォンのFitBitアプリが自動的にデバイスを検出し、すぐに使用できるようになりました。

それと同時にInspireHRは接続解除されました。

で、いろいろ弄ってみたのですが、

一番の特徴はAlexaが搭載されていることでしょう。

ただ、あくまでもFitBit Versa2の中でAlexaが動いているので、スマートスピーカーのAlexaとは連動していないみたい。そこは残念。

というか、まだまだAlexaを使いこなせていない気がする・・・。

あと、スマートウォッチなので、InspireHRにはなかった、様々なアプリをインストールして使用することができます。

インストールのアプリの設定はスマートフォンのFitBitアプリから弄ることができます。

ほとんどが英語で使い方が分かりませんが。

そもそも日本で使えるかどうかも分かりません。

あと、FitBit Payというのもありますが、日本では使用できません。

ぐぬぬ。

Bluetoothヘッドホンとペアリングさせることで、Versa2で再生した音楽を聴くことができます。

ハイレゾのflac形式には対応していない模様。

Versa2のストレージは約4GB。

Windowsストアからアプリを入手して音楽データを転送します。

ちょっとサイズは少ないですが、バンドリの曲をいくつか入れて3時間の曲ぐらいは余裕で入ったので、運動用に使用する曲を入れて使用するという使い方なら全然十分です。

Spotifyのプレミアム会員ならSpotifyと連携して音楽を聴くことができます。

おそらくAlexaと連携もできると思います。

ただ、オイラはAmazon Musicユーザーですし、そもそもWiFiの圏内でなければ再生できないのでは、と思います。

ん?Spotifyのプレミアム会員ってダウンロード再生できたっけ?

すいません、そこは試すことができないのでわかりません。

そして、これを最大限有効に生かすために。

給付金で買った物その2、WF-SP800Nを発注しました。

https://www.sony.jp/headphone/products/WF-SP800N/?s_pid=jp_/headphone/special/wf-sp800n/_product-detail2

こちらは6/27発売なので、まだ少し時間ありますが。

届いたら試してみます。

【C#】【ピクロス】【ALTSEED】解析パターン13

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

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

https://github.com/takishita2nd/Picross

次はここを処理します。

ここは数字が[3,1]とありますが、すでに3マス塗られているので、その上にある空白はマスクされるのが確定されています。

考え方は、

・数字の先頭が解析済みである。

・マスの中で塗られている該当箇所を特定する。

・その前の空白マスをマスクする。

このロジックで行けるはずです。

        // 解析パターンその13
        // 確実に塗れない空白部分をマスクする
        private void pattern13()
        {
            // Row
            pattern13RowFront();
            pattern13RowBack();
            // Col
            pattern13ColFront();
            pattern13ColBack();
        }

        private void pattern13RowFront()
        {
            int row = 0;
            foreach (var rowlist in rowNumbers)
            {
                if (rowlist.IsAnalyzed())
                {
                    row++;
                    continue;
                }
                rowlist.AnalyzeDatas.Reverse();

                // 先頭の数字が解析済みであるか?
                if (rowlist.AnalyzeDatas[0].IsAnalyzed() == false)
                {
                    row++;
                    rowlist.AnalyzeDatas.Reverse();
                    continue;
                }

                // マスクされていない連続したマスを数える
                var dataList = getSquareDataListUnMaskedRow(row);
                if(dataList == null)
                {
                    row++;
                    rowlist.AnalyzeDatas.Reverse();
                    continue;
                }

                // 解析済みのマスを確認する
                foreach(var data in dataList)
                {
                    bool check = false;
                    int count = 0;
                    foreach(var p in data)
                    {
                        if (p.IsPainted())
                        {
                            count++;
                        }
                        else
                        {
                            break;
                        }
                    }
                    if(count == rowlist.AnalyzeDatas[0].Value)
                    {
                        foreach(var data2 in dataList)
                        {
                            if (data2.Equals(data) == false)
                            {
                                foreach(var p in data2)
                                {
                                    p.Mask();
                                }
                            }
                            else
                            {
                                break;
                            }
                        }
                        check = true;
                    }
                    if (check)
                    {
                        break;
                    }
                }

                rowlist.AnalyzeDatas.Reverse();
                row++;
            }
        }

このパターンは前から確認するパターンと後ろから確認するパターン、それを行と列に対して行うようにしています。

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

だいぶ埋まってきましたね。

【LARAVEL】【ダイエット支援】ページネーションを実装する

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

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

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

データ一覧画面にページネーション機能を追加します。

1画面に表示するデータの数を絞り、ページ切り替えによって表示するデータを切り替えるというものです。

データの数が多くなったらこういう機能も必要になると思います。

やり方は主に2つありまして、

一つは、一度すべてのデータを取得し、その後はフロント側でよしなにするパターン。

もう一つは、ページ切り替えをするごとに必要なデータを取得するパターンです。

今回は後者の方を採用しようと思います。

まずは、データ数からページ数を求める処理を作成し、ページ切り替えの機能を作成していきます。

リポジトリの実装。

    public function getTotalRecord($user)
    {
        return $user->WeightManagements()->count();
    }

count()でデータ数が取れるんですね。便利。

コントローラーの実装。

    /**
     * データのレコード数を取得する
     */
    public function total(Request $request)
    {
        return response()->json(['total' => $this->weightManagement->getTotalRecord(Auth::user())]);
    }
Route::post('api/weight/total', 'Weight\ApiController@total');

ページを表示したら、このAPIを使用するようにします。

    created: function() {
        this.updateList();
        this.createPagenate();
    },
    methods: {
        createPagenate: function() {
            var self = this;
            this.pagenates = [];
            axios.post('api/weight/total').then(function(response){
                var total = response.data.total;
                self.maxPage = Math.floor(total / 10) + 1;
                for(var i = 1; i <= self.maxPage; i++) {
                    self.pagenates.push(i);
                }
            }).catch(function(error){
            });
        },

APIでデータ数を取得し、そこからページ数とページネーションのリスト(1,2,3…)をリストで作成します。

これを使用して、テンプレートを作成します。

            <div id="pagenate">
                <ul>
                    <li>
                        <a href="#" v-if="prevShow" @click="prevPage()">&lt;</a>
                        <b v-else>&lt;</b>
                    </li>
                    <li v-for="page in pagenates">
                        <a href="#" v-if="currentPage != page" @click="changePage(page)">{{ page }}</a>
                        <b v-else>{{ page }}</b>
                    </li>
                    <li>
                        <a href="#" v-if="nextShow" @click="nextPage()">&gt;</a>
                        <b v-else>&gt;</b>
                    </li>
                </ul>
            </div>

前のページ(<)、ページ数指定、次のページ(>)の順に表示させています。

ただ、1ページ目に場合は前のページが非活性化、最大ページのときは次のページが非活性化、あとは、現在のページと同じページへのリンクが非活性化させる必要があります。

これはv-ifで表示を切り替えています。

判定はcomputedで実装しています。

    computed: {
        prevShow: function() {
            return this.currentPage != 1;
        },
        nextShow: function() {
            return this.currentPage != this.maxPage;
        },
    },

あとは、ページをクリックしたときの処理を作成していきます。

        changePage: function(page) {
            this.currentPage = page;
            this.updateList();
        },
        nextPage: function() {
            this.currentPage += 1;
            if(this.currentPage > this.maxPage) {
                this.currentPage = this.maxPage;
            }
            this.updateList();
        },
        prevPage: function() {
            this.currentPage -= 1;
            if(this.currentPage <= 0) {
                this.currentPage = 0;
            }
            this.updateList();
        },

リスト更新処理も修正します。

        updateList: function() {
            this.datalists = [];
            this.contents.page = this.currentPage;
            this.param.contents = this.contents;
            var self = this;
            axios.post('api/weight/list', this.param).then(function(response){
                response.data.dataLists.forEach(element => {
                    self.datalists.push({
                        id: element.id,
                        date: element.datetime,
                        weight: element.weight,
                        fat_rate: element.fat_rate,
                        bmi: element.bmi
                    })
                });
            }).catch(function(error){
            });
        }
    /**
     * データを取得する
     */
    public function list(Request $request)
    {
        return response()->json(['dataLists' => $this->weightManagement->list(Auth::user(), $request->contents["page"])]);
    }
    public function list($user, $page = 1)
    {
        return $user->WeightManagements()
                    ->orderBy('datetime', 'desc')
                    ->skip(10 * ($page - 1))
                    ->limit(10)
                    ->get();
    }

日付で降順に並べ替え、ページの開始から10件取得する、という処理に変更しています。

実行結果はこちら。

【ダイエット】【痩せた】久しぶりにこの数字を見たよ

85kgを下回るのはどれくらい振りだろうか。

まだ実感は無いですが、昔と比べて体が軽くなり、ベルトも緩くなったような気がします。

ダイエットで取り組んだことは、

毎日、どんな事があろうとも体重計に乗る。

食事は無理せず簡素に、間食は控えて。

筋トレとプロテインはマスト。

運動も、ジョギングをしていましたが、ジャージのズボンに穴が空いていることに気がついて、恥ずかしくてできていません。(今日買ってきます。)

あと、お金が無いので、お酒を買う余裕が無かったと言うことも影響しているかもしれません。

やっぱりお酒飲みながらダイエットなんて、そんなに甘くはありません。

お酒飲むよりは飲まない方が痩せやすいです。

今日は久方ぶりにお酒飲みに行ってきますが、あしたまたダイエット頑張ります。

目標82kg。

自分、ぼっちですが何か?