
$ ffmpeg -i bomb.mp4 -vf scale=240:-1,thumbnail=2 -an -vsync 0 img%03d.png
$ mogrify -fuzz 50% -transparent blue *.png
$ convert -delay 3 -loop 0 *.png bomb.gif
-fuzz
オプションで透過色の閾値が指定できるようになった。いいゾ~これ。
チャットでのいい加減な爆破オチにお使い下さい。
$ ffmpeg -i bomb.mp4 -vf scale=240:-1,thumbnail=2 -an -vsync 0 img%03d.png
$ mogrify -fuzz 50% -transparent blue *.png
$ convert -delay 3 -loop 0 *.png bomb.gif
-fuzz
オプションで透過色の閾値が指定できるようになった。いいゾ~これ。
チャットでのいい加減な爆破オチにお使い下さい。
$ ffmpeg -i smile.flv -vf scale=240:-1,thumbnail=2 -an -vsync 0 img%03d.gif
$ mogrify -transparent blue *.gif
$ convert -delay 6 -loop 0 *.gif bomb.gif
元動画から上手く抜けないなあ。
この4月で@hrysd(永和システムマネジメント様入社おめでとうございます!)や知の巨人など、みんなインターンシップを卒業されたので新たに募集したいと思います。
思いつきで始めたリモート・ローカルインターンの仕組みですが、10ヶ月程運用してみて「意外と回るな」という感じだったのでWebアプリにしてみました。
Webプログラマー・Webデザイナーのインターンシップをスムーズに行う仕組みです。インターンシップにはオフィスに通うローカルインターンとインターネット経由でのみ行うリモートインターンがあります。インターンは1週間交代で学習と作業を交互に行います。
インターンは職業訓練と就業体験を得、企業は見込み社員と労働力を得る仕組みです。
インターンから見て「お金を払って職業訓練を得るスクール」と「お金を貰って職業訓練を得るアルバイト」の中間地点にはインターン・企業の両者に取って「お金のやり取りがゼロ円の地点があるのではないか」ということを考えました。
1週間毎に学習と作業を交換することで知識と作業の物々交換を行います。
要するに、学習週=Eラーニング、作業週=タスク管理システムを組み合わせたサービスです。(今のところタスク管理はオープンソースのFulcrumを使っていますが)
256インターンを使ってEラーニングができ、Lingrのチャットで質問したり教わったりすることができます。
256インターンはその名の通り、256人でインターンを行うことを前提に作られました。まだ16人なので8倍必要です。企業側も弊社(フィヨルド)だけでなく、この仕組を使ってインターンシップを行いたい企業様を募集しています。
株式会社root様と今回合同で募集することになりました。株式会社root様はデザイナーとプランナーの方の会社なのでプログラマーのインターンを募集したくても、教えることができないという問題がありました。そこでこの仕組を使うことでプログラマーの勉強も可能にします。
256インターン自体、作りながら運用しています。既にインターンの方がツールを改修しつつ勉強しています。ソースコードはこちらで公開しています。
ローカルインターンはオフィスの席の数に限りがあるので、今回は2名募集します。(リモートは無制限です) プログラミングが好きな方、是非ご応募お願いします!
アップロード画像に関してはこちら。
残りのassetsもS3に置いていきます。
# Gemfile:
group :assets do
gem 'asset_sync'
end
$ rails g asset_sync:install --use-yml --provider=AWS
# conifg/asset_sync.yml:
defaults: &defaults
fog_provider: 'AWS'
aws_access_key_id: "XXXXXXXX"
aws_secret_access_key: "XXXXXXXXXXXXXXX"
fog_directory: "kowabana-jp"
fog_region: "ap-northeast-1"
existing_remote_files: keep
development:
<<: *defaults
enabled: false
test:
<<: *defaults
enabled: false
staging:
<<: *defaults
fog_directory: "staging-kowabana-jp"
production:
<<: *defaults
これだけでrake assets:precomiple
した時にS3にアップしてくれます。便利ですね。
# config/environments/production.rb:
KowabanaJp::Application.configure do
config.action_controller.asset_host = "//cdn.kowabana.jp"
end
こうするとimage_tag
とかasset_path
とかが吐くURLがCDN(CloudFront)になってくれます。
特に無し。ey deploy
のデフォルトではrake assets:precompile
が走るので特に気にしなくてもアップされます。楽だわあ。
% zip -e foo.zip foo.txt
Enter password:
Verify password:
updating: foo.txt (deflated 70%)
あんまり使う機会ないけど、お客さんによっては社内規則になってたりするので。
paperclipで画像をアップロードしてた場合、S3に移行するのは簡単。paperclipはDB内にファイルのパスを持ってるわけじゃないので、サーバーファイルシステム上の画像を全部S3にコピーした上でアプリの設定を変えれば良い。
# Gemfile:
gem 'paperclip'
gem 'aws-s3'
gem 'aws-sdk'
# config/initializers/paperlicp.rb:
if Rails.env.production?
Paperclip::Attachment.default_options.update(
storage: :s3,
s3_credentials: "#{Rails.root}/config/s3.yml",
s3_host_alias: Settings.cdn_host,
path: ":class/:id/:attachment/:style",
url: ':s3_alias_url'
)
end
# config/s3.yml:
production:
bucket: kowabana-jp
access_key_id: xxx
secret_access_key: xxx
s3_host_name: s3-ap-northeast-1.amazonaws.com
development:
bucket: bucket_name
access_key_id: xxx
secret_access_key: xxx
s3_host_name: s3-ap-northeast-1.amazonaws.com
test:
bucket: bucket_name
access_key_id: xxx
secret_access_key: xxx
s3_host_name: s3-ap-northeast-1.amazonaws.com
modelのhas_attached_file
に渡すオプションが環境毎に違ってたりする場合はinitializers以下に書いた方がスッキリする。productionでだけS3(ここではCloudFrontを使うのもの一緒にやってます)にする場合は上記。(staging環境で何か動かす時にもS3に影響が出ちゃうので注意する)
environmentを作る時に選んだタイミング・回数分保存されてます。リンクからmysqldumpの内容がダウンロードできます。分かりやすいですね。
他の環境ではDBバックアップはdumper.ioが超オススメです。
管理画面から簡単に設定できる。怖話では毎日夜中の11時に怖い話をお届けするTwitterボットやランキングの集計にcronを使っている。
この画面から設定したcronjobはAppサーバーのMasterに反映されるようだ。mysqlcheckなど、DBサーバー上で実行したい場合は直接やった方がいいんだろうか。
HerokuのようにSendGridアドオンを使う。
アドオン画面からSendGridを選び、対象のアプリ/environmentを選んでactivateしておく。
Set it upの内容にしたがってey_configというgemを入れておく。これはEYCと連携した各種サービスのIDとかパスワードとかを良いように扱ってくれる。
メールはsendmailでサラッと送りたい気がするが、EC2上のIPはブロックされてたりするのでSendGridやGmailやSESを使うのが無難なようだ。SendGridは無料プランでは1日200通までなので若干不安ではある。
Set it upに書いてあるようにconfig/environments/production.rbに下記を追加する。
config.action_mailer.delivery_method = :smtp
config.action_mailer.default_charset = "utf-8" # NOT FOUND ON RAILS3.1
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.smtp_settings = {
:authentication => :plain,
:address => "smtp.sendgrid.net",
:port => 587,
:domain => "yourdomain.com",
:user_name => EY::Config.get(:sendgrid, 'SENDGRID_USERNAME'),
:password => EY::Config.get(:sendgrid, 'SENDGRID_PASSWORD')
}
EY::Config.getという部分でサーバー上に良い感じに置かれた設定ファイル(実際には/data/app_name/shared/config/ey_services_config_deploy.yml
)から値を読みこんでくれる。
ここで罠なのが、config.action_mailer.default_charset
というメソッドはrails3.1以降は存在しないというところだ。うっかりproductionへデプロイするとサイトがエラーになる。stagingというenvironmentを同じ構成で用意し、試しにデプロイしてみてからの方が無難だろう。
$ ffmpeg -i movie.mp4 -vf scale=240:-1,thumbnail=20 -an -vsync 0 img%03d.png
$ convert -delay 20 -loop 0 *.png YJSNPI_WHO_LEAPT_THROUGHT_TIME.gif
ffmpegで20フレーム毎、横幅240pxアスペクト比固定でリサイズし、imagemagickでanime gif化する。