/// BANGBOO BLOG ///

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

October 18, 2020

竹書房2
■夢をかなえるゾウ、ガネージャ
偉人になるには→迷いがあるとだめ→自分で良いと信じること
 決めたことをやる、良いことをやる、人に文句を言わせる前に押さえておく
今ある体制を認める、右翼な良市民:小市民になる可能性が大(志の大きさ)

靴を磨く:自分を支えてくれるものを大事にする
募金する:人から愛される、世の中を良くしたい
腹八分目:自分をコントロールすることを楽しむ
人が欲しがるものを先取り:人が何を欲するかがビジネス、上司の欲も
笑わせる:空気を作れる、やる気やアイデア、いい面がでる
トイレを掃除:人がやりたがらない事をやる
まっすぐ帰宅:むしろ逆、一番大切な自由に使える時間
寝る前褒める:頑張ったり成長することが楽しい事と教える
何かを辞める:新しく何かをやる為に何かを止める、1日でも
環境を作る:意識を変えても駄目、環境を変えて習慣に
鏡を見て整える:意識や内面を変えるのは難しいが外見は変えられる
自分が得意な事を人に聞く:価値を決めるのは客、自分以外だから
自分が苦手な事を人に聞く:長所と短所は逆かも
夢を想像:考えはじめたら楽しくて止まらない
運が良いと言う:脳みそが勝手に運がいい事を探し始める、脳が学び始める
タダで貰う:言い方や仕草に気を使うようにコミュが変わる
明日の準備をする:一流はどんな状況でも結果を出す、綿密な準備が要る
身近な人を喜ばせる:どうでもいい人に気を使うのに、世話になった人、好いてくれる人、大事な人をぞんざいに扱うもの
褒める:誰かの助けなしに成功はない、呼吸レベルで褒め言葉を言う
人の長所を盗む:同業なら筋を通さないといけないがパクッてでも人を喜ばせる
求人情報を見る:これや!と思えるまで探し続ける、仕事で一生が決まるから
お参りに行く:どうしたら出世できるか成功できるかは心の底では分かっている、面倒臭がりでやらないだけ、成功する奴は少しでも可能性があればやる、信仰心は意味がある
人気の店、理由の観察:どうやって人を喜ばしているか観察
プレゼントする:期待以上だった時に喜ぶ、サプライズするには
やらずに後悔していることをやる:大体やらないまま死んでいく、成功はやりたい事をやるだけと言われている
夢を語る:人が聞きたい夢は実現が望まれていること、かなえるのが簡単
人の成功をサポートする:自分が成功する近道は人の成功を助けること
応募する:もし才能が認められたら人生はあっという間に変わる
毎日感謝する:地位名誉名声お金は他人がくれる、満たされて他人に愛を注ぐ状態で、自然な形で手に入る


2貧乏神・3筋肉隆々ブラック神・4死神・Love理論

自分、今の生き方やったら死ぬときめっちゃ後悔するで。

Posted by funa : 08:00 PM | Column | Comment (0) | Trackback (0)


October 5, 2020

USB Headset





Jeecoo V22 ゲーミングヘッドセット ヘッドホン 7.1ch
初USB接続だが、癖が超強
解像度が高いのかもしれんが色んな音が大きく聞こえる
コモっている、リバーブが強い
まぁ滅茶苦茶な性格かと思った
設定アプリを入れ上記の設定で割とまともになったが、、、

Posted by funa : 10:38 PM | Gadget | Comment (0) | Trackback (0)


August 16, 2020

キンキン(ジョッキ、武豊みたいなもん)

1)THERMOS保冷ホルダー

