|
| ||||||||
|
巻き戻し中。
|
|
2020-04-04(土) tdiary [長年日記]
_ 更新
先週、思い出したようにtdiary更新した。
丁度3月でamazonプラグインの形式が変わるという話で更新必須だったのだが。。。
実は新形式になったら、アフリエイトの実績に応じてamazon側のアクセスレートの制限がある。
自分の場合は実績なんてほとんど無い*1から、デフォの秒間1アクセス。
そうなると、実際にはリンクが書かれたページを更新すると「更新のために取得」「表示」の2回がほぼ同時に走るので、エラーで使えない。
もちろん、複数のリンクが書かれたページを表示するのも出来ない。
と言うことで、プラグインが役立たずになったのでamazonのアソシエイトツールバーで作るリンクへの置換をすることにした。
ついでに、色々仕様が変わったpreタグの後始末やらで15年分のブログの修正やら置換をやってる。
┐(゚~゚)┌
*1 可哀想だと思ったらなんかクリックしてくれw
2020-03-15(日) 再起動 [長年日記]
_ 壊れたorz
なんとか爆音P4-HTマシンでテープをメディア変換していたRDX、母艦のVMwarePlayerのBSDでファイルシステムごとにtar.gzで固めてた。
でもって、Windowsupdateの再起動を後回しにしていたのだけど、昼間に目を離した隙に「オペレーションしてないし、昼間はアクティブじゃないって指定してあるよね(゚∀゚)」って強制再起動しやがった。。。
おかげでUSBパススルーして繋いでいたRDXのUFSは見事に読み取り不能かつ修復不能。
ゼロからやり直しである。
おのれM$、覚えてろよ(ノ ゚Д゚)ノ ==== ┻━━┻
2020-03-12(木) [長年日記]
_ 消費電力
あー、UPSの消費電力が下がったと思ったら、NASのHDDを容量増やすのにHGSTのDeskstarNASからWD-Redに入れ替えたからだ。
スペック見ると4本で15Wぐらい減ってる。*1
( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー
*1 アイドル時で1本あたり6.9→3.3Wが4本
_ でもね
WDの1TBを4本で組んであるTier2用途のストレージ、QNAPから抜いた3TBを4本に入れ替えしたいのだよね。
結局、WDの1TBが2-3WだったのとHDNの6.9Wを入れ替えるので、QNAPが減った分と差し引きだとちょいプラスになるわけか。。。
2020-03-09(月) 在宅 [長年日記]
_ 新型コロナ
対策でこのところ半分以上は在宅テレワーク。
自分は元々出張が多い人なので遠隔地からのお仕事は慣れてるけど、*1全社となると今まで経験のない人も沢山居るから大変だな。
*1 実際、海外で予定が早く片付いたり変更になって、丸1日ホテルの部屋で日本にリモート出社とか良くある
_ 拡張
先週届いたNASのHDD入れ替え。
QNAPの場合、4本構成のRAID5を拡張するには、、、
①管理画面で1本オフラインにする
②物理的に入れ替える
③RAID再構築が始まる
④再構築終わったら①に戻る
を4回繰り返す。
1回あたりほぼ丸一日かかるので、4日掛かった。
最後に全部入れ替え終わったところでボリューム拡張すると、更に増えた容量分だけ何時間か同期が走る。
ほぼ1週間掛かって9TBだったものが12TBになった(゚∀゚)
2020-03-07(土) おや? [長年日記]
_ ん?
残ってるテープの山は12本。
古いのは2006年ごろ。
新しいのは仮想化後の2016年。
あれ?読み出せるじゃん、仮想化後のヤツも。
ダメなのは2011年-2013年の3本。
何がどうなってるのやら・・・・
2020-03-02(月) 壮大な [長年日記]
_ 勘違い
どうやらエラーを見るにUSBのテープドライブをFreeBSDはサポートしてないっぽい。
仮想化した鯖ではもはやリアルのSCSIバスを使う手段がない。
単独のマシンにSCSIバス付けてドライブ繋がないと過去のデータが移行できないorz
ここ5年ぐらいはテープに取ることはほとんどなかったのだけど、取っていてもダメだったって事。
2020-02-24(月) 3連休 [長年日記]
_ コロナウイルスとか花粉とか
まぁ色々と外は危険が危ないので、なるべく屋内で過ごすなど。
洗濯物はさすがに天気も良いのでちょっと外に出してみたが、案の定取り込んだ瞬間に鼻づまりスタート。
明日薬もらいに行くかな。
_ プロ?
MonotaROはオイラの購買履歴でどんだけポテンシャルカスタマーだと思ったのかw
バイクと車の部品やら用品カタログ2冊送ってきた。
ありがたく、ドリルの穴開けの下敷きに使わせてもらいます(・∀・)
2020-02-23(日) ばっきゅあっぷ [長年日記]
_ 互換性
植草家の鯖の15年以上前からあるバックアップテープはDAT72ドライブが不調で永らく使ってない。
でもってESXiでRAID1のストレージ上にghettoVCBで定期バックアップ落としてるし、さてどうしようってなってきた。
今更、中古でDAT160/320買ってもDDS3の後方互換がお㍗るので古いテープが読めない。
今後の面倒とコスパ考えたら、そろそろファイルとして管理してRDXあたりが妥協点か。
とりあえず、オクでDAT72ドライブの中身ゲットしたので、古いテープをtarで読み出してtarファイルに(?)する。
あとは人力か自動化かは後で考えるとして、vmdkベースでの取得かなぁ。
2020-02-12(水) IoT [長年日記]
_ 家の鍵
sesameでIoT化してみた。
もちろん、スマホから操作可能。
WiFiアダプタもセットしたのでBluetoothでの近場の操作だけじゃなくてネット経由で操作可能。
開閉よりも、実は外部から鍵の状態が分かる方がありがたい。
「アレ?鍵ちゃんと閉めたっけ?」と言うときにすぐ確認できる。
それだけじゃ面白くないので、せっかくネットに繋がってるしAWSのIoTエンタープライズボタンでコントロールできるようにしてみた。
クリック一発動作だけならメーカーの解説にあるサンプルコードで十分。
で、ウチの場合は
・玄関は鍵が2つ
・クリックで開くだけだと不便、ポケット内で押しちゃう誤動作も気になる
と言うことで、一発で2個のsesamiにコマンド投げるのと「クリック/ダブルクリック/長押し」を使い分けることにした。
誤動作防止と利便性を考えて
-シングルクリック:施錠
-ダブルクリック:解錠
-長押し:トグル
にしてみた。
これなら、間違って押したぐらいなら鍵が閉まるだけ。
もちろん、AWSIoTボタンのネットワークは自宅の無線LANにしか繋がらないようにしてあるのでとんでもないところからうっかり施錠や解錠することはない。
あと、print文を何カ所かに入れてあるので、AWSのログに変数/コマンドの履歴が残って確認が楽&開閉記録になるはず。
AWS IoTエンタープライズボタンはこちら
_ Lambdaのコードはこんな感じ
切り貼りだったり、実験で使ったのも含んでるので余計なimportとかスマソ。from http.client import HTTPSConnection import json import os import boto3 import logging def get_command(conn, url, headers): conn.request('GET', url, headers=headers) ret = conn.getresponse() if ret.getcode() == 200: sesame_status = json.loads(ret.read().decode('ascii', 'ignore')) return 'unlock' if sesame_status['locked'] else 'lock' else: raise RuntimeError('Server return error: %s' % ret.read()) def get_clicktype(event): try: clicktype = event['deviceEvent']['buttonClicked']['clickType'] except KeyError as err: clicktype = 'other' print(clicktype) return clicktype def lambda_handler(event, context): if 'DEVICE_ID1' not in os.environ: raise RuntimeError('DEVICE_ID1 not given') if 'DEVICE_ID2' not in os.environ: raise RuntimeError('DEVICE_ID2 not given') if 'APIKEY' not in os.environ: raise RuntimeError('APIKEY not given') if os.environ.get('COMMAND_L') not in ('lock', 'unlock', 'toggle'): raise RuntimeError('COMMAND_L must be "lock", "unlock" or "toggle"') if os.environ.get('COMMAND_S') not in ('lock', 'unlock', 'toggle'): raise RuntimeError('COMMAND_S must be "lock", "unlock" or "toggle"') if os.environ.get('COMMAND_D') not in ('lock', 'unlock', 'toggle'): raise RuntimeError('COMMAND_D must be "lock", "unlock" or "toggle"') click_type = get_clicktype(event) print(click_type) if click_type == "SINGLE": COMMAND = os.environ['COMMAND_S'] elif click_type == "DOUBLE": COMMAND = os.environ['COMMAND_D'] elif click_type == "LONG": COMMAND = os.environ['COMMAND_L'] else: COMMAND = "" #pass print(COMMAND) url_1 = '/public/sesame/%s' % os.environ['DEVICE_ID1'] url_2 = '/public/sesame/%s' % os.environ['DEVICE_ID2'] headers = { 'Authorization': os.environ['APIKEY'], 'Content-Type': 'application/json' } conn = HTTPSConnection('api.candyhouse.co') if COMMAND == "toggle": body1 = json.dumps({'command': get_command(conn, url_1, headers)}) else: body1 = json.dumps({'command': COMMAND}) conn.request('POST', url_1, headers=headers, body=body1) ret1 = conn.getresponse() conn = HTTPSConnection('api.candyhouse.co') if COMMAND == "toggle": body2 = json.dumps({'command': get_command(conn, url_2, headers)}) else: body2 = json.dumps({'command': COMMAND}) conn.request('POST', url_2, headers=headers, body=body2) print(body2) ret2 = conn.getresponse() try: response_body1 = json.loads(ret1.read().decode('ascii', 'ignore')) response_body2 = json.loads(ret2.read().decode('ascii', 'ignore')) if ret1.getcode() == 200: print('[SESAME1] Request successed with task_id=%(task_id)s' % response_body1) return response_body1 elif ret2.getcode() == 200: print('[SESAME2] Request successed with task_id=%(task_id)s' % response_body2) return response_body2 else: raise RuntimeError('Server return error for ID_1: %(error)s' % response_body1) raise RuntimeError('Server return error for ID_2: %(error)s' % response_body2) except json.decoder.JSONDecodeError: raise RuntimeError('Can not parse response for ID_1: %s' % response_body1) raise RuntimeError('Can not parse response for ID_2: %s' % response_body2)
_ 変数
Lambdaの環境変数は以下を指定
-----------------------------------------
APIKEY
:sesamiのサイトで取得
DEVICE_ID1
:1個目の鍵のID
DEVICE_ID2
:2個目の鍵のID
COMMAND_L
:toggle:長押し時のコマンド
COMMAND_S
:lock:シングルクリック時のコマンド
COMMAND_D
:unlock:ダブルクリック時のコマンド
-----------------------------------------
Tweets by RC31E | |||||||||
| |||||||||
| |||||||||
|