0

AppleScriptでMacの音量を設定する

Yosemiteにアップデートしていないのでまだapplescript使ってる。

# 音量設定取得
% osascript -e "get volume settings"
output volume:40, input volume:50, alert volume:100, output muted:true

# 音量だけを取得、0〜100で返ってくる
% osascript -e "(get volume settings)'s output volume"

# 音量を50に設定
% osascript -e "set volume 50/100*7"

# ミュートされているか確認、true/falseで返ってくる
% osascript -e "(get volume settings)'s output muted"

# ミュートする
% osascript -e "set volume with output muted"

# ミュート解除
% osascript -e "set volume without output muted"

音量取得が0〜100で返ってくるのに設定は0〜7でやるという謎のAPI


参考

起動音ジャーンの音量を自在にコントロールしたい! – ザリガニが見ていた…。

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

DockerとdokkuをMacにインストールして自分をHeroku化した

dokkuを普段持ち歩いてるMacbook AirのVirtualBoxのUbuntu12.04に入れた。

dokkuはDocker環境をセットアップしてくれて、そこに個人用のHerokuのようなものを建立してくれる。
dokku本体は100行ぐらいのshellscriptで実装されている。そこから作者のprogrium氏が作った色々なツールが呼び出されるので、実体としてはもっと大きいけど。

vagrantとかchefとか全く使わずに、アプリをgit pushするとVMが建つ環境が簡単に作れる。
gitのhookでdockerコンテナが作られて、フロントのnginxのproxyが設定されて、websocketも通る。
コンテナ構築にはherokuのbuildpackが使われているので、アプリの内容に応じて自動的にnodeとかrubyとかの環境がセットアップされる。
buildpackはherokuがアップデートしていってくれるから、今後RubyやNodeが新しくなっても良い感じにフォローしてくれて、楽できる。

家のMacMiniにも似たようなセットアップをして、自宅をmini heroku化もできた。そっちの設定はまたあとで書く。


参考になる


なんだかんだでぐぐる前にgithubにあるREADMEちゃんと読むのが一番参考になる


Ubuntuインストール

Mac OSX上のVirtualBoxに、ubuntu12.04 64bit serverを入れた。
あたらしくまっさらなUbuntuを用意する事が推奨されている。

2014年4月11日現在、ubuntu 13系+dockerの組み合わせでデッドロックしたりコンテナが止まらなかったりするらしい。

% sudo apt-get install openssh-server
% sudo apt-get install python-software-properties # 12.04だと必要

インストール時のオプションは全部デフォルトのままでよい。

自分のMacからは、Ubuntuが 192.168.56.103 として見えるようになった。(ホストオンリーアダプタを使っている)
普通にNATとかブリッジアダプタとかでもいいし、ネットワークは好きに設定すればいい。


なお起動する時にVirtualBoxのGUIからではなく、
% VBoxManage startvm "VM名" --type headless
で起動するとGUIなしでVMを起動できる。MacのLaunchDaemonに書けば便利


dokkuインストール

安定版を入れた。

Ubuntuで
% wget -qO- https://raw.github.com/progrium/dokku/v0.2.2/bootstrap.sh | sudo DOKKU_TAG=v0.2.2 bash
dokkuというユーザーが増えて、dockerやnginxなどが入る。


ssh鍵のインストール

ubuntuインストール時に作った普通のユーザーと、dokkuというユーザーそれぞれに同じ鍵をインストールした

Macから
% brew install ssh-copy-id
% ssh-copy-id -i ~/.ssh/id_rsa.pub sho@192.168.56.103

sshでubuntuに入ってから
% cat ~/.ssh/authorized_keys | sudo sshcommand acl-add dokku shokai
/home/dokku/.ssh/authorized_keys に書き込まれる。


ホスト名の設定

Ubuntuに /home/dokku/VHOST を作り、
dokku.192.168.56.103.xip.io
を書いた。

dokkuのnginxはリクエストのホスト名のサブドメイン部分でどのアプリケーションへのリクエストなのかを判別して振り分けるので、IPアドレスではなくドメイン名でアクセスできるようにしなければならない。

xip.ioを使うとサブドメイン部分をそのまま返してくれるのでLAN内のマシンにドメインが振られてるように見せかけられる。


ちゃんとグローバルIPでドメイン名ある環境だったら、xip.ioは必要ない。


デプロイする

試しにHerokuのnodejsサンプルをデプロイしてみる。

Macから
% git clone git@github.com:heroku/node-js-sample.git
% cd node-js-sample
% git remote add dokku dokku@dokku.192.168.56.103.xip.io:node—js-sample
これは
git remote add リモート名 dokku@ホスト名:アプリ名
という事。