楽、炭酸が抜けない、保冷力だけでは夏は無理
2)CAPTAIN STAGステンレスマグを凍らす
氷入れるやつはキンキンになる◎口の周りが冷たくなるので、なみなみと注ぐのも良い、質感が良く旨い
3)氷のビアジョッキキット
感覚で行くなら究極これなのだがZonamaで酷評=>買って試した>器から氷を取り出すのに溶かすため25分ちょっと放置、水っぽいので、5分程度再度凍らせた(前日に氷ジョッキを取り出し翌日まで冷凍するのが良い)>これは中身ではなく外側が冷たい、器より中身が冷たいというのを感じたい、ただし夏感や祭感や特別感は半端ない、飲む時に溶けるので辺りが水浸しになる、注ぐ>飲む>冷凍をクイックに繰り返すなら結構長く使えるし五感で旨い、氷を入れると尚冷たい
4)グラスを凍らす
体感としてはかなり冷たく感じる、炭酸が抜ける感じがある、中身と量次第で秒でぬるくなるが、まぁ水浸しになる
5)冷保ジョッキ
コツが分からないと質感から体感でぬるく感じる、少し時間が経った方が凍ったりして液体自体は冷たいが体感はキンキンな感じがしない、多分つけた口が冷える事が必要ではないかと思う、持ち手も冷たいと体感に来てる気はする、ポテンシャルは感じる→下の方で凍っていて、固体と液体は交わらないのか液体部分がぬるくなる>かき混ぜるとシャーベット的になり最高、氷を入れると固まるので固まらないよう時折混ぜる、ステンストローがいい、固体と液体に分離しないよう一体で流体となると極冷たい(流氷は死ぬほど冷たいが、池の氷の下の水は冷たくないはず

●結論がでた。結局飲み物が究極に冷たいのがキンキンということで、器は主役でなかった。いかに凍らさずに液体として準備するか、事前に冷凍庫に入れるが重要。注いで冷凍庫に入れたり器を冷凍を時間をかけて繰り替えすと過冷却に近い感じになる、過冷却がポイントかとは思うが、器は夏用に冷たくする力(氷)を提供するヤツということで下で123フィニッシュだ


休みは氷ジョッキ、基本は冷保ジョッキ、大量氷チューハイボールならステンレスマグ→来年はドウシシャのステン+保冷剤+真空のヤツ追加だな

↓こちらによると缶自体を冷やすには冷凍庫に缶を突っ込み30分~40分となっている https://moov.ooo/article/5d3598ec4fab512387ec2428

※超音波で神泡を作るサーバも活用、泡がクリーミーに

Posted by funa : 09:36 PM | Gadget | Comment (0) | Trackback (0)


July 19, 2020

Mafia
【1時間で分かる】P&G流マーケティングの教科書
https://note.com/141ishii/n/na578fec5ef84

マーケティング=Jobの発見と解決に至る一連のプロセス=経営
戦略=目的達成の為にリソースを何に使うのか、という選択
ターゲットを戦略の秀逸さと熱意で達成可能であると心からメンバーに思わせるリーダーシップこそが、ビジネスリーダーに求められている大きな役割
売り上げ=
①人口*認知率*購入率*購入個数*購入頻度*購入単価
②来店者数*来店者購入率*購入個数*購入単価*購入頻度
③A店舗売り上げ+B店舗売り上げ+C店舗売り上げ+D店舗売り上げ
④男性売り上げ+女性売り上げ
⑤X商品売り上げ+Y商品売り上げ+Z商品売り上げ
(1)が万能
認知率・購入率・購入単価の3つしか、究極的には戦略として会社のリソースをつぎ込むテリトリーは存在しない
 購入率を高めることがマーケターの至上命題
認知の質
1 Top of mind認知率 消費者が真っ先に思い浮かべるブランド認知
2 Unaided認知率 消費者がヒントなしで覚えているブランド認知
3 Aided認知率 こちらからブランド名を言うと思い出せるブランド認知
実際に売り上げとの相関が最も高いのはTop of mind認知率
価格とブランド選好はコインの表と裏の関係
 結局はブランド選好を高める以外に長期的には道はない
優れたブランドは顧客の"Job (片付けるべき仕事)"を解決している
WHO(フー)ではなく”不(フ)”が大事
 不とは、不経済・不便・不都合・不満・不安、など人が解消したいと感じる課題
Jobは顧客との徹底的な会話の中で発見されなければなりません
消費者が自ら語れるJob=誰でも簡単にわかることはもはや残されていない
消費者にダイレクトにJobを聞くのではなく、実際に取った行動に関して質問をし、Jobの仮説を立てる
定性調査(Qualitative Research、1on1インタビュー調査など)を重ねることで顧客の真のJobの仮説を立てる
Jobの総量=Jobを抱えている人の人数×Jobの深刻度 Jobの総量が高いものに優先的に
何かを売りたいと思ったときに、製品自体をダイレクトに売り込むのは下策
ブランドの売り物What=1)Point Of Difference(自社の売りポイント、以下POD)、2)コミュニケーションの2つから構成
熱狂的なファンを持つブランドは、ファンが新たな顧客を連れてくる
謳っていること=コミュニケーションは必ず知覚可能なレベルで消費者が納得できるものでなければなりません
5Aモデル
Aware(認知)・・・ブランドを知っている
Appeal(訴求)・・・ブランドを好きだ
Ask(調査)・・・比較・検討した結果良いと思う
Act(行動・購入)・・・使う・購入する
Advocate(推奨)・・・他者に推奨する
実行(HOW)は多岐に渡りメディア接触だけに限りません。イベントや、店頭でのプロモーション(デパ地下の試食など)なども含まれ戦略的提携、タクシーでファブリーズ提携
戦略ーWHOーWHATーHOW
消費者が唯一見ることができる戦略は実行だけだ

========
ネットで実際に取った行動に関して分析

Posted by funa : 06:49 PM | Column | Comment (0) | Trackback (0)


May 10, 2020

BANG X BOO - Mobility

■設定
ルータにMacアドレス(一時MACアドレス認証を無効でも)
英語101/102?キーボード+MS IME
Ramdisk無料版 300MB?
調整する-> https://www.bangboo.com/cms/blog/search.php?search=insco
メモ帳をタスクバーに、使うのはメモ帳とエッジだけ
追加はImaging EdgeとRekordboxのみか
Bluetoothスピーカ:設定>デバイス>Bluetooth>Bluetoothまたはその他のデバイスを追加する

※処理もWifiも遅いので、アプリ使用時はwifiを切るといいかも

