ラベル Mac の投稿を表示しています。 すべての投稿を表示
ラベル Mac の投稿を表示しています。 すべての投稿を表示

2016-03-21

Mac + μTRONキーボードの日本語変換まわりの設定

ヘルシーなプログラマーは、左右分離型のキーボードを使うらしいので、真似をしてμTRON キーボードを使い始めた。


買ったままでは使いにくい。Seil と Karabiner というソフトウェアを組み合わせて、キーマップを変更している例が見つかった。ほとんどの設定は素直にいく。ただ、日本語入力まわりの設定に、少し工夫が必要だった。


スペース・英数/かな・コマンド


スペースキー、英数/かなキー、コマンドキーの配置を、できれば本体と似たような配置にしたいという希望がある。


  • 打ち合わせ中や、やリビングでだらだら作業するときには、MacBook Pro 本体のキーボードを使う。慣れていないので、本体と外付けのキーボードのマッピングが、極端に異なるようにはしたくない。
  • 技術的なドキュメントを書くことが多い。英数のときはIME オフ、日本語入力の時にはIMEをオンにする。Google  日本語入力を使っている。
  • 将来的には、このキーボードを活かした設定にしていくんだろうけど、ちょっとずつ変えていく。


最終的にこうやりたい。



Karabiner の、コマンドキー(⌘)の設定が気に入らなかった。スペースを押したまま→キー→スペースを離す、というシーケンスで、⌘を押しながらキーを押したことにする、という設定を使っていた。

押下のタイミングが悪いのか、選択範囲をコピーしたいのに c と悲しく表示されていることがある。

というわけで、Seil と Karabiner を組み合わせて、理想の状態にした。

Seil


Seil はシステム全体で、JIS系のキーの有効/無効を切り替えたり、キーマップを入れ替えたいりする。あまりこれは使っていなかった。本体のキーマップも変えてしまうからだ。

けど、最終的なキーマップを実現するために、Seil で中間的なキーマップ設定をした。
  • 無変換キーを、英数キーにする
  • 変換キーを、かなキーにする。
  • CAPS LOCK キーを、左 Command キーにする。
  • かなキーを、右 Command キーにする。




MacBook Pro  には変換/無変換キーが存在しないので、このキーマップとほとんど干渉しない。Caps Lock はめったに押さない。

Karabiner


Karabiner では、内蔵キーボードのキーマップをいじらない、という機能を有効にする。以降の設定は、μTRON のキーマップにだけ反映される。

まず、独自の設定をXMLで定義して、有効にする。
  • スペースを、 左 Command キーにする。
  • Backspace を、右 Command キーにする。
  • INSERT を、Backspece にする。 ... この文章の内容とは関係ないマップだけれど、XMLに出てくるので、記載しておく。

<?xml version="1.0"?>
<root>
  <item>
    <name>Change Space to Command</name>
    <identifier>private.change_space_to_command</identifier>
    <autogen>__KeyToKey__ KeyCode::SPACE, KeyCode::COMMAND_L</autogen>
  </item>

  <item>
    <name>Change INS to BS, BS to Space</name>
    <identifier>private.change_ins_to_backspace</identifier>
    <autogen>__KeyToKey__ KeyCode::DELETE, KeyCode::COMMAND_R</autogen>
    <autogen>__KeyToKey__ KeyCode::HELP, KeyCode::DELETE</autogen>
  </item>

つづいて、Karabiner がデフォルトで持っている変換ルールを適用して、親指まわりの設定をする。
  • 英数キーを、スペースにする。
  • かなキーを、スペースにする。
  • 左 Command キーを、英数キーにする。
  • 右 Command キーを、かなキーにする。


これで完成。

2015-11-08

OS X の JavaScript for Automation で、外部ライブラリを読み込む

OS X Yosemite 以降オートメーションのスクリプトをApple Script ではなくてJavaScript でも書けるようになった JavaScript for Automation または JXA と呼ぶらしい

単純な自動化だとシェルスクリプトなり Python なりで書けばいいんだけどアプリケーションと通信するときにはオートメーションを使えると便利だたとえばカレンダーアプリや iTunes の API にアクセスするようなとき

今回、JXA で日付文字列のパースやフォーマットがしたくなった。Node.js なんかだと、moment.js なるライブラリがある。

JXA で外部ライブラリを取り込むには、いくつかやりかたがあるらしいけれど、browserify を使うことにした。

手順


まず、browserify と、取り込むライブラリをインストールする。

npm install -g browserify
npm install moment

moment.js を使うコードを書く

// main.js
var moment = require("moment");
console.log(moment().format('MMMM Do YYYY, h:mm:ss a'));
browserify を使って出力したコードを、JXA 環境で実行する。

$ (echo 'window = this;'; browserify main.js; echo ';ObjC.import("stdlib");$.exit(0)') | osascript -l JavaScript
2015-11-08T16:26:55+09:00

実行コードをファイル保存


エラーが出たりすると、どの行だよ!ってなるので、browserify の出力をファイルにする。Makefile で。cake や gulp じゃなくてすみません。

bundle.js: *.js
    (echo 'window = this;'; browserify main.js; echo ';ObjC.import("stdlib");$$.exit(0)') > bundle.js

run: bundle.js
    osascript -l JavaScript bundle.js

JXA 環境特有の調整


Node.js と JXA との環境の違いを吸収するため、 browserify の出力前後に、数行追加してある。

JXA には window がない。ただし、this でグローバルなオブジェクトにアクセスできる。window = this することで、window オブジェクトが使える風にする。今回のスクリプトでは不要。

browserify で生成した関数を実行すると最後に評価された式の値がプリントされる結果を標準出力に出してパイプでつなぐような用途だと困る