git pushでデプロイする
% git push dokku master
すると、Herokuにデプロイした時と同じようにbuildpackがNode環境を作ってる様子が流れて、
http://node-js-sample.dokku.192.168.56.103.xip.io
で起動する。



試しにsocket.ioでwebsocketを使っているアプリもデプロイしてみたら、ちゃんとwebsocket proxy通った。

dockerを0.10から0.9に戻す

dokku v0.2.2は、docker 0.10だと動かない。
デプロイすると
Invalid namespace name (app), only [a-z0-9_]
というエラーがでて失敗する。

issueが立ってた。
Dokku 0.10.0: Pre-receive hook declined: Invalid namespace name (app) · Issue #533 · progrium/dokku
docker 0.10からnamespaceが4文字以上必要に変更されたが、dokku v0.2.2が作るコンテナはappというnamespaceを使おうとするので失敗する。

とりあえずdockerを0.9.0に落とせば動くので、Ubuntuで
% sudo apt-get remove --purge lxc-docker
% sudo apt-get install lxc-docker-0.9.0

これでMacからgit pushしなおしたらデプロイ通った。


コンテナの管理

dockerコマンドとdokkuコマンドを併用する。
詳しくはgithubのREADMEの下の方に書いてある

Ubuntuで
コンテナ一覧
% sudo docker ps

コンテナの削除。dokkuでの名前で指定して削除する
% sudo dokku delete アプリ名

コンテナのログを見る。tail -fみたいに追ってくれる。
% sudo docker logs -f コンテナ名


コンテナ名は、docker psしたら一番右にでてくるnostalgic_nobelとかsad_galileoみたいな厨二ネームっぽいやつがソレ。


手元のMacからログを見たりする

これらのコマンドはもちろんssh command proxyからも実行できる。
自分をdockerグループに追加すれば /var/run/docker.sock の権限が得られるので、sudoが必要なくなる
% gpasswd -a sho docker

Macから
% ssh ホスト名 docker ps
% ssh ホスト名 docker logs -f コンテナ名
でログが見れる。

0

MacのScreen Sharingをターミナルからon/offする

システム環境設定→共有→画面共有をon/offできるコマンドを作った。
gistに置いてある。

% git clone https://gist.github.com/9120415.git

使い方


% vnc start
% vnc stop
で有効/無効できる。


用途

sshだけ有効になっていて、画面共有が無効なMacなどで便利だと思う。
例えばうちではサーバーとしてMacMiniを使ってるんだけど、OSアップデートをインストールしたい時とかGUIが必要で、でもずっと画面共有を開けっ放しにしておくのは気持ち悪い。
VNCする前に
% ssh ホスト名 vnc start
で有効にできるので平和だと思う。

普段持ち歩いてるMacbookが家のwifiに接続されたら自動的に画面共有を有効にして、タブレットからも操作できるようにする、とかもできそう。


スクリプト

#!/usr/bin/env ruby
## enable/disable VNC on Mac OSX (testing with OSX 10.9)

def show_current_status
if system "sudo launchctl list | grep com.apple.screensharing > /dev/null" and
system "sudo defaults read /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled | grep 'Disabled = 0' > /dev/null"
puts "VNC: enabled"
else
puts "VNC: disabled"
end
end

def show_help
app_name = File.basename $0
STDERR.puts "% #{app_name} start # enable VNC"
STDERR.puts "% #{app_name} stop # disable VNC"
show_current_status
end

if ARGV.empty?
show_help
exit 1
end

enable = case ARGV.shift
when "start" then true
when "stop" then false
else
show_help
exit 1
end

system "sudo defaults write /var/db/launchd.db/com.apple.launchd/overrides.plist com.apple.screensharing -dict Disabled -bool #{!enable}"

if enable
system "sudo launchctl load /System/Library/LaunchDaemons/com.apple.screensharing.plist"
else
system "sudo launchctl unload /System/Library/LaunchDaemons/com.apple.screensharing.plist"
end

show_current_status

参考

コマンドラインから画面共有をONにする方法 for OS X Mountain Lion – うさぎ文学日記

0

Macの画面のだいたいの色を取得する

画面が肌色っぽいとか黒いとか、知りたいことがあると思う。

Macだとscreencaptureコマンドでキャプチャできる。
画像をファイルに保存してからimagemagickのconvertコマンドで1×1ピクセルに縮小しつつ、text:-オプションでRGB値を出力する

/usr/sbin/screencapture tmp.png && convert tmp.png -geometry 1x1 text:-

結果
# ImageMagick pixel enumeration: 1,1,255,srgb
0,0: ( 66, 68, 70) #424446 srgb(66,68,70)
赤っぽいとか青っぽいとか、わかる。