Chefで特定のレシピを一つだけ走らせる方法

Chefの動きを確認する時に毎回全部のレシピを当ててると時間がかかってめんどくさいことこの上ないので単体で走らせる方法を探してみました。 試してみてダメだったこと chef-applyとかsandwichとか色々あるようなんですが、依存関係などの読み込み周りを同一にするのが出来ないようでよくわからなかったので使わないことにしました。 やりたいのはrun_listで走らせる対象を一つだけにしたかったので、nodes/postgresql.jsonなど試したいレシピだけを指定したノードファイルを作ってみたんですが、これはファイル名がhostと一致しないため完全に間違った試行だったようです。 成功した方法 run_listを特定のレシピだけ対象にすればいいので--override-runlistオプションを使えばやりたいことができました。 $ knife solo cook my_host --override-runlist "recipe[user]" run_listのデフォルトでrecipeは省略可能なので $ knife solo cook my_host --override-runlist "user" でOKです。 参考 [Specifying which cookbooks to run with Chef Solo – Stack Overflow][1]

2015-11-21 · 鉄

ffmpegで動画を再エンコードせずにアスペクト比のみ変更する

昔録った動画のアスペクト比を間違えて設定してしまってたので一括で16:9にしたかったのでやり方を調べました。 方法 $ ffmpeg -i movie.mp4 -c copy -aspect 16:9 movie_out.mp4 とこんな感じで出来ます。ちなみにある程度新しいffmpegじゃないとちゃんと動かないので新しいのを入れましょう。あとコンテナがアスペクト比の設定に対応してないともちろんダメです。 ちなみに私はWindowsで動かしました。

2015-11-13 · 鉄

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

ffmpegを使って複数の音声と字幕から一つの動画を作成する方法。 ffmpeg.exe -i video.mp4 -i de.mp4 -i de_sw.mp4 -i fr.mp4 -i ru.mp4 -i de_co.mp4 -i de.srt -i en.srt -map 0:0 -metadata:s:v:0:0 language=ger -map 2:0 -metadata:s:a:1:0 language=ger -map 1:0 -metadata:s:a:0:0 language=ger -map 3:0 -metadata:s:a:2:0 language=fre -map 4:0 -metadata:s:a:3:0 language=rus -map 5:0 -metadata:s:a:4:0 language=ger -map 6:0 -metadata:s:s:0:0 language=ger -map 7:0 -metadata:s:s:1:0 language=eng -c copy -scodec mov_text out.mp4 コマンドの解説 まず入力ソースに使う動画は一つ一つに-iオプションを付けて呼び出します。 そして-map の横についてる数字は何個目の引数として呼び込まれたか:その動画や音声のどのストリームかを表しています。そして-metadataを使って音声や字幕の言語を指定するのですがこの時に映像・音声・字幕でそれぞれ別のストリームとして言語を設定しないといけません。これがわからずにかなりの時間を費やしてしまいました…。 ちなみに-acodec copy -vcodec copyという使い方をされてる人が多いですが-c copyで一括指定できます。 知っとくと便利なこと -t 数値で出力する長さを選べるのでちゃんと合成で来てるか確認したいだけの時は-t 180などして簡単に動画の確認だけすると良いでしょう。 ...

2015-09-27 · 鉄

rake task の多重起動を禁止する排他処理を行う

rake task で長時間起動するため排他処理をしておかないと複数起動してしまう物があったので多重起動を禁止にしました。 namespace :foo do task :update_all => :environment do |task| process_count = `ps -ef | grep #{task.name} | grep -v grep | wc -l`.to_i next if process_count > 1 end end でOK。呼び出し部分をメソッド化とかしたかったけど、上手くいかなかったのでとりあえずこれで。タスクのブロック引数としてtaskをちゃんと書いておかないとtask.nameが使えないので注意しましょう。 参考 [ShellScript – Rakeタスク実行時、プロセス起動数を確認して排他制御する – Qiita][1]

2015-08-13 · 鉄

rake task を途中で抜けるときはreturnじゃなくてnext

task :do_something do return if some_condition? do_job end というように条件に合致しない時に returnを使って処理を抜けようとするとこんなエラーになります。 LocalJumpError: unexpected return これは rake task がメソッドではなくブロックだから起きるので next を使ってやりましょう。それで抜けれます。 task :do_something do next if some_condition? do_job end ちなみにnextは気持ち悪いんのでせめてbreakを使いたいと思ったんですが、それだと LocalJumpError: break from proc-closure になってしまいます。 参考 [ruby – How do I return early from a rake task? – Stack Overflow][1]

2015-08-13 · 鉄

特定のテキストを含むファイルを持っているディレクトリを削除する

ackで検索してdirnameでディレクトリ名を取得して、rm -rfでまとめて消してます。 ack-grep -l foo | xargs dirname | xargs rm -rf

2015-04-01 · 鉄

Arrayから重複する要素の配列を抜き出す

