0

MacをYosemiteにアップデートした

ようやくYosemiteにアップデートした。

homebrewをよけておく

/usr/local があるとアップデートに6時間ぐらいかかるらしいので、どこか別の場所によけておいてOSアップデートが終わったら元に戻す

% mv /usr/local ~/usr_local

そのまま戻して、今のところコンパイルしなおしたりしないでも動いてる。


Yosemiteインストール

App Store.appからアップデートした。
ダウンロード終わってからはわりとすぐだったと思う。


ファンが爆音で回り続け、SSD容量がファイル消しても消しても減り続ける

アップデート後、起動した瞬間からファンが回りまくって凄く重い。SSDの容量も10GB空いてたのにいきなり「残り1GBです」という警告がでておどろく。ファイル削除してもまたみるみる減って1GBになる。
Yosemiteにアップデートしなきゃよかったと思った


iPhotoのライブラリを消す

iPhotoから写真.appに移行したら、写真が入ってるライブラリが~/Picturesに2種類できて容量2倍になってたのでiPhotoのを削除した。


ウィンドウの半透明処理をoff

なんかウィンドウがところどころビミョーに透けていて読みにくい。
システム環境設定→アクセシビリティ→ディスプレイ→透明度を下げる にチェック入れる。
文字も読みやすくなる。

セーフブート

OS起動時にshift押しっぱなし
色々生成された余計な物が消えたっぽい

ここまででファンは静かになった。


safe sleepを普通のsleepに

スリープ時にRAMの内容をSSDに全部保存しにいって、/private/var/vm/にゴミがどんどん溜まるやつ
Macのスリープモード

これは以前設定した値はそのまま引き継がれていたので問題なかった


Spotlight

システム環境設定→Spotlight でbingへの送信を止める

Spotlightの検索候補を全部外すと軽くなるとか書いてある記事が色々見つかるけどその必要は無かった。



LaunchAgentからhomebrewのコマンドが呼べない

ログにnodeが見つからないというエラーがたくさん出ていた

env: node: No such file or directory


/usr/local/binにPATHが通っていないらしい。とりあえずシンボリックリンクで解決

% ln -s /usr/local/bin/node /usr/bin/node

ちゃんとLaunchAgentにPATHを追加する方法もあるみたいだけど、PATHを追加するshellscriptを書いて専用のplistから呼び出すとかなんかわけわからないのでやってない
Yosemiteアップデートでlaunchdが死亡した – retlet.net


sayに男の声が増えた

Macの最大の目玉機能のsay
% say -v Otoya こんにちは
事前にシステム環境設定→音声入力と読み上げ で追加する


AppleScriptのかわりにJavaScriptで書ける


あとでやる
JavaScript for Automation Release Notes

0

Macのlaunchdからnodeが起動しなくなったのでpathを追加した

何もしていないのに壊れたんです

brew updateしてnodeをv0.10.28(だったかな?)からv0.10.32にしただけでlaunchdから起動しなくなった
普通にCLIからnpm startとかcoffeeとかからなら起動するけど、
launchd→npm start→coffee が起動しない。


env: node: No such file or directory


というエラーがログに出る


これやったら解決した
MacOSX – Mountain Lionでのシステムワイド環境変数の設定方法 – Qiita

/etc/launchd.conf を作って

setenv PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

OS再起動したら元気にnodeが起動した

0

foremanでSinatraアプリをMacのLaunchdにインストール

同様の方法でNodeなどのアプリもインストールできる。


例として、このSinatraアプリをMacで自動的に起動するようにインストールする。
shokai/rocketio-chat-sample · GitHub


Herokuを使っていたら普通こういうProcfileをアプリと同じディレクトリに置いてあるはず。

web: bundle exec rackup config.ru -p $PORT


foremanはinittabやupstartに書き出せる
foreman(1) – manage Procfile-based applications


ドキュメントに書かれてないが、Macのlaunchdにも書き出せるようになっている。
% sudo foreman export launchd ~/Library/LaunchAgents/ --app rocketio-chat -c web=1 -u `whoami`