■仕様
Jumper EZbook S4 8128 
14インチノートブックPC FHDスクリーンラップトップインテルGemini Lake N4100 Ultrabook (8GRAM, 128G)

◎Intel Gemini lake N4100 Quad Coreプロセッサー 
◎Microsoft Windows 10 Home OS
◎14インチ1920 x 1080 FHDスクリーン、Silm Bezelデザイン
◎RAM + ROM:8GB DDR4L 128GB eMMC、
◎ネットワーク:デュアルバンド2.4G / 5GHz Wifi、802.11 AC、Bluetooth 4.2
◎Intel HD Graphics 600 Core Graphics Frequency
◎4800mAhポリマーバッテリー

インターフェース:
1×DC
1×USB2.0
1×USB3.0
1×ヘッドホンジャック
1×TFカードリーダー
1×ミニHDMI

パッケージの内容
1 xJumper EZbook S4ノートPC
1 x 充電器
1 xユーザーマニュアル
1 x日本語のキーボードステッカー

カラー: オーロラシルバー
サイズ: 約328mm×215mm×15mm(最も薄い部分は約8mm)
重さ: 約1.25Kg

///ステッカー
透明のものでも、透明塩ビ、透明PETがあった。違いを知らんので曲がりそうな透明塩ビを選んだ
Sacra corona unita mobile

Posted by funa : 11:27 AM | Gadget | Comment (0) | Trackback (0)


April 27, 2020

僕の考えた最強のお風呂場
4月か5月GWに実施、10月でもいいが気温が高い日は湿度も高いかも
 裸で作業ができる位の温度で湿度が低い、換気扇を回しておけば半日でカラカラに

0日目:買う
 防カビ仕様のシリコンシーラント(通販)
 ヘラ、マスキングテープ、ブリーチ、小麦粉、ドメスト
 https://www.amazon.co.jp/dp/B001HPKSNG
 https://www.amazon.co.jp/dp/B000TGHQU2/
 https://www.monotaro.com/g/01300964/
1日目:カビが見えるパッキンに塩素系漂白剤ペースト>ふき取りを何度か
 塩素が漂うのでキツイ、部分的に小分けにしてて何日も掛けてやるのがいい
5日目:殺菌的掃除して乾かす(天井は半分ずつ掃除して洗い流す)
 ゴーグル、キャップ、ゴム手、ブラシ、ドメストが粘度があって扱いやすい
6日目:再度カビが見えるパッキンに塩素系漂白剤ペースト>ふき取り
7日目:マスキングしてシーリング(フロ停止)
8日目:乾燥(フロ停止)

――――――――――――――――――――
ブリーチ+小麦粉でペーストにする
タオルで拭いて水気を無くす
https://yourmystar.jp/c0_1/c1_5/articles/bath-clean-up-mold/
 →白く見えるのが綺麗になってる感があっていい

====================
タッチレスセンサー自動水栓化したい、2栓を1栓にできるのか?現状KVK
高さは35cmまで、蛇口は現状は+10cm位くらい、希望は+20cm、+30cmまでOK
左右首振りも要る

2つ穴があるタイプはツーホール、台もあるので台付ツーホール、一つの水栓はワンホール
ツーホールはツーホールが良いらしいが防水キャップで防ぐ?
水の方にU字水栓と浄水器をつけて、湯の方にセンサー水栓を付ける?
https://0120656889.net/kitchen/kitchen3/
https://miraie.me/articles/339/

ツーホールなら間隔は204mmか102mmみたいだ、取付穴は33-39mmでまれに55mm
http://kvk-kitchen-suisen.seesaa.net/article/442811957.html
https://my-best.com/7788

水栓レンチが必要そう
https://www.monotaro.com/g/01448748/
https://www.monotaro.com/g/00364517/
https://www.monotaro.com/g/00370313/
https://www.monotaro.com/g/00537201/
https://www.monotaro.com/g/00442120/?t.q=KPS955

Posted by funa : 12:40 PM | Column | Comment (0) | Trackback (0)


April 21, 2020

Dexie
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script src="dexie.js"></script>
<script>
var db = new Dexie("schedule_db");
db.version(1).stores({
schedule: '++id,name,key,value,reg_date'
});

