2015-04-23

OS X: Determine power source is connected or not in command line

Use ioreg :

ioreg -rc "AppleSmartBattery" |grep ExternalConnected|awk '{print $3}' | grep -q '^Yes$'

(see exit code)

Today accidentally our MacBook for Jenkins Slave has down -- due to power source loss. So I've added cron job to notify my team that power cable is disconnected based on this one liner.

Referral

Published at 2015-04-23 00:09:33 +0900 | Permalink
2015-01-21

Running gocode under dependency manager

nsf/gocode searches *.a object files under $GOPATH/pkg/$GOOS_$GOARCH by default. But dependency manager for Go customizes $GOPATH for its environment on build, so gocode can't find object files under dependency managers, such as godeps, gondler, or gom.

To make working correctly, set lib-path for those tool. Godeps workspace is usually placed at Godeps/_workspace/pkg/$GOOS_$GOARCH. Relative path works well.

Example

gocode set lib-path 'Godeps/_workspace/pkg/linux_amd64:_output/local/go/pkg/linux_amd64'
Published at 2015-01-21 01:21:25 +0900 | Permalink
2013-07-04

Deny incoming packets via IPv6 except from link local address on OS X

ip6fw add 63500 allow tcp from any to any established
ip6fw add 63500 allow ipv6-icmp from any to any
ip6fw add 64000 deny ipv6 from not fe80::/64 to any in
ip6fw add 65000 allow ipv6 from fe80::/64 to any

See also: ip6fw(8)

Published at 2013-07-04 14:56:03 +0900 | Permalink
2013-01-17

Run rbenv in global

Updated (Feb 13, 2014): Fixed my poor English. And note that I hadn't encountered problem around my global rbenv installation for a year.

When we want to have ruby in a server, sometime we can't use the system's package manager.

Because package managers (in almost distros) serve older Ruby. Plus, they may have weird complex rubygems integration.

So the following are my ideas to get Ruby in your servers:

  • Build packages by ourselves: deb, rpm, ebuild

    • I think helpful when you have many servers, but when not, it might be overkill.
    • Building and maintaining packages are boring stuff.
  • Install ruby by hand: make && make install

    • Difficult to control later. What you do when you want to uninstall ruby?
    • How to upgrade cleanly?
  • Version Managers: Install rbenv, rvm

    • I think this is the bet solution; at least for me.
    • I prefer rbenv because it's made simple. rvm changes many shell behaviors.
    • rbenv is great for installing globally.

So, I'm using rbenv for my servers.

But Ruby is used from many users (including system users, daemons). Normally we install rbenv in ~/.rbenv, but it's depends on user's shell ($PATH) configuration and user's home directory.

Here's how I installed rbenv in global.

Install rbenv and ruby-build

I used /usr/local/rbenv for place rbenv.

sudo -i

cd /usr/local
git clone https://github.com/sstephenson/rbenv rbenv
mkdir -p rbenv/plugins
git clone https://github.com/sstephenson/ruby-build rbenv/plugins/ruby-build

RBENV_ROOT

rbenv looks RBENV_ROOT for many paths. In default (= when not specified), ~/.rbenv is set.

When installed rbenv in /usr/local/rbenv, we should set it to RBENV_ROOT=/usr/local/rbenv.

Install ruby in rbenv by ruby-build

Simply do:

sudo env RBENV_ROOT=/usr/local/rbenv install 1.9.3-p374
sudo env RBENV_ROOT=/usr/local/rbenv rehash

Then, set installed ruby to default ruby:

sudo env RBENV_ROOT=/usr/local/rbenv global 1.9.3-p374

Okay, we've done setup ruby on /usr/local/rbenv/shims/ruby. but, still requires to set $PATH. Let's solve it.

global-rehash

I wrote simple plugin for rbenv: https://github.com/sorah/rbenv-global-rehash

This generates symbolic links and scripts from ${RBENV_ROOT}/shims and ${RBENV_ROOT}/bin into specified directory.

For ${RBENV_ROOT}/bin, this plugin generates script to invoke with suitable $RBENV_ROOT.

But scripts in ${RBENV_ROOT}/shims (generated by rbenv rehash) already contains export RBENV_ROOT, so this script generates symlink for shims.

Install this:

sudo git clone https://github.com/sorah/rbenv-global-rehash /usr/local/rbenv/plugins/rbenv-global-rehash

Then,

sudo env RBENV_ROOT=/usr/local/rbenv rbenv global-rehash /usr/local/bin

Finally you can:

/usr/local/bin/rbenv versions
/usr/local/bin/ruby -v

# RBENV_ROOT will not be required after the first run
sudo rbenv global-rehash /usr/local/bin

Enjoy!

