アレクサTips : 電話番号を調べる

コロナ禍でお店の営業時間が短縮になっていますが、豊洲のコーナンの営業時間が知りたくって、電話番号を調べようと。

ふとアレクサに話しかけたら、ちゃんと電話番号を教えてくれました。

「アレクサ、豊洲にあるコーナンの電話番号教えて」・・・〇
「アレクサ、豊洲のコーナンの電話番後う教えて」・・・×

場所を指定するときは、「〇〇にある」と言わなきゃダメ見たい。

けっこうベタな内容ですが、こうやって使うことがなかった。。。

Qlik便利関数 : データの一時保存

「巨大なデータを扱っていて、途中でコケた場合、また最初から回さなければならない。途中段階で一時的にデータを保存したいなぁ」というときに役立つ便利関数です。

使い方

/*---------------*/
重たい処理
いろいろなデータ処理
いろいろなデータ処理

call Benri.MyStore('テーブル名');
/*---------------*/
call Benri.MyLoad('テーブル名');

といった感じで使います。

まずそのまま回すと、[c:\temp]にQVDとしてデータが保存されます。2回目以降は、1つ目の「/*————-*/」の右端を消してあげれば、MyLoadの直前までコメントアウトされ、重たい処理をすっ飛ばして一時保管されたデータが読み込まれます。

サンプルプログラム

最初はそのまま回します。すると、testdataがc:\temp\QVW名_testdata.qvdとして保存されます。

2回目以降は、「★」部分の右端「/」を削除して回します。すると、MyLoadまでの処理がすっ飛ばされて、MyLoadによってtestdataが読み込まれます。

ただし、すっ飛ばしたい部分までは別のコメントアウト「/*—-*/」は使えなくなります。すっ飛ばしたい部分内にコメントを残す場合は、「//」を使ってください。

//便利関数の読み込み
$(Include=C:\temp\Benri.txt);

/*------------*/ //←★次に回すときは、右端の「/」を消して回す
//テストデータ
testdata:
	load		*
	Inline [
		prod, ym  , a1, a2
		魚, 201901, 10, 10
		魚, 201902, 20, 
		魚, 201903,   , 30
	]
;

//使用例
call Benri.MyStore('testdata');
/*-----------*/
call Benri.MyLoad ('testdata');

仕様

以下のような内容です。超絶シンプル♪


sub Benri.MyStore(__tbl)
	let __aaa =  Left(DocumentName(), len(DocumentName())-4) ;
	store $(__tbl) into [c:\temp\$(__aaa)_$(__tbl).qvd](qvd) ;
	drop Table $(__tbl) ;
	set __aaa=;
end sub

sub Benri.MyLoad (__tbl)
	let __aaa =  Left(DocumentName(), len(DocumentName())-4) ;
	$(__tbl): NoConcatenate
		load * from [c:\temp\$(__aaa)_$(__tbl).qvd](qvd)
	;
	set __aaa=;
end sub

Qlik便利関数:欠損値をゼロ埋め

欠損値に0を入れてくれる便利関数です。複数の変数がある場合は、スペースで区切ります。区切るスペースは1個でも複数個でも大丈夫です。

call Benri.NulltoZero('テーブル名', '変数1 変数2  変数3');

といった感じで使います。変数1/変数2/変数3それぞれの欠損値を0に変換します。

使い方

以下の「benri.txt」をダウンロードして、適当なところに保存してください。

サンプルプログラム

ダウンロードしたbenri.txtを c:\temp に保存して実行してみてください。

//便利関数の読み込み
$(Include=C:\temp\Benri.txt);

//テストデータ
testdata:
	load		prod, ym
			  , if(a1='', Null(), a1) as amt1
			  , if(a2='', Null(), a2) as amt2
	Inline [
		prod, ym  , a1, a2
		魚, 201901, 10, 10
		魚, 201902, 20, 
		魚, 201903,   , 30
		魚, 201904, 40, 
		魚, 201905, 50, 50
		魚, 201906, 60, 60
	]
;

//使用例
call Benri.NulltoZero('testdata', '   amt1   amt2   ');

仕様

以下のようなサブルーチン内容です。
構造はいたってシンプルですが、引数(__vars)にスペースが複数個あった場合の処理で結構手間取ってます。


