読者です 読者をやめる 読者になる 読者になる

ようへいの日々精進XP

よかろうもん

2017 年 05 月 25 日(木)

ジョギング

夕飯

  • よし本で 1000 ベロセット

2017 年 05 月 24 日(水)

ジョギング

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

夕飯

ジャヤでエビとホタテのトマトクリームパスタ。ソースの濃度も丁度良くて、パスタの茹で加減がいやらしい位に絶妙だった。

2017 年 05 月 23 日(火)

ジョギング

魔の火曜日

よし本もジャヤも休みという…ランチはどうしよう、夜、ちょっと呑みにも行けない。残念。

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

2017 年 05 月 22 日(月)

ジョギング

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

すいません

手抜き日記です。

2017 年 05 月 21 日(日)

ジョギング

日課

  • (腕立て x 30 + 腹筋 x 30) x 3

ジャズライブ

おじさんが学生時代に所属していたジャズバンドの同窓会が香椎であるとのことで、お言葉に甘えて参加させて頂いたが、年齢を感じさせない圧倒的なパフォーマンスに圧倒されて帰ってきた。もう、お年寄りと言ってはいけないかもしれない彼らにパワーを頂いた気がする。

Datadog API の mruby クライアントを直している

github.com

一年くらい前に作ったんだけど、何でこんな作りになっているんだろうと自分でも解らなくなったので、ほぼ 1 から作り直している。

2017 年 05 月 20 日(土)

義父宅にて

朝から庭の草むしりなどで汗を流す。

夕飯は

パスタを作った。

乱切りにしたトマトを煮るところから始めるのだが、今回はトマトを煮る際にコンソメを 1 個入れてみたら、これまでで一番美味しいと思えるパスタになった気がする。

ワンラインで Unixtime から Datetime に変換したいくさ

はじめに

ぽーんと unixtime を渡されても、これはいったい何時何分なんやって思うことがある。

そんな時にコマンドラインでちゃちゃっと変換出来たらカッコイイかな…ということで…

Ruby だと

$ ruby -v
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

$ ruby -e 'p Time.at(1495248989)'
2017-05-20 02:56:29 +0000

Python だと

$ python -V
Python 2.7.12

$ python -c 'import datetime; print datetime.datetime.fromtimestamp(1495248989)'
2017-05-20 02:56:29

bash だと

ubuntu-xenial だと…

$ date -d @1495248989 もしくは date --date='@1495248989'
Sat May 20 02:56:29 UTC 2017

man date すると以下のように Example が提供されている。

...
EXAMPLES
       Convert seconds since the epoch (1970-01-01 UTC) to a date

              $ date --date='@2147483647'
...

ちなみに、MacOS X El Capitan だと…

$ date -r 1495248989
Sat May 20 11:56:29 JST 2017

こちらも man date すると以下のように記述されている。

     -r seconds
             Print the date and time represented by seconds, where seconds is the number of seconds since the Epoch (00:00:00 UTC, January 1, 1970; see time(3)), and can be specified in
             decimal, octal, or hex.

以上

メモでした。

BashRuby が少しばかりシンプルですな。

Ruby の find と select

うっかり混同しそうになっていたので

忘れないうちにメモっておきたいと思います。

参考

有難うございます。

Enumerable モジュール

上記サイトを言葉を引用させて頂くと、

Enumerableモジュールは、配列やハッシュなど集合を表すクラスに数え上げや検索などのメソッドを提供します。

find や select は Enumerable モジュールにより提供されているとのことです。

メモ

環境

ubuntu@ubuntu-xenial:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

ubuntu@ubuntu-xenial:~$ ruby --version
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

select

以下のように 2 で割り切れる要素全てを配列で返す。つまり、{ } ブロックが true となる要素全てを配列で返すのが select ということでしょうか。

irb(main):001:0> [1, 2, 3, 4, 5, 6].select { |n| n % 2 == 0 }
=> [2, 4, 6]

ちなみに select と同じ機能を提供するが find_all で、以下のように同じ結果が得られます。

irb(main):003:0> [1, 2, 3, 4, 5, 6].find_all { |n| n % 2 == 0 }
=> [2, 4, 6]

find

以下のように 2 で割り切れる要素の最初の要素を返す。select に対して { } ブロックが true となる最初の要素を返すのが find ということでしょうか。

irb(main):002:0> [1, 2, 3, 4, 5, 6].find { |n| n % 2 == 0 }
=> 2

