0

MacとAndroidでUSBテザリング

最近Nexus5でWiFiテザリングしてると妙にMacbook側のインターネットが重くて、たまに全く速度が出ないどころかHTTPリクエストがタイムアウトする事さえあった。

WiFiをやめてUSBテザリングしたら明らかに速くなった。街はWiFiが飛び交っていて無線通信できないらしい。

USBテザリング

AndroidとMacをUSBケーブルで接続して、Androidの
[設定]→[もっと見る]→[テザリングとポータブルアクセス]→[USBテザリング]
を有効

これだけではMac側にネットワークアダプタとして認識されなかったので、

HoRNDISをMacにインストールして再起動
HoRNDIS: USB tethering driver for Mac OS X | Joshua Wise's domain

無事認識された

Windowsだと何も設定せずにネットワークアダプタとして認識するらしい。
そういえばauのAndroid使ってた時も別のau専用のUSBテザリング用ソフトをMacにインストールした気がする。

0

rbenvやめてhomebrewでRubyインストールする事にした

rbenvでRubyインストールするのって色々オプションつけたり下準備が面倒だけど、brew install rubyで最新版入るし、1.8〜2.0の頃と違って2.0以上で動くコードは2.2でも問題ない感じがするからRuby処理系のバージョン切り替え要らないじゃん、homebrewで最新版インストールすればいいじゃんという気持ち

nginxアップデートしたらopensslも一緒に上がってRubyがぶっ壊れた

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

homebrewで入れてたnginxもアップデートした。

% brew tap marcqualie/nginx
% brew install nginx-full --with-mp4 --with-mp4-h264-module

最近のはデフォルトでwebsocket proxyが有効になっていて便利!とか思っていたら、homebrewのopensslもアップデートされて、rbenvでインストールしてたRubyからSSLが使えなくなった。Ruby全滅した。

そこでrbenv+ruby-buildでRuby 2.2.2をインストールしたのだが、SSLを使う処理を動かすと「digest/sha1.bundle, 9): Symbol not found: _rb_Digest_SHA1_Finish (LoadError)」というエラーで死んでしまう。

というかrbenvでRubyインストールしてopensslやらreadlineやらが動かなくて色々コンパイルしなおすの、OS入れ替える毎にやってていい加減アホくさいのでやめたい。
ここ4年ぐらい一度もストレートに成功したこと無い。


homebrewでインストールする


よく見たらhomebrewにrubyっていうパッケージがあって、ちゃんと2.2.2がインストールできる。
node.jsもhomebrewで最新版入れて使ってるし、特別Ruby 1.8.7で動かさないとならないアプリとかが無い限り別に言語処理系のバージョン管理いらないんじゃないのという気になって

% brew uninstall --force rbenv ruby-build
% brew install ruby
した。ruby 2.2.2とgem 2.4.5が入った。


jrubyも入れた。
% brew install Caskroom/cask/java
% brew install jruby

全く問題なく使えてる。


LaunchAgentからのRuby起動

PATHが消えてるので自分でEnvironmentVariablesを設定するのと最初のbundleを/usr/local/bin/bundleとフルパス指定さえすればhomebrewで入れたruby 2.2.2が使えた。

    <dict>
<key>RACK_ENV</key>
<string>production</string>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin</string>
</dict>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/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>UserName</key>
<string>sho</string>
<key>WorkingDirectory</key>
<string>/Users/sho/my/app/path</string>
<key>StandardOutPath</key>
<string>/var/log/myapp/myapp.log</string>
<key>StandardErrorPath</key>
<string>/var/log/myapp/myapp.log</string>
<key>UserName</key>
<string>sho</string>

0

Enterキー押す毎にJXAでiTerm2の背景を変える

指定ディレクトリの下の写真をランダムにiTermの背景設定するコマンドができた。
https://gist.github.com/shokai/872e375c0b0636b0c2ae


Enterキーを押す毎に画像を切替えるようにzshを設定してみたらすごい疲れる感じになった。これでアニメgifが再生できたら最高だったんだけどただの静止画になってしまう。

写真.appの中身をランダムに表示している。写真.appの顔認識機能が作ったサムネイルも読み込まれるせいで、たまたま撮った写真に写っている知らない人の顔ドアップサムネイル画像もたまに表示されて誰コイツ感がある。
定期的にtumblrとかから画像を取ってきても楽しそう。


ふつうにプログラムを書いたりしているところ


JXA

AppleScriptの代わりにJavaScriptで書けるというJavaScript for Automationを使ってみた。Yosemiteから使える。公式名称ではないがなぜかJXAと呼ばれているらしい。

JavaScript for Automation Release Notes

ES6も微妙にサポートされていて、分割代入とspread operatorが動いた。
var [a,b] = ["foo","bar"]; // a="foo" b="bar"とそれぞれ代入される
[1,2,3,...[4,5,6]]; // [1,2,3,4,5,6]になる
Promiseオブジェクトはあるけど「Event loop not supported.」というエラーが出て使えない。
setTimeoutとsetIntervalは無い。ブロックするdelay(秒)がある


iTerm2

iTerm2 – Mac OS Terminal Replacement

デフォルトのTerminal.appと違ってMacのウニョーンエフェクトなしでフルスクリーンモードにできるので気に入ってる。あと背景を半透明にできるので裏のドキュメントを透かしながら見れるのが便利。

AppleScriptからの操作のドキュメントがある。
https://iterm2.com/applescript.html