Published at 2013-01-17 22:56:13 +0900 | Permalink
2012-08-12

Raspberry Pi + Shairport

Raspberry Pi が届きました。後で Gentoo を入れますが、とりあえず Shairport 入れて Airplay 経由で音を流してみたりしてみます。

https://github.com/albertz/shairport

とりあえず流そうと思ったんですが、iOS 6 と相性が悪いので Pull #152 のパッチを当ててある。

これで繋がるようになったけど、たまに hairtunes が SEGV します。

あと、HDMI でモニタ繋いでて音が raspberry pi 側のジャックから出ない場合は R-Pi_Troubleshooting にあるように

$  sudo amixer cset numid=3 1 # Raspberry Pi 内蔵の端子に流す
$  sudo amixer cset numid=3 2 # HDMI に流す

と指定可能なようです。設定値保存されないぽい。リブートしたら戻った。

で、後はストリーム流すと「ブチッ」と音がなってスピーカーが心配になるような不快な音が流れるんだけど、これは albertz/shairport issue #25 にある方法で解決した。

/etc/asound.conf

pcm.!default {
    type plug
    slave.pcm anticracking
}

pcm.anticracking {
    type dmix
    ipc_key 1024
    ipc_key_add_uid yes
    slave {
        pcm "hw:0,0"
        period_time 0
        buffer_time 0
        rate 44100
    }
}

を書いて、

$ ./shairport.pl -i music -d
$ while true; do aplay -t wav -f cd -F 0 -B 0 --device="plughw:0,0" music; sleep 1; done

こんな感じ。いまいちすっきりしないけど。

期待するのは間違っていると思うがraspberry piのサウンド出力そんなによくないので、今はHDMI経由で音をとってる。なんか高音が割れてる感じがするのよね。

Published at 2012-08-12 15:49:14 +0900 | Permalink
2012-07-29

RDP 経由で iTunes で CD をインポートする

リモートデスクトップ (Remote Desktop Connection) 経由で iTunes を使った時に iTunes が CD を認識してくれなくて CD をインポートできない、という現象。

(当然接続先のマシンの CD ドライブに入れてる)

twitter で聞いたらセキュリティポリシーがあるらしい。有効にしたらちゃんと CD を認識してくれた。やったー

http://windows.microsoft.com/ja-JP/windows7/Burn-a-CD-or-DVD-over-a-remote-connection

  1. Win-R (ファイル名を指定して実行) → gpedit.msc
  2. "コンピュータの構成" → "管理用テンプレート" → "システム" → "リムーバブル記憶域へのアクセス"
  3. "すべてのリムーバブル記憶域:リモート セッションでの直接アクセスを許可する"
  4. 有効化

多謝! しかしグループポリシーってなんでスタートメニューの管理ツールに出てこないんだろうね。

Published at 2012-07-29 18:30:01 +0900 | Permalink
2012-06-19

Getting my dev environment on new Mac by hand

新しい MacBook Air が届いたので、移行アシスタントを使わずに環境構築したメモ。

ただし、手抜きなのでアプリケーション設定とか dotfiles や homebrew, rbenv はそのままコピーして持ってくる。

バックアップについての詳細は過去の OS X Lion 再インストール記事 を見てください。

起動

  • Lion からはかっこいいムービーはなくなりましたぽよ…
  • ことえりは選ばずに U.S. を選ぶ。無駄なゴミ設定ファイルを作らなくてすむ(らしい)
  • 適当にユーザー作成してログインするところまで

システムの設定

FileVault 2

  • System Preferences を開いて Security をえらぶ
  • FileVault のタブを開いて、左下の南京錠アイコンを押して認証したあとに FileVault 2 を有効化する
  • / ごと暗号化されました!

Trackpad

  • ページ送りなどの操作を 3 本指スワイプに変更
  • tracking speed を最速に

Keyboard

  • "Use all F1, F2, etc. keys as standard function keys" を有効化。

    • デフォルトでは F1 などのキーは、キーボードに刻印された機能が直接機能していて、Fnキーと一緒に押すことで F1 などとして機能する。
    • これを有効にすると逆転して、 Fn を押した時にキーボードに刻印された機能が動いて、デフォルトでは F1 - F12 として振る舞うようになる
  • Modifiers Keys… を押し、Caps を Control にする

    • 後に USB キーボード (HHKB とか) つないだ時に、HHKB だと Fn+Tab で Caps が入力されてしまうので Caps を No Action に設定する
    • この設定はキーボードごとにバラバラです、便利!
  • Keyboard Shortcuts タブを開いて、All controls にチェックを入れておく。テキストボックスなど以外のコントロールにもTabでフォーカスがあたるようになる