/* input部分 */
function saveData(mes){
alert(mes);
db.schedule.add({name: "ver1.0", key: document.getElementById("inputKey").value, value: document.getElementById("inputValue").value, reg_date: getCurrentTime()}).then(function(){
return db.schedule.get('aaa');
}).then(function(){
db.schedule.toArray().then(function(records){
alert(JSON.stringify(records));
}).catch(function(error) {
alert ("Ooops: " + error);
});
drawTable();
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function getDate(mes){
alert(mes);
db.schedule.get({key: "sss", value: "ccc"}).then (function(records){
if(records == null || records == ''){
alert ("No data found");
}else{
alert (JSON.stringify(records));
console.log(records);
alert(records.reg_date);
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}

function delItem(mes, id){
alert(mes);
db.schedule.where({id: id}).delete().then (function(records){
drawTable();
}).catch(function(error) {
alert ("Ooops: " + error);
});
}

function getCurrentTime() {
var now = new Date();
var res = "" + now.getFullYear() + "" + padZero(now.getMonth() + 1) + 
"" + padZero(now.getDate()) + "_" + padZero(now.getHours()) + ":" + 
padZero(now.getMinutes()) + ":" + padZero(now.getSeconds());
return res;
}
function padZero(num) {
var result;
if (num < 10) {
result = "0" + num;
} else {
result = "" + num;
}
return result;
}
</script>
</head>
<body>
<br>
Key<input name="key" value="" id="inputKey"> Value<input name="value" value="" id="inputValue"><button type="button" onclick="saveData('... seving your data into the DB')">Save</button><br>
<br>
<a href="javascript:getDate('

#################

);
if(key2 !== 'name'){
var th = document.createElement('th');
th.textContent = key2;
tr.appendChild(th);
}
}
}
if(i == 1){
table.appendChild(tr);
var tr = document.createElement('tr');
}
for(const key2 in records[key]) {
console.log(records[key][key2]);
if(key2 !== 'name'){
var td = document.createElement('td');
td.textContent = records[key][key2];
tr.appendChild(td);
}
}
table.appendChild(tr);
}
document.getElementById('maintable').appendChild(table);
}).catch(function(error) {
alert ("Ooops: " + error);
}
);
*/

drawTable();
function drawTable(){
//固定出力
var table2 = document.createElement('table');
table2.border = "1";
table2.width = "75%";
//ヘッダー設定
var tr_head = document.createElement('tr');
var th = document.createElement('th');
th.textContent = 'id';
tr_head.appendChild(th);
var th = document.createElement('th');
th.textContent = 'key';
tr_head.appendChild(th);
var th = document.createElement('th');
th.textContent = 'value';
tr_head.appendChild(th);
var th = document.createElement('th');
th.textContent = '';
tr_head.appendChild(th);
//ヘッダー追加
table2.appendChild(tr_head);

db.schedule.toArray().then(function(records){
for(const key in records) {
var tr = document.createElement('tr');
var td = document.createElement('td');
td.textContent = records[key]['id'];
tr.appendChild(td);
var td = document.createElement('td');
td.textContent = records[key]['key'];
tr.appendChild(td);
var td = document.createElement('td');
td.textContent = records[key]['value'];
tr.appendChild(td);
var td = document.createElement('td');
var text_menu = '<a href="javascript:delItem(\\'This will be deleted...\\', ' + records[key]['id'] + ')">Del</a>';
//リンクを追加
td.insertAdjacentHTML('afterbegin', text_menu);
tr.appendChild(td);
  
  


//行追加
table2.appendChild(tr);
}
//要素の中身を削除し掃除
document.getElementById('maintable2').textContent = null;
//追加
document.getElementById('maintable2').appendChild(table2);
}).catch(function(error) {
alert ("Ooops: " + error);
}
);
}
</script>
<br>
<br>
----------------<br>
<a href="./indexeddb_dexie_form.html">indexeddb_dexie_form.html</a><br>
<a href="./indexeddb_dexie_form2.html">indexeddb_dexie_form2.html</a><br>
<a href="./indexeddb_dexie_addupdate.html">indexeddb_dexie_addupdate.html</a><br>
<a href="./indexeddb_dexie_putupdate.html">indexeddb_dexie_putupdate.html</a><br>

</body>
</html>

==========

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script src="dexie.js"></script>
<script>
var db = new Dexie("schedule_db");
db.version(1).stores({
schedule: '++id,key,value,reg_date'
});

