パーフェクトPHPの「6章 Webアプリケーション入門」をPDOで書き直した
ターミナルで、shell-init: error retrieving current directory: getcwd: cannot access parent directories: というエラーが出た場合の対処
コマンドが実行できない!となって焦ったエラーですが、原因は大したことないものでした。
原因
カレントディレクトリが存在しないため、発生しているエラーです。
解決方法
存在していることがわかっている、別のディレクトリに移動すれば解決します。
参考
SSHログインで「shell-init: error retrieving current directory」となるのを調べたら意外に時間がかかったという話 - \ay diary
Carbonで、日付をゼロサプレスする
PHPでCarbonを使って、日付を制御しようと思ったのですが、ゼロサプレスの方法が分からなかったのでメモ。
そもそもCarbonって?
PHPの日付操作のライブラリです。
Laravelなどのフレームワークにも取り込まれています。
carbon.nesbot.com
使い方はこの辺が参考になります。
PHPの便利な日時操作ライブラリCarbonで曜日を日本語で表示する | A Small, Good Thing – blog
本題
結論から言うと、ゼロサプレスしたいフォーマットの前に -
をつけるだけです。
e.g. 本日の月日をゼロサプレスしたい場合
Carbon::now()->formatLocalized('%-m月%-d日');
簡単ですね。
sprintf
などの書式をわかっている人なら当たり前なんだろうなあと思いながら、僕は知りませんでした。
ネットでも調べた感じなさそうだったので、同じ轍を踏む人がいないように書いておきます。
社内で勉強会を開きました - その後
以前に書いた通り、先週から勉強会を開いています。 yinm.hatenadiary.jp
今日は第2回目ということで、前回の反省点を踏まえて、改善してみました。
実際に行ったことをメモしておきます。
まとめノートを作る
前回は、1項を読むごとにホワイトボードにまとめを書くという形で行ったのですが、進みが遅いことや、読む範囲の粒度が小さいため内容がまとめにくいといった指摘がありました。
ということで、今回はあらかじめ僕の方でまとめノートを作ってみました。節単位です。
github.com
勉強会では、節単位で読み手を交換して、読み終わるたびに、このまとめノートを僕が説明する形にしてみました。
スピードも上がったし、概ね良さそうでした。
とりあえず、次回も同じ形で進めていこうと思います。
唯一問題は、このノートを作る時間とモチベーションを、保てるかなー?というところでしょうか・・・!
勉強会・読書会に関する記事などを読んだ
世の中ではたくさんの勉強会が開かれているわけなので、そこから何か学べないかなと思って、いくらか記事を読んでみました。
いいなあと思った記事は次のものです。「勉強会って何だろうね?」という根本的な部分を考えられて良かったです。
まとめ
試行錯誤しながら、のらりくらりやっていきます。いい勉強会にできたらいいな。
MacのHomebrewのアップデートを、cronで自動化する
Macでcronを使って、Homebrewのアップデートを自動化してみました。
作業したことをメモしておきます。
なお、このエントリでは、それぞれの見出しごとに関連しそうな参照リンクを書く形式にしています。
cronの設定前にすること
事前に設定が必要なことがいくつかあります。
この設定をしていないと、cronを登録しても保存されずに、エラーで終了してしまうので、先に設定を済ましておきましょう。
- Editorの設定を行います(使っているシェルに合わせて、任意のエディタを設定)
# .zshrcなどシェルの設定ファイル export EDITOR=vim
- 上記でエディタをVimにした場合は、バックアップファイルを作成しないようにしておきましょう
" .vimrc set backupskip=/tmp/*,/private/tmp/*
cronの設定を行う
crontab
コマンドを使用します(cron tableの略)crontab -e
で編集が行えるのですが、タイポによる設定の削除を防ぐために、以下の方法を使うことが推奨です- タイポによる削除は、この辺りを参照 crontab -r を安全にする - Kentaro Kuribayashi's blog
crontab -l > 任意のパス/crontab # 現在のcronの設定を、任意のパスに書き出す vim 任意のパス/crontab # 上記の書き出したcronを編集 crontab < 任意のパス/crontab # 編集したcronを、実行するcronに反映する
- さらに、gitなどを使って、バージョン管理しておけば、crontabを削除しても大丈夫なので、やっておきましょう
cronの書式
- いよいよcronの設定を行うのですが、書式は次の形になっています
分 時 日 月 曜日 (実行ユーザー名) cronで実行したいコマンド・スクリプト
ここまでやれば、設定は完了です。
後は設定した時間が来れば、実行されるはず!なのですが、うまく行かなかった人(私です・・・)のために、デバッグ方法や、ハマりそうなポイントを書いておきます。
うまくいかない時は?
デバッグする時は、出力をファイルにリダイレクトして確認する
- 自分の実行したいコマンドに、
1>&2
をつけるなどして、エラー出力をリダイレクトするようにしましょう
- 自分の実行したいコマンドに、
パス指定は絶対パスにしましょう
- ターミナルから実行したら動くのに、cronから動かない!という場合に疑いたい部分です
- crontabにパスを通すというのも有効です(個別のスクリプトで通してもいいのですが、crontab自体に書いてしまった方が、どのcronでも有効になるので汎用性が高そうです)
おまけ
#!/bin/sh log_name=任意のログの絶対パス/`date "+%Y%m%d_%H%M%S"`.log echo 'brew doctor ---------------------------------------------------' >> ${log_name} 2>&1 brew doctor >> ${log_name} 2>&1 if [ $? -ne 0 ]; then echo 'brew update ---------------------------------------------------' >> ${log_name} 2>&1 brew update >> ${log_name} 2>&1 echo 'brew upgrade --------------------------------------------------' >> ${log_name} 2>&1 brew upgrade >> ${log_name} 2>&1 echo 'brew cleanup --------------------------------------------------' >> ${log_name} 2>&1 brew cleanup >> ${log_name} 2>&1 fi
JavaScriptのArray.lengthプロパティは、インデックスの最大値 + 1を表す
タイトルの通りなのですが、びっくりしました。
配列の要素数を返してくれるプロパティだと思ってたら、違いました。
配列のインデックスが飛び飛びになることはほとんどない(Array.shift()
などでも振り直される)ので、気にしないといけない機会はあまりないと思いますが、こういうのもあるんだなあと頭に置いておきます。
参考
社内で勉強会を開きました
会社の昼休みを使って、Webを支える技術 の勉強会を開いてみました。
以前から勉強会を開催したいと思いつつ、どうやって進行するのがいいのかや、そもそもテーマを何にすればいいのか、人は集まるのかなど不安があってやれてなかったのです。
でも、普段の仕事で使ってる技術から、一段階抽象化したWeb技術を勉強すると、いいことありそうな気がすると思うことが多く、これなら興味持ってくれる人もいそうだよね!ということで、見切り発車感満載でスタートしてみました。
勉強会のやり方としては、輪読しつつ、節単位でホワイトボードに要約や図解をしていくというスタイルでやってみました。
まだ、改善する点も多いのですが、ぼちぼちやって行きたいなあと思います。
楽しみながら、何かをタメになるものが得られる時間にしたいです。