Raspberry PiでAirPlay(2)
各種設定
・Change User Password - 自分が覚えやすいパスワードを設定
パッケージのアップデート(しばらく時間がかかるので放置)
sudo apt-get update
sudo apt-get upgrade
オーディオ出力の設定
amixer cset numid=3 1
6. AirPlay用のライブラリをインストールする
依存関係のライブラリのインストール
sudo apt-get install git libao-dev libssl-dev libcrypt-openssl-rsa-perl libio-socket-inet6-perl libwww-perl avahi-utils libmodule-build-perl
git clone https://github.com/njh/perl-net-sdp.git
perl-net-sdp
cd perl-net-sdp
perl Build.PL
sudo ./Build
sudo ./Build test
sudo ./Build install
cd ..
Shairportのインストール
git clone https://github.com/hendrikw82/shairport.git
cd shairport make
Shairportを起動
./shairport.pl -a AirPi
※-a オプションは表示名なので好きな名前を設定する。
各デバイスの「AirPlay」機能で設定した名前が表示されている&スピーカーを接続し音楽が再生される事を確認する。
7. 自動起動の設定
起動時に自動で立ち上がる様に設定
cd shairport
make install
cp shairport.init.sample /etc/init.d/shairport
cd /etc/init.d
chmod a+x shairport
sudo insserv shairport
起動スクリプトの起動オプションを変更
sudo nano shairport
- DAEMON_ARGS="-w $PIDFILE"
+ DAEMON_ARGS="-w $PIDFILE -a AirPi"
再起動して動作を確認
reboot
AirPlayで快適な音楽ライフを!
Special Thanks.
James Laird: https://github.com/hendrikw82
lifehacker.jp: http://www.lifehacker.jp/2013/03/130306raspberry_piairplay.html
Raspberry PiでAirPlay(1)
買ったまま暫く放置していたRaspberry Pi。だけど同僚から「iOSとSoket通信はどうか?」とアドバイスを頂きAirPlayサーバーにする事に。
AirPlay - Wikipedia
"AirPlayは、iTunesやiPhone、iPod touch、iPadで再生している音楽や動画、画像を、家庭内のネットワークを経由して他の機器でストリーミング再生する機能である。元々は、iTunesの音源をAir Mac Express経由でオーディオ機器に接続してストリーミング再生する旧AirTunesに由来する。アップルのiTunes10に初めて搭載された。"
必要なもの
1. Raspberry Pi 本体
TypeA、TypeBどちらでも良い。TypeBはTypeAと比べてメモリ容量が多いのとUSBポートが2つ付いてたり有線LANのポートが付いてたりする。今回はTypeAを使用。たまにケースやSDカードとのセットが安く売ってたりする様なので要検討。
2. SDSCカード
今回はSanDiscの10GB、class10のmicroSDカードをSDSCアダプターに差し替えて使用(なぜかmicroSDカードが使えると勘違い、、、)。
3. Wi-Fiアダプター
今回はBUFFALOのWLI-UC-GNM IEEE802.11b/g/nのものを使用(無線LANは正式にはサポートして居らず接続が途中で切れる事がある。同じくBUFFALOのEEE802.11a/nのものを使用したが認識せず)。
4. SDカードリーダー
SDSCカードにOSをインストールする為に必要。
5. USB電源
今回は取り急ぎKindleに付属していたUSBケーブル&電源を使用。
6. iPhone or iPad or Mac
今回はiPhone5s/5 iOS 7.0.4、Macbook air 10.9.1にて動作確認。
7. スピーカーとオーディオケーブル
8. モニタ、HDMIケーブル、USBハブ、USBキーボード、USBマウス
作業用。
9. ケース
好みのものを用意する。
OSのインストール
quick-start-guide(公式)
1. 公式サイトよりお好みのOSをダウンロードする
今回は2014-01-07-wheezy-raspbian.zipを使用した。
2. SDカードをフォーマットする
Mac場合はSD Association's Formatting Tool をダウンロード後、説明にしたがってフォーマットする。
3. OSをSDカードにインストールする
ターミナルを起動しコマンドを実行。
ダウンロードディレクトリに移動する
cd Downloads
SHA-1 Checksumを確認する
shasum 2014-01-07-wheezy-raspbian.zip
9d0afbf932ec22e3c29d793693f58b0406bcab86unzip
zipファイルを解凍する
unzip 2014-01-07-wheezy-raspbian.zip
SDカードのマウントディレクトリを確認する
df -h
※私の環境では「/dev/disk1s1」
SDカードをアンマウントする
sudo diskutil unmount /dev/disk1s1
ディスクイメージをSDカードにコピーする
sudo dd bs=1m if=2014-01-07-wheezy-raspbian.zip of=/dev/rdisk1
※「/dev/disk1s1」の先頭に「r」を付加し末尾の「s1」を削る
コピーされるのを待ちレスポンスが返されれば完了。
>> 次へ「Raspberry PiでAirPlay(2)」
Delayed :: Cron :: Job の使用方法
公式 https://github.com/codez/delayed_cron_job#changing-the-schedule
Delayed :: Cron :: Job とは
Rails用のGemでDelayed :: Job の拡張機能であり、ジョブを実行式をcron形式で設定できます。
インストール
Gemfile に以下の行を追記します。
gem delayed_cron_job
bundle インストールを実行します。
$ bundle
migration ファイルを作成、実行します。 ※ delayed_job_active_recordを使用している場合、delayed_jobs テーブルに cron カラムが追加されます。
$ rails generate delayed_job:cron
$ rails db:migrate
使用方法
以下の様に Delayed::Job
クラスを呼び出し、引数に実行したいJob、実行時間を記載します。
Delayed::Job.enqueue(MyRepeatedJob.new, cron: '15 */6 * * 1-5')
若しくは ActivieJob
を使用して以下の様に記述します。
MyJob.set(cron: '*/5 * * * *').perform_later
スケジューリング
通常、アプリケーションをデプロイするタイミングで、全てのJobの設定が必要になります。これを以下の様なスーパークラスを作成する事で簡単に行うことができます。
Custom CronJob superclass
app/jobs/cron_job.rb
:
# Default configuration in `app/jobs/application_job.rb`, or subclass # ActiveJob::Base . class CronJob < ApplicationJob class_attribute :cron_expression class << self def schedule set(cron: cron_expression).perform_later unless scheduled? end def remove delayed_job.destroy if scheduled? end def scheduled? delayed_job.present? end def delayed_job Delayed::Job .where('handler LIKE ?', "%job_class: #{name}%") .first end end end
CronJobから継承するジョブの例
app/jobs/noon_job.rb
:
# Note that it inherits from `CronJob` class NoonJob < CronJob # set the (default) cron expression self.cron_expression = '0 12 * * *' # will enqueue the mailing delivery job def perform UserMailer.daily_notice(User.first).deliver_later end end
スケジューリングトリガー
一番初めにJobをDBに登録してスケジューリングを行う必要があります。手動で行いたくない場合、以下のようなJobクラスを作成してrails db:*
クラスにフックする事が可能です。
lib/tasks/jobs.rake
:
namespace :db do desc 'Schedule all cron jobs' task :schedule_jobs => :environment do # Need to load all jobs definitions in order to find subclasses glob = Rails.root.join('app', 'jobs', '**', '*_job.rb') Dir.glob(glob).each { |file| require file } CronJob.subclasses.each(&:schedule) end end # invoke schedule_jobs automatically after every migration and schema load. %w(db:migrate db:schema:load).each do |task| Rake::Task[task].enhance do Rake::Task['db:schedule_jobs'].invoke end end
以下のコマンドを実行する事でJobがDBに登録されて、設定時刻に実行されます。
rails db:migrate
rails db:schema:load
rails db:schedule_job
M1 Mac に Rails 環境を構築する
home brew
インストール
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
rbenv
https://github.com/rbenv/rbenv#installation
インストール
brew install rbenv
brew upgrade rbenv ruby-build
rbenv init
RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC rbenv install [version]
rbenv global [ver]
rbenv local [ver]
ruby -v
mysql
インストール
brew install --build-from-source mysql@[ver]
echo 'export PATH="/opt/homebrew/opt/mysql@5.7/bin:$PATH"' >> ~/.zshrc
source .zshrc
brew services restart mysql@[ver]
mysql -uroot
メモ
If you need to have mysql@5.7 first in your PATH, run: For compilers to find mysql@5.7 you may need to set: export LDFLAGS="-L/opt/homebrew/opt/mysql@[ver]/lib" export CPPFLAGS="-I/opt/homebrew/opt/mysql@[ver]/include" For pkg-config to find mysql@5.7 you may need to set: export PKG_CONFIG_PATH="/opt/homebrew/opt/mysql@[ver]/lib/pkgconfig"
nodebrew
https://github.com/hokaccha/nodebrew
インストール
brew install nodebrew
echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> .zshr
source .zshrc
Node.js
インストール
nodebrew setup
nodebrew compile v[ver]
nodebrew use v[ver]
node -v
Yarn Version Manager (yvm)
インストール
brew install tophat/bar/yvm
Run the following command to configure your shell rc file
node "/opt/homebrew/opt/yvm/yvm.js" configure-shell --yvmDir "/opt/homebrew/opt/yvm"
See "/opt/homebrew/opt/yvm/.config" for examples.
If you have previously installed YVM, link the versions folder
to allow all brewed YVM access to the managed yarn distributions
ln -sF ~/.yvm/versions /opt/homebrew/opt/yvm
yvm version
brew upgrade yvm
yarn
インストール
yvm install [ver]
以下の様に表示された場合、一度ディレクトリを削除する
EEXIST: file already exists, mkdir '/opt/homebrew/Cellar/yvm/4.1.4/versions'
yvm use [ver]
yarn -v
puma-dev
インストール
brew install puma/puma/puma-dev
puma-dev -install -d test
vim ~/.puma-dev/oatnd
3000 と記載する
rails
インストール
active_storageのイメージデータ
storage.zip
解凍してルート直下に配置する
gem mimemagicのライセンス問題対応
https://qiita.com/ShioriPeace/items/9c50d3bc90bbf7101c0a
brew install shared-mime-info
gem install mimemagic -v '0.3.10' --source 'https://rubygems.org/'
gem mysqlのインストールエラー対応
https://qiita.com/HrsUed/items/ca2e0aee6a2402571cf6
bundle config --local build.mysql2 "--with-ldflags=-L/opt/homebrew/opt/openssl@1.1/lib"
bundle config --local build.mysql2 "--with-cppflags=-I/opt/homebrew/opt/openssl@1.1/include"
bundle install
https://bundler.io/man/bundle-install.1.html
gem install bundler
bundle config set --local path 'vendor/bundle'
bundle install
webpacker インストール
bundle exec rails webpacker:install
Rails の起動
bundle exec rails s