January 11, 2021
I ain't update nothing yet
「今年2021年は間違いなく株価が暴落する」との見出し→日経が下がらない場合は「予想が外れたとして私の株価が下がるため間違いはない」のだと
個人的にはAIもデータも信じていない、やっぱりデカい絵より個の可能性が良いという勘、アフターコロナ操り人形ではないぞと人々はなるか
https://note.com/naoto111/n/nebd8adf8e69e
産業革命の蒸気機関から電力を前提としたビジネスの間には大きな飛躍、機械からソフトウェアへのパラダイムシフト。ルーティンを変えたいが、いちど内面化された規範は取り出して再評価することが非常に難しくルーティンを受益者側が認知し、改善することはとてもむずかしい人の問題
■アフターデジタル2 UXと自由
Line payとか決済の感じを言っている、キックボードな感じではなかった
決済>サービサー>メーカ のヒエラルキーに
Line pay、Pay2、dとかが総合サービスとなりメーカを操る
取得したデータがユーザに価値を与える、UXとして還元、不義理しない責任があると中国
顧客を知るデータ(UX->data->AI)→体験型サービス(世界観、コア体験)
高頻度接点>成長シナリオ>体験を自動化するシステム(リコメンド、VIP)
属性データは終わり行動データ→状況ターゲティング
┣タイミング(ライフタイム、刹那)
┗好きと思われるもの
AI(行動パターンのセグメント、仮説の結果分析とか)
UX品質:スタンダード(便利か、楽か、使いやすいか、楽しいか)
バリュージャーニー(アプリ、店舗、イベント、コールセンター)の各接点のコンセプトで顧客支援→ファン化
デジタル接点をメインにリアルをツール的に使う、丸井は売らない店舗
コスト削減(流通、マーケ、金融、インフラ)
UXの改善、新しいUX→DX(ペインポイントから未来を創る)
日本はホワイトリスト、中国米国はブラックリスト、日本はグレーは黒とされ許されない、中国はグレーは黒ではない(日本は成文法、米国は判例主義との考えもある)
スタバは固執せずにデリをし新しい形でブランディングをした、発想の転換
逆にオフラインの方が新規獲得コストが安く逆転が見られる、自販機出すとか
会社の歴史のDNAを引き継ぐ(重要人物を巻き込む)
ダメ:市場にすでに代替がある、商品起点でユーザ起点でない、社内政治でユーザ視点でない
スターバックスラテwithハニーホイップ venti、量が多く後からガンガン冴えて寝れん、スタバは店が温かくてベンティで3時間はイケるがグランデから2shotらしいのでトール一択では、ガストの大盛ポテトと赤ワインx2とどっちが体験が良いか:両方いいな
スタバ丼(写真で2つ映ってたらhot/iceだが1つならどっちか)
ラテ/ムースフォームラテ/カプチーノ/アーモンドラテ
ブルーボトル
https://tokyo-cafeblog.com/bluebottlecoffee-menu/
浅煎りなのでカフェラテかスチームが多いカプチーノの2択+ワッフル500 or 何か甘味では、バター匂いがヤバい、ドリップのブレンド行ったが浅煎り薄目酸味でブラクでも悪くなかった
=====
2019-12-08に投稿 Losing your job
仮にAI自体に先進性がなかったとしても、仕事が無くなることは社会的インパクトがある
過去10年はEndUserComputingでスピード化が勝負だったと思う、次は勝負ではなくソーシャルイシューの解決だと見た、社会問題を解決できるトコロが生き残る切符をもらえる感じ、AIやクラウドで商売臭が強すぎて惑わされるが
早くより良いサービスが提供ができる、コスト/人を少なくできる、やらなければ他社にヤラれる
お金をかけてデータ検証をしても、そうしたとこのマネをすれば良い、デジタルはコピーできるし
無人化をしても店員の仕事が減るだけ、RPA
加点評価の制度を敷いても少しの損得が出るだけかも、根本的には何も変わらないかも
(DIDIでは評価が高いと単価が高いドライバーになる、評価は買収ができないようセンサー等の公平な指標を使う等)
AIでもツール自体はコモディティ化するので優位性はすぐになくなる
競合を見ておき自動運転、Amazon等の黒船が出てきても対応できるようにする
競争力の問題?古いやり方はダメなの?UXで負けると死ぬ、お金目茶掛からん?
腐す業界慣習を打開し、アパレルの在庫破棄とか、雇用や無駄な事を守ることより正しいこと、あるべきようにやる、M&Aや業界団体を通じて再編をするしか、中国ではアイデア商品が作られ日本Amazonで買えるし小回りを利かして大きなマーケットに行くのもできる、正しいことをするとマーケットが変わるかも知れないのもDXか
■アフターデジタル
オンライン後の理想を実現するだけ。デジタルで塗り替える、シェアリングエコノミー、逆にオンラインストアが店舗を持ち発送する等区別がない、スタバが古く新しいカフェが勝つかも、GoogleやAmazonのように未完成でも出しマーケットを取る。デジタルによる社内連携を変える、鉄道が郵便や新聞や銀行を作ったようにデジタルが何かを作るかも
Uber等のデリバリーが現れると店舗が不要、キャッシュレス決済で購入する意識が変わる>決済時間は減るので形に嵌められた対応より店員のエンターテイメントで選ばれる
中国の事例が多いが人口が多く世界の工場となっているから必然性があったのかも知れない
■Deep Tech
プロパンを軽く運ぶ装置を開発:古いビジネスを技術で改良、イノベーションのジレンマの先を行く、まあ何としても商品を作る意気込みではBy Productを商品化とか
■AI救国論
ある国をディスって炎上した人。ある種重要なことを言うと揚げ足を取られ村八分される場合がある。危険思想や儲け過ぎ、やっかみが理由。炎上マーケの場合もマッチポンプで画を描くので構造は同じではないか。AI、ロボ、英語を強調している、また若者こそ優秀、日本のITは変、日本には若い良い技術者がいない、給料が、受験システムがダメで高専がいいと主張。:社会システムの革新性が込みではあろうな、高学歴より高専の方がよりプラクティカルなのはプラクティカルで育ったので当たり前では
黒船になる輸出できるもの、マネのできないもの は脅威になる
経験や勘ではなくデータ(レーシングもデータを使うがある程度からは数値より経験、無いデータは要るがデータ頼りとは情けない)
アウトドアスポーツ用品店で改革(売り場の壁の高さ、動線分析、何故買わなかったのか)
データを持っていると商圏、購入金額、購入内容の予想ができ出店が簡単になる
管理側が被管理側をどう誘導するかという観点しかない
最前線で使用されるべきツールが管理側でしか使用されない、ボトムアップの時代は来ない?
どんなデータ、あるいは業務が必要かは現場が一番分かっているべきだが
DX化デジタルトランスフォーメーションで何を変えるか、古いものをデジタル化するだけ?
現業務にデジタルを適用>リアルとデジタルをUXに基づき融合>デジタルで収益構造を変える
デジタル的マーケティング、シェアリングとか
人間を変えるべきでは?人間自体が一番変わる
果てし無く記憶力がある、42kmを誰もが2時間で走れる、空を飛べると世界が変わる
組織の力を変える
効率やコスパや低価格、かつスタイルがCoolなもの、ポケモンゴーのような流行るマーケ仕組みを入れる(人が溜まる、列を作る)、AIも所詮バズワード
面倒なことはAIにやらせるというスキルは取得すべき
DX意味わからん。「IT革命」と何が違うの?という話|広木大地(日本CTO協会理事/レクター取締役)|note
ナニガ安く簡単になったか分からないと駄目→どう動けばいいか知る→突然儲けの出るビジネスがなくなるかも
=====
2018-04-30に投稿 Smart contract, AI & Emo
■AI雑感
アルゴリズムが鍵、ロジックをどうプログラムするか考え方が変わるとなると手を動かしてスキルを取得しておかないとな、面倒なことはAIにやらせるのがいいかも知れない、始めと終わり以外の中間成果物的なところ
ディープラーニング:人間が理解しない形のデータが扱える(音声をウェーブでなくn次元の座標にする等しても良い)
マシーンラーニング:教師
機械学習の一連手順
1)データの可視化 :データの全体感を掴んで前処理の方針を決める
2)データの前処理 :予測精度が高くなるよう、データを綺麗にする
3)アルゴリズムの選定:データに対して適切なアルゴリズムを決める
4)モデルの学習 :コンピュータにデータの法則性を学習させる
5)モデルの検証 :出来上がったモデルの予測精度を確認する
AIが建築設計をし人間は間取りを選ぶだけ
癌画像診断、コンクリ護岸点検、バレーボールのセッター配球予測、経理伝票の仕分け入力
Adobe:類似例の自動生成
チャットボット:質問をすれば最適解を回答してくれる
HRテック(AIで評価/効果測定/異動/離職、経歴/性格/IQ/遺伝まで全自動)
性格も知識も偏った変/嫌なやつが一番企業に利益をもたらしている事が分かった
誰かを犠牲にするイノベーション、ジョブズのように人をビュンビュン振り回す人
普通の成績の子どもたちは高い協調性を求められ組織や集団の中で大過なく過ごす
https://bunshun.jp/articles/-/28229?page=4
(人間が時間を掛けて選択していることをAIにやらせる、多変量解析でもいいかも知らんが)
仕組みについてはここが良い感じかと
https://aizine.ai/algorithm-0315/
■Smart contract雑感
中央管理者を必要としない事のデメリットの癖が強い、用途が限られる
1)スケーラビリティ
ビットコインは総量がある
信頼性を担保するのにノード数が必要なくせに
履歴を持つくせにパフォーマンスを考えるとデータ量は多くできない
2)プライベートでもすべてオープンになる
仮想通貨により世界統一通貨を実現したり、紙幣やコインが不要になったり、IMFが不要になったりするかも知れない
中央政府が不要になる可能性
■エモ消費
世代的消費活動の括り、消費というかどうやって浪費させるかという手法
https://note.mu/wildriverpeace/n/necb216232d12
いいモノを作れば売れる、広告で認知させれば売れる、割引やオトクを提示すれば売れる、は既に終わっている
モノからコト/体験へなんて言われたのははるか昔の2000年の頃 CD→握手→入れあげ
モノは外に揃える、コトは外からの刺激(必要なモノは揃えてしまった、高品質の置いてけぼり感)
エモは入れ込む、特に女に(コトに刺激され、未完成なものに巻き込まれる)
精神的充足
コミュニティへの帰属意識
瞬間的につながる刹那のコミュニティ
今この瞬間の自己肯定感
https://comemo.io/entries/7261
家族は現状幸福度が高い。だからこそ現在の状態を維持したいという消費
幸福度の低いソロは、現状を打破するためにお金と時間を費やしたい
承認と達成感、また幸せ感の共有、帰属意識(体験/時間の共有、純粋な体験や時間でなく共有を含む)
幸せのマイレージを貯める行動
消費者の関与によって完成するからこそ「エモい」のです。ニコニコ超会議やコミケが盛り上がるのはそういうこと
エモいとは単に感動したというより、美的/切なさ、はたから見れば哀れみを含む
-----------
■Booランディング
コンテンツが重要というが、余程のことがないと人は中身を見ていない
人間の馬鹿なところを突くというのが商法の本質
品質とは何か、ブランドで差異化、多広告対応、一定期間の体験
Apple: 紛らわしい販売店、コピー商品を防ぐ
ハイネケン: ステーショナリー
幻冬舎: やりたいことをやってもいい。判断は極端であること
Posted by funa : 06:58 PM
| Column
| Comment (0)
| Trackback (0)
December 25, 2020
Promise
https://rightcode.co.jp/blog/information-technology/javascript-promise
https://rightcode.co.jp/blog/information-technology/javascript-async-await
http://www.tohoho-web.com/ex/promise.html
https://sbfl.net/blog/2016/07/13/simplifying-async-code-with-promise-and-async-await/
https://qiita.com/niusounds/items/37c1f9b021b62194e077
https://qiita.com/soarflat/items/1a9613e023200bbebcb3
非同期関数は処理の順序を制御できない問題があった、そこでPromise
↓
Promise オブジェクトは then(ok_callback, ng_callback) というメソッドを持ちます。
then() はPromise が成功または失敗になるまで処理を受け流し、
処理を.then()で繋げ順番を確保することが可能
成功時に ok_callback を、失敗時に ng_callback をコールバック関数として呼び出します
.then() は第一引数に成功時のコールバック関数、第二引数に失敗時のコールバック関数
.catch(ng_callback) は、.then(undefined, ng_callback) と同じ意味
.catch() は処理中に発生した throw をキャッチできる
ES2018(ES9) では、.finally() がサポートされました
function aFunc3(data) {
return new Promise(function(okCallback, ngCallback) {
setTimeout(function() {
if (Math.random() < 0.30) {
ngCallback(new Error('ERROR!'));
} else {
okCallback(data * 2);
}
}, Math.random() * 1000);
});
}
function sample_finally2() {
aFunc3(100).then((data) => {
console.log(data);
return aFunc3(data);
})
.then((data) => {
console.log(data);
return aFunc3(data);
})
.then((data) => {
console.log(data);
throw new Error('ERROR!!!');
})
.catch((e) => {
console.log("catch");
console.log(e);
})
.finally(() => {
console.log('*** Finally ***');
});
}
//200 400 800 catch Error:ERRROR!!! *** Finally ***
Promise.all() は配列で指定された全てのPromiseタスクを待ち全てが完了した時点で .then()を呼ぶ
Promise.race()ならいずれかのPromise
function sample_all() {
p1 = taskA();
p2 = taskB();
Promise.all([p1, p2]).then(() => {
console.log("taskA and taskB are finished.");
});
}
↓
ES2017 では、async/await がサポートされました
async と await を用いることで、Promise に対応した非同期関数を、同期関数の様にシンプルに呼び出すことが可能となります
同期関数の様に呼び出したい非同期関数を呼び出す際に await をつけます。await を呼び出す関数に async をつけます
async function sample_async_await_with_catch() {
var val = 100;
try {
val = await aFunc3(val);
console.log(val);
val = await aFunc3(val);
console.log(val);
val = await aFunc3(val);
console.log(val);
} catch (e) {
console.log(e);
}
}
■コールバック関数
広い定義でいうと「高階関数に渡すための関数」
「関数を受け取る関数」は「高階関数」、つまりhello()がコールバック関数
// 関数を2回実行する関数!!
function doTwice(func) {
func(); // 1回目Hello!
func(); // 2回目Hello!
}
// あいさつするだけの関数
function hello() {
console.log('Hello!');
}
// あいさつを2回実行する
doTwice(hello);
========================================
もっと詳しく、もっと分かり易く、どう使うか↓
https://knowledge.sakura.ad.jp/24890/
https://jsprimer.net/basic/async/
https://dev.classmethod.jp/articles/javascript-asynchronous-processing/
■処理の繋がり
1)コールバック関数
ある関数の処理が終われば次のコールバック関数を呼ぶという指定がそれ
歴史的にはエラーファーストコールバック(のルール)
処理が失敗した場合は、コールバック関数の1番目の引数にエラーオブジェクトを渡して呼び出す
処理が成功した場合は、コールバック関数の1番目の引数にはnullを渡し、2番目以降の引数に成功時の結果を渡して呼び出す
fs.readFile("./example.txt", (error, data) => {
2)Promise(非同期処理に対するPromise→順番を合わせる意味では同期処理ではと思う?JSはシングルスレッドかつ非同期という糞?仕様)
ある関数の処理が終わればPromiseオブジェクトを返す
JSがシングルスレッドだが 処理を一定の単位ごとに分け処理を切り替えながら実行する並行処理(concurrent)の仕様のため 順序を考慮する必要がある
非同期処理の実行中にとても重たい処理があると非同期処理の切り替えが遅れる
Promiseオブジェクトは3つの内部状態を持ちます。
pending(保留): まだ非同期処理は終わっていない(成功も失敗もしていない)
fulfilled(成功): 非同期処理が正常に終了した
rejected(拒否): 非同期処理が失敗した
初期状態はpendingで、一度fulfilledまたはrejectedになったらそれ以降は状態は変わらず、非同期処理の終了時に返す値もそれ以降は変わらない
Promiseのコンストラクターは関数を引数に取って、その関数がさらに2つの関数を引数に取る
1番目の関数(resolve)に引数を渡して実行すると状態がfulfilledになり、引数の値はPromiseオブジェクトが保持する値になる
2番目の関数(reject)に引数を渡して実行すると状態がrejectedになり、引数の値はPromiseオブジェクトが保持する値になる
関数が例外を投げた場合も状態がrejectedになり、投げた値がPromiseオブジェクトが保持する値になる、throwする値をrejectedに渡して実行した時と同じ
then()は2つの関数を引数に取り、Promiseの状態がfulfilledになったら1番目の関数が、rejectedになったら2番目の関数が実行されます。
then()の1番目の引数が関数でなければidentity function(入力値をそのまま返す関数)が代わりに使われます
2番目の引数が関数でなければthrower function(入力値を例外として投げる関数)が代わりに使われます
catch()は1番目の引数にidentity functionを指定したthen()と同じ
上の挙動をオレオレPromiseをYakusokuで作っているので分かり易い https://knowledge.sakura.ad.jp/24890/
なお、本質としてはコレ、下記ソースが決まりの流れ、ひな形としてヤリ慣れるしか
1)時間が掛かる処理をPromise化して順序立てよう
2)成功と失敗のコールバックを指定しよう
//処理にコールバック関数を入れて成功と失敗時の型で終える
function dummyFetch(cmt, callBack) {
setTimeout(() => {
if (cmt.startsWith("/success")) {
callBack(null, { body: `Response body of ${cmt}` });
} else {
callBack(new Error("Bad"));
}
}, 1000 * Math.random());
}
//プロミスを入れるためラッパーを関数にかます
function aaaFilePromise(cmt) {
return new Promise((resolve, reject) => {
dummyFetch(cmt, (err, data) => {
if (err) {
reject(err); // 失敗: 内部状態をrejectedにする
}
else {
resolve(data); // 成功: 内部状態をfulfilledにする
}
});
});
}
//プロミスチェーンでのフロー
aaaFilePromise("/success/passwd")
.then((data) => { // 読み出しに成功したらresolve()に渡した値が引数として渡される
console.log("1", data);
//return 'next';//テキストがあってもなくても次のthenに行く、省略でもテキストでも第一引数関数に行く成功側
return aaaFilePromise("/etc/text");//エラーで次のthenの失敗側の第二引数関数にきっちり行く
})
.then((data) => {
console.log("2", data);
return aaaFilePromise("/success/shadow1");
}, (data) => {
console.log("2e", data);
return aaaFilePromise("/success/shadow2");
})
.then((data) => {
console.log("3", data);
return aaaFilePromise("/etc/shadow");
})
.catch((err) => { // reject()に渡した値が引数として渡される
console.log("error", err);
});
then()/ catch()は、引数で渡された関数の戻り値から新たにPromiseオブェクトを作り、そのオブジェクトを返します。そのためメソッドチェーンが可能
引数に渡した関数の戻り値がPromiseオブジェクトの場合はそのオブジェクトをそのまま返す、そうでなければ戻り値をPromiseで包んで返す
エラーでキャッチに飛ぶ訳ではなく次のthen第2引数関数に飛んでいる、省略でcatchに行っているように見えるだけ
dexieやPWAでの提供があり使う(処理を順序立てて使うようプログラムを組む時に
dexie: db.schedule.where('site').equals('sche').first().then(function(records) {
pwa: caches.keys().then(function(keyList){
return Promise.all(keyList.map(function(key){
3)async / await
promiseは順番決めができたがasync/awaitは順番を扱う処理もできるsetTimeout/setIntevalがプロミスチェーンだけでは時間を止められない
シングルスレッドから似非スレッドで分離し非同期になるから、awaitを入れると同期する↓
const wait = (sec) => {
return new Promise((resolve, reject) => { setTimeout(resolve, sec*1000); });
};
async function arrKick_async(arr) {
for(let i=1; i<=num_arr; i++){
arr = await kickPromise(arr);
await wait(2);
}
}
arrKick_async(arr);
========================================
JSネイティブとPromiseとasyncが混ざった場合は同期しない、then()すら超えてくる↓
4)コールバック地獄
結局コールバック地獄が扱いやすい(スレッドの切り替えがなければ同期ができる)、最近のJSフレームワークは全部Promise化しているらしいが
例)キャッシュを保存し、そのステータスを取るようにAsyncやPromiseで保存待ちの順番をにしても、待たない
//隙間がないと1度エラーだとエラーになりっぱなし
let num_cache;
num_cache = getCacheStatus();
if(num_cache == 0 || !num_cache){
num_cache = getCacheStatus();
if(num_cache == 0 || !num_cache){
num_cache = getCacheStatus();
if(num_cache == 0 || !num_cache){
num_cache = getCacheStatus();
if(num_cache == 0 || !num_cache){
//setTimeoutで隙間があっても関数スレッドの返り値を代入するスレッド切替時に、返り値を待つスレッドの方は次の処理に進んでしまいIF判定ができない
let s = setTimeout(function(){
let num_cache1 = getCacheStatus();
if(num_cache1 == 0 || !num_cache1){
s = setTimeout(function(){
let num_cache2 = getCacheStatus();
if(num_cache2 == 0 || !num_cache2){
s = setTimeout(function(){
let num_cache3 = getCacheStatus();
if(num_cache3 == 0 || !num_cache3){
s = setTimeout(function(){
let num_cache4 = getCacheStatus();
if(num_cache4 == 0 || !num_cache4){
//Func返り値やPromiseやAsyncでのスレッドの切り替えがないDOMの判定であれば上手くいく
let s = setTimeout(function(){
getCacheStatus();
if(document.getElementById('mes_filenames').innerHTML == 'none'){
s = setTimeout(function(){
getCacheStatus();
if(document.getElementById('mes_filenames').innerHTML == 'none'){
s = setTimeout(function(){
getCacheStatus();
if(document.getElementById('mes_filenames').innerHTML == 'none'){
s = setTimeout(function(){
getCacheStatus();
if(document.getElementById('mes_filenames').innerHTML == 'none'){
s = setTimeout(function(){
getCacheStatus();
if(document.getElementById('mes_filenames').innerHTML == '<?php echo $lang_page->install_none; ?>'){
function getCacheStatus(){
let num_caches = 0;
let num_success = 0;
caches.keys().then(function(keyList){
return Promise.all(keyList.map(function(key){
caches.open(key).then(function(cache) {
cache.matchAll().then(function(response) {
document.getElementById('mes_filenames').innerHTML = '';
let s;
let o;
for(const value of response){
s = value.status;
o = value.ok;
document.getElementById('mes_filenames').insertAdjacentHTML('afterbegin', value.url + '<br>');
if(s == '200' && o){
num_success++;
}
num_caches++;
}
if(num_caches > 0){
document.getElementById('mes_progress_rate').innerHTML = 'Progress: ' + num_success / num_caches * 100 + '%';
}else{
document.getElementById('mes_filenames').innerHTML = 'None';
}
});
});
}));
});
return num_caches;
}
===============
thenの入れ子だと親の部分だけ先に進んでしまう、入れ子ダメで親子を作れば親→子の一方方向で子で終わるトーナメント構造で(上がらない)
test1().then((result) => {
test2().then((result) => { //fuok });
})then(function() これは入れ子
↓
test1().then((result) => {
test2().then((result) => {
//fuok
})then(function(){ //fuok2 }); これでトーナメント構造
})catch(function(e)
promiseチェーンでthen毎にに欲しい引数を出すが、複数であればそれらの引数をthenに渡せない、下記1は駄目
1)thenで一つの引数になるようにロジックを組む(thenのトーナメント構造、一階層上で変数に入れる等)
}).then(function(response){
return [response.json(), arr_del];
}).then(function(v) {
json = v[0]; arr = v[1];
2)callbackとresolveに配列を使うとOK、オブジェクトでもいいかも
function dummyFetch(cmt, callBack) {
if(Array.isArray(cmt){
var p = cmt[0];
var s = cmt[1];
}else{
var p = cmt;
var s = 1;
}
setTimeout(() => {
if (p.startsWith("/success")) {
var r = [p, ++s];//これ不可[p, s++]
callBack(null, r);
} else {
callBack(new Error("Bad"));
}
}, 1000 * Math.random());
}
function aaaFilePromise(cmt) {
return new Promise((resolve, reject) => {
dummyFetch(cmt, (err, data) => {
if (err) {
reject(err);
}
else {
if(Array.isArray(data){
var p = data[0];
var s = data[1];
}else{
var p = data;
var s = 1;
}
resolve([p, s]); // 成功: 内部状態をfulfilledにする
}
});
});
}
===============
Promise化していない関数を使いたいが、そのまま使うかthen化できるようにするか?
1)次thenに進みたい元Funcの処理としてresolveの返り値に入れる、ダメなら省略可だがreject()に渡しcatchする
2)次thenには適当でもいいのでreturnで進む
function test1 () {
return new Promise((resolve, reject) => {
const a = 1;
const b = 2;
resolve([a, b]);
})
}
test1().then((result) => {
console.log(result[0]); // 1
console.log(result[1]); // 2
return 'go next';
}).then(function(){
エラーハンドリングしたい、よくわからんが下記で動作に違いがでた、rejectはJSがエラーを吐いた
1)catchさせるにはthrow new Errorし、alertを出す
2)catchはしないが次のthenには移動させないためreturn false
}).then(function(json){
if(json.init == 'Not appropriate access'){
throw new Error('Server warning');
}else if(json.init == 'No data'){
//reject("initiate!");
return false;
}else{
resolve(json);
}
}).catch(function(error){
alert('Ooops: ' + error);
});
Promise.allを使って、3つのpromiseを同時に実行、allはすべての非同期処理がresolveされたタイミングで結果を返
Promise.all([test1, test2, test3]).then(function() {
console.log("Fourth");
もっと簡単に async, await, Promise - Qiita■Javascript
https://www.bangboo.com/cms/blog/page_325.html
Posted by funa : 01:06 AM
| Web
| Comment (0)
| Trackback (0)
October 18, 2020
竹書房 Annex
■勝者の科学 一流になる人とチームの法則
人格者が勝つ(自分が正しいと信じるし、練習やメンテ等の時間を正しく使うのだろう、後は良いチームで情報戦が必要だろうな)
■夢をかなえるゾウ0 ガネーシャと夢を食べるバク
最高の行動を選択し続ければ想像しない形で夢が叶う、と信じるしかない
自分の存在がちっぽけだと自覚>本物の夢を目指す
夢>理想>信念>計画>実行>成果>幸福
捉え方、意味付け(どんな困難も、嫌なことも鍛錬や人助けと考えられる)
夢>楽しい>集中力>行動力>強さ>魅力
寝たい短期の欲求があっても、鍛錬が要る長期の欲求=夢がない
英雄と臆病者の違い>何をなすかだけ、自分の負の部分を受け入れる
本物の夢は同じ痛みを持った他者を救うことで自分を救う事
誰かの為、世の中の為は建前、自分の怒り悲しみ羨望…エゴが大きな力
悲しみ=自分だけの意味を見出そうとしている、その悲しみはいつか喜びに変わる
自分以外のものを見て気づき、自分とは何か、自分は何のために生きているか、生きる意味を知る(教えられるものでなく経験から見出す)
自分に正直に夢を叶える過程で、最高の行動を選ぶ事で必ず自分を好きになる
レトリックだが人間のサガと天晴、不快でも他人なりの信念を読み取る>包括し大局観の概念、他人の信念を言い表しておけばいい
■夢をかなえるゾウ4、ガネージャと死神
自分、今の生き方やったら死ぬときめっちゃ後悔するで。
///死神の教え(誰も皆ほぼ同じことに後悔する)
本当にやりたいことをやらなかったこと
健康を大切にしなかったこと
仕事ばかりしていたこと
会いたい人に会いに行かなかったこと
学ぶべきことを学ばなかったこと
人を許さなかったこと
人の意見に耳をかさなかったこと
人に感謝の言葉を伝えられなかったこと
死の準備をしておかなかったこと
生きた証を残さなかったこと
(遺書を書く、死後に人に伝えたいメッセージを書く:やりたいリストをやれる)
結局、人間の夢なんて『お金持ちになりたい』とか『魅力的な異性と付き合いたい』とか『自分の名前が残るような仕事がしたい』とか、そんなんばっかで、全然バラエティに富んでへんやん→お前の夢面白んない
///ガネーシャの課題
1.健康に良いことを始める:行動を管理して目標を達成する習慣化
2.死後に必要な手続きを調べる:目を逸らしたくなる現実に向き合う、死後家族を守る
3.お金の問題がなかったらどんな仕事をしたいか夢想する:人が買うてくれる価値を作る→情熱
4.大きな夢に向かう小さな一歩を 今日踏み出す:やれることは何でもある、調べるでも
5.人に会ってわだかまりを解く:器の持ち主が家族会社を末永く繁栄できる
6.死ぬまでにやりたいことリストを作る:20個以上、リマインダ、ワクワクできる
7.経験したことのないサービスを受ける:勉強になる、どっちかに囚われず本当に望むものを選べるようになる
8.節約を楽しむ:贅沢した後の道理、工夫して楽しめ
9.思い切って仕事を休む:他人の評価が下がることを恐れてる、本当に大事なものより
10.自分の体に感謝をする:労わらんのはブラック、他人にも気遣いができるようになり、力を引き出せる
11.身近な人に感謝の言葉を伝える:人の苦労が分かる
12.周囲の期待と違う行動をとる:本心と期待の間でどっちが本物かわかる
13.限界を感じた時 もうひと踏ん張りする:頑張りすぎ意味ないという言い訳はなし
14.両親の生い立ちを知る:自分が人生で感じた痛みは親が感じた痛み、酒を飲んで語り合う、何を世襲する
15.かなえてきた夢を思い出す:忘れてしまう、将来に縛られて不幸せか
16.他者の欠点を受け入れる姿勢を持つ(見る場所を変える、相手の背景を想像する、他人に完璧さを求めている自分に気づく):苦しみは必ず減る、他人でイライラする必要はない
17.つながりを意識する時間を持つ:岩も石も砂もない、同じでダイヤと線を引かない
18.喜怒哀楽を表に出す:繋がった世界では死がない、安らぎの世界から切り離され不安で泣きながら生まれてくる、喜びも感動も存在できない
追い詰められて強なる奴は自分を責められる奴、弱なる奴は一発逆転を狙ってまう、期待だけ膨らんでまう
タバコ吸わんで健康で良かったと思う人、一方タバコが吸えんと苦しい人、無いから苦しいんやない、奪われたから苦しいんや
トルストイ)死の準備をするということは充実した人生を送るということ、人生の充実によって安らかに死を迎えられる
ジミヘン)死が訪れたとき死ぬのは俺なんだ、俺の好きなように生きさせてくれ
ヘップバーン)もし世界が終るとしても幸運だったこと楽しかったことの全てを思い出す
ルター)死は人生の終末ではない、生涯の完成である
夢はかならず叶うというのは原動力になる
偉人も生きているうちに夢を叶えた人は少ない ディズニー、アインシュタイン、エジソン、ダビンチ
あきらめと受け入れは同じ 死はかなわない夢 叶わないことを受け入れる
衣食住医で過去の人の夢は叶えた状態
病気で死んだ人も薬が何十年か後に出来て生きれる、夢はいつか叶う、全ての夢は叶う、タスキを受け死んだ人の夢を叶えるのは今を生きている人
死は土に返るだけで原子は変わらない形が変わっただけ、恐れる必要はない
完全な光を見れるのは夢を追っているときだけ、叶えたとき裏側の闇を知る、死後を想像し光で満たされた場所と考えるなら、生きている間を夢を追っている最中とする事ができる
輪廻し形を変えながらあなたでしか経験できない尊さ
生と死の対比でエモさがズルい、夢のような張りがないと体の反応として死んでいく、無意識が意識をコントロールするのが理性で表を保つ役割がある、裏表なく無意識を意識化し一体とすることはパフォーマンスがあがるが長期だと自然過ぎて刺激や葛藤がなくボケて死ぬ?生という快楽への執着でしかないがね
■夢をかなえるゾウ3 ブラックガネーシャの教え
基本的にスパルタで集中、頑張る人生でないと何も始まらない
だが楽しい/報酬を見出す、環境は他人なので人に頼る
///ガネーシャの課題
自分の持ち物で本当に必要なものだけを残し必要のないものは捨てる
苦手な分野のプラス面を見つけて克服する(遠ざけない)
目標を誰かに宣言する(口に出してしまう)
うまくいっている人のやり方を調べる(ダメな奴は自己流)
一度自分のやり方を捨て、うまくいっている人のやり方を徹底的に真似る
空いた時間をすべて使う(お前中途半端やねん)
合わない人をホメる(人を使うには)
決まずいお願い事を口に出す(夢には衝突も避けられないので練習にもなる)
今までずっと避けていたことをやってみる(頭のどこかでやった方が良いと思っている)
自分の仕事でお客さんとして感動できるところを見つける(感動を繋げられるのが天職)
一度儲けを忘れてお客さんが喜ぶことだけを考える(発想の転換)
自分の考えを疑ってみる
自分にとって勇気が必要なことを一つ実行する
優れた人から直接教えてもらう
一緒に働いている人に感謝の言葉を伝える(社長は社員に掛けると退職率が違う等)
自分で自由にできる仕事を作る(自分で工夫できるのはゲームより楽しい)
余裕がないときにユーモアを言う
目の前の苦しみを乗り越えたら手に入れられるものを、できるだけ多く紙に書き出す
欲しいものが手に入っていくストーリを考えて空想をふくらませていく
手に入れたいものを目に見える形にして、いつでも見れる場所に置いておく
自分流にアレンジする(自分で思いつくが大事、アイデアを試したくなる、工夫)
(ブラック富神:錯覚を利用、短期やバレなければ)
希少価値を演出する
あえて自分の不利益になることを言って信用してもらう
周囲の人間関係を断つ(情や人のせいにしてしまうから)
中毒にする(次もその次もとなる、油や砂糖)
夢や成功を手に入れるには、つらいことや苦しいことは決して避けられない
ほとんどの人は避けるが、乗り越えることで相応の魅力や価値を身に着けるのだ
(魅力や価値)
■夢をかなえるゾウ2 ガネーシャと貧乏神
「お金」と「幸せ」の関係、ごっついの教えたろか。
夢追い痛い人、誘惑に負ける人、仕事で儲けられない人は貧乏になる
競争は相対的であり勝つしかない、絶対的と分けて捉える
欲しいものを口に出す
成功まで止めない、努力、練習量、向き不向き、成長する
やりたい事をやると滅茶成長させてくれる、そういう所へ行く
借金で退路を断つ?、カタ嵌められてるが
意見を聴いて直す、分析に時間をかける
貧乏になる素質があるか:分析してみ
辛い状況を笑い話>挑戦できるし自由になる
みんな辛いしお前だけではない
他人を誉める、プレゼントする、楽しみを見つける、自分が困ってても
貧乏神は福の神になる、貧乏な時でも好きなら結婚する?
才能と向き合う=貧乏を経験するということかも
TVは人を勘違いさせるために●を出している:目指すのはその先だ
■夢をかなえるゾウ、ガネージャ
偉人になるには→迷いがあるとだめ→自分で良いと信じること
決めたことをやる、良いことをやる、人に文句を言わせる前に押さえておく
今ある体制を認める、右翼な良市民:小市民になる可能性が大(志の大きさ)
靴を磨く:自分を支えてくれるものを大事にする
募金する:人から愛される、世の中を良くしたい
腹八分目:自分をコントロールすることを楽しむ
人が欲しがるものを先取り:人が何を欲するかがビジネス、上司の欲も
笑わせる:空気を作れる、やる気やアイデア、いい面がでる
トイレを掃除:人がやりたがらない事をやる
まっすぐ帰宅:むしろ逆、一番大切な自由に使える時間
寝る前褒める:頑張ったり成長することが楽しい事と教える
何かを辞める:新しく何かをやる為に何かを止める、1日でも
環境を作る:意識を変えても駄目、環境を変えて習慣に
鏡を見て整える:意識や内面を変えるのは難しいが外見は変えられる
自分が得意な事を人に聞く:価値を決めるのは客、自分以外だから
自分が苦手な事を人に聞く:長所と短所は逆かも
夢を想像:考えはじめたら楽しくて止まらない
運が良いと言う:脳みそが勝手に運がいい事を探し始める、脳が学び始める
タダで貰う:言い方や仕草に気を使うようにコミュが変わる
明日の準備をする:一流はどんな状況でも結果を出す、綿密な準備が要る
身近な人を喜ばせる:どうでもいい人に気を使うのに、世話になった人、好いてくれる人、大事な人をぞんざいに扱うもの
褒める:誰かの助けなしに成功はない、呼吸レベルで褒め言葉を言う
人の長所を盗む:同業なら筋を通さないといけないがパクッてでも人を喜ばせる
求人情報を見る:これや!と思えるまで探し続ける、仕事で一生が決まるから
お参りに行く:どうしたら出世できるか成功できるかは心の底では分かっている、面倒臭がりでやらないだけ、成功する奴は少しでも可能性があればやる、信仰心は意味がある
人気の店、理由の観察:どうやって人を喜ばしているか観察
プレゼントする:期待以上だった時に喜ぶ、サプライズするには
やらずに後悔していることをやる:大体やらないまま死んでいく、成功はやりたい事をやるだけと言われている
夢を語る:人が聞きたい夢は実現が望まれていること、かなえるのが簡単
人の成功をサポートする:自分が成功する近道は人の成功を助けること
応募する:もし才能が認められたら人生はあっという間に変わる
毎日感謝する:地位名誉名声お金は他人がくれる、満たされて他人に愛を注ぐ状態で、自然な形で手に入る
1富神・2貧乏神・3ブラック神・4死神・0バク・Love理論
■偏差値78のAV男優が考えるセックス幸福論 森林原人
性欲は欲求の中でも特別で他者が必要、社会調和の為に理性が必要で快楽や享楽:セックは排除される、理性は客観的判断、理性は教育でつくられ正義でも絶対的でもない、人間は快に動かされ生きてきた生き物、性欲は恋愛という肩書を与えられた
社会性を持ったセックは?社会的地位の高い外面が硬い教師弁護士のレイプ願望等の人の裏側や多面性、性愛は社会が成立する前からあり社会的概念を超え社会に閉じ込められない、アブノーマルを含めスリルや快楽が何十倍もavにありこの経験は人類史上貴重(金や物は死ぬ間際には意味がない)、他者承認欲求と自己承認欲求、社会的信用も社会的弾圧を受けた子が背中を追うことを考えればあってないようなもので何を大事にするか、セックに無関心な人もいるがエロとは人間に対する愛
セックの可能性:かけがえのなさ、発見、感動、意味、悦び、儚い存在価値、自分を赦す、コンプレックスがあってもだれでも原始な感覚で絶対的な全肯定感を感じることがある、その瞬間に二人が存在したという事実の確認、粘膜への不可侵侵入、過去を受け入れ未来が約束された気になる幻想、全肯定感は幸福感や深い愛情の源になりえ社会的成功とは別の人として根源的な幸せに直結、脆く儚い刹那の逆説、契約や社会制度に囚われない本来の原始のセック
セックは同じのがない一期一会、承認欲求(自分)→肉体的快感→mがもっと虐めてといえばsと立場が一転する、気持ち良さとsmで脳で快感→心から想う愛おしい(相手)、性欲不満か承認欲求不満か、肉体と心の危険性に気を
女性の性欲は男と違う、挿入より抱っこだったり女版風俗はないし、王子に優しくイケメンに話しかけられ見たい(コミュニケーション)、受け入れられた実感をセックに求める、性欲と愛情と結婚は割り切れるというか別次元で捉え性対象とされたいとか心の繋がりとか、歳とると挿入だが、気遣いとサービス精神と印象良く初対面でセックしてもいいと思われるのが男優
覚醒と睡眠と中間の催眠、脳が眠ると入力そのまま動く、運動支配>感覚支配>記憶支配、記憶呼び出しトレースしつつ書き換えでトラウマを消せる、呼吸は意識と無意識に唯一またがる、意識的に深い呼吸をすることで無意識の本能を呼び出せる
セックは本能でするもので今この瞬間に心があり、先や過去に縛られない、愛は執着であり思考ではない、今瞬間の積み重ねが永遠であり今ないものは先にもない、本能から生まれる愛おしさ慈しみの先にあるのが愛、瞬間的な心の状態
=
オーガズム、射精回数での脳回路を書き換えて絆を強くしている
オーガズムは脳回路を「再配線」させて絆を作り出していたと判明! (2/2) - ナゾロジー (nazology.net)集団になると男女とも本能が現れるのでは
夜這い、乱交が一般習俗だった日本、その中心を担った祭りの歴史 「祭り」と「セックス」は古来より神の意志による(1/8) | JBpress (ジェイビープレス) (ismedia.jp)■サイコパスに学ぶ成功法則
知力とサイコパスの合体で偉大な人物になりえる
成功するにはサイコパスであることは近道
↑
スイッチの切り替えができる
やり遂げることができる
/// サイコパスの性質
共感性が低い、我慢強い、割り切れる
恐怖感がない、自信家、説得が上手い
/// サイコパスの精神性
怒りを抑えられる、個人的屈辱と捉えず無視、ゲームとして割り切る
プロは後悔をしない
カリスマとして騙して誘導できる
/// サイコパスの訓練
ストレス環境への適応
恐怖下のスイッチ切替
/// 説得する方法
相手の言葉を使う、心を読む、親密になる
影響の割合:目を合わせる55%、トーン38%、言葉7%
/// 親密になる方法
笑いかける
ほめる
気さく
利得
ボディタッチ
温める飲み物を出す
見た目が近い
共通項が多い
キューブラー・ロスによる5段階モデル(死の受容モデル)と、それへの代表的な批判について | KAIGO LAB(カイゴラボ)第1段階:否認と孤立(denial & isolation)
「なにかの間違いだ」周囲から距離を取り孤立する
第2段階:怒り(anger)
自分が死ぬという事実は認識できたが「なぜ、自分が」
第3段階:取り引き(bargaining)
神や仏にすがり死を遅らせてほしいと願う
第4段階:抑うつ(depression)
「ああ、これだけ頼んでもダメか」死を悟り頭で理解していた死が感情的にも理解できる
第5段階:受容(acceptance)
生命が死んでいくことは自然なことだという気持ちになる。生命観や宇宙観のようなものを形成することもある。自分の人生の終わりを、静かにみつめることができるようになり、心に平穏が訪れる。
■死ぬときに後悔すること25
大切な人とは人生に色どりを与えてくれた人
好き勝手:やりたい放題する人は人を引き付ける、輝かしい、潔さがある
忍従:耐え忍ぶ人生の方が思いのままになるより楽しいらしい(これも自身のやり切りだろう)
安らかな優しい顔で死ぬってその時の満足感だけで人生全体を反映していない可能性もありそう
本館
/// BANGBOO BLOG /// - 竹書房
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フィニッシュだ
休みは氷ジョッキ、基本は冷保ジョッキ、大量氷チューハイボールならステンレスマグ→来年はドウシシャのステン+保冷剤+真空のヤツ追加だな
→2021ドウシシャは
つよつよ金持ちツール、メッチャ凍りつき何割かは飲めないwww、が過冷却な感じをずっと提供する、冷保はテーブルがずぶ濡れだがドライ、捲った
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
消費者が唯一見ることができる戦略は実行だけだ
========
ネットで実際に取った行動に関して分析
キラキラしているものを作る、商品とか店舗とかCMとか
接触回数で惰性というか慣性というかを付ける必要があるな
Amazonカス玉レビューの数は接触回数の代わりになる、皆買ってる感じなる
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
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を消せる(その後新たに再作成できる)
■insert
db.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()
■Delete
db.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));
}
■アクセス
indexeddbは該当DBにどこからアクセスできるか>同一ドメイン、ディレクトリでじゃない
保存場所
C:\Users\<ユーザ>\AppData\Local\Google\Chrome\User Data\Default\IndexedDB
C:\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、Javascript
JSでAタグリンクを挿入するにはinsertAdjacentHTMLがよい
生成したタグを追加する前に掃除するにはdocument.getElementById('xx').textContent = null;
■テスト
https://www.bangboo.com/indexeddb/indexeddb_dexie_form.html
https://www.bangboo.com/indexeddb/test/indexeddb_dexie_form.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
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)
Posted by funa : 06:00 PM
| Web
| Comment (0)
| Trackback (0)