Just another Ruby porter,

〜2016年3月上旬〜


<Older(,) | Newer(.)> | Recent(/)>> | RDF

2016-03-01 (Tue)

当初の予定通りIFTTT+Werckerでbotを作成

curlで取ってきてawkで抜き出して、twitterへポストするだけなので適当に用意。
後はIFTTTのDate&Timeで1時間毎にWerckerのWebhookを叩けばいいだけ。
最初は順調だったが、なぜかDate&Timeが不調で数時間置きになったり。
まあでもログがしっかり残るので原因は特定しやすいし、
エラーになればメールも飛んでくるし、リトライもできるしで、
bot環境としてはかなりいいと思う。


2016-03-02 (Wed)

CloudWatch Logs AWSCLI Plugin

いやーこんなものがあろうとは。
Monitor Website Latency using CloudWatch Logs CLI Plugin - AWS DevOps Blog - Amazon Web Services
これを入れるとaws logs pushとaws logs pullが使えるようになる。
エージェントのコマンドライン版というかエージェントは内部でこれを使ってるんだと思うが、
パイプで渡せるので非常に重宝する。

% seq 1000 | aws logs push --log-group-name group --log-stream-name seq

とするだけでCloudWatch Logsに送れる。また、

% aws logs pull --follow --log-group-name group --log-stream-name seq

でtail -f的な使い方が可能になる。


2016-03-03 (Thu)

小ネタ wコマンド

wは端末のサイズを見て折り返さないようにtruncateしてるので、

% w | cat

とすれば全部出てくる。


2016-03-04 (Fri)

SSL接続エラー

Google ChromeがなぜかSSL接続エラーでログインできない。
Chromeを上げるかと思ったが、そういえばUbuntuにはChromeがなくて
本家から取ってきていたことに気づいた。ああ、だから古いのか。
というわけでまた本家からdebを取ってきた。
でもPPAを追加したはずなんだけどな。


2016-03-05 (Sat)

botの状況

たまに抜ける原因が2つあることがわかった。
IFTTTのDate&Timeは毎時15分という設定してるが、これがたまに発火しないときがある。
それとtenki.jp側が15分だとまだ更新してないときがある。
後者はちょっと時間を置いてretryすればいけそうだが、たまに発火しないのはこまるなあ。
なんか別にそんなサービスがあるといいんだが。


2016-03-06 (Sun)

curlの--libcurlオプション

man curlしてたら面白いオプションを見つけた。

--libcurl <file>
       Append this option to any ordinary curl command line, and you will get
       a libcurl-using  C  source  code written to the file that does the
       equivalent of what your command-line operation does!

       If this option is used several times, the last given file name will be used. (Added in 7.16.1)

Cのソースコードを吐くらしい。

% curl -s google.com                       
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.jp/?gfe_rd=cr&amp;ei=xlvcVtH2E-X98wfoqb74DQ">here</A>.
</BODY></HTML>
% curl -s -o /dev/null --libcurl - google.com | tee google.c
/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html
 ************************************************************************/
#include <curl/curl.h>

int main(int argc, char *argv[])
{
  CURLcode ret;
  CURL *hnd;

  hnd = curl_easy_init();
  curl_easy_setopt(hnd, CURLOPT_URL, "google.com");
  curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L);
  curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.43.0");
  curl_easy_setopt(hnd, CURLOPT_MAXREDIRS, 50L);
  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
  CURLOPT_HEADERFUNCTION set to a functionpointer
  CURLOPT_HEADERDATA set to a objectpointer

  */

  ret = curl_easy_perform(hnd);

  curl_easy_cleanup(hnd);
  hnd = NULL;

  return (int)ret;
}
/**** End of sample code ****/
% gcc google.c -lcurl
% ./a.out
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.jp/?gfe_rd=cr&amp;ei=5VvcVqqVCOH98weM0L6AAQ">here</A>.
</BODY></HTML>

これはなかなか楽しい。
-Lオプションをつけたらちゃんとそれに相当するコードも追加される。

% diff -U1 google{,1}.c
--- google.c	2016-03-07 01:33:22.179676872 +0900
+++ google1.c	2016-03-07 01:38:05.817188787 +0900
@@ -14,2 +14,3 @@
   curl_easy_setopt(hnd, CURLOPT_NOPROGRESS, 1L);
+  curl_easy_setopt(hnd, CURLOPT_FOLLOWLOCATION, 1L);
   curl_easy_setopt(hnd, CURLOPT_USERAGENT, "curl/7.43.0");

これを静的にリンクすれば持ち運び便利かもと思ったが、
依存するライブラリの数が多すぎてなんかでかくなりそう。

% ldd a.out | wc -l
39

2016-03-07 (Mon)

IFTTTのDate&Time

もうすっかり:15固定と思い込んでいたからretryするしかないなと修正始めたが、
ふとIFTTTのレシピを見直したら15分置きに設定できると書いてあった。
まあ、そうだよなあ。:15なんて半端な時刻だけってのも変だし。


2016-03-08 (Tue)

WindowsのFirefoxを64bit版に

32bit版はProgram Files (x86)にインストールされていたが、
64bit版はProgram Filesにインストールされるので共存可能。
まあ、すぐ32版は消しちゃったので本当に共存可能だったのかどうかわかんけど。
出た当初は64bit版もなぜか(x86)にインストールされてたようで。でもこれはバグっぽい。
設定や拡張やら全部元のprofileを使うようで全然問題ない。
about:supportでユーザエージェントを確認する。

Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0

Win64; x64となっていればok。

ふとThunderbirdはどうだっけと確認してみるとすでに64bitだった。
こっちはいつからだったか思い出せない。


2016-03-09 (Wed)

stdbufでunbuffer

stdoutがttyじゃないとbufferingするコマンドは多いがして欲しくないときがある。
たとえばログにNULが入っているのでそれを取り除きながらCloudWatch Logsに送りたいなんてときは、

% tail -f foo.log | tr -d '\0' | aws logs push ...

とすればよさげだが、これではtrがbufferingしてしまっていつまで経ってもpushされない。
ある程度のサイズがたまれば吐き出されるんだろうけど、すぐに見たい場合に困る。
そこでstdbufだ。これでstdoutをline bufferモードにしてあげれば1行単位で反映される。
使い方も簡単で

% tail -f foo.log | stdbuf -oL tr -d '\0' | aws logs push ...

とするだけでいい。-o0にすれば完全にunbuffer modeになるがそこまですると効率が悪そう。


2016-03-10 (Thu)

Google Chromeのsmooth scrollを無効にする

Chromeが上がったはいいがなぜかsmooth scrollになってしまっていやな感じ。
Firefoxもそうだけどなんでそっちをdefaultにするのか。
設定見ても出てこないし、じゃあ後はchrome://flagsぐらいかと確認したらあった。
というわけで 滑らかなスクロールを無効にして再起動すればok。


<Older(,) | Newer(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!