$ 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
元動画から上手く抜けないなあ。
$ 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化する。
弊社(FJORD, LLC)がEngine Yardとパートナーシップ(的なもの)を結んで怖話をEngine Yard Cloud(以後EYC)に移行しました。
(飽くまで”的なもの”で、ちゃんとしたパートナーシップはこういうの)
トライアルで試した件については以前こちらに書きました。
Engine Yard Cloudを試す - komagata
貧乏会社なので複数台サーバーなんていくら掛かるのか怖い。料金シュミレーターで予め見積もっときました。
さくらVPSから移行したのは複数台構成のためなので、ちょっと奮発してappサーバー2台+dbサーバー1台の構成にしてみました。高けー!
手順はトライアルの時と同じです。ただ、本契約の場合は東京リージョンが選べます。
appサーバー2台あるけど、どのIPにアクセスしたらいいの?と思いましたが、Application Masterの方のSSHのリンクをクリックする時に出るURLにIPがハイフン区切りで出てるのでそこにアクセスします。(この場合は54.249.225.67)
dbの方もそれで直接dbのインスタンスにsshできます。ユーザー名はdeployでした。
EYCに載せるに当ってアプリを修正しないといけない点が2点ありました。
EYCはまだruby2.0.0に対応してないので1.9.3系に変更しました。あんまり変わらないだろうと思ってましたが、encodingのmagic commentが無くていくつかエラーが。泣く泣く追加しました。
これはEYCだからではなく、appサーバーが複数台になるのでユーザーがアップする画像をローカルに保存してたら迷子になります。幸いpaperclipの画像保存先をS3にするのは簡単で1日あれば対応できました。
$ ssh bodom "mysqldump -udeployer -pXXXXXXX kowabana_production" | ssh db.kowabana.jp "mysql -uroot kowabana"
これはコマンド1行でOK。sshで入れるとこういうところが楽ですね。EYCのdb名はアプリ名と同じになるようです。mysqldumpは全テーブルロックするのでデータ量の大きなサイトではこういう雑な移行はオススメできません・・・。
railsアプリのdatabase.ymlの接続先は変えなきゃいけないんじゃないの?と思いましたが、EYCのdeployのレシピで良い感じにdatabase.ymlを生成してくれるそうです。便利。
トライアルの時もお世話になったサポートチャットですが、グローバルの方は平日の8AM PST - 6PM PST(日本では1時から13時)がサポート時間です。
これは豆ですが、Engine Yardの日本法人のトップページのチャットから発信すれば日本人が日本時間で対応してくれます。
まだ移行したばっかりなのでどうなるかわかりませんが、移行作業自体は思ったより早く簡単にできたなと思います。最近セキュリティ周りがキナ臭いのでその辺は安心感がありますね。(最近別の仕事でウィルスに感染したPHPのサイトの調査をやったばかりです。)
オープンネットワークラボにGithubのPJらが来た時のイベントで「初期のGithubはEngine Yardにサーバーを借りていた」という話を聞いてその後の懇親会でいきなり不躾にも「弊社にもサーバー貸してください!」と@yandoさんに無茶振りしたことから始まった話でしたが色々お手数をお掛けしつつ移行できてよかったです。ありがとうございます。