MacのYosemiteでキーボードショートカットを割り当てる

人それぞれ独自のキーボード捌きがあるかと思います。私はアプリケーションのタブの移動では、command+k、command+lで移動したい派です。

それらを実現する方法はいくつかあります。今までは、

– BetterTouchTool

を主に使っていました。しかし上手くいかない点もあります、たとえばterminal.appでcommand+lをBetterTouchtoolで割り当てても、どうやらterminal.app独自のショートカットのクリアが発動してしまいます。

少し調査してみると、OSの機能でショートカットを割り当てられることを発見したので、↓に書いておきます。

システム環境設定

キーボード

ショートカット

アプリケーション

「+」ボタンを押して、ショートカットを割り当てたいアプリケーションを選択

右側のメニューに出現したアプリケーションを選択した状態で「+」ボタンを押す

ウィンドウが開くので「メニュータイトル」と「キーボードショートカット」を打ち込む
(このときメニュータイトルは一字一句正確に)

ショートカットが割り当てられる

↑実際これで動くようになりました。私のキーボードショートカットはかなりの部分がBetterTouchToolの上に載っていますが、徐々にこのOS内蔵の機能に移行するのが良さそうです。たくさんある場合、登録作業は少々面倒ですが^^;

Debianで特定のウィンドウを録画してmp4にする

前回はgifにしましたが今回はmp4にします。また、特定のデスクトップを録画する方法も追加しました。

ちなみにslackにはmp4のファイルをアップロードしても単なるファイルとして表示されて、動画としてインライン展開してくれない点には留意したほうが良いと思います@2015/04/27現在。gifにするべきですね。

環境は

– Debian
– recordmydesktop ($ sudo aptitude install recordmydesktop)
です。おそらくUbuntuでも同じです。

まず、xwininfoと打って、GUIで録画したいウィンドウをクリックします。

$ xwininfo

すると、

xwininfo: Window id: 0x2c0003e

などと表示されます。そしてこの値を使って、以下のようにします。

$ recordmydesktop --windowid 0x2c0003e

すると、そのウィンドウが録画されます。ターミナルに戻ってctrl+cとすると録画が終了し、エンコードし始めます。

out.ogvというファイル名で、ホームに出力されます。

これはogv形式なので、mp4にしてみます。Youtubeにアップロードする、などの手もあるかもですがローカルでやってみます。まずmemcoderをインストールして、次にmp4にエンコードします。

$ sudo aptitude install mencoder
$ mencoder out.ogv -oac mp3lame -ovc lavc -lavcopts vcodec=mp
eg4 -o output.mp4

こんな感じです。

Debianで画面を録画して軽量のgifにする

追記@2015-04-28

特定のWindowを録画するには、

$ xwininfo

として、マウスで調べたいwindowをクリックすることでwindowのidが表示されます。そして

$ recordmydesktop --windowid <windowのID>

とすればOKです。たとえばxwininfoの結果が0x2c0003eなら、

$ recordmydesktop --windowid 0x2c0003e

とします。


追記@2015-06-02

gifsicleでdelayのオプションがないと早送りな感じになるので、–delay=7としておおよそ撮影時と同じ速度になるように修正しました。


gifはたいていの環境で再生可能なので便利に使っています。何かを作って見せるときに画面を録画してgifにして貼っつけておくのが個人的な流行なので、Debianでもそれをやりたいなと思いました。ちなみにMacの場合、LICEcapというもので簡単に出来ます。

Debianで録画するには、

– recordmydesktopとffmpegとgifsicleをインストール
– recordmydesktopで録画
– ffmpegでgif化
– (オプション) gifsicleで軽量化 (ただし、gifsicleで処理すると早送りのような感じになります)

という手順です。

まず必要なパッケージをインストールします。

$ sudo aptitude install recordmydesktop ffmpeg gifsicle

そしてrecordmydesktopで録画します(GUIで「アプリケーション」→「サウンドとビデオ」にあると思います)。

録画して出来たファイル(video.ogvとします)、ffmpegでgifにして、さらに必要であればgifsicleで軽量化します。

$ ffmpeg -i video.ogv -pix_fmt rgb24 output.gif
$ gifsicle --delay=7 -O3 < output.gif > new.gif

以上です。gifsicleのdelayオプションで7ぐらいを指定すると、おおよそ撮影時の挙動に近いかと思います。ファイルサイズですが、

– recordmydesktopで撮影したファイル(ogv形式): 2.8MB
– ffmpegでgif化したもの: 437MB
– gifsicleで軽量化したもの: 756KB

でした。ogvは小さくていいんですが、MacやSlackでは再生されずなのでgifにしてます。

[ERROR] Exit code: 1 – javadoc: error – invalid flag: -Xdoclint:none と怒られるとき

私の場合、Mavenのバージョンが想定外のものになっていたことが要因でした。Xdoclint:noneをするのはおそらくJava1.8を想定していると思いますが、MavenのJavaが1.7になっていました。

$ mvn -v
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_40, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk-7-oracle-armhf/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.18.7-v7+", arch: "arm", family: "unix"

↑こんなふうに1.7になっていました。対処法として、↓を挙げておきます。

LinuxでMavenのJavaとシステムのJavaのバージョンが異なる場合の対応策

LinuxでMavenのJavaとシステムのJavaのバージョンが異なる場合の対応策

$ sudo update-alternatives --config java

をしてJava1.8を選択して、さらにJAVA_HOMEを適切に設定したはず(↓)ですが、なぜかMavenのJavaとシステムのJavaのバージョンが異なる状態で、Mavenでビルドしようとするとエラーが出る状態でした。

$ echo $JAVA_HOME
/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt

$ mvn -v
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.7.0_40, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk-7-oracle-armhf/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.18.7-v7+", arch: "arm", family: "unix"

$ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

↑上記のようにmavenはJava 1.7、システムのJavaは1.8です。いったいどういうことなのでしょう。。。

$JAVA_HOMEは、/etc/environmentで設定済み↓でした。

$ cat /etc/environment 
JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt

いろいろと調べたところ、update-java-alternativesすればいいようです。

# インストールされているjava一覧を表示
$ update-java-alternatives -l
java-1.6.0-openjdk-armhf 1057 /usr/lib/jvm/java-1.6.0-openjdk-armhf
jdk-7-oracle-armhf 317 /usr/lib/jvm/jdk-7-oracle-armhf
jdk-8-oracle-arm-vfp-hflt 318 /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt

# ↑のjava 1.8を選択
$ sudo update-java-alternatives -s jdk-8-oracle-arm-vfp-hflt
update-alternatives: error: no alternatives for jhat
update-alternatives: error: no alternatives for jrunscript
update-alternatives: error: no alternatives for mozilla-javaplugin.so
update-alternatives: error: no alternatives for schemagen
update-alternatives: error: no alternatives for wsgen
update-alternatives: error: no alternatives for wsimport
update-alternatives: error: no alternatives for xjc

# mvnの確認
$ mvn -version
Apache Maven 3.0.4
Maven home: /usr/share/maven
Java version: 1.8.0, vendor: Oracle Corporation
Java home: /usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.18.7-v7+", arch: "arm", family: "unix"

# javaの確認
$ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

↑上記のように一致しました。MavenはJAVA_HOMEを無視してどこか別のところから読んでくるのでしょうか。。。全く意味不明ですがひとまず直ったのでよしとします。。。

追記@2015-04-26

↑の作業でmvnのバージョンが古いままのことがありました。どうやら環境変数が古いままだったようなので、一旦ログアウトして確認してみると正常になりました。