Finder

  • Finder に切り替えて Cmd-, で preferences を開く
  • "Show these items on the desktop" で External disks にする (デスクトップに外付けでマウントされたディスクなどが表示されるようになる)
  • "New Finder windows show" はホームディレクトリにしておく
  • Sidebar は Hard disks が - になってるのを ✓ にして、全部表示されるようにしておく
  • またホームディレクトリを Favorites のところのチェック入れて表示されるようにする
  • 適当にウィンドウ開いて View メニューから Show Status Bar, Show Path Bar しておく

Dock

  • とりあえず Hiding を入れておく (自動的に隠れる)

Sharing

  • ホスト名を変更しておく

Date and Time

  • メニューバーの時計で秒を表示されるようにしておく

Mission Control

  • Mission Control: F3
  • Application Windows: F5
  • Show Desktop: F6

に割り当てる。OS X Tiger (10.4) からの名残だわ…

また、 "Automatically rearrange spaces" はオフ。

設定ファイル

  • 設定ファイル位置詳細も 再インストール記事 を見て。
  • Preferences は今回, alfred, aperture, iTunes, iWork, Terminal, Divvy, reeder, skitch, skype, teamspeak3, 夜フクロウ, MacVim, Limechat, KeyRemap4MacBook のをコピーした。
  • Application Support も Alfred, Aperture, KeyRemap4MacBook, Limechat, Reeder, Skype, 夜フクロウを。
  • Keychains/login.keychain もリプレースする

アプリケーション類

今回は以下を入れた

  • Alfred
  • Aperture
  • Divvy
  • Dropbox
  • Google Chrome (dev)
  • Google Japanese Input (dev)
  • Growl
  • iWork
  • LimeChat
  • MacVim
  • Music Manager
  • Reeder
  • Skitch
  • Skype
  • TeamSpeak 3 Client
  • VMware Fusion
  • Xcode + CLI tools
  • YoruFukurou

設定は事前にコピーしてあるからだいたい普通に動く。

git リポジトリの working copy とかは全部 Dropbox に突っ込んでいるので、開発環境構築は Dropbox の同期が終わるのを待つ。

Homebrew

パッケージマネージャ? Macports? Fink? まだそんなもん使ってるの???

時代は homebrew です。

  • 面倒なので ~/brew をそのまま手元にコピー、移行終了。
  • (私は homebrew を ~/brew にインストールしています)

その他データ

  • iTunes とか Aperture のライブラリも適当にコピーしておきましょう。

dotfiles など

  • ~/{.ts3client,.topcoder,.zsh_history,.zshrc_env,.rbenv,.ssh,.gitconfig,contestapplet.conf,local} をコピーする。
  • ~/git~/Dropbox/Codes/git とかに symlink を貼る
  • ~/git/config に cd して source memo (ひどい)

  • chsh -s /bin/zsh で zsh にする

  • MacVim を起動して :NeoBundleInstall! してプラグインを clone しておくのも忘れずに。

    • あとで cd ~/.bundle/vimproc && make -f make_mac.mak しておく

tweaks

  • defaults write com.apple.Dock autohide-delay -float 0 && killall Dock

    • Dock を自動的に隠しているときに、マウスポインタ当てた時に間髪なしに表示されるようになる
  • defaults -currentHost write -globalDomain AppleFontSmoothing -int 1

    • 外部モニタ接続時のアンチエイリアスが狂うのをなんとかする。

あとは

  • Dock に適当にいろいろ突っ込んだり
  • start up のアプリ (Limechat, Skype, YoruFukurou, Dropbox, Skitch, Divvy, Growl) を設定したり
  • 終わり。
Published at 2012-06-19 23:57:34 +0900 | Permalink
2012-02-05

WL300NU-AG on Gentoo Linux

自宅においてある Wi-Fi のアクセスポイントが酷いので Aterm WR9500N を購入したのだけど、

今持ってる USB のドングルじゃ 5GHz 帯に対応できないため適当な 5GHz 帯対応の USB ドングルを探したら、WR9500N と同じ Aterm の WL300NU-AG がなんだかんだ定番らしかったのでそれも購入。

NEC Aterm WL300NU-AG (USB子機) PA-WL300NU/AG
NEC (2009-02-08)
売り上げランキング: 3459

何故か WR9500N は amazon.co.jp 発送では無かった(はず)なので、別の所で WR9500N を購入した都合上こいつが先に到着してしまったので Gentoo で動かすためのメモ。

Kernel Config

Linux Wireless で WL300NU-AG を検索してみるとこのページがヒット する。 このページからモジュール名等はわからないのでURLからar9170と推測する。 しかしar9170のページを見ると以下のように書いてある

This driver is deprecated and it was deleted on Linux 3.0, replaced by carl9170.