ObjC.import("stdlib");
で、なんかライブラリを読み込む。らしい。ObjC.foo または $.foo で、読み込んだ関数にアクセスできる。というわけで、
$.exit(0);
して、何も表示させずに終了している。

2013-04-25

8080 番ポートがいつも使われていた

Mac を使っていて、いつも再起動するとローカルの 8080 ポートが使われていて、Google App Engine のローカルサーバを立ち上げようとするとエラーがでました。それで Evernote にメモしてあるコマンドを叩いて終了させる、ということを繰り返していました。なんか、めっちゃバタバタしているとき(つまり、いつも)に、とりあえずやって、そのままだったのです。

自分のクビをしめるのはやめておこう。ってことで。動いていたのは Jenkins です。朦朧とした頭で、ビルド、インストール、設定したら自動で立ち上がるようになっていました。

  • /Library/LaunchDaemon/org.jenkins-ci.plist を削除する。これが起動時に呼ばれていました。
  • /Library/Application Support/Jenkins ディレクトリを削除する。この中に Jenkins 起動スクリプトが入っていました。
  • /Application/jenkins.war を削除する。本体。

2012-04-07

とりあえず10分だけやる


Getting Started Is Everything という記事の内容を実践してみたら、簡単なわりに効果があった。やる気が出ないときに10分だけやる、というシンプルな方法。

... I convince myself to spend ten minutes on my project. Just ten minutes. Enough time to accomplish one small task. Then, after that ten minutes is up, I can go back to zombies, guilt-free, if I so choose. 
The beautiful thing is, I almost never do.
10分だけやってみようと自分に言い聞かせる。たった10分だ。ちょっとしたタスクなら完了するだろう。10分たてば、罪悪感を感じることなく、ゾンビ映画でも見ればいい。 
ポイントは、ほとんどの場合、ゾンビ映画を見たりしないってことだ。

とりあえず10分やることで、なにがしかの進捗がある。記事に書かれているとおり、たいてい 10 分でやめないので、プロジェクトはもっと進む。普段仕事に集中するために、3-2-1 という OS X 用のアプリを使って、いくつかタイマを用意している。ポモドーロ用に25分と5分、とりあえず片付けるための2分、そして、とりあえず取りかかるための10分。


10分のタイマだけは設定の「Bring to front」のチェックを外している。こうしておくと、10分たったときに、まだ集中して作業をしていれば、そのまま続けられる。


とりあえず始める、というのは、すぐやる系の自己啓発本にも書いてあったのだけれど、10分でいいんだ、と思うと気が楽になって、先延ばし屋の私もとりかかれるようになった。おかげで、手付かずのタスクがほったらかしになるのが少なくなった。

2009-07-09

Snow Leopard の GCD

Mac OS X の次期バージョン Snow Leopard には、Grand Central Dispatch というのがあるらしいです。これは OS なのか、フレームワークというかミドルウェアなのか微妙な感じがしないでもないですが、まあ、そこはよしとして。



概要を読んでみると、マルチコアCPU用の並列コードを書きやすく/並列化しやすくするテクノロジーっぽい。



Block というコンセプトがあって、これがひとつのコードのかたまりになる。資料をそのまま使うと、x = ^{ printf("hello world\n"); }  みたいに定義するそうで。で、後で、x( ); でBlock を実行するというか、呼び出すというか。



Block は、GCD が持っている Queue に突っ込まれて、あとは GCD がコアに振り分けて実行してくれるらしい。これで動的に並列化する部分をそれなりに並列化できる。



Block を Clump、Queue を RunQueue に置き換えると、どっかで聞いた事のある実装と似ているなぁと思った次第です。



2009-05-13

Time Machine を設定してみた

自宅のネットワークストレージとして、バッファローの LS-WHGL/R1 を持っています。バックアップとか、普段使わないファイルを保存するのに使うことを目論んでいました。ところが、Mac OS X の Time Machine って無線 LAN で、このストレージをバックアップ用にしてくれませんでした。で、放置すること数ヵ月。



検索してみたら、いろいろチャレンジしているページがありました。今回は LS-WHGL/R1シリーズでTimeMachineを使う を参考に設定。途中、どこかの手順でしくじったらしく、ディスクユーティリティでドライブが出てこないという自体に陥りましたが、TimeCapsuleじゃないNASを使って、TimeMachineを使ってみるを読みながら、再チャレンジしたら、見事設定完了。おおお。



さっそくバックアップを始めたら、これがまた時間がかかります。まあ、無線 LAN でディスクまるごとバックアップしようとしたら時間がかかりますわな。



あとバックアップ中、というかネットワークでがしがし転送しているときには、Bluetooth のマウスやキーボードの反応がおそろしく悪くなります。なので、作業中はついつい「バックアップを中止」してしまって、なかなかバックアップが終わりません。ないよりマシってことで。



10年ほど前は、バックアップをするために、pdumpfs を NTFS 用に Python で実装して使っていたものです。Time Machine すばらしすぎ。



2008-12-06

UNC Finder for Mac OS X Leopard

昨日のスクリプトに手を加えて、UNC パスで表記されたファイルやフォルダを開くスクリプトを書きました。ユーザ名やパスワードは記憶しません。



uncfinder.py.zipをダウンロード


uncfinder.zipをダウンロード



2008-12-05

UNC の ¥¥foo¥bar を smb://foo/bar に変換する

MacBook Air を衝動的に買ったわけですが、Windows な職場なので UNC なパス名をよく使います。「¥¥foo¥bar¥baz にファイルを置いておきました」みたいな展開がよくあります。そんなわけで、これを smb://foo/bar/baz に変換するスクリプトをかきました。



ソースコード


バイナリ



マウントするのは、また今度。Python スクリプトを py2app でビルドしています。間違いなく、もっといいものが世の中にあると思います。