タグ

ブックマーク / jarp.does.notwork.org (66)

  • stdbufでunbuffer - jarp,

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

  • OpenSSH v7ではまる - jarp,

    rubyciもkimono labsで運用開始 しばらく動かしてみて問題ないようなのでkimono labsで運用開始。 ちょっとダブらせてみたら Action skipped about 2 hours ago Twitter error: 'Cannot send duplicate tweet.' とログが出てたので今までとまったく同じメッセージを吐かせることに成功した模様。 ■ ワールドトリガー 前に書いたとおりアニメでもドラマでも最近は終わってから一気に見るんだが、 ワールドトリガーはいつまで経っても終わりそうにない。 もう1年だよ。 しかも Wikipediaを見たら 2015年10月11日からは新シリーズ「逃亡者編」が放送され、完全なアニメオリジナル展開に入る予定 などと書かれているではないか。 というわけでとりあえず1話だけ見て切るかどうか判断しようとしたが、 気づいた

    n2s
    n2s 2015/09/30
  • zshのブレース展開 - jarp,

    ■ 著者名がない そういうケースもあるよな。 なんで名無しのコレクションができるのかと思ったら当たり前だ。 その時はファイル名に著者名も入れとけば、 いちいち設定しなくてもいいじゃんと思っていたわけで。 こういうときはディレクトリ名なら問題ないわけか。 著者名がない場合はディレクトリ名とすればいいわけだが、 そんな処理をsqlで書くのが面倒だ。 % sqlite3 books.db 'select ifnull(author,substr(file_path,instr(file_path,"/")+1,length(file_path)-length(file_name)-instr(file_path,"/")-1)) from books' やっぱ著者名をつけ直したほうがよさげだ。 ■ sqlite3のtrigger 今日もSony Reader。triggerはお手軽だけど設定した

  • 入力ファイルへのリダイレクト問題 #シェル芸 - Just another Ruby porter, 2015-5-a

    Amazon::SimpleDB::ClientがRecursive dependencyでインストールできない まあ、そういうわけでamazon-simpledb-cliがインストールできなくて、 他の方法を探していたというのが昨日の真相。 % cpan Amazon::SimpleDB::Client Reading '/home/eban/.cpan/Metadata' Database was generated on Sat, 02 May 2015 01:29:02 GMT Running install for module 'Amazon::SimpleDB::Client' Fetching with LWP: http://www.cpan.org/authors/id/D/DT/DTRISCHUK/Coro-Amazon-SimpleDB-0.04.tar.gz

    n2s
    n2s 2015/05/09
    手元では「Enable processing of meta-refresh tag」が既に無効になっていたので難を逃れた…
  • xargsにメタ文字を渡したい #シェル芸 - jarp,

    ■ 05. n-gram sedを使えば結構簡単だった。 % echo 'abcdefghijkl' | sed ':;h;s/\(...\).*/\1/p;g;s/.//;t;d' abc bcd cde def efg fgh ghi hij ijk jkl \(.\{3\}\)と書けばわかりやすいか。 ■ 06. 集合 #シェル芸 和集合、積集合、差集合はすべてjoinコマンドで可能。 % bi-gram() { echo "$1" | sed ':;h;s/\(.\{2\}\).*/\1/p;g;s/.//;t;d' | sort -u; } % bi-gram paraparaparadise ad ap ar di is pa ra se % bi-gram paragraph ag ap ar gr pa ph ra % join <(bi-gram paraparapara

    n2s
    n2s 2015/04/07
  • xargsの-Iオプション - jarp,

    ■ ネットオフからの入荷メールを見逃す 見逃すといっても朝来たメールを夜読んだというぐらいなんだけど、すでに買われていた。 最近メールはひどい時は1週間ぐらい読まないときもあるので、 別の手段で通知させることにした。 iftttを使うとgmailの検索機能+pocketに保存ってことができるので、 subjectを拾ってpocketで見ることにしてみた。 次はちゃんと気づけるか。 ■ バックグラウンドで動かしたプロセスをCTRL+Cで殺す方法 シェルスクリプトの中で&つけて実行してwaitで待つってのはよくやると思うが、 CTRL+Cで殺すとそいつらが残ってしまいkillしまくるというのもよくある。 そこでぐぐると、Stack Overflowでこんな記事が見つかった。 kill background process when shell script exit いろいろ方法はあるようだけ

    n2s
    n2s 2015/03/28
  • Ruby 2.1のNumeric#stepの秘密 - jarp,

    Ruby 2.1のNumeric#stepの秘密 ドキュメントを見るとRuby 2.1ではby:とかto:でも指定できるようになっている。 順番も気にしなくっていいわけだ。 実はそれ以外にも使い方があって、なんと省略も可能なのだ。 loop{|i|}でiがインクリメントされないかなあなんて妄想したことがあるが、 0.step{|i|}と書ける。無限に続く。 % ruby -ve 'p 0.step' ruby 2.1.2p95 (2014-05-08) [i386-linux-gnu] #<Enumerator: 0:step> % ruby -e '0.step{|i|break if i > 8; p i}' 0 1 2 3 4 5 6 7 8 by:を使えば偶数だけのstepも可能になる。 % ruby -e '0.step(by:2){|i|break if i > 8; p

    n2s
    n2s 2015/03/12
    「Ruby 2.1ではby:とかto:でも指定できるようになっている」「なんと省略も可能なのだ。loop{|i|}でiがインクリメントされないかなあなんて妄想したことがあるが、0.step{|i|}と書ける。無限に続く」
  • Just another Ruby porter, 2015-1-a

    ■ 大晦日元日素数 #シェル芸 実は20141231も20150101も素数ではない。 % factor 20141231 20150101 20141231: 11 1831021 20150101: 43 97 4831 一目ではわからないあたりが巧妙な釣りだ。しかしどっちかは素数かと思ったよ。 じゃあ当の大晦日元日素数はいつか、ごりごりと今世紀を全部探してみる。 % for i in {2001..2100};do echo ${i}1231 $[i+1]0101 | factor | xargs | awk 'NF==4{print $2, $4}'; done 20201231 20210101 20291231 20300101 意外に少ない。2020年になったら思い出そう。 ■ 文字の長さ順に並べる 例のQ6は % printf "%s\n" {a,}{b,}{c,}{d,

    n2s
    n2s 2015/01/07
    --data-urlencode, --get, -w '%{url_effective}\n'
  • Google Chromeのプロファイルを削除 - jarp,

    ■ awkで約分 #シェル芸 ユークリッドの互除法を使うというのをどこかで見かけたのでawkで書いてみた。 ユークリッドの互除法を使えば最大公約数が簡単に求められる。 入力を m, n (m ≧ n) とする。 n = 0 なら、 m を出力してアルゴリズムを終了する。 m を n で割った余りを新たに n とし、更に 元のnを新たにm とし 2. に戻る。 awkでこれを表現すると while (n) { r = m % n m = n n = r } となる。これをゴルフすると while (n = m % (m = n)); となる。 先日の勉強会のQ7にあてはめて前半の通分を略すと % echo 1532 2880 | awk '{m = $1; n = $2; while(n = m % (m = n)); print $1 / m "/" $2 / m}' 383/720 とな

  • jqを使ってLTSVをJSONに変換する - jarp,

    fitbitからのお知らせ 常にNexus7と同期させるようにしたためか、 fitbitのバッテリーの残量が少なくなるとメールを送ってくる。 これはかなり助かる。 同期してるとデバイスで見る機会が減るので、 気づかずに完全にOFFになってるときがあるんだよねえ。 ■ jqを使ってLTSVをJSONに変換する jqって何でもありだな。 % echo $'foo:1\tbar:2\nfoo:3\tbar:4' foo:1 bar:2 foo:3 bar:4 % echo $'foo:1\tbar:2\nfoo:3\tbar:4' | jq -s -R 'split("\n")|map(split("\t")|map(split(":")|{"key":.[0],"value":.[1:]|join(":")})|from_entries)' [ { "foo": "1", "bar": "

    n2s
    n2s 2014/12/03
  • sort -uの挙動 - jarp,

    PDFの綴じ方を右に Acrobatだとプロパティの詳細設定に読み上げオプションってのがあって、 綴じ方を右にできる。が、これは数が多いとやってらんない。 ぐぐってみると/ViewerPreferences<</Direction/R2L>>を追加すればいいらしいので、 % sed -i~ 's,/Type \?/Catalog,&/ViewerPreferences<</Direction/R2L>>,' foo.pdf としてみたが、どうにも壊れたPDFになったしまう。試しにこの壊れてるPDFを % pdftk foo.pdf output foo-fixed.pdf としてみたらきれいなPDFになった。とりあえず、これでいいか。 ■ pdfsam pdftkできれいになったのは偶然のようで、 いろいろ試すと右綴じ指定が消えることのほうが多かった。 そこでちゃんとしたツールを探して

    n2s
    n2s 2014/10/17
  • feed reader - jarp,

    ■ gawk length(array)の過去のバグ 斎藤さんにgawkのバグがあったと指摘されたので調べてみた。 lengthが配列対応されたのが3.1.5だったが、 どうも対応が不十分で関数内で使うとスカラー扱いになってしまうというバグだった。 3.1.7で修正されていた。 % gawk-3.1.5 'BEGIN{array[1]=1;print xlength(array)} function xlength(a){return length(a)}' gawk-3.1.5: 致命的: スカラーコンテキストで配列 `a (array から)' を使用する試みです % gawk-3.1.6 'BEGIN{array[1]=1;print xlength(array)} function xlength(a){return length(a)}' gawk-3.1.6: 致命的: スカラ

    n2s
    n2s 2014/10/05
  • findの罠 - jarp,

    ■ multicropから必要なところだけを抜き出してみた 肝心要は-draw "matte X,Y floodfill"だった。 colorとは違いmatte channelつまりalpha channelを書き換える。 これで簡単にかたまりごとにマスクを作ることが可能になる。 スキャンした画像に対してはこれだけでいい。 % convert foo.pbm -fill none -draw 'matte 500,500 floodfill' -alpha extract -trim -format '%wx%h%O' info: 1360x1971+114+235 -alpha extractでcurrent channelをmatte channelで置き換え、trimした結果を表示。 実際はこれだと500,500と決め打ちになってるのがちょっとまずい。 黒にぶちあたればいいが、白にな

    n2s
    n2s 2014/08/23
    はははは。そのうちo(オクテット)採用するところとかありそう。
  • bashで間接的な変数参照 - jarp,

    ■ trで文字列の繰り返し aからmを0へ、nからzを1へ変換したいとする。 trでやるならこんな感じになる。 % bash -c 'echo {a..z}' | tr a-z 00000000000001 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 足りない分は最後の文字が使われるので、 1はまあそれでいいんだけど、0を何とかしたい。 % bash -c 'echo {a..z}' | tr a-m 0 | tr n-z 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 2回に分けるのはわかりやすいが、man trしてみたら [CHAR*REPEAT] REPEAT copies of CHAR, REPEAT octal if starting with 0 という記述

    n2s
    n2s 2014/07/21
    zshでは${(P)foo}、bashでも${!foo}でシンボリックリファレンス的なことができる、と
  • grepの代わりにsort,uniqで代用 - jarp,

    ■ findでサイズが0のファイルをマークする -printfでサイズを表示するようにして、sedなりで変更するという方法が一般的だと思うが、 findだけで可能なのかやってみた。 準備。 % mkdir tmp % repeat 9 echo foo > tmp/$[++i].txt % touch tmp/0.txt % ls -l tmp 合計 36 -rw-r--r-- 1 eban eban 0 2014-07-01 23:23:59 0.txt -rw-r--r-- 1 eban eban 4 2014-07-01 23:23:52 1.txt -rw-r--r-- 1 eban eban 4 2014-07-01 23:23:52 2.txt -rw-r--r-- 1 eban eban 4 2014-07-01 23:23:52 3.txt -rw-r--r-- 1 eba

    n2s
    n2s 2014/07/10
  • zshのsubstring - jarp,

    ■ zshのsubstring bashと同じように % foo=barbaz; echo ${foo:2:3} rba という感じの表記も可能だが、これはまさにbash互換なので0から数える仕様になってる。 startとlengthだ。一方zsh来の記法は % foo=barbaz; echo $foo[3,5] rba のように1から数えてstart,endになってる。なんともすごい世界だ。 この記法だと代入もできて % foo=barbaz; foo[3,5]=hoge; echo $foo bahogez 左辺にもなれる。start,endなので % time=1234; time[3,2]=:; echo $time 12:34 のようにendをstart-1に指定すればその直前に挿入にすることができる。 ■ GMANEが更新されない RSSが更新されないのが解消されたと思った

    n2s
    n2s 2014/05/22
  • zshで(N-/)を使うとき - jarp,

    ■ RD-H1がメールを受け取ってくれない 新たな環境になってからRD-H1のネットワーク設定は放置状態だったが、 まあ、192.168.0.0/24なのは変わりないし問題ないだろうと思ったら、 メールを受け取ってくれない。しかも時計がちょっとずれてる。 ということは全然外とつながってないわけで見直してみると、 今回新たに設置されたルータにはDNS機能がないということがわかった。 RD-H1はHTTPサーバが内蔵していてもろもろブラウザから設定できたりするので、 DHCPではなく固定IPアドレスで運用していたが、それが仇になった形。 面倒なので8.8.8.8にしようかと思ったが、最近あんなことがあっただけに、 DHCPが配ってるDNSにした。これでメールもNTPもok。 2015年でデジアナ変換は終了するらしいが、それ以降もまだまだ使えてしまうな。 ■ zshのhistoryのmetafy

    n2s
    n2s 2014/03/31
  • faketimeで任意の日時でコマンド実行 - jarp,

    ■ sshでSendEnvをキャンセルさせるには sshするとLANG等が勝手に引き継がれるのは、Ubuntuだと/etc/ssh/ssh_configに SendEnv LANG LC_* と書いてあるからだとわかったが、これをやめる方法が見つからない。 ぐぐってみるとなんとほんとにないそうだ。 Bug 1285 – provide fallback options /etc/ssh/ssh_config 2007年に報告されている。最後の2013年11月には Damien Miller 2013-11-16 02:03:24 EST Created attachment 2375 [details] Add UnSendEnv option This adds an UnSendEnv option that allows cancelling SendEnv. It supports

    n2s
    n2s 2014/03/17
  • またssh -ttの出番 - jarp,

    ■ code golf - String of alphanumeric characters to a sorted list of comma-separated ranges このRubyの解なんだけど、与えられた文字以外を改行($/)に変換するという発想がすばらしい。 puts [*?0..?Z].join.tr('^ABC321STPpJqZZr0'.upcase,' ').gsub(/\B\w+\B/,?-).scan(/\S+/)*', ' puts [*?0..?Z].join.tr('^ABC321STPpJqZZr0'.upcase,$/).gsub(/\B\w+\B/,?-).scan(/.+/)*', ' puts [*?0..?Z].join.tr('^ABC321STPpJqZZr0'.upcase,$/).gsub(/\B.+\B/,?-).scan(/.+/

    n2s
    n2s 2014/02/15
  • irbの補完を1回のタブで済ます方法 - Just another Ruby porter, 2014-1-a

    ■ irbの補完を1回のタブで済ます方法 ~/.irbrcに require 'irb/completion' と書いておけば補完できるが、 候補が複数ある場合はタブを2回押さないといけない。たとえば % irb irb(main):001:0> "hoge".u<TAB><TAB> "hoge".unpack "hoge".untrust "hoge".upcase "hoge".upto "hoge".untaint "hoge".untrusted? "hoge".upcase! irb(main):001:0> とこんな感じに。これを1回のタブを押すだけで候補を出すようにするには~/.inpurcに set show-all-if-ambiguous on と書いておけばいい。 ただinputrcなのでこのままではreadlineを使ってるソフトは全部そのような挙動になる。 bas

    n2s
    n2s 2014/01/05