/* input部分 */
function saveData(mes){
alert(mes);
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);
});
}
function getDate(mes){
alert(mes);
//JSON固定で検索
db.schedule.get({key: "sss", value: "ccc"}).then (function(records){
if(records == null || records == ''){
alert ("No data found");
}else{
alert (JSON.stringify(records));
console.log(records);
alert(records.reg_date);
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}

function getCurrentTime() {
var now = new Date();
var res = "" + now.getFullYear() + "" + padZero(now.getMonth() + 1) + 
"" + padZero(now.getDate()) + "_" + padZero(now.getHours()) + ":" + 
padZero(now.getMinutes()) + ":" + padZer


#################


... geting the date from your DB')">Get the date stored at localstrage</a><br>
<br>
https://qiita.com/butakoma/items/2c1c956b63fcf956a137<br>
https://qiita.com/sachiko-kame/items/aebd618ef39de982ed7b<br>
https://ja.javascript.info/indexeddb<br>
<a href="https://unpkg.com/dexie@3.0.2/dist/dexie.js">https://unpkg.com/dexie@3.0.2/dist/dexie.js</a><br>
https://b-risk.jp/blog/2020/07/indexeddb_and_dexie/<br>
https://blog.katsubemakito.net/html5/indexeddb1<br>
<br>
<br>
レベル schedule_db > schedule(table?) > json<br>
削除のレベルは表、行、DB?<br>
ローカルではページごとにDBが違う???<br>
ブラウザシャットダウンでデータが消えるがグループポリシーの為?<br>
<br>
stores()で一番最初に来るのが「主キー」<br>
putは追加しあれば更新、addは追加のみで同キーがあればエラー<br>
first()やlimit()やlast()<br>
toArray()ではobjが返るがobjは配列で引数0をつけてアクセス obj[0]<br>
get('aaa')はkey=aaaの値を持つ最初の行、get({key: "sss", value: "ccc"})で条件付可<br>
<br>
JSでAタグリンクを挿入するにはinsertAdjacentHTMLがよい<br>
生成したタグを追加する前に掃除するにはdocument.getElementById('xx').textContent = null;<br>
<br>

<div id ='maintable'></div>
<div id ='maintable2'></div>
<script>
/*
//コンソール出力
db.schedule.toArray().then(function(records){
let i = 0;
for(const key in records) {
i++;
for(const key2 in records[key]) {
if(i == 1){
console.log(key2);
}
console.log(records[key][key2]);
}
}
}).catch(function(error) {
alert ("Ooops: " + error);
}
);

//全出力
var table = document.createElement('table');
table.border = "1";
table.width = "75%";
db.schedule.toArray().then(function(records){
let i = 0;
for(const key in records) {
i++;
var tr = document.createElement('tr');
for(const key2 in records[key]) {
if(i == 1){
console.log(key2


#################


o(now.getSeconds());
return res;
}
function padZero(num) {
var result;
if (num < 10) {
result = "0" + num;
} else {
result = "" + num;
}
return result;
}
</script>
</head>
<body>
<br>
Key<input name="key" value="" id="inputKey"> Value<input name="value" value="" id="inputValue"><button type="button" onclick="saveData('... saving your data into the DB')">Save</button><br>
<br>
<a href="javascript:getDate('... geting the date from your DB')">Get the date stored at localstrage</a><br>
<br>
https://qiita.com/butakoma/items/2c1c956b63fcf956a137<br>
https://qiita.com/sachiko-kame/items/aebd618ef39de982ed7b<br>
https://ja.javascript.info/indexeddb<br>
<a href="https://unpkg.com/dexie@3.0.2/dist/dexie.js">https://unpkg.com/dexie@3.0.2/dist/dexie.js</a><br>
https://b-risk.jp/blog/2020/07/indexeddb_and_dexie/<br>
<br>
<br>
レベル schedule_db > schedule(table?) > json<br>
削除のレベルは表、行、DB?<br>
ローカルではページごとにDBが違う<br>
<br>
putは追加しあれば更新、addは追加のみで同キーがあればエラー<br>
first()やlimit()やlast()<br>
toArray()ではobjが返るがobjは配列で引数0をつけてアクセス obj[0]<br>
<br>
get('aaa')はkey=aaaの値を持つ最初の行、get({key: "sss", value: "ccc"})で条件付可<br>
<br>

<br>
<br>
----------------<br>
<a href="./indexeddb_dexie_form.html">indexeddb_dexie_form.html</a><br>
<a href="./indexeddb_dexie_form2.html">indexeddb_dexie_form2.html</a><br>
<a href="./indexeddb_dexie_addupdate.html">indexeddb_dexie_addupdate.html</a><br>
<a href="./indexeddb_dexie_putupdate.html">indexeddb_dexie_putupdate.html</a><br>

</body>
</html>

================


<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script src="dexie.js"></script>
<script>
var db = new Dexie("schedule_db");
db.version(1).stores({
schedule: '++id,name,key,reg_date'
});

/* リンク部分 */
function setDate(m


#################


es){
alert(mes);
db.schedule.add({name: "sute", site: "pim", reg_date: getCurrentTime()}).then (function(id){
alert(id);
return db.schedule.get(id);
}).then(function (schedule) {
alert ("Date was set at " + schedule.reg_date);
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function delDate(mes){
alert(mes);
db.schedule.where({name: "sute"}).delete().then (function(){
return db.schedule.toArray();
}).then(function (records) {
if(records == null || records == ''){
alert ("No data found");
}else{
alert (records);
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function getDate(mes){
alert(mes);
db.schedule.where('name').equals('sute').toArray().then (function(records){
if(records == null || records == ''){
alert ("No data found");
}else{
console.log(records);
for (let i in records) {
alert(i + ' item has ' + records[i].reg_date);
}
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}

function getCurrentTime() {
var now = new Date();
var res = "" + now.getFullYear() + "" + padZero(now.getMonth() + 1) + 
"" + padZero(now.getDate()) + "_" + padZero(now.getHours()) + ":" + 
padZero(now.getMinutes()) + ":" + padZero(now.getSeconds());
return res;
}
function padZero(num) {
var result;
if (num < 10) {
result = "0" + num;
} else {
result = "" + num;
}
return result;
}
</script>
</head>
<body>

<a href="javascript:setDate('... setting the date into your DB')">Set date for localstrage</a><br>
<a href="javascript:delDate('... deleting the date into your DB')">Delete date for localstrage</a><br>
<a href="javascript:getDate('... geting the date from your DB')">Get the date stored at localstrage</a><br>
キーパスが自動で設定されこのスクリプトはnameがキーパス(一番最初のカラムだから?)<br>
キーパスの値が同じだとAddができない、例name=sute、++id


#################


es){
alert(mes);
db.schedule.add({name: "sute", site: "pim", reg_date: getCurrentTime()}).then (function(id){
alert(id);
return db.schedule.get(id);
}).then(function (schedule) {
alert ("Date was set at " + schedule.reg_date);
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function delDate(mes){
alert(mes);
db.schedule.where({name: "sute"}).delete().then (function(){
return db.schedule.toArray();
}).then(function (records) {
if(records == null || records == ''){
alert ("No data found");
}else{
alert (records);
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function getDate(mes){
alert(mes);
db.schedule.where('name').equals('sute').toArray().then (function(records){
if(records == null || records == ''){
alert ("No data found");
}else{
console.log(records);
for (let i in records) {
alert(i + ' item has ' + records[i].reg_date);
}
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}

function getCurrentTime() {
var now = new Date();
var res = "" + now.getFullYear() + "" + padZero(now.getMonth() + 1) + 
"" + padZero(now.getDate()) + "_" + padZero(now.getHours()) + ":" + 
padZero(now.getMinutes()) + ":" + padZero(now.getSeconds());
return res;
}
function padZero(num) {
var result;
if (num < 10) {
result = "0" + num;
} else {
result = "" + num;
}
return result;
}
</script>
</head>
<body>

<a href="javascript:setDate('... setting the date into your DB')">Set date for localstrage</a><br>
<a href="javascript:delDate('... deleting the date into your DB')">Delete date for localstrage</a><br>
<a href="javascript:getDate('... geting the date from your DB')">Get the date stored at localstrage</a><br>
キーパスが自動で設定されこのスクリプトはnameがキーパス(一番最初のカラムだから?)<br>
キーパスの値が同じだとAddができない、例name=sute、++id


#################




を使う

<br>
<br>
----------------<br>
<a href="./indexeddb_dexie_form.html">indexeddb_dexie_form.html</a><br>
<a href="./indexeddb_dexie_form2.html">indexeddb_dexie_form2.html</a><br>
<a href="./indexeddb_dexie_addupdate.html">indexeddb_dexie_addupdate.html</a><br>
<a href="./indexeddb_dexie_putupdate.html">indexeddb_dexie_putupdate.html</a><br>
</body>
</html>

==================

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<script src="dexie.js"></script>
<script>
var db = new Dexie("schedule_db");
db.version(1).stores({
schedule: 'name,key,reg_date'
});

/* リンク部分 */
function setDate(mes){
alert(mes);
db.schedule.put({name: "sute", site: "pim", reg_date: getCurrentTime()}).then (function(){
return db.schedule.get('sute');
}).then(function (schedule) {
alert ("Date was set at " + schedule.reg_date);
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function delDate(mes){
alert(mes);
db.schedule.where({name: "sute"}).delete().then (function(){
return db.schedule.toArray();
}).then(function (records) {
if(records == null || records == ''){
alert ("No data found");
}else{
alert (records);
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function getDate(mes){
alert(mes);
db.schedule.where('name').equals('sute').toArray().then (function(records){
if(records == null || records == ''){
alert ("No data found");
}else{
alert (JSON.stringify(records));
console.log(records);
alert(records[0].reg_date);
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}
function getDateFirst(mes){
alert(mes);
db.schedule.where('name').equals('sute').first().then (function(records){
if(records == null || records == ''){
alert ("No data found");
}else{
alert (records.reg_date);
}
}).catch(function(error) {
alert ("Ooops: " + error);
});
}

function getCurrentTime() {
v

#################



ar now = new Date();
var res = "" + now.getFullYear() + "" + padZero(now.getMonth() + 1) + 
"" + padZero(now.getDate()) + "_" + padZero(now.getHours()) + ":" + 
padZero(now.getMinutes()) + ":" + padZero(now.getSeconds());
return res;
}
function padZero(num) {
var result;
if (num < 10) {
result = "0" + num;
} else {
result = "" + num;
}
return result;
}
</script>
</head>
<body>

<a href="javascript:setDate('... setting the date into your DB')">Set date for localstrage</a><br>
<a href="javascript:delDate('... deleting the date into your DB')">Delete date for localstrage</a><br>
<a href="javascript:getDate('... geting the date from your DB')">Get the date stored at localstrage</a><br>
クリックしたら日付がアップデートされる

<br>
<br>
----------------<br>
<a href="./indexeddb_dexie_form.html">indexeddb_dexie_form.html</a><br>
<a href="./indexeddb_dexie_form2.html">indexeddb_dexie_form2.html</a><br>
<a href="./indexeddb_dexie_addupdate.html">indexeddb_dexie_addupdate.html</a><br>
<a href="./indexeddb_dexie_putupdate.html">indexeddb_dexie_putupdate.html</a><br>
</body>
</html>

Posted by funa : 12:00 AM | Web | Comment (0) | Trackback (0)


April 20, 2020

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
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

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

/// 結局
キャッシュを弄くってオフラインでもゴニョゴニョできる、先読みも可、プッシュ通知も可、モバイル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キャッシュ戦略>保存日はLocalstrage(indexedbかと)に置き、HTMLの有効期限は1日にする
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

通知自体はServiceWorkerが不要、下記2ステップでOK
 Notification.requestPermission(function(status) { 許可を取り
 var n = new Notification(theTitle,options); 通知を送る

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

/// mmm
キャッシュが強い(指定以外もキャッシュ、手動でCookie/Serviceworker削除、くせ強)
 どの範囲をキャッシュするか、キャッシュページの案内方法(お気に入りに入れる?)
サイトページを開いてなくても通知を出すのはServiceworkerいるので要調査(Firebase以外でやりたい)

Posted by funa : 06:00 PM | Web | Comment (3) | Trackback (0)


April 13, 2020

Can't touch this

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

画像
https://twitter.com/hideki0103/status/1249702599344840705
ハイジーンハンド

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

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

Posted by funa : 11:30 PM | Gadget | Comment (0) | Trackback (0)


April 1, 2020

G Suite
https://www.softbank.jp/biz/cloud/google/gsuite/
中途半端に移行するよりGsuite強制だと社員が勝手に使うシャドーITをなくせる
影響力のある社員の抵抗がないように、部長の関心協力→Topからのメッセージ
 デモを実施する(利点、コラボレーション、使い方)
戦略・組織の把握>パイロットユーザ(全社員の5%をGoogleガイド)>エバンジェリスト公募>全社
 画面や機能がどんどん変わる、また簡単になっていく、カチッと決め打ちはしにくい
 Gmail (アーカイブして検索で、容量無制限)
 カレンダー (会議スケジューリングのお勧めがある)
 Hangouts Chat (1to1かグループでチャット、共同編集、Voiceがあれば電話も、Botも)
 ハングアウトMeet (ビデオ通話)
 ドライブ (同時編集ができる、ここでドキュメントを作ると相互最新更新)
  ドキュメント (Word/PDF/html/txt等読込書出、AIで画像やグラフやデザインをクリックだけで、無制限変更履歴)
  スプレッドシート (Excelを変換して使う等 https://support.google.com/docs/answer/9331167?hl=ja )
  スライド (ブラウザでプレゼンテーション、PPT等から変換可、オフライン化も可だが問題がありそう)
 Currents (Google+社内SNS、フォロー、投稿、サークル、コミュニティ)
 フォーム (アンケート、クイズ/テスト、連絡先を含め申し込み欄)
 Keep (メモ:音声入力や写真も、リマインダー、Gmailユーザ共有)
 Jamboard (ホワイトボード、複数個所やマルチデバイスやGsuite連携)
 サイト (一般公開HP、イントラ)
 Apps script (aka GAS、マクロ、https://tonari-it.com/google-apps-script-manual/ )
 Cloud Search (Gsuite以外にもコネクタでAWSやMS系、Jira、Sap、Salesforce等も検索可)
 Vault (元が消されても全データ保存されている、管理者)
 管理コンソール (ユーザグループ管理/SSO/MFA、監査ログ、MDM、セキュリティ系レポート、移行ツール/API/Oauth/OpenID)
https://gsuite.google.co.jp/intl/ja/features/ 無料試用14日間

///Google Admin 管理コンソール
上ナビのタスクにダウンロード等がある
"ダッシュボード" ?
"ユーザ"でリストをCSVでDLし、一括アップロードもできる
 メールアドレス確認のメールが来ていた
"グループ"はグループオーナ/管理者/メンバー/組織全体/外部でアクセス管理
"組織部門"をツリー状に作成できる
"リソース管理"でビルディング/会議室/設備等々を設定
 カレンダーでの会議室の自動予約キャンセル(使われていない会議室が解放)
"ディレクトリ設定"で連絡先の共有、外部ディレクトリ共有の設定
"デバイス管理"でモバイル/Chromeデバイス/ブラウザ/Googleミーティングハード/エンドポイント/Jamboard
 よく分からない
"アプリ"で全ユーザONかOffか/SAMLアプリの追加
"セキュリティ"で2段階認証/アラートセンタ/ルール/PWポリシー/安全性の低いアプリへ接続/PW忘れのアカウント復元/PW強度監視/従業員IDでログイン時本人確認/3rdパーティSSO設定/Android用EMMプロバイダトークン/高度な保護機能/Context aware access/セッション時間/Cloud ConsoleとCloud SDKのセッション/OAuthのユーザーデータへのACL/API許可
"レポート" ?
"お支払い"で課金の管理、ユーザ数x費用/ドメイン登録費用/G Suite Enterprise/Voice Standard/Cloud Identity
"会社プロフィール"で管理者ID/サポート連絡先/タイムゾーン/即時か計画リリース/Googleからのお知らせ/ロゴ設定/追加ストレージ/コンプラ連絡先/データリージョン米か欧/会社自体のアカウント/カスタムURL
"管理者ロール"で特権/ヘルプデスク/サービス/ユーザ/モバイル等の権限者を設定
"ドメイン"でドメイン契約の設定/他のドメインで使用するためのドメインのホワイトリスト
"データ移行"でO365/Exchange等のメール/カレンダ/連絡先を移行できる
"サポート"でチャットできる
どうやってサポート?リモート?ファイル共有はできるのか?
ファイルが保存されているかどうか分かりにくい
保存が遅い場合も、待ってもう一度確認、全ての操作が記録されているはず

Gmailヘルプ https://support.google.com/?
各アプリでもヘルプ?があるので確認できる、FAQみたいなのも表示される
設定ギア>ここでほぼ設定している
Gmail
 迷惑メール/削除したメールは、[ゴミ箱] に 30 日間保存され、その後完全に削除
 メールはスレッドにまとめられ[削除] するとスレッド全体が削除
 Gmail で使用できる検索演算子 https://support.google.com/mail/answer/7190?hl=ja
マイドライブ
 組織内でもグループ内でもWeb公開もURLでも編集やコメントも細かく共有設定ができる
 ファイルとしてDL、それをマイドライブにアップしG suite化できる
ドキュメント
 提案モードで修正→ツール>編集の提案の確認orチェック で承認ができる
スライド
 プレゼンター(マウス↓でメニュー表示、ノートや質問)、オンラインプレゼンは不可
コレクション
 +のURLのみ集められる?モバイルやPCは駄目かも
Keep
 メモの共有を外部にするとメールが送信
カレンダー
 デスクトップ通知は各種許可設定があり調べよ、Chromeの機能 chrome://flags/#enable-native-notifications

何をサルベージできるのか不明:メールログ、Vaultで削除ファイルは見れる?

G-suiteはオフラインでも使える
 管理者側設定:許可設定
 ユーザ側設定:オフライン許可設定

O365とのプロコン
 G-suiteは少し安い、使用が簡単だがプア、共有や共同編集に優位、オフラインで機能が弱い

Posted by funa : 12:01 AM | Web | Comment (0) | Trackback (0)


Navi: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19  >
PhotoGallery


TWITTER
Search

Mobile
QR for cellphone  QR for smart phone
For mobile click here
For smart phone click here
Popular Page
#1Web
#2Hiace 200
#3Gadget
#4The beginning of CSSレイアウト
#5Column
#6Web font test
#7Ora Ora Ora Ora Ora
#8Wifi cam
#9みたらし団子
#10Arcade Controller
#11G Suite
#12PC SPEC 2012.8
#13Javascript
#14REMIX DTM DAW - Acid
#15RSS Radio
#16Optimost
#17通話SIM
#18Attachment
#19Summer time blues
#20Enigma
#21Git
#22Warning!! Page Expired.
#23Speaker
#24Darwinian Theory Of Evolution
#25AV首相
#26htaccess mod_rewite
#27/// BANGBOO BLOG /// From 2016-01-01 To 2016-01-31
#28竹書房
#29F☆ck CSS
#30Automobile Inspection
#31No ID
#32Win7 / Win10 Insco
#33Speaker
#34Arcade Controller
#35Agile
#36G Suite
#37Personal Information Privacy Act
#38Europe
#39Warning!! Page Expired.
#40GoogleMap Moblile
#41CSS Selectors
#42MySQL DB Database
#43Ant
#44☆od damnit
#45Teeth Teeth
#46Itinerary with a eurail pass
#47PHP Developer
#48Affiliate
#49/// BANGBOO BLOG /// From 2019-01-01 To 2019-01-31
#50/// BANGBOO BLOG /// From 2019-09-01 To 2019-09-30
#51/// BANGBOO BLOG /// On 2020-03-01
#52/// BANGBOO BLOG /// On 2020-04-01
#53Windows env tips
#54恐慌からの脱出方法
#55MARUTAI
#56A Rainbow Between Clouds‏
#57ER
#58PDF in cellphone with microSD
#59DJ
#60ICOCA
#61Departures
#62Update your home page
#63CSS Grid
#64恐慌からの脱出方法
#65ハチロクカフェ
#66/// BANGBOO BLOG /// On 2016-03-31
#67/// BANGBOO BLOG /// From 2017-02-01 To 2017-02-28
#68/// BANGBOO BLOG /// From 2019-07-01 To 2019-07-31
#69/// BANGBOO BLOG /// From 2019-10-01 To 2019-10-31
#70/// BANGBOO BLOG /// On 2020-01-21
#71Bike
#72Where Hiphop lives!!
#73The team that always wins
#74Tora Tora Tora
#75Blog Ping
#76無料ストレージ
#77jQuery - write less, do more.
#78Adobe Premire6.0 (Guru R.I.P.)
#79PC SPEC 2007.7
#80Google Sitemap
#81Information privacy & antispam law
#82Wifi security camera with solar panel & small battery
#83Hope get back to normal
#84Vice versa
#85ハイエースのメンテ
#86Camoufla
#87α7Ⅱ
#88Jack up Hiace
#89Fucking tire
#90Big D
#914 Pole Plug
#925-year-old shit
#93Emancipation Proclamation
#94Windows env tips
#95Meritocracy
#96Focus zone
#97Raspberry Pi
#98Mind Control
#99Interview
#100Branding Excellent
Category
Recent Entry
Trackback
Comment
Archive
<     October 2020     >
Sun Mon Tue Wed Thi Fri Sat
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Link