~/Library/LaunchAgents/rocketio-chat-web-1.plist が作られる。
ログは /var/log/rocketio-chat/ に書き出されるようになる。chownされて権限は自分になっていた。

–port 5000とか書くと$PORTが5000になるはずなんだけどならなかったので省略した。
仕方ないので生成されたplistを手で直した。


あとはlaunchctrl loadすれば起動する。プロセスをkillしても自動的に再起動してくれるし、Macを再起動しても勝手に立ち上がるようになった。
% launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist

アンインストール
% launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.nginx.plist


rbenvのRubyを使う

アプリのディレクトリで
% rbenv local 2.0.0-p0
して、.ruby-vesionを作っておく。plistの設定でWorkingDirectoryが指定してあれば.ruby-versionを読んでくれるようだ。

あとは
橋本商会 » Ubuntu12.04にrbenvインストールして、crontabやdaemontoolsも設定した
のdaemontoolsの時みたいにshell scriptを一度経由すればいいかと思ったが、
bundle execを.rbenv/shims/bundle execにするだけでパスが通った。


最終的にこうなった。
上のチャットのアプリは環境変数WS_PORTを見てwebsocketのportを決定するので、dictを追加して環境変数も渡した。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>rocketio-chat-web-1</string>
<key>EnvironmentVariables</key>
<dict>
<key>WS_PORT</key>
<string>33100</string>
<key>PATH</key>
<string>/bin:/usr/bin:/usr/local/bin:/usr/local/sbin</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/Users/sho/.rbenv/shims/bundle</string>
<string>exec</string>
<string>rackup</string>
<string>config.ru</string>
<string>-p</string>
<string>5000</string>
</array>
<key>KeepAlive</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>StandardOutPath</key>
<string>/var/log/rocketio-chat/rocketio-chat-web-1.log</string>
<key>StandardErrorPath</key>
<string>/var/log/rocketio-chat/rocketio-chat-web-1.log</string>
<key>UserName</key>
<string>sho</string>
<key>WorkingDirectory</key>
<string>/Users/sho/projects/rocketio/rocketio-chat-sample</string>
</dict>
</plist>

一度unloadしてからloadしないと有功にならないので注意。

0

gem launch-agentで定期的にスクリプト実行

これ便利だ
https://github.com/youpy/ruby-launch-agent
https://rubygems.org/gems/launch-agent

Macで常時起動、あるいは定期的に実行させたいスクリプトを配布するのによい。


youpyさんが作ったlaunch-agentというgemを使うと、LaunchAgentsに起動設定を登録できる。
LaunchAgentはMacを起動した時にアプリを自動起動してくれる人で、$HOME/Library/LaunchAgentsや/Library/LaunchAgentsに起動設定ファイルがある。


githubのREADMEにはLaunchAgent::Daemonを使って常時起動させるアプリを登録する方法が書いてある。
今回は定期的に起動したかったので、ソース読んでみたらLaunchAgent::Periodicというのがあった。

使い方

require 'rubygems'
require 'launch_agent'

agent = LaunchAgent::Periodic.new(60, 'ruby', '/Users/sho/test.rb', '引数1', '引数2')
agent.load
agent.unload
60秒ごとに指定したスクリプトが起動する。


こういう設定ファイルが $HOME/Library/LaunchAgents に生成されていた。
(これは今作ってる別のアプリの設定ファイル、300秒ごとに実行される)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.shokai.ruby___usr_bin_wifi_location_logger___write_log___logpath__var_log_wifi_location</string>
<key>ProgramArguments</key>
<array>
<string>ruby</string>
<string>/usr/bin/wifi_location_logger</string>
<string>-write_log</string>
<string>-logpath=/var/log/wifi_location</string>
</array>
<key>StartInterval</key>
<integer>300</integer>
</dict>
</plist>



何も指定しないとcom.buycheapviagraonlinenowって名前でサービスが登録されるので、
$VERBOSE=nil
module LaunchAgent
class Base
DOMAIN = 'org.shokai'
end
end
$VERBOSE=true
warningを一時的に止めつつLaunchAgent::Base.DOMAINを上書きしたらよい感じになった。