AppleScriptでiTermの背景を変える

引数に渡した画像ファイルが背景画像になる。
iterm-bg-image.applescript
#!/usr/bin/osascript
on run argv
set img to item 1 of argv

tell application "iTerm"
tell the current terminal
tell the current session
set background image path to img
end tell
end tell
end tell
end run


JavaScript for Automation (JXA) でiTermの背景を変える

上のAppleScriptをJXAで書き直すとこうなる。
tell applicationのかわりにApplicationという関数があったりする。AppleScriptの文法は8割方理解してないんだけど、とりあえずキャメルケースで接続していけば良いっぽい。

iterm-bg-image.js
#!/usr/bin/osascript -l JavaScript

function run(argv){
var img = argv[0];
var app = Application("iTerm");
app.currentTerminal.currentSession.backgroundImagePath = img || null;
}
backgroundImagePathにnullを入れると背景をクリアできる。JSだとこういうのも書きやすい。

ディレクトリ内からランダムに背景指定する


指定パスがディレクトリかの判定はNSFileManagerを使った。ディレクトリの下のファイルの列挙はdoShellScriptでlsやfindを呼んだ。

-rオプションを付けるとサブディレクトリの下の画像も探すようにした。
iterm-bg-image.js
#!/usr/bin/osascript -l JavaScript

var fm = $.NSFileManager.defaultManager;

function run(argv){
var [path, opts] = parseArgv(argv);
var img = getImagePath(path, opts.r);
console.log(img);
setImage(img);
}

function parseArgv(argv){
var path = null;
var opts = {};
argv.forEach(function(arg){
var match = arg.match(/^\-+(.+)$/);
if(match){
opts[match[1]] = true;
}
else{
path = arg;
}
});
return [path, opts];
}

function getImagePath(path, recursive){
if(!path) return;
var ref = Ref();
var exists = fm.fileExistsAtPathIsDirectory(path, ref);
var isDirecotry = ref[0];
if(!exists) return;
if(!isDirecotry) return path;
var files = getImagesInDirectory(path, recursive);
return files[Math.floor(Math.random()*files.length)];
}

function getImagesInDirectory(path, recursive){
path = path.replace(/\/$/, "");
var app = Application.currentApplication();
app.includeStandardAdditions = true;
var files = [];
if(recursive){
files = app.doShellScript("find '"+path+"'").split(/\r/);
}
else{
files = app.doShellScript("ls '"+path+"'").split(/\r/)
.map(function(f){
return path+"/"+f;
});
}
return files.filter(function(f){
return /\.(jpe?g|gif|png|bmp)$/i.test(f);
});
}

function setImage(img){
var app = Application("iTerm");
app.currentTerminal.currentSession.backgroundImagePath = img || null;
}


Enterキーを押す毎に背景を変える


参考:zshでコマンドが空の状態でenter押したときに任意のコマンドを実行する方法 – kei_q


写真.appに入っている写真を適当に表示する

.zshrc
function iterm-bg-image-random(){
zle accept-line
if [[ -z "$BUFFER" ]]; then
$(iterm-bg-image ~/Pictures/写真\ Library.photoslibrary -r > /dev/null 2>&1 &)
fi
}
zle -N iterm-bg-image-random
bindkey '^m' iterm-bg-image-random

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

MacMini(2013)のHDDが死んだのでHDDコピーして復活させた

HDDを取り出して新しいHDDに取り替えて、古いHDDをUSB接続して、リカバリディスク(USBメモリ)から起動してディスクユーティリティで丸ごとコピーして復活させた。
OS再インストールにならなくてよかった。

症状

Mac OSX Marvericksは起動するけど、ディスクへの書き込みができない。ファイルを作成しようとするとエラーが起きて失敗する。


新しいHDDを買った

元々MacMiniに入っていたのは東芝の2.5インチ500GB SATA HDDだった。

SSD買うお金がないので、東芝の1TBを買った。
ヨドバシ.com – 東芝 TOSHIBA MQ01ABD100 [2.5インチ 5400rpm SATA 1TB バルクハードディスク ノートパソコン用]【無料配達】

朝注文したら夕方届いた。ヨドバシすごい


SATA-USB変換アダプタを買った

Macminiには1つしかHDDが入らないので、古いHDDを外付けHDD化してコピーするために買った。
もう一つ別のメーカーのも買ったんだけど、そっちはドライバが必要で、後でやるリカバリディスクからのディスクユーティリティでのコピーでは使えなかった。

GREEN HOUSE SATA/IDE-USB2.0変換アダプタ 2.5インチHD対応 GH-USHD-IDESA
グリーンハウス (2007-05-31)
売り上げランキング: 261



HDDの交換

ここが参考になった。
Mac miniのHDDをSSDに変更する方法 | 男子ハック

裏のフタを回し開けて、ファン→WiFiマークの金網→HDDと外して入れ替えた。


リカバリディスク(USBメモリ)を作る


別の無事なMacにUSBメモリをさした状態で
OS X 復元ディスクアシスタント
を起動すれば作れる


リカバリディスクから起動する

Macminiにリカバリディスクと古いHDDを接続して、option(alt)キーを押しながら電源を入れて、ディスクユーティリティを起動する。
先に新しいHDDにパーティションを作ってから、復元する


3時間ぐらい待ったら完了してた。
リカバリディスクと古いHDDをはずして、再起動したらMacmini復活した。