/// BANGBOO BLOG ///
■20/4/21 12:00AM
Dexie
Indexeddbを使うならラッパーが要るやろ、とオモて、溺死やったらコレ便利やんってちゃうか、とオモて、知らんけど
■構造 DB > Table > kvs > record(db=)schedule_db > schedule(=table) > kvs(Key=自動採番:Value=json=record)
kvsはid++が先頭に来ずでこう→ 1:"{"name":"aaa",reg_date":"20201027_11:57:24","id":1}"

var db = new Dexie("schedule_db");db.version(1).stores({schedule: '++id,name,reg_date'});
■操作var db = new Dexie("schedule_db"); schedule_dbというDBがセットされschedule: '++id,name,key,reg_date' テーブルscheduleにカウントアップKey:JSON{id,name,key,reg_date}が入るもしschedule: 'name,key,reg_date'ならnameが自動で一番最初のカラムだからキーになるキーの値が同じだとAddができない
stores()で一番最初に来るのが「主キー」put()は追加しあれば更新、add()は追加のみで同キーがあればエラー
 put()はupdateとしてDB上上書きされるように見えるがループすると全データが出てくる、謎first()やlimit()やlast()で欲しいレコードを取得toArray()ではobjが返るがobjは配列で引数0をつけてアクセス obj[0]get('aaa')はkey=aaaの値を持つ最初の行、get({key: "sss", value: "ccc"})で条件付可delete()の返り値Promiseに削除件数が入っている