sub Benri.NulltoZero(__tbl, __vars)

	//左右の無駄なスペース除去
	let __vars = Trim('$(__vars)');
	
	//スペースを1つにする
	let __x = Index('$(__vars)', '  ') ;
	do while __x > 0
		let __x = Index('$(__vars)', '  ') ;
		let __vars = Replace('$(__vars)', '  ', ' ');
	loop
	set __x=;
	
	//変数の個数をスペースの個数を基に数える
	let __nVar = len('$(__vars)') - len(Replace('$(__vars)', ' ', '')) + 1 ;

	//処理用の各種文章
	let __s1 = '';
	let __s2 = '';
	let __s3 = '';
	let __s4 = '';
	
	for __i=1 to $(__nVar)
		let __v = SubField('$(__vars)', ' ', $(__i));
		let __s1 = '$(__s1), if(IsNull($(__v)), 0, $(__v)) as __$(__v)'	; //欠損値をゼロに埋めるための文章
		let __s2 = '$(__s2), $(__v)' 									; //ドロップ用
		let __s3 = '$(__s3), __$(__v) as $(__v)'						; //一時名から元の名前にリネーム用の文章
		let __s4 = '$(__s4), __$(__v)' 									; //ドロップ用
	next __i
	set __v=;
	
	//最初の不要なカンマを取る
	for __i=1 to 4
		let __s$(__i) = mid('$(__s$(__i))', 2) ;
	next __i
	set __i=; set __nVar=;
		
	//欠損ゼロ埋め
	__temp: NoConcatenate
		load		*
				  , $(__s1)
		Resident	$(__tbl)
	;
	drop table $(__tbl);
	//元の変数削除
	drop Fields $(__s2) from __temp ;
	//リネームして変数名を戻す
	$(__tbl): NoConcatenate
		load		*
				  , $(__s3)
		Resident	__temp
	;
	drop table __temp ;
	drop Fields $(__s4) from $(__tbl) ;
	
	set __s1=; set __s2=; set __s3=; set __s4=;
end sub

Qlik : 期間累計・直近●ヶ月

最近コロナで「直近1週間の平均感染者数」とかいう単語をよく見るようになりました。

この「直近●●の合計」など、期間累計のやり方についてです。

チャートを使えば、RangeSum/Aboveで期間累計できますが、ロードスクリプトだとそのやり方を知りません。

なので、データハンドリングで対処してます。

私は2つのやり方でやっているのですが、1つはすべての組み合わせを作ってやる方法(デカルト積)、もう一つは「過去からの総合計から●ヶ月前までの総合計を引く」方法です。

先に、テストデータを載せておきます。

//テストデータ
testdata:
	load		*
	Inline [
		prod, ym, amt
		魚, 201901, 10
		魚, 201902, 20
		魚, 201903, 30
		魚, 201904, 40
		魚, 201905, 50
		魚, 201906, 60
		魚, 201907, 70
		魚, 201908, 80
		魚, 201909, 90
		魚, 201910, 100
		魚, 201911, 110
		魚, 201912, 120
		魚, 202001, 10
		魚, 202002, 20
		魚, 202003, 30
		魚, 202004, 40
		魚, 202005, 50
		魚, 202006, 60
		魚, 202007, 70
		魚, 202008, 80
		魚, 202009, 90
		魚, 202010, 100
		魚, 202011, 110
		魚, 202012, 120	
		肉, 201901, 10
		肉, 201902, 20
		肉, 201903, 30
		肉, 201904, 40
		肉, 201905, 50
		肉, 201906, 60
		肉, 201907, 70
		肉, 201908, 80
		肉, 201909, 90
		肉, 201910, 100
		肉, 201911, 110
		肉, 201912, 120
		肉, 202001, 10
		肉, 202002, 20
		肉, 202003, 30
		肉, 202004, 40
		肉, 202005, 50
		肉, 202006, 60
		肉, 202007, 70
		肉, 202008, 80
		肉, 202009, 90
		肉, 202010, 100
		肉, 202011, 110
		肉, 202012, 120	
	]
;

すべての組み合わせを作ってやる(デカルト積)