やり過ぎはダメだと言われても、やっぱり基底クラスの拡張は楽しい! class Array def duplicated select{ |v| count(v) > 1}.uniq end end 使い方 a = [3, 5, 3, 4] => [3, 5, 3, 4] [15] pry(main)> a.duplicated => [3] [16] pry(main)> a = [3, 5, 3, 4, 5] => [3, 5, 3, 4, 5] [17] pry(main)> a.duplicated => [3, 5] 参考 [Ruby: How to find and return a duplicate value in array? – Stack Overflow][1]

2015-03-18 · 鉄

RubyとRasberry Pi でLEDをチカチカさせる

Rasberry Piに初期設定をして電源を挿すだけでノートパソコンから操作できるようにはしたももの、電子工作!!な事を全然やってないし、やり方もわからなかったのでAmazonでそれっぽいスターターキットを買ってみました。 基礎知識 LEDから出てる日本の先端のうち長いのがアノード(電流が入ってくる方)、短いのがカソード(電流が出て行く方)。 GPIO(General-purpose input/output)のそれぞれのピンの役割は以下のとおり。単純に3.3Vや5Vの電圧のところもあるし、Ground(GND)、それにGPIOがある。 つまり全体のこともGTIOと呼ぶし、一部のその機能をもつピンもGPIOと呼ぶらしい。めんどくさい…。 B+のモデルにはもっとピンがあるんですが、1から表示されてる部分までは同じらしいです。ちなみに後ろのハンダ付けが四角いのが1だそうです。……なにそのわかりにくい基準。 抵抗には向きはないが強さは線の色で決まるので覚えるのが大変。 ブレッドボードは基礎知識がないとつらいのでこちらを読んでおいてください。 http://jsdiy.web.fc2.com/avr_7segclockbb/ LEDをチカチカさせる 最初に載せたキットの解説サイトが[こちら][3]ですので、そこを参照します。 配線方法 ブレッドボードの配線がこんなんで、 ラズパイの配線がこんなんで コードがこうです。解説サイトのRubyを修正しています。 port = 24 File.write("/sys/class/gpio/export", port) sleep 0.2 # 書き込みエラー回避 File.write("/sys/class/gpio/gpio#{port}/direction", "out") (1..10).each do |i| File.write("/sys/class/gpio/gpio#{port}/value", i % 2) sleep 0.2 end File.write("/sys/class/gpio/unexport", port) Lチカさせる 以上が上手くいっていたら ruby ~/led_blink.rbでスクリプトを実行したらLEDがチカチカと5回点滅するはずです。やったー!! できなかった人は一つ一つ手順を確認していきましょう〜。 それではみなさん楽しい Raspberry Pie 生活をお過ごしください。 ノシ

2015-02-22 · 鉄

Helperメソッド内で form_tag を使うときの注意点

form_tagを使えばブロック内の全体を返してくれるかと思ったのですが、そうではないらしく最終行だけ返ってきてしまいます。 具体例 つまり def generate_form(path) form_tag(path) do input_tag submit_tag end end だとフォームそのものと最終行のsubmit_tagだけが表示されてその他の入力フィールドが一切表示されません。 対策 なので以下のように毎行Stringを保存しておきましょう。何でこんな仕様になってるんだろう…? def generate_form(path) form_tag(path) do str = input_tag str += submit_tag str end end 参考 [ruby on rails – How do I use form_tag from within a helper? – Stack Overflow][1]

2015-02-20 · 鉄

Raspberry Pi に Avahi を入れてSSH接続を簡単に

[初めてのラズベリーパイ 【購入からSSH接続まで】][1] で SSH を使ってラズベリーパイに接続ができたのですが、DHCPでローカルのIPアドレスを振り分けてる時は振り当てられてるIPアドレスを調べるためだけにラズパイにキーボードとディスプレイをさして作業する必要がでてくるので非常にめんどくさいことになります。 Avahi そこでAvahiというソフトを使えば hosts ファイルがなくてもローカルネットワーク内の他のPCからIPアドレスではなく名前で参照できるようになります。。Macの共有機能などで使われている Bonjour と同等のものなんだとか。 インストール /etc/hostname に保存されてる名前で接続できるようになるので初期設定のraspberrypiという名前を別のものに変更しておきましょう。 sudo vi /etc/hostname Avihaのインストールはいつもどおりapt-getでインストールできます。 sudo apt-get -y install avahi-daemon スタートアップに登録 このままでは起動時に自動的にAvahiが立ち上がってくれませんので sudo update-rc.d avahi-daemon defaults でスタートアップにも登録しておきましょう。 ※ 追記 次回使おうとしたら動かなくなってしまってました。 /etc/hostsを編集しないといけなかったようです。 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.1.1 raspberrypi となっていますのでraspberrypiの部分を変更した名前に変えておきます。 使い方 インストールが終わったらクライアントからssh pi@raspberry.localのような形で pi@自分で決めた名前.localで接続できるようになります。 それではみなさん楽しい Raspberry Pie 生活をお過ごしください。 ノシ 参考 [RaspberryPi – Raspberry Pi を無線 LAN 経由で SSH 接続できるようにする – Qiita][2] ...

2015-02-16 · 鉄