find と同じ機能を提供するのが detect で、以下のように同じ結果が得られます。

irb(main):004:0> [1, 2, 3, 4, 5, 6].detect { |n| n % 2 == 0 }
=> 2

以上

select は

  • ブロックが true となる要素全部を配列で返します
  • find_all という別名があります

find

  • ブロックが true となる最初の要素を返します
  • detect という別名があります

2017 年 05 月 19 日(金)

ジョギング

やっとこさ

平常モードっぽ一週間を過ごせたけど、今頃になって疲れがじわーっときている。

読みたい本も積読状態。

cron で少しばかりくろーん(苦労)した話

はじめに

これは

cron の設定で少しばかりくろーん(苦労)した話をざっくりと纏めたものです。

結局、man cron して解決しました。

環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"

cron で動かすとあるアプリケーション

cron.txt

crontab で定義せずに /etc/cron.d/ 以下に定義ファイルを置くのが個人的なトレンド。

$ echo "* * * * * echo 'test' >> /tmp/test.txt" > cron.txt
$ sudo ln -s cron.txt /etc/cron.d/test_cron

シンボリックリンク/etc/cron.d/ 以下に設定。

完璧…(だと思った。

くろーん(苦労)の始まり

tail -f /var/log/syslog (1)

May 19 10:51:01 ubuntu-xenial cron[1077]: (*system*test_cron) WRONG FILE OWNER (/etc/cron.d/test_cron)

おや、なんかエラーが出て cron.txt で指定した処理が動いていないぞ。

エラーメッセージにも出ているように /etc/cron.d/test_cron の元ファイルである cron.txt のオーナーを変更しよう。

$ sudo chown root:root cron.txt

よし、これで安心。

tail -f /var/log/syslog (2)

May 19 10:52:01 ubuntu-xenial cron[1077]: (*system*test_cron) INSECURE MODE (group/other writable) (/etc/cron.d/test_cron)

なぬ、パーミッション問題… Group と Other には書き込み権限を付けていたらダメなんか。

改めて、cron.txt の権限を 644 に変更。

$ sudo chown 644 cron.txt

きっと大丈夫でしょう。

tail -f /var/log/syslog (3)

May 19 12:09:01 ubuntu-xenial cron[1077]: Error: bad username; while reading /etc/cron.d/test_cron
May 19 12:09:01 ubuntu-xenial cron[1077]: (*system*test_cron) ERROR (Syntax error, this crontab file will be ignored)

えー、そうなのか…。

/etc/cron.d/ 以下に設置する cron の定義にはユーザー名を明記する必要があるようです。

$ sudo sh -c "echo \"* * * * * ubuntu echo 'test' >> /tmp/test.txt\" > cron.txt"

やっとこさ

動いた。

$ cat /tmp/test.txt
test
...
test

man cron

/etc/cron.d/ 以下に設置するファイルのオーナーと権限

該当していそうなところを抜粋。

/etc/crontab and the files in /etc/cron.d must be owned by root, and must not be group- or other-writable. In contrast to the spool area, the files under /etc/cron.d or the files under /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly and /etc/cron.monthly may also be symlinks, provided that both the symlink and the file it points to are owned by root. The files under /etc/cron.d do not need to be executable, while the files under /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly and /etc/cron.monthly do, as they are run by run-parts (see run-parts(8) for more information).

ざっくり要約すると…

  • /etc/crontab/etc/cron.d 以下に置くファイルのオーナーは root であること
  • Group と Other に書き込み権限が無いこと(644 ってことかな)
  • シンボリックな場合でも、シンボリックリンク及びリンク元のファイルもオーナーは root であること
  • /etc/cron.d 以下のファイルには実行権限は要らないよ

/etc/cron.d/ 以下に設置するファイルのフォーマット

同じく、該当していそうなところを抜粋。

Support for /etc/cron.d is included in the cron daemon itself, which handles this location as the system-wide crontab spool. This directory can contain any file defining tasks following the format used in /etc/crontab, i.e. unlike the user cron spool, these files must provide the username to run the task as in the task definition.

こちらもざっくり意訳。

/etc/cron.d 以下はシステムワイドな crontab スプールとして cron デーモンから利用されるので、個々のタスク定義には実行するユーザー名を明記する必要がある。

ということで

man 有難い

ググるより前に man が必要マン。

cron って

奥深い。

出直してきます

cron で少しばかりくろーん(苦労)した話でした。

お疲れさまでした。