元のデータに元のデータをどばっと総当たりでくっつけて、期間に絞って集計するやり方です。と、文章では説明が難しいので、以下のサンプルプログラムをご覧ください。過去1年間の期間累計のサンプルです。

2019/01のレコードに2019/01~2020/12のレコードをくっつける、
2019/02のレコードに2019/01~2020/12のレコードをくっつける、
・・・
2020/12のレコードに2019/01~2020/12のレコードをくっつける、
と一時的にデータが膨らみます。
その後、2020/12のレコードは「(ym2が)2020/1~2020/12までのamtをsumして、元のデータにくっつける」という処理の流れになります。

なお、このやり方だと、一時的にデータが膨大に膨れます。なので、巨大データを扱う際は不向きです。

//--- 期間累計のやり方1:デカルト積(総当たり)
temp: NoConcatenate
	load		prod, ym
	Resident	testdata
;
Outer Join
	load		prod, ym as ym2
			  , amt
	Resident	testdata
;

Left Join(testdata)
	load		prod
			  , ym 
			  , sum(amt)		as amt_直近1年
	Resident	temp
	Where		ym2 <= ym
			and ym2 >  ym-100
	Group By	prod
			  , ym
;

drop tables temp ;

過去からの総合計から●ヶ月前までの総合計を引く

こちらのほうが直感的かもしれません。

以下のサンプルプログラムでは、まず期間に関係ない(総)累計を計算し、その後1年前の累計をくっつけ、それを引いています。

データの始めから1年間経っていない部分(201901~201912)は、欠損になっています。

//--- 期間累計のやり方2:直近までの累計から1年前の累計を引く
temp:
	load		prod, ym
			  , if(Previous(prod) <> prod 
			  	  , amt
			  	  , peek(累計) + amt
			  	)				as 累計
	Resident	testdata
	Order By	prod, ym
;

//1年前の累計
left join
	load		prod 
			  , ym + 100 		as ym
			  , 累計				as 累計_1年前
			  
	Resident	temp
;

//引く
left join
	load		prod, ym
			  , 累計 - 累計_1年前	as amt_直近1年_2
	Resident	temp
;

//大元データにつけ戻し
left join(testdata)
	load		prod, ym
			  , amt_直近1年_2
	Resident	temp
;
drop tables temp ;

以上、ロードスクリプトでの累計のやり方でした。

アレクサTips 自分の携帯を探す

自分の携帯が迷子になったとき、携帯を鳴らしてくれます。

「携帯ファインダー」というスキルを使います。そのスキルの説明書き(Alexaへの話し方の例)にある文章は長ったらしいですが、「アレクサ、携帯どこ?」で反応してくれます!「アレクサ、電話どこ?」でもOK

これは便利♪

アレクサのスキルを有効にする

「携帯ファインダー」というスキルを有効にしましょう。

  • 左上の三本線→スキル・ゲーム
  • 検索窓から「携帯ファインダー」
  • 携帯ファインダーをタップ
  • 「有効にして使用する」をタップ

アレクサに話しかけて、設定を進める

私の場合、ここでトラブルに! 電話をかけても、プチッと切れる。つながらない。。。

アレクサがしゃべってるときじゃないと、電話がつながらない?みたいでした。

ということで、「03‐4540-2801」をメモっておき、携帯片手にアレクサにしゃべりかけましょう。

  • 一度電話番号「03-4540-2801」にTELしておく。(後で発信履歴からTELするため)
  • 携帯を片手に持っておく。電話をすぐにかけれるように。
  • アレクサに話しかける・・・「アレクサ、携帯どこ?」
  • アレクサがもごもご話し出す。しばらくして「スタートと言ってください」とアレクサが言うので、「スタート」と言う。
  • アレクサが電話番号を話し出す。が、この電話番号を聞いた後に電話してもつながらないので、電話番号を言い出したらすぐに発信履歴から「03-4540-2801」にTELする。
  • アレクサもしゃべりつつ、電話先でもごにょごにょ言い出す。ちょっと聞き取りづらくなる。アレクサのほうが黙るまでしばらく待つ。
  • アレクサが黙ったら、「アレクサ、携帯ファインダーのピンコードを教えて」と話しかける。
  • 4桁のピンコードを言うので、携帯にその番号を入力する。
  • 携帯のほうがごにょごにょ言って、自然にTELが切れる。これで設定完了!