自分は Linux 3.2.1 を利用しているので、書いてあるとおりに carl9170 を入れる事にする。carl9170 のページのデバイスリストに WL300NU-AG が載っているので大丈夫。

そして Linux のソースツリーで make menuconfig を叩いて carl9170 を有効化させる。

Device Drivers  --->
 [*] Network device support  --->
  Wireless LAN  --->
   [*] Wireless LAN (IEEE 802.11)
   <*> Atheros Wireless Cards
   <*>   Linux Community AR9170 802.11n USB support

お好みで SoftLED 等も入れる。

コレを入れてビルドする。まだ再起動はしないように。

(今回は既存のWi-Fiドングルを再起動時に差し替えるので、先にインターネットに繋がってる間にファームウェアを手に入れておく)

ファームウェアをツモる

Linux Wireless の carl9170 のページにファームウェアがあるのでツモってくる。Linux 3.2 なので "Linux 3.1 or newer" を選んだ。

$ sudo wget "http://linuxwireless.org/en/users/Drivers/carl9170/fw1.9.4?action=AttachFile&do=get&target=carl9170-1.fw" -O /lib64/firmware/carl9170-1.fw

(amd64 なので /lib64 なわけで適当に i386 的な人は置き換えて欲しい)

udev の設定で既存の wlan0 を潰す

udev の設定を弄って既存の wlan0 の設定をコメントアウトする。こうすることで次回起動時には WL300NU-AG を wlan0 と認識するので /etc/conf.d/net を変更せずにすむ。(ただし起動時に WL300NU-AG 一つしか指してない場合の話)

$ sudo vim /etc/udev/rules.d/70-persistent-net.rules

で、 wlan0 的な行を#でコメントアウトして保存してやる。

(ファイル名の70についてはうろ覚え)

再起動

再起動してブートする前に既存の無線ドングルを引っこ抜いてWL300NU-AGに置き換えるか、 一度poweroffして置き換えた後に起動しなおす。

すると普通にWL300NU-AGをwlan0として認識して何もせずともつながると思う。

免責事項

自己責任でね。

Published at 2012-02-05 18:58:29 +0900 | Permalink
2011-08-24

VMwareにGentooいれた

Gentoo Gentoo!

Gentoo してますか!

VMware fusion に Gentoo を入れる時,カーネルのオプションが割とめんどくさい・・・!

http://en.gentoo-wiki.com/wiki/VMware_Guest#Kernel_options

公式Wikiのこれを見ていろいろ指定してもやっぱり失敗する…

もうやだめんどう

You can also refer to this Gentoo guest kernel configuration file for VMware Fusion as a good starting point. It has been tested as a desktop on Fusion 2.0.5 using 64-bit Gentoo Linux. Most of the unnecessary options have been removed to keep the kernel lean.

なんと…!

というわけで http://www.shocksolution.com/2009/10/09/kernel-configuration-gentoo-guest-vmware-fusion にあるconfigファイルを.configに書きこんでやって

make menuconfig でExt4等ちょっと有効にしてsaveしてmakeしたらうまくいった.やったね!

Published at 2011-08-24 09:43:14 +0900 | Permalink
2011-07-03

Vimでの見た目そのままにソースコードをKeynoteのスライドに貼り付ける方法

http://kakutani.com/20110703.html#p01

に触発されております.__Vimでもできるよ!!!__

1. ソースコードを:TOhtmlする

まずはおもむろにVimで該当のコードを開きます.

このとき注意しておきたいのは,背景色はKeynoteに反映されないので黒背景ならKeynoteのテキストボックスを黒背景に するか,Vim側のカラースキームを白背景のものにしておくかを予め選択しておく必要があります. 尚,カラースキームの選定にはunite-colorscheme (ユナイトビューティフルアタック!!!)を利用するといいでしょう. 本稿ではunite-colorschemeについては割愛します.

また,行番号などもHTML化されるので:set nonuで非表示にしたりお好みで.

カラースキームを変更などしたら,:TOhtmlを実行します. 次に開かれたバッファーをどこか適当なところに:w /tmp/a.htmlなどで保存します

ちなみに範囲選択した状態で:TOhtmlするとその部分だけがhtmlになります.

2. 生成されたHTMLをSafariもしくはChromeで開く

そのHTMLを:!open -a Safari /tmp/a.htmlなどで開きます. (このときSafariは"Google Chrome"に置き換えても問題無し)

そしてそれを適当にコピーしておきます.

3.Keynoteに貼りつけ

それを最後に貼りつけて,フォントサイズを調整(スライドには文字を大きく!!)して完成です.

さいごに

Vimでもできるよ!!! (大事なことなので二回言いました)

Published at 2011-07-03 03:07:30 +0900 | Permalink