2012/12/31

mac な eclipse で jdk の中にある jar を classpath に追加する

環境 : Mac OS X Mountain Lion, Eclipse Juno (4.2.1)

Eclipse で jdk の中に入ってる jar を classpath に追加しようとして

Project 右クリック -> Propaties -> java build path -> Add External JARs

をしたのは良いけれど、選択方法がFinderな感じで
  /Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/jfxrt.jar
とかを指定したいのに
  /Library/Java/JavaVirtualMachines
の *.jdk とかしか指定できない。

jdk を右クリックしてもQuickLookしかできなくてどーしようもない感じ。

なので プロジェクトの下の .classpath を直接編集して
    <classpathentry kind="lib" path="/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jdk/Contents/Home/jre/lib/jfxrt.jar"/>
とか追加したら大丈夫だった。

.classpathの例はこんな感じ。

2012/12/28

Mac な jdk 7u10 で javafx なアプリをコマンドラインからコンパイルする

javafx を使っているアプリを javac なりでコンパイルしたかったのだけれど、javac *.java だと怒られた。

ググるとjavafxc なるコマンドがあるらしいけれど not found。
javafx SDK を入れたらどうにかなるかな、と思ったけれど javafx SDK は jdk7 から標準で付いてくるみたい。
jdk7u10入れてるけれど javafxc が無い様子なので困っていたけれど
JavaFX 2.0 Developer Preview SDK for Mac OS X - Onto JavaFX
によるとjavafxなライブラリはjarになってる様子。

2012/12/28 時点での最新 のjdk7 は u10 なので .zshrc に

export CLASSPATH= ${CLASSPATH}:/Library/Java/JavaVirtualMachines/jdk1.7.0_10.jd/Contents/Home/jre/lib/jfxrt.jar

を書いたら javac からの java で動いた。
一応環境は jdk 7u10 な java 1.7.0_10 で Mac OS X Mountain Lion さん。

動かしてみたのはこれ。
いろふさん絵描き歌 by JavaFX - JavaFX in the Box
いろふさんとは一体何物なのだろうかとか思いつつ。

ちなみに javafx アドベントカレンダーあるみたいです。
JavaFX Advent Calendar 2012 : ATND
ごんごさんが Musclide なる muscle base slideshow system を書いてました。
javafxな参考のために Musclide.java と Ring.java をちょっと読んだけれどコメントが秀逸感。

追記 : 
jdkのバージョンが決め打ちなのはなんかアレなので
export CLASSPATH=${CLASSPATH}:`/usr/libexec/java_home`/jre/lib/jfxrt.jar
くらいに。とはいっても /usr/libexec/java_home が無い環境だとまた微妙そうだけれど……

2012/12/17

kvm の qcow2 なディスクイメージを拡張する

kvm 専用なのかは分からないけれど、仮想ディスクのイメージに qcow2 形式というものがある様子。
仮想ディスクの容量を拡張したい場合は一旦 raw 形式に変換してから拡張して戻すとOKらしい。
これが最善かは分からないけれど上手くいったので。
コマンドはこんな感じ。

一旦 raw に変更
% qemu-img convert -f qcow2 origin.img -O raw raw.img
サイズ拡張
% qemu-img resize raw.img +3G
qcow2に戻す
% qemu-img convert -f raw raw.img -O qcow2 resized.img

-f が入力形式指定で -O が出力形式指定らしい。

2012/12/13

zsh で cd を誤爆した時だけ pushd する

zsh は
setopt auto_pushd
としておくと、cd するたびにディレクトリスタックにディレクトリが積まれるので、"cd" と打って誤爆しても cd - で前のディレクトリに戻れるのでたまに使ってました。

けれど細かにcdする場合はディレクトリスタックに大量のディレクトリが積まれて分かりにくいのと、pushd/popd がほとんと使いものにならない状態だったり。

auto_pushd はあまり必要ないけれど、cd を誤爆った時のみリカバリできないかなー、とか思っていたので、試しに簡単なfunction書いてみたら割といけそうな感じに。

コードは以下。コードというか .zshrc に書く設定というか。

コードといっても cd に引数が無ければ pushd を呼んで引数があれば cd を呼ぶだけ。
これで上手くいくんじゃないかなー、とか思う。
実際 auto_pushd と比較した使い心地はこれから分かるであろうので謎。
cd のエラーはちゃんと吐くけれど微妙にメッセージが違ってたり。ちょっと違和感。

一応bashでも動いてる様子。というか使っているのがほとんど無いので基本どこでも動く?

