よく忘れるので


複数カラムの値が重複してるオブジェクトの情報を取るために

とするとこんな感じのidnilの配列が返ってくるので

な感じで適当に処理しましょう。

追記

こちらのほうがスッキリ書けますね。


File.write(filename, text)でファイルに書き込みできるの便利ですよね。

でも、File.appendは用意されてないのでFile.open(filename, 'a'){|f| f.write(text)}のように書かなきゃいけません。めんどくさい。

なのでめんどくさくないように定義しましょう。やっぱり既存クラスのメソッド拡張ができるRubyはいいですね。


Hashのキーをリネームしたかったけどデフォルトのメソッドはないようなので書いた

使い方

変更前のキーが存在しない時と、変更後のキーが存在する時は何もしない。
実際の入れ替え処理はself[new] = self.delete(old)だけで終わってます。

参考

http://kmckelvin.com/blog/2014/06/renaming-items-in-a-ruby-hash


音声つき単語帳の単語と例文とかを切り出してランダム出題する形にしたかったのでまずsoxを使って無音部分で音声を分割しました。

これでout001.wavなどのように連番でファイルが保存されます。初めの0.3が音声の前の部分の無音の長さで、後ろの0.3が音声の後に続く無音部分の長さです。

参考

sox fails to split files – Stack Overflow


Chefの動きを確認する時に毎回全部のレシピを当ててると時間がかかってめんどくさいことこの上ないので単体で走らせる方法を探してみました。

試してみてダメだったこと

chef-applyとかsandwichとか色々あるようなんですが、依存関係などの読み込み周りを同一にするのが出来ないようでよくわからなかったので使わないことにしました。

やりたいのはrun_listで走らせる対象を一つだけにしたかったので、nodes/postgresql.jsonなど試したいレシピだけを指定したノードファイルを作ってみたんですが、これはファイル名がhostと一致しないため完全に間違った試行だったようです。

成功した方法

run_listを特定のレシピだけ対象にすればいいので--override-runlistオプションを使えばやりたいことができました。

run_listのデフォルトでrecipeは省略可能なので

でOKです。

参考

Specifying which cookbooks to run with Chef Solo – Stack Overflow


昔録った動画のアスペクト比を間違えて設定してしまってたので一括で16:9にしたかったのでやり方を調べました。

方法

とこんな感じで出来ます。ちなみにある程度新しいffmpegじゃないとちゃんと動かないので新しいのを入れましょう。あとコンテナがアスペクト比の設定に対応してないともちろんダメです。

ちなみに私はWindowsで動かしました。


ffmpegを使って複数の音声と字幕から一つの動画を作成する方法。

コマンドの解説

まず入力ソースに使う動画は一つ一つに-iオプションを付けて呼び出します。
そして-map の横についてる数字は何個目の引数として呼び込まれたか:その動画や音声のどのストリームかを表しています。そして-metadataを使って音声や字幕の言語を指定するのですがこの時に映像・音声・字幕でそれぞれ別のストリームとして言語を設定しないといけません。これがわからずにかなりの時間を費やしてしまいました…。

ちなみに-acodec copy -vcodec copyという使い方をされてる人が多いですが-c copyで一括指定できます。

知っとくと便利なこと

-t 数値で出力する長さを選べるのでちゃんと合成で来てるか確認したいだけの時は-t 180などして簡単に動画の確認だけすると良いでしょう。

ffmpegはなんでもできるし、どのOSでも使えるのに引数がめんどくさすぎるせいであまり情報がないのがもったいないですよね。
何かわからないことがあったらコメント欄で聞いてください。


rake task で長時間起動するため排他処理をしておかないと複数起動してしまう物があったので多重起動を禁止にしました。

でOK。呼び出し部分をメソッド化とかしたかったけど、上手くいかなかったのでとりあえずこれで。タスクのブロック引数としてtaskをちゃんと書いておかないとtask.nameが使えないので注意しましょう。

参考

ShellScript – Rakeタスク実行時、プロセス起動数を確認して排他制御する – Qiita


というように条件に合致しない時に returnを使って処理を抜けようとするとこんなエラーになります。

これは rake task がメソッドではなくブロックだから起きるので next を使ってやりましょう。それで抜けれます。

ちなみにnextは気持ち悪いんのでせめてbreakを使いたいと思ったんですが、それだと

になってしまいます。

参考

ruby – How do I return early from a rake task? – Stack Overflow