接続テスト:アレクサに「携帯どこ?」「電話どこ?」

アレクサに向かって、「アレクサ、携帯どこ?」もしくは「電話どこ?」と言ってみましょう。それで自分の携帯が鳴ったらOK。

ブックカバー

まったく本を読まないわたくしですが、友人のオーダーでブックカバーを制作。

dav
dav

クロム系なので、初めてヘリ返しでつくりましたが、、、ヘリ返しってめっちゃむずい!!
最初は革包丁で地道にへりを削ってましたが全然うまくいかず。。。奥底に眠ってた「scharf fix」という手動革漉き機を使ってやると比較的うまくいきました。

https://www.scharffix-japan.com/

こいつも使い慣れるまでかなり苦戦しましたが、「あまり漉き過ぎない」!これに尽きます。0.5mmで漉いたらむらなくきれいに漉けました。そのくらいの厚みでもきれいにヘリ返せたし♪

作り方

  • 横410mm、縦185mmで革を切り出す。
  • ヘリ返しするため、上下左右12mmで漉く。
    scharf fix」を使う場合は、10mmのガイドを使えば、自然と12mmくらいになる
  • 上下左右10mmのところにラインを引く。また、左右80mmのところにラインを引く
  • 厚みを出したくなかったら、80mmのラインのところを中漉き。これもScharf Fixを使ったほうが超楽。
  • 上下左右を10mmラインでヘリ返す。角はざっくり菊寄せでOK(最終的に隠れるし♪)
  • 両サイド80mmラインで折り、ぐるっと縫って完成

有孔ボードのフックを自作 ~チューブ用~

有孔ボードのフックって、既製品はめっちゃくちゃ高くないですか?ボードは安いのに。。

ということで、有孔ボード用のフックをいろいろ自作しています。今回は、ボンドなどチューブを引っ掛けるフック(ってかホルダー)です。へらのお尻にクリップを付ければ、そいつも引っ掛けられます。

dav

作り方は、以下の動画をご覧ください。

関連記事

ラゲッジタグ

dav

先日作ったコピー用紙のバインダーでほんの少し革が余ったので、ラゲッジタグなるものを作成しました。

「これ自分のカバン!」というのがすぐにわかる目印みたいなものです。名前を入れればネームタグにも。

↑↑↑ 先日作ったコピー用紙バインダー ↑↑↑

裏地と貼り合わせて縫うだけの超単純なものだけに、コバ磨きに魂込めました♪

↓バッグにつけたところ↓

↓全体像↓

肌色っぽく映ってますが、下のと同じものです。光の加減かな?

作り方

型紙(正確な寸法は、下のほうにAIファイルを添付していますので、そちらを使ってください)
  • 型紙よりちょっと大き目で表革・裏革を切り出す。
    貼り合わせた後に切り出したほうが、コバがきれいに磨けます。
  • 全面をベタッと貼り合わせる
  • 型紙の寸法どおりに切り出す。(内側の引っ掛ける部分はまだ切らない)
  • へりを落としてひたすらコバ磨き
  • 全体をぐるっと縫う(縫い白2.5mm)
  • 内側の引っ掛ける部分を切り出す

型紙

AIファイルです。イラストレータ等で使ってください。

アマゾンエンタープライズボタンを照明のスイッチに!

我が家ではアレクサから照明をOn/Offしています。
でも、イラッとする時があります。それは”主電源問題”。
夕方になったりうたた寝明けとかに「アレクサ、照明つけて」って言っても動いてくれない。なぜなら、壁のスイッチが切られているから!

みんなが壁スイッチを押さずに照明を消せばいいんですが、寝るときなどアレクサに話しかけるより壁スイッチをポチっと押したほうが手っ取り早い。

ということで、壁スイッチを”押させない”方法として、壁スイッチの近くにボタンを置き、壁スイッチを押す代わりにこれを押すようにしました。(下にあるほうです。上はSwitchbotで、今回の話とは関係ないやつです)

私はアマゾンのエンタープライズボタンを選びましたが、IoTボタンはいくつか出ています。それぞれ主観で紹介しますね。

