標準アプリを模倣するのも良いものだ
得たもの
- Timerの使い方
- Dateの使い方
- DateFormatterの使い方を少し
- 結局String(format:)で済ませた
- guard節の使い方
標準アプリを模倣するのも良いものだ
両方とも失敗していたが片方しかrootメールアドレスを設定していなかった。
PATH
もMAILTO
もcrontab -e
で一緒に書いちゃった方がいい。
デフォルト値はCronのコード内で定義されていた。
crontabの環境変数PATHについて調べてみた · DQNEO起業日記
# crontab -e */1 * * * * printenv > /tmp/printenv.txt # cat /tmp/printenv.txt SHELL=/bin/sh USER=root PATH=/usr/bin:/bin PWD=/root LANG=ja_JP.UTF-8 SHLVL=1 HOME=/root LOGNAME=root
出た
Q.ユーザー環境変数は引き継がれるの? A.されない
Crontabの環境変数はどうなっているのか、調べる - それマグで!
まぁカスタムしたPATHとか.bash_profile
に書いてあるし、cronが使えるとは思ってない。
ただ、/root/bin
も放り出されているなんて…
# grep PATH /etc/init.d/functions PATH="/sbin:/usr/sbin:/bin:/usr/bin" export PATH
「CentOS でデフォルトで設定される環境変数について」(1) Linux Square − @IT
まったく一致しない……。
# whereis -b crontab | cut -d' ' -f2 | xargs rpm -qf
cronie-1.4.4-15.el6_7.1.x86_64
2018/01/18 追記: fedorahosted.orgが引退した結果使用できなくなったリンク( https://git.fedorahosted.org/git/cronie.git )を差し替え
# git clone https://github.com/cronie-crond/cronie.git # cd cronie # git tag | grep 1.4.4 | xargs git checkout # find . -type d | grep -v '.git' . ./anacron ./contrib ./man ./pam ./src
# grep '/usr/bin:/bin' src/* src/pathnames.h:# define _PATH_DEFPATH "/usr/bin:/bin"
幸運なことにあからさまな要素がHit。 この値が利用される箇所を確認する。
# grep -n '_PATH_DEFPATH' src/* src/cron.c:177: if (putenv("PATH=" _PATH_DEFPATH) < 0) { src/entry.c:299: if (glue_strings(envstr, sizeof envstr, "PATH", _PATH_DEFPATH, '=')) { src/pathnames.h:61:#ifndef _PATH_DEFPATH src/pathnames.h:62:# define _PATH_DEFPATH "/usr/bin:/bin"
int main(int argc, char *argv[]) { /* 省略 */ if (putenv("PATH=" _PATH_DEFPATH) < 0) { log_it("CRON", pid, "DEATH", "can't putenv PATH", errno); exit(1); } /* 省略 */ }
大当たりだ。
C言語なんてめっきり触っておらず("PATH=" _PATH_DEFPATH)
なる記法にウッときた。
(業務でC言語に振れたのはせいぜいがObjective-Cでsqlite直接使ったときくらい)
気がする。
特定のリポジトリでしか使わない検索内容だったので、同じリポジトリの中にregexps.md
を作って書いた。
使い方も一緒に書いておけば忘れても大丈夫だ。
こんな感じで。
(:\([^()]+?\))[^:\s]+?(?= [a-zA-z]+?:|$)
// Base - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; // Erase matched-word - (BOOL)application didFinishLaunchingWithOptions // Use $1 when replace. - (BOOL)application:(UIApplication *) didFinishLaunchingWithOptions:(NSDictionary *)
Mac Book Airを買ってから最近放置気味のデスクトップPC。
1TBもあったストレージがいつの間にか残り100GBと少し。 ところがインストールしたプログラムもホームフォルダ以下も大して消費していない。なぜか。
答え) C:/直下にあるプレイ動画の録画ファイルが犯人だから。
録画はちょちょいとエンコードしたら実質不要。でも消すのはもったいない。
→そうだクラウド環境に保存しよう
頻繁に取り出すわけでもないし、Amazon GlacierとAmazon Unlimited Driveを比較してみた。
1TBを超える予定ならAmazon Unlimited Drive。 (使い勝手の面からもこっちでいいやという気持ち)
ファイル数や解凍関係で料金の変動はあれど、ひとまず月額の容量単価基準で答えは出た感ある。
おっ、先月Paypal払い失敗して購読解除されて既に見れないのに今月分の請求だけは追加できたゾ。
— 内臓ぶち壊し系プログラマ (@Yajamon) July 7, 2016
俺はどこから解約すればいいんだい???
直接振り込み分も反映されてないな????? #Enty pic.twitter.com/ek11vItFe0
手数料自腹で銀行振り込みした分も反映されてないからねこれ。 #Enty どうなんです? @enty_jp さん。 https://t.co/ZTf2l0U6bA
— 内臓ぶち壊し系プログラマ (@Yajamon) August 7, 2016
私が #Enty に #PayPal 負債を掛けられる流れを手書き図にしました。
— 内臓ぶち壊し系プログラマ (@Yajamon) August 8, 2016
サービス受けていないのに請求だけは積まれるの、ある種の架空請求になりつつある。 pic.twitter.com/riKZU1y9Cj
PayPalのお問い合わせフォームにて以下を送信。
以下の自動請求IDについて、支払い期日が
YYYY/MM/DD
の分から受け付けられておりません。自動請求ID
onetapが提供するサービスについても、同時期から提供を受けることができず、請求だけが加算されております。
サービス提供者に問い合わせても音沙汰がないため、Paypal様からキャンセルをお願いいたします。
PayPalから自動返信メールが届くので以下を返信。
PayPal 様
頂きました下記の例では解決いたしません。 お手数ですがご対応をお願いいたします。
2日弱くらいで返事Paypalからキャンセル処理の通知メールと、返信が届く。
健やかに月を跨げるようになった。
gist idやraw_urlを目視確認してからcurlするのは人間のすることじゃない、ということで。
# curl https://api.github.com/users/yajamon/gists | jq 'map(.files | select(has(".vimrc"))) | max_by(.[".vimrc"].size) | .[".vimrc"].raw_url' | xargs -n1 curl > .vimrc
jqでURL取り出してCurlに引き渡したかった。(しかも1件だけ)
「curl (標準出力 OR パイプ)」とかでggってもPostするデータをtextからとかそんなんばっか。
# cat url_list.txt | xargs -n1 curl
xargsコマンドを使って指定したコマンドを並列実行させる - 技術メモ帳
xargsの使い方を探しに行ってやっと見つけたんだけど、この情報のたどり着けなさ、みんなマジで困らなかったの…?