2012/11/26

git archive で指定ファイルを除外する

git archive コマンドを使えばリポジトリをアーカイブできるみたいです。

けれど .gitignore とかはアーカイブにはいらないのでどーにかできないかな、と思っていると tar とかでフィルタする 方法があるらしい。

けれど Mountain Lion にデフォルトで入っている tar には --delete オプションが無い様子。

で、もう少し調べると .gitattributes  なるものがある様子。
これを書いているとファイルに対していろいろと設定できるらしく、 export-ignore と書いているとarchiveに含まれなくなるみたい。

.gitignore 除外のための .gitattributes の例はこんな感じ
.gitattributes を書いて実際にアーカイブを試してみるけれど
$ git archive HEAD -o archive.tgz
だと除外されずに変わらない。
$ git archive
を打つと --worktree-attributes なるオプションがあるらしいので、これを付けるとちゃんと 除外された。
なので
$ git archive HEAD --worktree-attributes -o archive.tgz
とかするとOK。

それで、.gitattributes の試しに作ってみたのが このリポジトリ
.gitignore と include.txt と exclude.txt と archive.sh があって、.gitignore と exclude.txt は .gitattributes で export-ignore してる。

archive.sh を走らせると archive.tgz ができる。
解凍して中を見ると、include.txt と archive.sh しか入っていないはず。
実際にどのコマンドが走ってるのは archive.sh を見てみてください。

これで archive に必要無いファイルをgitできちんと管理しながら git archive から除外できそう。

Mail.app で GMail を使って添付ファイルを送信できない

Mountain Lion の Mail.app 6.2 で添付ファイルを付けて送ろうとすると
Cannot send message using the server
 とか言われて弾かれた。

けれど Connection Doctor を使うときちんとログインまで確認できる。
使っているのはGMailだったので、Webから同じ添付ファイルを送信しようとしたら
エラー
hoge.tgz には実行ファイルが含まれています。 セキュリティ上の理由により、Gmail ではこの種類のファイルを送信できません。
と怒られた。

調べてみると、GMailは送信時に一部のファイル形式を含めばアーカイブしていても弾くらしい。


とりあえず、 .sh とか .rb とか入ってるのだけれど外して固めても怒られるし、 .sh は生で送れたりするし、pdfをtgzに固めても怒られたり、空のtgzだと怒られなかったりするので何を検出しているのかは謎。

一部のファイル形式らしき拡張子のファイルも無いアーカイブなので、何が検出されているのかは本当に謎。うーん。

2012/11/23

Macで濁点半濁点もきちんと補完できるzshを使う

標準で Mac に入ってるの /bin/zsh はファイルに濁点とか半濁点が付いてると、補完の時に

% less ~/Desktop/ほけ<3099>

とかってなってしまう。原因はMacのファイルシステムでの日本語の扱いの問題らしい。
それで、mac の zsh で日本語の濁点・半濁点付き仮名を正常に補完できる様にする : アシアルブログ なるものを試してみた。


環境 : OS X Mountain Lion, Homebrew インストール済み

インストール方法は基本的には上のリンクのまんま。
まずは
$ brew tap waltarix/customs
なんか Warning 出てたけれど大丈夫っぽい。

それで
$ brew install --use-gcc --disable-etcdir waltarix/customs/zsh
くらい。
依存の waltarix/customs/ncurses が brew install だと入らなかったので --use-gcc 付けてみたら通った。 --disable-etcdir は info になんか書かれてたので追加。まー、 /etc は使ってる記憶も無いから良いかな、と。

無事インストールできたのでログインシェルに設定。だけど
$ chsh -s /usr/local/bin/zsh
しようとすると
chsh: /usr/local/bin/zsh: non-standard shell
とか言って弾かれた。

こことか見ると、/etc/shells にログインシェルを追加しないといけないみたい。

なので
$ sudo vim /etc/shells
して
/usr/local/bin/zsh
を追加して
$ chsh -s /usr/local/bin/zsh
したらログインシェルの変更終了。


ちなみに、ログインシェルの変更は chsh だと思っていたけれど chpass とかもあるらしく、
$ man chpass
すると chpass, chsh, chfn はどうやら一緒っぽさげな様子。

さらにちなみにだけれど、 sudo vim したら警告っぽいの出てた。正しい方法があるのかな。

2012/11/06

Maven でエンコーディングを指定する

Maven を使っていてエンコーディングを指定しないと

$ mvn compile

の時に