IoTボタンを選ぶ

Flic

非常に面白そうな製品で好奇心をとっても刺激されますが、単なる照明ボタンにするにはちょっと値段が高いのと、日本に販売代理店がなさそうというので、避けました。別の使い方を考えてみようと思います。

MESH

こちらも同様に、かなりお値段がお高いので、敬遠です。

Qmote S

お値段はお手頃なのですが、こいつが動くにはスマホが近くにあってQmoteSがBluetoothでスマホにつながってないとだめで、”家の照明ボタン”として使うにはちょっと厳しいです。

実はすでに1個持っていて、私はこれを家の鍵として使っています。スマホとセットで動くこいつは、鍵として使うのが一番いい使い方かも。

ちなみにAmazonではめっぽう評価が低い。。多分IFTTTが(直接は)使えなくなったからかな?WebhooksというサービスをかませばIFTTTを使えますし、私自身はそれほど不自由なく使えてます。

Amazon IoT エンタープライズボタン(ダッシュボタン)

結局こいつにしました。こいつ単体でWifiにつながって機能するし、なんせ安い!
アマゾンページ

昔は(?今も?)ダッシュボタンと呼ばれていました。このボタンは「アマゾンでこのボタン1プッシュで特定の商品を再購入するもの」と思っていました。

今は、IoTボタンとしていろいろなことができるようです。

でも、こいつを使うにはAWSというちょっと変態チックなサービスを使う必要があります。そこのハードルが越えられそうな人は、こいつがベストかと思います。

注意!! ブツがやってきたら、箱は捨てないでください!AWSへ登録する際「DSN番号」が登録に必要なためです。私はそそくさとゴミ箱に捨ててしまってゴミあさりするハメにあいました。。。

このバーコード部分は捨てないように!!

全体像

ダッシュボタン(こっちのほうが言いやすい♪) を押して照明を消すまでの流れは、以下の図のとおりです。

ダッシュボタン

AWS IoT 1-Click

AWS Lambda

Webhooks

IFTTT

Nature Remo

照明リモコンのOn/Off信号が送られる

照明オフ

後半の「Webhooks→IFTTT→Nature Remo→照明を消す」というところは参考ページがたくさんあるのですが、AWS→IFTTTへの信号の送り方がむずかしかった。。。

なので、そこを重点的に書きます。具体的には、

  • AWSにアカウント作成
  • AWSにダッシュボタンを登録する
  • AWSにlambdaというプログラムを作る。こいつがWebhooksに信号を送ります。
  • AWSに「ボタンを押したらlambdaのプログラムを動かす」というアプレット(?)を作る。

Webhooksから先はすでに設定済みという前提で話してます。Webhooks→IFTTT→Nature Remo→アクション(照明を消すとか)は、以下のページなどを参考にしてみてください。

IFTTT→Nature Remo: https://qiita.com/fkooo/items/f2ae1af3f51976275654

Webhooks→IFTTT: https://ifttt-japan.club/apply-webhooks

AWSのアカウント作成

こいつをIoTボタンとして使うには、AWSというサービスを利用しないといけません。が、登録してから使えるようになるまでちょっと時間がかかるようです(最大24時間)。なので、ダッシュボタンをアマゾンでポチったら、そいつが家にやってくるまでにAWSへ登録しておきましょう。
https://aws.amazon.com/jp/register-flow/

ちなみに、クレジットカードを登録させられたりと、ちょっとハードルは高いです。「1年間無料」だそうですが、1年後どうなるんだろう。。。

登録時にちょっとトラブったこと
登録は、すべて半角英数字

 住所とかも、全部半角英数字で入れます。
「次へ」ボタンが押せない
 住所を登録して次に行こうとしても、ボタンが押せない状態になりました。一度ページを戻って入力しなおして・・・を3回繰り返したらなぜか押せるように。。
クレジットカードの登録が終わらない
 最初JCBのカードを登録したら、「入力に不備があります」とでて、その先に進めなくなりました。VISAカードを登録したらそれはすんなり登録でき、デフォルトをそのカードにし、再度デフォルトカードをJCBに戻したら、なぜかJCBも使えるようになってました。

ダッシュボタンをAWSに登録