■削除のレベルは行、表、DB行削除 db.schedule.where({id: id}).delete().then (function(records){表削除 trancateで db.schedule.clear(); コンソールには反映されていないがレコード削除済 db.table(storeName) で操作あるいはtables ->だめだった 表を複数持てるdb.version(1).stores({    genres: '++id,name',    albums: '++id,name,year,*tracks',    bands: '++id,name,*albumIds,genreId'});db.delete() DBを消せる(その後新たに再作成できる)

■insertdb.schedule.add({name: "aaa", key: "bbb", reg_date: getCurrentTime()}).then (function(id){ return db.schedule.get(id);}).then(function (schedule) { alert ("Date was set at " + schedule.reg_date);
■select
db.reserve.each(function(records){
if(records == null || records == ''){ alert ("No data found"); }else{ records.json;
toArrayは複雑になる、eachの方がよいかも、toArrayとeachの入れ替えてのselect発行が基本できるみたい
db.reserve.where({flg_del: 2}).toArray(function(records){ records.forEach(function(record){//obj.forEach直で行ける Object.keys(record).forEach(function(key) {//直で行けずObject.keys().forEach()で let val = this[key]; if(key == 'json'){ let v = JSON.parse(val);//直で行けずパースが必要 Object.keys(v).forEach(function(k) { let v = this[k]; console.log(k, v); }, v); } }, record); });
複雑なものはOr句で出せる
db.reserve.where('reg_date').below(getCurrentTime()).or('flg_del').equals(2).limit(3).each(function(records){ console.log('List: ' + JSON.stringify(records));
And句はfunctionを取るが簡単な感じがする
db.reserve.where('datetime').below(display_expire_date).and(item => item.flg_del == 2).desc('datetime').limit(display_ex).each(function(records){

複数条件はwhereにオブジェクトとして記載するがbelow等のフィルターにつながらずエラー、シンプルならokだが
db.reserve.where({datetime, flg_del: 2}).below(display_expire_date).limit(display_ex).each(function(records){
複数条件にフィルターをつけるにはwhereに配列で記載するが一つはbelow、一つはequalsでフィルタが複数でうまくいかない、シンプルならokだが
db.reserve.where(["datetime", "flg_del"]).below([display_expire_date, 2]).limit(display_ex).each(function(records){

先頭行
db.schedule.where('name').equals('aaa').first().then (function(records){

x↓ダメ??db.schedule.where('name').equals('aaa').toArray(function(records){
alert(records.reg_date);
x↓ダメ??db.schedule.get({name: "aaa", key: "bbb"}).then (function(records){ alert (JSON.stringify(records)); for (let i in records) { alert(i + ' item has ' + records[i].reg_date); }
■Insert and select(キーのidを使う)db.schedule.add({name: "ver1.0", key: document.getElementById("inputKey").value, value: document.getElementById("inputValue").value, reg_date: getCurrentTime()}).then(function(){ db.schedule.get('2').then(function(records){ alert(JSON.stringify(records)); }).catch(function(error) { alert ("Ooops: " + error); });}).catch(function(error) { alert ("Ooops2: " + error);
■Update
putは存在があれば更新、なければ挿入
db.schedule.put({key: "bbb", reg_date: set_date}).then (function(){ return db.schedule.get('bbb');}).then(function (schedule) { alert ("Date was set at " + schedule.reg_date);
keyが出せる場合はupdate()db.friends.update(2, {name: "Number 2"}).then(function (updated) {

トランザクションや細かな変更はmodify()db.friends.where("shoeSize").aboveOrEqual(47).modify({isBigfoot: 1}); modify推奨?→ https://dexie.org/docs/Collection/Collection.modify()
■Deletedb.schedule.where({name: "aaa"}).delete().then (function(){ return db.schedule.toArray();}).then(function (records) { if(records == null || records == ''){ alert ("No data found"); }else{ alert (JSON.stringify(records)); }
■Where句
db.friends.where("shoeSize").between(40, 45).count(function(count) {
[HTML5] IndexedDBでデータの保存や読み込みを行う - Dexie.js編 (katsubemakito.net)
Dexie.jsとTypeScriptでIndexedDBを操作する - noxi雑記 (hateblo.jp)

■アクセスindexeddbは該当DBにどこからアクセスできるか>同一ドメイン、ディレクトリでじゃない保存場所C:\Users\<ユーザ>\AppData\Local\Google\Chrome\User Data\Default\IndexedDBC:\Users\<ユーザ>\AppData\Roaming\Mozilla\Firefox\Profiles\XXXXX.default\storage\default
■課題SWで外部JSを扱うにはSW内に importScripts('dexie.js'); で埋め込むSyntaxError: Unexpected token o in JSON at position 1 はオブジェクトが返っている
JSONはオブジェクトで扱うのが楽 JSON.stringify(records)とJSON.parse(records)で変換
console.log('json: ' + JSON.stringify(json)); for(i = 0; i < json.length; i++){ if(json[i] != null) { console.log('id: ' + json[i].id);
下のようなロジックはあるテーブルのSELECTループ中に他のテーブルにアクセスする入れ子なのでエラー「NotFoundError: Failed to execute 'objectStore' on 'IDBTransaction': The specified object store was not found.」→配列に入れてIndeDBの問い合わせを一旦完了し、配列のループでIndedbを操作self.addEventListener('sync', function(event){ db.que.each(function(records){ if(event.tag.startsWith('post-data:' + records.tag)){ event.waitUntil(postDataSW(db)); } }); function postDataSW(){ db.reserve.where({flg_server: 2}).toArray(function(records){DevTools failed to load SourceMap: Could not load content~のエラーが出た 効果あるか不明だがdexieの最終行のコレを削除した、文字コードがUTF8に変えたりも //# sourceMappingURL=include.prepload.js.map
■関連JS、JavascriptJSでAタグリンクを挿入するにはinsertAdjacentHTMLがよい生成したタグを追加する前に掃除するにはdocument.getElementById('xx').textContent = null;
■テストhttps://www.bangboo.com/indexeddb/indexeddb_dexie_form.htmlhttps://www.bangboo.com/indexeddb/test/indexeddb_dexie_form.html (ディレクトリ違い)
Comment (0)

■20/4/20 6:00PM
PWA

■PWA
https://digital-marketing.jp/seo/what-is-progressive-web-apps/
https://developers.google.com/web/fundamentals/architecture/app-shell?hl=ja
https://qiita.com/kimamula/items/4e25b8d2caca314f9dd2
https://html5experts.jp/osamum_ms/25709/
Service Worker, App Shell Model, PRPL Petternなどを駆使したGoogleが提唱するProgressive Web Apps
HTML / JS / CSS だけでほぼ構成、モバイルApp的なWebが提供できる
SW(JS)がブラウザとサーバの間に位置し、データを取ったり渡したりブラウザの影/裏側で動く、サーバと考えてしまうと分かり易い?
App Shell Modelで側(画面テンプレート)をプッシュしておくと早い(JSレスポンス悪すぎるからコレってな)

PRPLは以下の略
 Push: 最初のURLルートに不可欠なリソースを Pushする。
 Render: 最初のルートを Renderする。
 Pre-cache: 残りのルートをPre-cache(事前キャッシュ)する。
 Lazy-load: オンデマンドで残りのルートをLazy-load(遅延読み込み)する。

/// Service Worker
訪問がない状態でのバックグラウンド同期、プッシュメッセージ
データの更新を集中的に受信して複数ページがデータの一部を利用(ブラウザにインストールするプロキシ、コンテンツの管理やキャッシュ管理を行える)
https://developer.mozilla.org/ja/docs/Web/API/Service_Worker_API
https://qiita.com/kei4eva4/items/fa5f99211e45b7ca6f6e
 →正確にはバックグラウンド同期では無い>periodic background syncはユーザに粘着可で無くなりそう
 Periodic Background Sync 及び Web を Install するということ | blog.jxck.io
 スコープへアクセスがあった場合にキャッシュの更新はできる、あるいは
 syncをオフ時に仕込んでおけばオンライン時にバックグラウンド同期は可能
 beacon apiを実行させると離脱時にサーバに通信も可能


Webページとは別にバックグランドで実行するスクリプト(マルチスレッドになると思う)
ブラウザでキャッシュ操作ができる、容量もあり強力、データ期限や破棄に注意
 DOMに直接アクセスできない
 ブラウザを開いていなくても動作可能
 プログラム可能なネットワークプロキシとして動作可能
 HTTPS必須(またはlocalhost)
ネットワークに依存しない、早い(阿部寛はもっと早い)、プッシュ通信、ホームに追加
 
/// プッシュ配信
https://liskul.com/push-notification-25520
https://www.fenrir-inc.com/jp/boltzengine/
https://pushnate.com/labs/pushnate/webpush-case-guide

事前のコンセントがなくいきなり「プッシュ通知を有効にしますか」と出てくるのは駄目
ユーザーに何の通知をするかを知らせたい
通知から訪れたときの表示と挙動を決めておく
セグメントを分けて送りたい場合はセグメントの情報をどうやってブラウザからたどってくるか
スマホではアプリのインストールが必要だが、Webプッシュはブラウザさえあれば通知ができる
https://webtan.impress.co.jp/e/2018/12/06/31214
通知の許可のダイアログを出す前にダイアログで説明
https://push.appirits.com/webpush/

過去評価の高かったボケが、1日1つプッシュ通知で配信
1日1回、時間帯としては「20時前後」に4回に分けて(通常19:50、20:00、20:10、20:20)配信
年末年始やGWだけは、昼と夜に(1日2回)
DAUに15〜20%くらい影響がでます。「プッシュしないとアプリを開かない人」が一定数いる
アクティブ度、アプリのバージョン、端末のOS、属性(男女)などで、セグメント配信
休眠ユーザーだけにプッシュ1万人に1人くらい(0.01%)しか起動せず難しい
https://appmarketinglabo.net/bokete-push/

配信方法は現在ではChromはGCMを、FirefoxはSimplePushサーバを利用
 受信する端末ごとに異なるメッセージを送るにはGoogle Firebaseが使われる様である
 https://android.googleapis.com/gcm/send https://updates.push.services.mozilla.com/push/
その許可を得たプッシュのエンドポイントを使用し配信
GCMの場合1度の送信で1000デバイスまで同時に指定できる、FirefoxのSimplePushでは1デバイスでの送信
デスクトップ/Webの場合はデスクトップに通知される(Win10の場合?Win7でも通知が来る)
https://qiita.com/zaru/items/f6e821052abb1b18bb0b
https://techblog.asahi-net.co.jp/entry/2018/09/28/173705
 ここにブラウザのベンダーの提供サービスを通じてとある(モバイルはコレしか)
 サーバーからブラウザを通じてデスクトップ通知する方法(Push API を利用) – ラボラジアン (laboradian.com)

/// 結局
キャッシュを弄くってオフラインでもゴニョゴニョできる、先読みも可、プッシュ通知も可、モバイルAppぽく
 →G suiteのOfficeアプリがオフラインでもサクサク、メール受信通知もできるGoogleのG suite用みたいなもんか
 →PCよりスマホを売りたい、通信量でも儲けたいfbgcp、個人情報を取りたいので、モバイル優先、モバイルっぽくWeb、これはi-modeやね

UR evil.

■どのようにPWA化するのか
https://techblog.asahi-net.co.jp/entry/2018/07/06/145931
https://techblog.asahi-net.co.jp/entry/2018/08/10/175407
 1)Service Worker(PWAで必要な処理を記述するJavaScriptファイル)
 2)Manifest(PWAの仕様について記述するJSONファイル)
 3)アイコン…ショートカットアイコン、プッシュ通知時のアイコンや起動画面で配置する画像

navigator.serviceWorker.register('/servicew.js').then JSファイルを登録(中に下記を入れ込む)
 //キャッシュ動作部分
 ├addEventListener('install' キャッシュのインストール
 ├addEventListener('activate' アクティベート
 └addEventListener('fetch' オフラインでもアクセスの際にクライアントが呼んでキャッシュ取得
 //通知部分
 ├addEventListener('push で通知を受ける
 └addEventListener("notificationclick で通知クリック時の挙動
Notification.requestPermission(function(status) { 通知許可は登録JS外でOK

キャッシュはリンク先も保持する?、、、→せえへんけど?
ブラウザのURLの鍵アイコンをクリックすると通知許可を含めて設定ができる(デフォルトの確認、許可、ブロック)
 デフォルトとブロックの時は「Push通知On」のボタンを表示 → ボタンを押すとダイアログで何が通知されるか表示しOKボタンを押せる
 許可状態のときは「Push通知Off」のアイコンを表示
 キャッシュ優先のsw.jsだと更新ボタンでもキャッシュのまま、Cookieの中のサービスワーカーを削除

Service Workerキャッシュ戦略>保存日はindexedbに置き、HTMLの有効期限は1日にする
 ※参考まで、なおindexeddbは永続データで大きくなりすぎたら使用に応じて自動的に削られる仕様だったかと
https://qiita.com/tiwu_official/items/47e8a7c3e6f2d57816d7

https://techblog.asahi-net.co.jp/entry/2018/09/28/173705
受信する端末ごとに異なるメッセージを送るにはGoogle Firebaseが使われる様である

 トークンを発行し端末とトークンを紐付け配信サーバに記録
 配信サーバでメッセージを作り、個別トークンに対しメッセージ通知
  JSONを送るがトークンを持っているもののみ通知が発火?

Notifications APIを見てみよう
https://developer.mozilla.org/ja/docs/WebAPI/Using_Web_Notifications
https://developer.mozilla.org/ja/docs/Web/API/Push_API
https://developer.mozilla.org/ja/docs/Web/API/ServiceWorkerRegistration/pushManager

モバイルでなくPCへの通知自体はServiceWorkerが不要、下記2ステップでOK(ブラウザに許可を入れるのが必要)
 Notification.requestPermission(function(status) { 許可を取り
 var n = new Notification(theTitle,options); 通知を送る

カレンダーをサブカレンダー(o)化しPWAでオフライン対応(機内モード)
 キャッシュするよう指定しても現アクセス分の有効時間のキャッシュの影響か直ぐにはオフライン化はしないようだ(反映に~30分掛かることがある)
  一度オフライン時にアクセスしエラーが出た上、ネットワークが回復すると自動にキャッシュされる
   エラーを出さずに一度通常表示をするだけではキャッシュされなかった
   アンドオイドでは通知も来る(1:準備ができるとChromeでページが読み込まれます→2:ページを表示できます)
 ServiceWorker内ではLocalStorageはセキュリティを理由らしいが使えない
  IndexedDBは使えるらしいが、、、→使えんかった、よく分らん→ラッパー要るやろでOK
 SWをインスコしたディレクトリへのアクセスでSWが動く、SWJS自体へのアクセスではない
 PHPでJSを吐いてもOK js_serviceworker.phpとかでheaderをJavascriptとして

https://webtan.impress.co.jp/e/2019/08/26/33636
JavaScriptを使えば、ページをリロードせずにブラウザのURLバーの内容を変更できるのでSPAでも戻るが使える
history.pushState(null, "Page 2", "/page2.html");
https://webtan.impress.co.jp/e/2019/09/02/33637
Fetch APIを使用してリクエストをハイジャックしたりレスポンスを変更または改ざん出来る
https://qiita.com/propella/items/6500f76c9c1521878a6b
https://developers.google.com/web/fundamentals/primers/service-workers?hl=ja
SWが分かりやすい
ServiceWorker, Cache API を使用して 4万件のアセット永続化を試した話 | 株式会社ノックノート (knocknote.co.jp)

キャッシュを解析してどれ位まで保持してるか、URL等々も確認もできる
 if(status ==200 && ok){ //okはtrue/falseが入るが文字にはなれずboolean
キャッシュ削除もできるが、Indexeddbで管理をするし、SW1発目ではインスコだけで動作しない等で扱いは手間

Sync(まだ非標準)
通信がオフからオンに変わった時点で発火。バックグラウンドで何かを実施する、indexeddbにデータを貯めオンでサーバに送る等を行う
https://qiita.com/horo/items/28bc624b8a26ffa09621
Periodic background syncはメールクライアントの受信ボックス更新のように、バックグラウンドで定期的にタスクを実行
ユーザのIPを定期的に確認しトラックできる安全性、バッテリやリソースやギガ消費などの問題がある
AddtoHomeやサイトエンゲージメントが高いや普段使いのネットワーク等で発火が判断される
https://blog.jxck.io/entries/2020-04-23/periodic-background-sync.html

WORKBOX(google)のsyncは仕様が違う?分からん
エクスポネンシャルバックオフ(補足: 最大再試行回数に達するまで、指数関数的に増加する待機時間で操作を再試行する手法 – 1秒、2秒、4秒、8秒、16秒...とシステムに負担をかけない)を採用
syncイベントはユーザがアプリケーションから離れた時にも送られます
テスト時はインターネットを遮断するか(オフライン)、ウェブサーバーを落としてください。Chrome DevToolのOfflineモードは使用しないでください!Devtoolのofflineチェックボックスはページからのリクエストのみに影響があります。サービスワーカーのリクエストは成功してしまいます

/// 開発上の注意
FetchAPIは404や500エラーをthenで受け取れない
 JS送り側>サーバ側>JS受け と丁寧に開発を
  SWからDOMは弄れない→sync全体描画やpostMessageやnew Responseの検討?
JSONの値はダブルコーテーションで括る必要がある
 header("Content-type: application/json; charset=UTF-8");
 echo '{ "response": "no data" }';
JSONでレコード数がある場合は[]で括る必要がある
 echo '[{ "response": "1" },{ "response": "2" }';
PHPではPOSTデータを$_POSTで受け取れるのは「application/x-www-form-urlencoded」又は「multipart/form-data」のみ
 file_get_contents('php://input')で受け取る
 $contents = json_decode(file_get_contents('php://input'), true);
モバイルだとhttp://でアクセスしているかどうか分かりにくいが、https://でしか動作しない

/// mmm
キャッシュが強い(失敗すれば手動でCookie/Serviceworker削除、くせ強でユーザに古いページを見せ続けるかも)
 どの範囲をキャッシュするか、キャッシュページの案内方法(お気に入りに入れる?)をどうするか
 SinglePageAppなら枠だけキャッシュさせて後は外部JSでいけるが
  工夫を考える:転送、外部JS、IFRAME、AJAX、サーバサイド、Refer、new Response等々

データもキャッシュする場合は2パターンかな、Pros cons、データをIndexeddbに持つ形ならモバイルApp的SinglePageApp的
┏online
┃1)DLしたキャッシュを表示(最新情報が届かない、だが何をキャッシュしているか分かる、サブサイト化でバックアップ用途)
┃ 普段使わないとキャッシュ更新を忘れる、SWがDL中のものを反映し表示するのに時間が掛かる(時々転送やIFRAME系でDL?)
┃2)最新を表示、裏でDLを実施(最新を表示しているので通常利用できる、DL頻度を下げたりProxy/キャッシュで動作が分からないところがある?)
┃ 何をキャッシュしているか不明、(バックアップサイトを持たず一体で便利だが、頻繁にキャッシュ全更新しがち、動作不明なことがある)
┗offline
 キャッシュを表示

Notification API(デスクトップ通知)
デスクトップ通知スケジューラー (bangboo.com)
Cache API(スケジュールのオフライン化)
https://pimpub.jpn.org/aaaaaa/o/install.php
Service worker API - Sync(バックグラウンド同期)
オフライン予約システム (bangboo.com)


Comment (0)

■20/4/13 11:30PM
Can't touch this

[Click for image]
https://twitter.com/ayapan94/status/1249703657639047168
純銅削りだしアシストフック(つり革触らない)

素手で触るのを回避!毎日持ち歩きたい抗菌性ドアオープナー「ハイジーンハンド」上陸 | 【CAMP HACK】日本最大級のキャンプ・アウトドア・ニュースマガジン - キャンプハック (nap-camp.com)
ハイジーンハンド

ボタンやノブを触りたないやろ~、つり革もスマホも~

----------
カッパ寿司食べ放題に行ってきた
回転寿司どれ位食べれるか知りたがったが30皿が精一杯だな
数皿のセットリストからのアンコール+α皿で酢飯を抑えるのがいいかと

焼肉ライクに行ってきた
一人専用だが狭い、火4で焼き火2で喰うを繰り返す感じか
17時まではご飯お代わり君だった、タレはあっさりで良いが
安いヤツだったが割高か、人気のヤツはどうなのか?

串カツ田中 17:00の食べ放題に行ってきた
これだと飲み物が安くならん、チンチロ>レモンサワー一択、奇数で12/36で損だが
30串~40串くらいか、ワサビのせは不要、山芋は火が通りにくいか大味なネタは不要
にんにくは毒っちゃ毒なので過剰で気分が悪くなるな

しゃぶ菜食べホに行ってきた
15枚+つくね3本はヤバかった、つくねは要らん、10枚以上は刻んだ方がいい
出汁はすき焼きがいい、コンビで鶏白湯は良くないかも、サッパリ香り系はいいねショウガとか

大阪王将に行ってきた
ラーメン普通、チャーハン:ラードタップリ普通、つーことで
天津飯+餃子が一番いいな
王将は持ち帰り八宝菜、ホイコーローにメシ入れるのが旨い

butakinに行ってきた
小ラーメン250g1000円、野菜マシ、にんにく/アブラ普通で丁度よい、豚の餌感なく普通に旨いな
腹減ってたら小豚マシラーメン1450円喰いたいな、チャーシュー旨い
butakin>マッチョ>夢語ウンチ系>次郎だな

夢を語れに行ってきた
豚1250+チーズ50+ニンニク/油マシマシ/野菜マシ+辛め不要>コールはニンニク有りだけで良いみたい
肉がしょっぱい、チーズは不要、メチャ並ぶ、青春パンク>並+全マシ、マッチョの方が

マッチョに行ってきた
麺は少ない方がいいので並がよいがちょい少ないな、徳島は甘すぎるな、醤油が良かった
にんにく/魚粉はマシマシ、野菜/背油マシ(ちょいマシだと次郎感はないがモヤシばかり喰うもんでもないかも)
通常でチャーシュー4枚くらい、ダブルで8枚くらい、トリプルが結構安い
肉は喰いたいが全体的に美味しい訳でないな、若い時に汗かいて大量に喰った達成感の残り香
 中+豚トリプルだと塩分摂りすぎ、中のみでいいのでは

第一旭に行ってきた
サービスラーメン650円が安い15-18時、生中+ぎょうざも500円になる
平時でも半ライス100円、ぎょうざ4個150円
ランチなら丼セットが得かな、B+丼でチャーシューと米の重さがある1050円
スープのコクとコショウでしょうゆ旨味系では一番

らぁめん太郎に行ってきた
14-19時餃子無料、並らぁめん+ライス、常時キムチ無料
天一ぽいので天一に行くならこっちの方が色々食えるので満足度が高いかも

牛角に行ってきた
平日早割食べ放題18時まで2000円税別で行けるが行ける
チョレギはきゅうり厚く旨いが塩だれ多いな、サンチュだけでいいかも
キムチは多めで来るので、カクテキだけでいいかも

和牛焼肉ニードに行ってきた
神戸のディープさが出てるビルだが店内綺麗、2000円でホルモン食べ放題
マルチョウ(小腸)は安定の上手さ、ハツも体に良さそう、だがそもそもレバーが苦手
キムチが旨いのでお替りイケるとご飯と進むかな、焼肉食べ放題4000円か
単品5000円位行った方がいいかもな、肉は良さそう

いきなりステーキに行ってきた
平日ランチでライスお替りがいいな、150g肉でもいい感じになる

鳥貴族、エターナルホスピタリティ、トリキに行ってきた
金麦+胸タレ+ハツ+釜めし/カツ丼大+αでFIX、αは南蛮か串カツか企画モノ
金麦以外は氷パンパンで量がアレ、麺はラーメン屋のプロの方が旨いし

磯丸水産に行ってきた
17時までランチで定食はお得、うな丼/島寿司が旨い、ヅケがいいのか?
まぐろ丼+ネギトロ小鉢で刻むのもいい

もっこすに行ってきた
火の国熊本っちゃー熊本やしなと思ってたが神戸辺りしかない神戸ラーメンだった
チャーシューメン+ライス(たくあん)で1300円くらいじゃないと満足しない
バイク乗って高校時?と神戸に移っての2度くらい20年に1度くらいの記憶だけだが味が大体同じで旨く感じた
店の感じは同じだが、大味で良くなかった記憶だが、味覚が変わるな、今は大味がいいな

KFC食べ放題に行ってきた
まずチキン3つ+ビスケット+ポテト小+ドリンクがあり、注文票をレジに持っていき毎回チキン3つ+αを頼める
チキン3つで十分、6つで限界、9つ注文したが8つ位しか45分で食えんかった、2000円、夢と現実だな
種類選べずメチャデカいチキンが毎回3つ来たが夢に出そう

かつ満に行ってきた
豚カツうまい、鶏カツでかいので好き、牛カツがワサビ醤油で肉肉しくうまいのが意外だった、明太子タベホは茶うけとして喰らう

Go to スタバ
果物系のフラペチーノってスムージ

芋を焼いてきた
芋一覧がある、志のもとのシルクスイート(初代GPX)より安納こがねが蜜でそう
密はるか<-厳選紅はるか(2024GPX)も行ったが焼きたてじゃないから微妙だ、石焼きで安納こがねが旨いだろうな
JR元町駅東口すぐ『焼芋本舗 あまいもん』っていう焼き芋専門店ができてる | 神戸ジャーナル

モロゾフのトラップを避けてきた
券で10%オフができるが百貨店は使えず直営店だけ、プリンは生プリンの方が旨いと思う
デンマークチーズケーキは生地とチーズ部とレモン風味のバランスが完璧、ハーフ~ホール喰うと満足度が高い、濃厚さなら生プリンを選ぶべき、観音屋と同名でビビるが大丈夫だ

ケーキがいい
フルーツはシロップ漬けよりくだものとして生で喰った方がうまい
砂糖とクリームの塊を喰うなら堂島ロールとかりくろとかモロゾフプリンでいいのでは
チョコやチーズは知らんけど


Comment (0)

Navi: <  21 | 22 | 23 | 24  >
-Home
-Column [133]
-Europe [9]
-Gadget [78]
-Web [137]
-Bike [4]

@/// BANGBOO BLOG ///