〜2015年6月中旬〜
Debian baseのSolydXでLambdaをawscliから起動すると、
なぜかdata must be a byte stringと言われて起動しない。
ぐぐってみたらどうも
pyopensslのせいらしい。というわけでawscliが抱えているpyopensslの名前を変えてみた。
% aws lambda invoke --function-name foo --payload file://event.json out.json data must be a byte string % locate pyopenssl /usr/lib/python2.7/dist-packages/urllib3/contrib/pyopenssl.py /usr/lib/python2.7/dist-packages/urllib3/contrib/pyopenssl.pyc /usr/local/lib/python2.7/dist-packages/botocore/vendored/requests/packages/urllib3/contrib/pyopenssl.py /usr/local/lib/python2.7/dist-packages/botocore/vendored/requests/packages/urllib3/contrib/pyopenssl.pyc % cd /usr/local/lib/python2.7/dist-packages/botocore/vendored/requests/packages/urllib3/contrib/ % sudo mv pyopenssl.py{,.orig} % sudo mv pyopenssl.pyc{,.orig} % cd ~/git/cit_avail_measure/foo % aws lambda invoke --function-name foo --payload file://event.json out.json { "StatusCode": 200 }
よさげだ。
デジタルノイズが乗ってる感じ。アンテナレベルを調べてみるとやはりかなり低い。
またMXだな。周波数が低いところがだめっぽい。
そういえばブースターの調整してなかったんでいじったらまだ上げられた。
しかしレベル低すぎるな。
helpを見るとbase64でencodeしろと出てくるが嘘。
% aws lambda update-function-code help | col -b | grep -A1 -e '--zip-file (' --zip-file (blob) Based64-encoded .zip file containing your packaged source code. % base64 upload.zip > upload.zip.b64 % aws lambda update-function-code --function-name test --zip-file fileb://upload.zip.b64 --zip-file must be a file with the fileb:// prefix. Example usage: --zip-file fileb://path/to/file.zipこのエラーメッセージが正しくて、zipファイルをそのまま指定すればok。
SlackにURL貼るとぴろっと出てくる仕組みを調べてたら、
そんなprotocolがあると知った。
1記事1ページなら静的HTMLも再生成すればいけるが、
複数の記事があると全然だめだと気づいた。
JavaScriptでやったとしても、普通は単にGETしてるだけなので意味がない。
静的HTMLじゃ無理があるか。というか分割すればいいんだよな。
日記といいつつ後から書くことが多い。
なら日付とっぱらってblog形式にすればいい気もするが、
15年も続けてるとそれもなんだしな。
それはそれとして、日記という形態を取っているので書くときは日付を指定することになる。
日曜まで書いたから月曜分を指定したいときは、日付じゃなくて'last mon'と書ける。
昨日ならyesterdayだ。
このあたりはdate -dでparseしてるだけなんだけど意外に柔軟で結構気に入っている。
去年の日記だったら'last year'で見れるし。
月曜から急にCoffeeScriptを使い始めているが、
やはりインデントでブロックというのは慣れない。
vim-coffee-scriptを入れて=で整形しても全然変化がないことが多くて戸惑う。
地味に困るのは%押しても対応するものがないので飛べないことだ。
というわけでvim-indent-guidesが必須とも言える。
これがないとreturnをどこに置いていいやら狙いが定まらない。
お約束なのでとりあえずやっとく。
% coffee -e 'console.log [["Fizz"][i%3]]+[["Buzz"][i%5]]||i for i in [1..15]' 1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
なんかいろいろやってるうちに見つけたんだけど、[undefined]+""は""になる。
% coffee -e 'console.log undefined' undefined % coffee -e 'console.log [undefined]' [ undefined ] % coffee -e 'console.log undefined+""' undefined % coffee -e 'console.log [undefined]+""'
これはCoffeeScriptというよりJavaScriptの仕様なのかも。
Q1のjson形式にするほうをjqで。twitterに上げたやつはtonumberを忘れてた。
% jq -csrR './"\n"|map(./" ")|group_by(.[0])|map({"key":.[0][0],"value":map(.[1]|tonumber)})|from_entries' Q1.txt {"a":[1,2,3],"b":[4,5]}
group_byが肝。
% jq -srR './"\n"|map(./" ")|group_by(.[0])' Q1.txt [ [ [ "a", "1" ], [ "a", "2" ], [ "a", "3" ] ], [ [ "b", "4" ], [ "b", "5" ] ] ]
あとはfrom_entriesが食える形式に合わせるだけ。
% jq -srR './"\n"|map(./" ")|group_by(.[0])|map({"key":.[0][0],"value":map(.[1]|tonumber)})' Q1.txt [ { "key": "a", "value": [ 1, 2, 3 ] }, { "key": "b", "value": [ 4, 5 ] } ]
調べればどこかに書いてあるかと思うけど、お手軽に試せるので確認してみた。
% coffee -pe '[1..21]' (function() { [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]; }).call(this); % coffee -pe '[1..22]' (function() { var i, results; (function() { results = []; for (i = 1; i <= 22; i++){ results.push(i); } return results; }).apply(this); }).call(this);
なぜ21なのか。
Pioneerのセットトップボックスのチャンネル表示が、
再生中は再生時間を意味するとこに初めて気づいた。
なんか変化はしていたが、チャンネルのスキャンでもしてるのかと思った。
3桁じゃなくて4桁だったらまだ想像できたかもしれないが。