スマホを使って登録します。AWS IoT 1-Clickというアプリをスマホにインストールしてください。登録までの流れはアプリがわかりやすくリードしてくれます。DSN番号の登録でもバーコードリーダーが使えるのでとっても楽ちんでした。
一点、箱にあるバーコードを読み取った後、どうやったら次に進めるのかで迷いました。次に進むには、「スキャンの停止」を押してください。

画面下にあるこのボタンを押せば、次に進めます。キャンセルっぽいけど。。

AWSでプログラム登録 (lambda)

ここだけパソコンでの作業となります。

まずはリージョンを「東京」に!!

これがわからずにはまりました。。。

画面の右上にリージョン(地域)が表示されています。私は最初「オハイオ」になってました。これを、東京に変えてください。

lambdaプログラムの作成

AWSマネジメントコンソールというトップ画面に行ったら、「lambda」というサービスを検索してください。検索窓を使うと便利です。

次に、「関数の作成」をクリック。

一から作成、関数名は任意(日本語はNG。半角英数字のみ)、ランタイムはPython3.8を選択して、右下の「関数の作成」をクリック。

すると中段に以下のようなデフォルトのプログラムが出てきますので、そこを全部消して、以下のプログラムをまるっと貼りつけます。

↓↓貼りつけるプログラム↓↓

import json
import urllib.request

def lambda_handler(event, context):
    url = 'Webhooksのアドレスを置き換える'
    req = urllib.request.Request(url)
    urllib.request.urlopen(req)

↓コード貼り替え後。こんな感じになります。

コード貼り替え後、こんな感じになります。

「url」の’’で囲まれた部分 は、Webhooksのアドレスに貼り替えてください。

[このページ]の真ん中くらいにWebhooksのアドレスについてまとめてくれています。

続いて、画面上段にある「アクション」→「新しいバージョンを発行」をクリック

説明書きには、例えば以下のような感じで入力。

これでlambdaプログラムの登録終了!今度はまたスマホで作業です。

ボタンとlambdaとの紐づけ

パソコンでも作業ができますが、スマホでやったほうが楽だったので、そちらでの作業方法を書きます。

先ほど使った「AWS 1-Click」を起動してください。

以下のような画面が出てくるので、「プロジェクト」をタップ。

右下の「+」ボタンをタップ→「開始」をタップ

プロジェクト名と説明を適当に入力。

デバイステンプレートの定義をタップ

デバイステンプレート名を適当に入れて、デバイスタイプをボタンに、アクションには「Lambda」を選択、右下の「選択」ボタンで先ほど作ったLambda関数を選択。

いっこ前の画面に戻るので、プレイスメントの属性欄の「属性の追加」をタップし、名前を適当に入力、デフォルト値はなんでもOKですがとりあえず0と入力。

プレイスメントの作成から、

名前を適当に入れてデバイスで登録しているダッシュボタンを選択。

これで完成!!!

ダッシュボタンを押して、照明が消えるか試してみてください。

キレッキレのヘリ落とし(面取り)

今までずっとSEIWAさんのヘリ落としを使っていたんですが、先日革材料を買いに行った際に”高級ヘリ落とし”を発見!

dav

今まで使っていたSEIWAのヘリ落とし

クラフト社のKSヘリ落としというやつ。2000円くらい。SEIWAさんのが1000円くらいだったので、値段は倍。店員さんに聞いてみると、やっぱり切れ味はかなりいいらしい。

ということで購入&さっそく試してみました。

買ってきたKSヘリ落とし

店員さん曰く「まずは研いでから使ってください」とのことでしたので、付属の丸棒とやすりを使って20回ほどしゅこしゅこしてハギレで試し切りしたところ・・・、すさまじく切れます!

オイル多めのトスカーナに使ってみたのですが、シュ~って感じで抜群に切れました。切れるヘリ落としって、きもちい~~。

「おれヘリ落とし下手だわぁ」と思っていましたが、これを使って自信を取り戻しました!

以上、工具のご紹介でした♪

Amazonにあったのでリンクを貼っていますが、浅草橋で買ったほうが安かったです。(革を買ったら工具2割引してくれる、浅草橋で一番有名なあそこで買いました)