[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!

とか出るので、エンコーディングを指定する方法。


こことかを参考に、

<project>
  ...
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  ...
</project>
 を pom.xml に追加すればOK。

一応 pom.xml の例はこんな感じ。

2012/10/15

ssh:// で指定したリモートリポジトリに MercurialEclipse で push できない時にチェックする点

Eclipse に MercurialEclipse を入れて Mercurial を使っている状態で、リモートのリポジトリに push ができない状況になっていた時のチェック点。

・とりあえずチェックするポイント
「 ssh で warnings 出てない? 」


以下詳細。

・ 環境
  • Mac OS X Mountain Lion
  • Eclipse JUNO
  • Mercurial 2.2
  • MercurialEclipse  2.0.0.201208160020

・問題
MercurialEclipse で commit はできるけど、 ssh:// で指定したリモートリポジトリに push しようとすると

no suitable response from remote hg!
com.aragost.javahg.commands.ExecutionException

と出てきてリモートリポジトリに push できない。

"no suitable response from remote hg!" で調べると
  • ssh://で指定したリモートリポジトリのパスが間違ってる
  • sshした際にhgが使用できない(PATHとかの問題)
などが考えられる問題らしいけれど、ターミナル上では

$ hg clone ssh://server.com/path/to/repository
$ hg push ssh://server.com/path/to/repository

がきちんと行なえるので、どうやらリポジトリのパスやPATHの問題では無いみたい。


・原因
リモートリポジトリが置いてあるサーバへの ssh で warnings が出てた。
ssh で warnings が出てると、MercurialEclipse 側ではエラー扱いになるらしい。

今回の問題だと、証明書関係の warnings が出てたので known_hosts を修正するときちんと push できるようになった。





P.S. 某オペレーティングな方々へ
とりあえずよく分かんないけど、どーにかして、ってなったら
$ rm ~/.ssh/known_hosts
を試してみたください

2012/10/14

Vimperator を Mac で make する

Vimperator を Mac で make してみた。

Vimperator のリポジトリ を hg clone して素直に make すると SUCCES とか出るのだけど、良く見るとエラーが出てる。

ここ とか見ると、Mac の sed ではちょっと問題があるみたいなので、 gnu の sed やら cp やらを使わないといけないみたい。

ってなわけで必要なものを入れる

環境 : Mac OSX Mountain Lion , homebrew 構築済み

$ brew install gnu-sed
$ brew install coreutils

で必要なコマンドが他のコマンド群といろいろ入る。
おそらく gnu なコマンド群かと思われる。
ちなみにデフォルトの sed とかの区別のために、gnu-sed は gsed という名前で入る。
インストール時にオプション指定すれば gsed でなく sed って名前にもなるらしい。
coreutils のコマンド群も同じで、基本的に頭に 'g' がつく。これも インストール時でオプションで g を消せるみたい。
ちなみに上のコマンドだと sed も coreutils のコマンド群も g が付いたままインストールされる。

で、肝心のVimperator の make は、 gsed と gcp を 指定して make すれば良いっぽい。

$ make -e SED=gsed CP=gcp -C vimperator xpi

で downloads の下に vimperator-3.6pre.xpi とかができる。
それを
$ open -a "firefox" vimperator-3.6pre.xpi
とかすればfirefoxで開くので、インストール。


ちなみに Mac な sed は BSD な sed らしい。 Mac 自体のコマンドがそんな感じなんだろーか。

2012/10/11

ssh-copy-idを使ってみる

サーバとかに ssh するたびにパスワード認証をしないといけないけれど、鍵を作っておくとパスワード認証は必要なくなるみたい。

本来、鍵を使ってsshするためにはサーバへの鍵登録が必要だけど、 ssh-copy-id コマンドを使うと楽に登録できるらしいのでやってみた。

環境 : Mac OS X Mountain Lion , homebrew インストール済み

デフォルトで ssh-copy-id は入ってないので


$ brew install ssh-copy-id

して入れる。現在のstableは6.0p1らしい。


sshしたいサーバと、そのサーバに入るためのユーザ名で

$ ssh-copy-id username@servername.com

とかすると、一度パスワードを聞かれる。
パスワードを入れると何も出ないけど、次回からパスワード無しでそのサーバにsshできるようになってる。


これでパスワード認証無しでsshできるようになった。


一応、Github用にssh-keygenとかしてたので、鍵生成はしなかった様子。
うまく共存もできてるみたいだし今のところ問題無し。
鍵生成してなかったらパスフレーズとかも聞かれるのかもしれない。

hello blog

hello blog