ああ、そういえば注文してたっけな。

大量。

中身は全て同じです。
超具材焼肉のたれ。
これは、焼肉を食えと言うことか。


焼きました。

ソースは思った以上にどろっとしてますね。
お肉にめちゃくちゃ絡みつきます。
これは甘口で、オイラは普段辛口を食べているのですが、全然クセが無く、飽きが来ない味付けになっていました。
なので、用意したお肉全部ペロッと食べてしまいました。
美味いね。
ごちそうさまでした。
まだ5本残っているけど、ボチボチ消費します。

前回までの状況はこちら。
さて、GPSから距離を求めることが出来たので、
今度は実際に使用する都市間距離のデータを作成します。
どこかに便利なデータが公開されていないかなー
って探してみたのですが、
ありませんでした。
公開されているデータが無いので、自分で作りました。
チマチマとGoogle Mapを使って、北海道一周で通る都市と、その都市間の距離を測定しました。
ルート検索を使うと、走行距離が出てくるので、このデータを、とりあえずはExcelに入力。
これをエディターにコピペして、置換を使ってタブスペースを削除。
ちなみに、ルートとしては、札幌をスタートして小樽へ向かい、反時計回りで一周して、石狩から札幌に戻るルートです。
疲れた。
最新ソースはこちら(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を「敵の行動」に遷移させます。
まだまだ勉強中。
前回はこちらのページで統合版マインクラフトのプログラミングを紹介しましたが、
今回はJava版の方を弄ってみたいと思います。
必要になるのは、Minecraft Forgeという開発環境です。
https://mcforge.readthedocs.io/en/1.15.x/
これを使えばModを自分で作ることが出来ます。
今のMinecraftのバージョンは1.16.1ですが、対応するForgeはbeta版です。
まずは、こちらのサイトからMdkをクリックしてソースファイルをダウンロードします(バイナリではありません。)
https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.16.1.html
ソースファイルを適当なフォルダに展開します。
Terminalを開いて展開したフォルダに移動し、
> .\gradlew.bat genEclipseRuns (Eclipseの場合)
もしくは、
> .\gradlew.bat genIntellijRuns (IntelliJの場合)
を実行します。
Eclipse、IntelliJ、好きなIDE用に環境を構築してくれます。(自分はIntelliJです。)
完了したら、IDEを開いてプロジェクトをインポートします。
インポートが完了したら、とりあえず実行。
たぶん最初は英語になっているはずなので、言語設定で日本語にできます。
(新しいバージョンがあるって。後で更新しておこう。)
IDEのsrc/main/javaの下にExampleMod.javaがあると思いますが、
こんな感じでModをコーディングすることによって、統合版のMinecraftプログラミングと同じような事が出来るとおもいます。
まだオイラも勉強中ですけどね。
発光ダイオードって、抵抗噛まさないと壊れるんだね。
今回は日照センサーを仕入れたので、これで遊んでみたいと思います。
センサー部分に光を当てると、抵抗値が変わるという物です。
それを利用すればスイッチ処理に応用できたりします。
電流を測定すれば光量を数値化できると思いますが、アナログデータの扱いは難易度が高いので、今回はやりません。
今回は明るさによってLEDが点灯・消灯する回路を作成していきます。
回路図はこんな感じ。
明るいときは日照センサーの抵抗値が低いため、
この方向に電流が流れるため、LEDは点灯しません。
暗くなると、日照センサーの抵抗値が高くなるため、
この方向に電流が流れ、トランジスタのベースに入力が発生し、
この様にコレクタからエミッタ方向に電流の流れが発生してLEDが点灯します。
スマホのフラッシュで日照センサーに光りを当てています。
元々部屋の中が暗いので、通常状態でLEDが点灯しています。
ただ、今回は、あり合わせの抵抗を使用しているため、抵抗値は適当です。
ちゃんとした、計算された抵抗を使用すれば、もっと利便性の良い日照スイッチが出来るかもしれません。
前回までの状況はこちら。
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/diet-mng
今回はデータ一覧画面を作成していきます。
この画面は日付ごとにタンパク質、脂質、炭水化物、カロリーを集計して一覧表示にします。
今回の一番の肝、データを処理するリポジトリの処理。
class EatingManagementRepository
{
private $paramNames = ['date', 'item', 'protein', 'liqid', 'carbo', 'calorie'];
/**
* データを取得して日毎にまとめる
*/
public function getDailyList($user, $page = 1, $days = 10)
{
$dates = [];
for($i = ($page - 1); $i < ($days * $page) ; $i++) {
$dates[] = date('Y-m-d', strtotime('today - '.$i.' day'));
}
$eatings = $user->EatingManagements()
->whereIn(DB::raw('date_format(date, "%Y-%m-%d")'), $dates)
->get();
// 日毎に集計
$dailyDatas = [];
foreach($eatings as $eating) {
for($j = 2; $j < count($this->paramNames); $j++) {
if(!array_key_exists($eating->date, $dailyDatas)) {
$dailyDatas[$eating->date] = [];
}
if(!array_key_exists($this->paramNames[$j], $dailyDatas[$eating->date])) {
$dailyDatas[$eating->date][$this->paramNames[$j]] = 0;
}
$dailyDatas[$eating->date][$this->paramNames[$j]] += $eating->{$this->paramNames[$j]};
}
}
// 戻り値に変換
$retDatas = [];
$index = 0;
foreach($dailyDatas as $dailykey => $dailyData) {
$retDatas[$index][$this->paramNames[0]] = $dailykey;
for($k = 2; $k < count($this->paramNames); $k++) {
$retDatas[$index][$this->paramNames[$k]] = $dailyDatas[$dailykey][$this->paramNames[$k]];
}
}
return $retDatas;
}
まずはwhere inで日付指定でデータを取得するために、今日から(デフォルト)10日前までの日付を配列$datesに作成します。
>>> $dates
=> [
"2020-07-30",
"2020-07-29",
"2020-07-28",
"2020-07-27",
"2020-07-26",
"2020-07-25",
"2020-07-24",
"2020-07-23",
"2020-07-22",
"2020-07-21",
]
そして、DBにアクセスして、データを取得、結果が$eatingsに入ります。
>>> $eatings = $user->EatingManagements()->whereIn(DB::raw('date_format(date, "%Y-%m-%d")'), $dates)->get();=> Illuminate\Database\Eloquent\Collection {#3920 all: [
App\Model\EatingManagement {#3917
id: 1,
date: "2020-07-30",
item: "item1",
protein: 10,
liqid: 10,
carbo: 10,
calorie: 10,
created_at: "2020-07-30 10:38:50",
updated_at: "2020-07-30 10:38:50",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3916
user_id: 1,
eating_management_id: 1,
},
},
App\Model\EatingManagement {#3652
id: 2,
date: "2020-07-30",
item: "item2",
protein: 20,
liqid: 20,
carbo: 20,
calorie: 20,
created_at: "2020-07-30 10:39:00",
updated_at: "2020-07-30 10:39:00",
pivot: Illuminate\Database\Eloquent\Relations\Pivot {#3915
user_id: 1,
eating_management_id: 2,
},
},
],
}
このデータを日付毎に集計します。
$dailyDatasは二次元の連想配列になっていて、$dailyDatas[日付][栄養素]という感じで格納されます。
栄養素の連想配列名は定義済みの$paramNamesの値をそのまま使用します。
こうすることで、今後何かDBに修正が入ったとしても、$paramNamesのみを修正すれば良いことになります。
>>> $dailyDatas
=> [
"2020-07-30" => [
"protein" => 30,
"riqid" => 0,
"carbo" => 30,
"calorie" => 30,
],
]
ただ、このままだと、Json化してJavascript側で処理するのに、ものすごい面倒なことになるので、扱いやすいようにデータを変換します。
具体的には、$retDatas[データ番号][項目]という形にします。
>>> $retDatas
=> [
[
"date" => "2020-07-30",
"protein" => 30,
"riqid" => 0,
"carbo" => 30,
"calorie" => 30,
],
]
この状態でJson化してフロントエンド側に送信します。
この処理書くの大変だったわ。
namespace App\Http\Controllers\Eating;
class ApiController extends Controller
{
/**
* データ一覧を取得する
*/
public function list(Request $request)
{
return response()->json(['dataLists' => $this->eatingManagement->getDailyList(Auth::user(), $request->contents["page"])]);
}
Route::post('api/eating/list', 'Eating\ApiController@list');
<script>
export default {
created: function() {
this.updateList();
//this.createPagenate();
},
methods: {
updateList: function() {
this.datalists = [];
this.contents.page = this.currentPage;
this.param.contents = this.contents;
var self = this;
axios.post('api/eating/list', this.param).then(function(response){
response.data.dataLists.forEach(element => {
self.datalists.push({
date: element.date,
protein: element.protein,
liqid: element.liqid,
carbo: element.carbo,
calorie: element.calorie
})
});
}).catch(function(error){
});
}
いやー未だにPHP慣れないわー。
7月28日、札幌でもUber EATSのサービスが開始されました。
元々Uber EATSは日本各地でサービスを行っていたので、詳細は省きますが、
いいね。
オイラが住んでいる白石区はギリギリサービス圏内で、
サービス圏内端っこの方なので、利用できるお店は中央区ほど多くありませんが、
昨日の時点ではマクドナルド、スターバックス、かつやの三軒だけでしたが、
今日になって、新たに牛角とベントスが追加になっていました。
まだまだ出前館には、お店の数では及びませんが、
Woltはサービス圏内ですらありませんが、
今後も店舗が増えるかもと考えると、なかなか良い宅配サービスです。
※スターバックスはブランチ月寒からの配達なので、おそらく配達員がそこに張り付いているのだろう。
Uber EATSを選択するメリットは、最低購入価格が設定されていないところ。
なので、本当にコーヒー一杯からでも配達してくれます。
ただ、配達料がかかるから、頼むとしたらまとめて注文するけどね。
ただ出前館も負けじと、最近は新規の店舗も増えてきて、住民からすれば嬉しい限りです。
出前、いいねぇ。
仕事を退職して10ヶ月経過。
失業手当も次回の認定で終わってしまいます。
昨年の体調不良の原因が、肩こり、首こりにあると分かって、定期的に整体に通い、凝りをほぐすことによって、だいぶ回復してきました。
筋肉のコリって怖いね。
筋肉が凝り固まってしまうと、血液が十分に流れなくなってしまうので、手足の末端が震えたり、頭が働かなくなったりします。
(そういえば、最近は手のしびれが無くなったな・・・)
コリを防ぐには、定期的に体を動かしたり、ストレッチを行うことによって防ぐことが出来るのですが、
凝り固まってしまうとそれだけではなかなか解消できなくって、
高い金を払って整体に通わなければならなくなります。
整体のお金って結構高いんすよ。
オイラの行っていたあゆみ整骨院は1回あたり4000円だったかな・・・。
整体って、整体師が力業で体をマッサージする物だと思っていたけど、
ここはかなりハイテク(?)な治療マシンを使っているので、効果はテキメンでした。
しかも痛くない。
前回で通うのを終了しましたが、今でも定期的なストレッチは欠かしていませんし、なんてったって、ネックマッサージャーがあります。
これを使うと、使用後の感覚が整体終えた直後と同じなので、本当に効果テキメンです。
これで1万円なら安い物です。
でもまだ問題がありまして、
どうやら目の疲れがひどいらしい。
目の疲れからか、目のコリが発生して、耳鳴りがする。
で、どうやったら目の疲れを軽減できるのか、と言うのを調べてみたのですが、
その原因の一つに、パソコンディスプレイがあるらしい。
というのも、
ディスプレイが部屋の光りを反射して(グレアというらしい)、それが目に負担をかけていると言うことなのです。
そういえば、オイラのパソコンディスプレイ、メインのやつ(中央)が一番古いディスプレイだ。
そして、よく見ると、メインのディスプレイは背景の光りを反射している。
これがグレアか。
メインディスプレイを2番目に古いディスプレイに配置交換。
(一番新しいヤツはラズパイと兼用なので、位置を変えると不便。)
目の疲れは多少軽減できましたが、完全に対処するには、ノングレアのディスプレイカバーを買えば良いらしい(結構高い。)
あと、目の周りをマッサージしたり、眼球を動かす運動を定期的に行ったり、目を温めたりすると良いらしい。
さらなる体調改善を期待。
定期的にスマホのGPSの信号を取得し、その2点間のデータから移動距離を計測して蓄積。
北海道一周を行う場合、総移動距離が、北海道のどの位置に相当するか、というのを表示するアプリ(という物を想定しています。)
GPSデータから距離を求める処理はQiitaにまとめてあります。
https://qiita.com/takishita2nd/items/3f1d7800fe85de2273bd
ハマったのは、パーミッションの記載。
“android”と記載するところを”Android”と書いただけで無効化されてしまいます。
「WebAPIにアクセス出来ねぇ!」ってなって、冷静に確認したら、上記のようなミスをしていました。
今回はJavaではなくて、Kotlinを使用していますが、KotlinはJavaのインターフェースを使用できますし、その逆も可能です。
なんなら、Kotlinで書いたコードをコンパイルしたバイナリファイルをJVMで動かすことができます。
Kotlinの方が便利な所もありまして、Kotlinは限りなくNullポインタアクセスを考慮しなくて良い仕様になっていますし(ただ、独特なコードの書き方はまだ慣れない)
UIにアクセスする際も、コントロールのID名だけで直接アクセスできたりします。
Android、というか、Javaをメインでやっている人は、Kotlinを覚えておいても全く損は無いです。
いや、無駄な知識は無い、持っていれば持っているだけメリットがあります。
だから人生一生勉強。
頑張ります。
これだけ安いのには訳があるはずだ。
スペックの数字だけを見てみると、プロセッサーはローからミドルの間ぐらいですが、
メモリ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/
まぁ、実際に触ってみないと本当の性能なんて分からないけどね。
ビックカメラに行って、あったら触ってみようかな(←あまり期待していない)