OS X 10.9が出たので早速インストールしてJKaiUI Customとkaiengine、jRenamerの動作を確認してみました。
結論から言うとどれも問題なく動作しました。
JKaiUIとjRenamerはもともとjavaで書かれた物なので問題ないと推測していましたが、問題はkaiengineでした。
ちなみに実際に接続して遊んでみた結果、以前と同様に遊べたことから問題ないと判断しました。
JKaiUI改良版 配布中
JKaiUI改良版をファイル置き場にて配布中です。
最新版はここから落とせます。追加機能の使い方の説明は落としたファイルのReadMeファイルを参照してください。
オリジナルのJKaiUIの使い方、Mac上でのXLink kaiの情報はMac de Kaiを参照してください。
JKaiUI改良版はまだ開発版です。オリジナルからそう多く変更していないので大丈夫だともいますが、ご利用は自己責任でお願いします。
2013年11月9日土曜日
2013年10月12日土曜日
2013年10月5日土曜日
javaアプリをMac OS XのApp形式にする
JAVAアプリをMac OS X用にApplication Bundle化する
上が参考になります。
Java 6ではJarBundlerをJava 7以降ではAppBundlerを用いれば楽なようです。
上が参考になります。
Java 6ではJarBundlerをJava 7以降ではAppBundlerを用いれば楽なようです。
2013年9月28日土曜日
jRenamerを公開しました。
jRenamer ver.0.1.0alphaを公開しました。
ファイル置き場においてあります。
jRenamerは名前の通りにリネームするソフトウェアです。
大量にあるファイルからある程度法則性のある名前をリネームする用途で作成されています。
jRenamerはJava 6以降で動作します。
また、本ソフトウェアはフリーウェアです。
現状、アルファ版のためバックアップをとるなど注意して利用してください。
使い方等はReadMeまたは起動後のメニューから見てください。
ファイル置き場においてあります。
jRenamerは名前の通りにリネームするソフトウェアです。
大量にあるファイルからある程度法則性のある名前をリネームする用途で作成されています。
jRenamerはJava 6以降で動作します。
また、本ソフトウェアはフリーウェアです。
現状、アルファ版のためバックアップをとるなど注意して利用してください。
使い方等はReadMeまたは起動後のメニューから見てください。
2013年9月14日土曜日
lombok(javaライブラリ)の紹介
Javaでコードを書くのがだるすぎたけどLombok使ったら思いのほか楽しかった
を読んでみたところ便利そうだったので紹介します。
lombokはIDEなどで自動生成できるようなコードをコンパイル時に自動生成するようにすることでコード量を減らすのが目的のライブラリのようである。
具体的には以下のようなことができる。
他にもいくつかあるのが興味があればここを参考にしてください。
使い方はここが参考になります。
どうやってるのか少し興味がありjavassistとかを使ってるのかと思いソースを調べてみました。
ただ単純にAnnotation Processorで実現しているようである。
を読んでみたところ便利そうだったので紹介します。
lombokはIDEなどで自動生成できるようなコードをコンパイル時に自動生成するようにすることでコード量を減らすのが目的のライブラリのようである。
具体的には以下のようなことができる。
- C#, Objective-C のようなプロパティ(Getter, Setter)
- toString, equals, hashCodeメソッドの自動生成
- コンストラクタの自動生成
- Scalaのようなval変数(型指定のいらない定数)
- 委譲するメソッドを自動生成
他にもいくつかあるのが興味があればここを参考にしてください。
使い方はここが参考になります。
どうやってるのか少し興味がありjavassistとかを使ってるのかと思いソースを調べてみました。
ただ単純にAnnotation Processorで実現しているようである。
2013年9月7日土曜日
2013年8月31日土曜日
迷惑メール対策
メールを利用していればたいてい迷惑メールを受信したことがあると思う。
迷惑メールはかなり面倒な存在である。
これらの対策にはいろいろな方法が存在し、いろいろ提供されている。
プロバイダで提供しているもの、クライアントソフトで提供しているものなどがある。
今回は私が利用しているメーラーThunderbirdでの方法を説明する。
Thunderbirdを前提にした説明になるが他の環境でも応用は可能である。
タグ付けの後にフォルダ振り分けを行う。
以下はその一例である。
この方法では、迷惑メールではないものを迷惑メールと判定してしまう場合がどうしても発生する。
そのような場合がなるべくなくなるような方法を考案している。
また、スマホなどでフォルダ分けした場合に受信ボックス以外を見れないなどの弊害をなくすことも考慮している。
この方法では欠点もある。
1つ目は設定が煩雑であること。
自分が送受信するメールのアドレスをある程度把握している必要がある。
また、送受信するアドレスが変化した場合にフィルタのメンテナンスが必要であること。
2つ目はフィルタリングが多段になるために処理が時間がかかること。
以上のような利点と欠点を持っているが、個人的にはかなり便利になった。
迷惑メールで困っている方の参考になれば幸いです。
迷惑メールはかなり面倒な存在である。
これらの対策にはいろいろな方法が存在し、いろいろ提供されている。
プロバイダで提供しているもの、クライアントソフトで提供しているものなどがある。
今回は私が利用しているメーラーThunderbirdでの方法を説明する。
Thunderbirdを前提にした説明になるが他の環境でも応用は可能である。
対象環境
- IMAP
- Thunderbird
方針
- 受信ボックス一カ所だけだけ見れば新着がすべて見れるようにする。
- 新着は受信ボックスのみ見ればよく手間が減る。
- スマホなどで利用するとき受信ボックスがアクセスしやすいものを考慮している。
- 例:iphone標準の「メール」
- 受信時に自動的にメールにタグをつける。
- フォルダ分けされていなくてもタグにて色分けさせメールの見分けがつけやすくする。
- 利用者は受信ボックスを見てタグ付けが問題なければタグに基づいてフォルダ振り分けを行う。
- 受信ボックスの件数を減らし、可読性をよくする。
方法
説明用の環境例としてgmailを用いる。- サーバー側での自動的なフィルタリング(迷惑メールフィルタも含む)は行わない。
- gmailではデフォルトで迷惑メールフィルタが動作するのでこれをオフにする。
- webブラウザでgmailにアクセスし、from欄に「*」を入力したフィルタを作成する。
- クライアント側で受信時に各メールにタグをつける。
- Thunderbiradのメッセージフィルタを利用する。
- フィルタを適用するタイミングを「メールチェック時と手動実行」にする。
- フィルタの設定は後述する。
- ユーザーは後にタグに基づいてメールをフォルダに振り分ける(フィルタリングルールを作って自動で行う)。
- Thunderbiradのメッセージフィルタを利用する。
- フィルタを適用するタイミングを「手動実行」にする。
- フィルタの設定は後述する。
メッセージフィルタルール
メッセージフィルタを用いてタグ付けとフォルダ振り分けを行う。タグ付けの後にフォルダ振り分けを行う。
以下はその一例である。
- タグ付けルール
- 信頼できるアドレス(完全一致)
- 例:差出人がアドレス帳にある
- ある程度信頼できるアドレス(ドメインなどでタグ付け)
- 通販サイトや企業、学校などからのメールを想定
- 例:差出人が次で終わる@apple.com
- 例:差出人または宛先、CC、BCCに次を含む
- メーリングリストなどでは件名に規則的なものがつかわれているばあいがある。
- 例:件名に次を含む
- 迷惑メール1
- 基本的にドメインを見て判定します。
- 例:差出人が次で終わる .mobi
- 末尾がcom, co.jp, jp, ac.jpなど決まったところ以外はだいたい迷惑メールの傾向がある
- orgなど他にもあるので自分のやりとりするアドレスの傾向を見て決める。
- 例:差出人が次で終わる @docomo.ne.jp
- 携帯からのメールは知り合いのアドレスを登録しておいて引っかからないようにする。
- PCメールに携帯メールは知り合い以外からはそこまで送られてこないと仮定している
- 迷惑メール2
- 自分宛ではないメール
- 自分のアドレスが差出人、CC、BCCにない場合は迷惑メールとする。
- タグがない場合以外ではタグをつけない。
- メーリングリストなどでは自分のアドレスが含まれない場合があるため。
- 他のフィルタでタグ付けされるように設定する。
- 例:
- 条件1:差出人または宛先、CC、BCCに次を含まない 自分のアドレス
- 条件2:タグが空
- フォルダ振り分けルール
- タグに基づいてフォルダ振り分けを行う
- 例:タグに次を含む
まとめ
迷惑メールフィルタでは基本的にメールの中身を見て過去のメールと似たものを迷惑メールと判定している。この方法では、迷惑メールではないものを迷惑メールと判定してしまう場合がどうしても発生する。
そのような場合がなるべくなくなるような方法を考案している。
また、スマホなどでフォルダ分けした場合に受信ボックス以外を見れないなどの弊害をなくすことも考慮している。
この方法では欠点もある。
1つ目は設定が煩雑であること。
自分が送受信するメールのアドレスをある程度把握している必要がある。
また、送受信するアドレスが変化した場合にフィルタのメンテナンスが必要であること。
2つ目はフィルタリングが多段になるために処理が時間がかかること。
以上のような利点と欠点を持っているが、個人的にはかなり便利になった。
迷惑メールで困っている方の参考になれば幸いです。
2013年8月24日土曜日
Javaコーディング規約
ここのがすごい参考になりました。
http://www.acroquest.co.jp/webworkshop/javacordingrule/javacordingrule.html
http://www.acroquest.co.jp/webworkshop/javacordingrule/javacordingrule.html
2013年8月17日土曜日
gmailに他のメールアドレスを統合
gmailで他のメールを受信するようにすることでメールアカウントを統合できます。
やり方は以下を参照。
https://support.google.com/mail/answer/21289?rd=1
gmailでの受信はpop3に対応している必要があります。
統合するとGmailを介しているだけ受信が遅くなります。
また、Webからアクセスしている場合からなら受信アドレスにあわせて送信アドレスを変更できます(設定が必要)。
しかし、メールクライアントソフトウェアを利用している場合はそれができない場合があります(Thunderbiardにて確認)。
1つの(無料)gmailアカウントで受信できるpop3アカウントの制限は5つです。
ただし、多段にすることで簡単にその制限をなくせます。
例:
例では合計8つのアカウントを統合しています。
黒丸が統合先アカウント、白丸がgmail#1で受信するアカウント、黒四角がgmail#2で受信するアカウントになります。
この方法の問題点は段の低い方(例では黒四角)がより受信に時間がかかるということです。
なので、低い段には重要度が低いアドレスをおくといいです。
やり方は以下を参照。
https://support.google.com/mail/answer/21289?rd=1
gmailでの受信はpop3に対応している必要があります。
統合するとGmailを介しているだけ受信が遅くなります。
また、Webからアクセスしている場合からなら受信アドレスにあわせて送信アドレスを変更できます(設定が必要)。
しかし、メールクライアントソフトウェアを利用している場合はそれができない場合があります(Thunderbiardにて確認)。
1つの(無料)gmailアカウントで受信できるpop3アカウントの制限は5つです。
ただし、多段にすることで簡単にその制限をなくせます。
例:
- gmail#1
- gmail#2
- yahoo#3
- yahoo#4
- yahoo#1
- yahoo#2
- hotmail#1
- icloud#1
例では合計8つのアカウントを統合しています。
黒丸が統合先アカウント、白丸がgmail#1で受信するアカウント、黒四角がgmail#2で受信するアカウントになります。
この方法の問題点は段の低い方(例では黒四角)がより受信に時間がかかるということです。
なので、低い段には重要度が低いアドレスをおくといいです。
2013年6月22日土曜日
keynoteで接続線、曲線
keynoteで図を書く必要がありました。
そのとき、パワポのようにオブジェクト同士を矢印つなげたり、曲線を書く場合にどうすればいいかを調べた結果です。
接続の線を作成する方法
ベジェ曲線の書き方
個人的にはこれができればパワポと同じように図が作成できます。
ただ、一つ問題として接続の線は同じオブジェクト間では一つしか線を作成できないようです。
そのとき、パワポのようにオブジェクト同士を矢印つなげたり、曲線を書く場合にどうすればいいかを調べた結果です。
接続の線を作成する方法
ベジェ曲線の書き方
個人的にはこれができればパワポと同じように図が作成できます。
ただ、一つ問題として接続の線は同じオブジェクト間では一つしか線を作成できないようです。
2013年6月15日土曜日
ゲームエンジン比較
ノベルゲームを作るかもしれないので、ノベルゲーム用エンジンをいくつか調べてみました。
そのときの個人的な比較を書いておきます。
比較対象は以下の7つです。
ゲーム作成は一人ではなく、プログラム素人のシナリオライターもスクリプトをいじることを考慮します。
デバッグでグラフィッカーや音声の人もいじる可能性もあります。
先に結論を書いておきますが採用する予定なのは吉里吉里です。
VitualArtsから無償貸与扱い。届け出が必要。
LiveMakerとそんなにかわらないので略。
7. ADV+++
吉里吉里を採用した理由はkkdeの存在が大きいです。
解凍するだけでほぼすべての開発環境ができます。
それにコード補完、コードの色分けなどが利用できて便利です。
個人的にはRen'pyが利用したいのですが、英語があまり得意そうではないシナリオ担当のために現状では厳しいと判断しました。
個人的に勉強してノウハウたまったら利用したいです。
LiveMaker / Yuuki!Novel等はGUIで開発できるのでスクリプトを書いたことがない素人が利用するには良さそうです。
スクリプトのみでもすべてできるか確認してみたんですが、よくわからなかったので今回は不採用にしました。
スクリプトを操作できないと他のプログラムから利用などで不便な場合があるからです。
他にシナリオ担当にスクリプトになれてもらおうというのも理由にあります。
NScripter, RealLiveMaxはC++で拡張書かなくてはいけないようで少し面倒なのでやめました(もっとも吉里吉里でもこだわるならC++でプラグインを書く必要があります)。
ADV+++は初心者でもプロでも幅広く利用できるようになっているようです。
個人的にはアセンブリ風言語で書く必要があるのが不採用の最大の理由です。
Javaなど高級言語利用してきた私としてはアセンブラのようなので書きたいとは思いませんし、個人的にはすごい読みづらいです。
参考
http://ja.wikipedia.org/wiki/%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3
そのときの個人的な比較を書いておきます。
比較対象は以下の7つです。
比較対象
比較項目
- 対応プラットフォーム
- ライセンス
- 情報量
- 実績
- 開発環境
- 拡張性
前提
比較はプログラマ視点が基本です。ゲーム作成は一人ではなく、プログラム素人のシナリオライターもスクリプトをいじることを考慮します。
デバッグでグラフィッカーや音声の人もいじる可能性もあります。
比較評価
1. 吉里吉里2先に結論を書いておきますが採用する予定なのは吉里吉里です。
- 対応プラットフォーム:Windows系のみ
- ライセンス: どのようなのでも無償
- 情報量:豊富
- 実績:有名なのいろいろ
- 開発環境:kkdeなるものがある。
- コード補完、コードの色分けをしてくれます。
- 統合開発環境で初心者でも使いやすいです。
- 拡張性:TJSを使えば幅広い拡張が可能
- 対応プラットフォーム:Windowsのみ
- (ONScripterで他のプラットフォームに移植可能)
- ライセンス: 商用は有料
- 情報量:多い
- 実績:十分
- 開発環境:さくらエディタなどで設定するとコード補完などが可能
- プログラマはいいが他の人に設定してもらうのが面倒そう
- 拡張性:C++で書く必要がある。
- ちょっと面倒
VitualArtsから無償貸与扱い。届け出が必要。
- 対応プラットフォーム:Windows系
- 更新されることはないと思うので新しいWindowsではどうなるかが不安なところ
- ライセンス: どのようなのでも無償
- 情報量:少なめ
- 実績:商用に利用されていたので
- 開発環境:さくらエディタでコード補完等可能
- 拡張性:C++で書く。
- 拡張しなくても豊富な機能があるらしい
- 対応プラットフォーム:Windows, Mac OS X, Linux, Android
- ライセンス: 無償(MITライセンス)
- 情報量:日本語情報は少なめ、英語は十分にある。
- 実績:海外での実績はそこそこある
- 開発環境:既存のプログラム言語pythonを利用しているので流用可能
- 拡張性:pythonで書かれたものを流用可能
- 他言語で利用できるように設計されているが日本語で一部問題がある場合がある。
- 対応プラットフォーム:Windows
- ライセンス: どのようなのでも無償
- 情報量:そこそこ?
- 実績:フリーのゲームは結構ある模様。詳細は不明
- 開発環境:GUIで作成できます。
- 拡張性:少ないかも。詳細不明
LiveMakerとそんなにかわらないので略。
7. ADV+++
- 対応プラットフォーム:Windows系、Mac OS X系など
- ライセンス: カンパウェア
- 情報量:少なめ(有料のコミュニティに入るのが必須かも)
- 実績:プロが作ったもの
- 開発環境:不明
- アセンブリ風言語で開発
- 拡張性:できない?詳細不明
まとめ
採用予定なのは吉里吉里2です。吉里吉里を採用した理由はkkdeの存在が大きいです。
解凍するだけでほぼすべての開発環境ができます。
それにコード補完、コードの色分けなどが利用できて便利です。
個人的にはRen'pyが利用したいのですが、英語があまり得意そうではないシナリオ担当のために現状では厳しいと判断しました。
個人的に勉強してノウハウたまったら利用したいです。
LiveMaker / Yuuki!Novel等はGUIで開発できるのでスクリプトを書いたことがない素人が利用するには良さそうです。
スクリプトのみでもすべてできるか確認してみたんですが、よくわからなかったので今回は不採用にしました。
スクリプトを操作できないと他のプログラムから利用などで不便な場合があるからです。
他にシナリオ担当にスクリプトになれてもらおうというのも理由にあります。
NScripter, RealLiveMaxはC++で拡張書かなくてはいけないようで少し面倒なのでやめました(もっとも吉里吉里でもこだわるならC++でプラグインを書く必要があります)。
ADV+++は初心者でもプロでも幅広く利用できるようになっているようです。
個人的にはアセンブリ風言語で書く必要があるのが不採用の最大の理由です。
Javaなど高級言語利用してきた私としてはアセンブラのようなので書きたいとは思いませんし、個人的にはすごい読みづらいです。
参考
http://ja.wikipedia.org/wiki/%E3%82%B2%E3%83%BC%E3%83%A0%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3
2013年6月1日土曜日
Lion, Mountain LionにJDK 5をインストールする方法
JDK 6上で作成したJavaプログラムはJava 5以前でもそのまま動くと思ってたんですが、そうではないらしい。
ということで今回はMountain LIonにJDK 5をインストールする方法を探していたら見つけたスクリプトを紹介します。
スクリプト:https://gist.github.com/bric3/1163008
ダウンロードからインストールまでほぼ自動でやってくれます。
ということで今回はMountain LIonにJDK 5をインストールする方法を探していたら見つけたスクリプトを紹介します。
スクリプト:https://gist.github.com/bric3/1163008
ダウンロードからインストールまでほぼ自動でやってくれます。
2013年5月11日土曜日
Extended Collections Libraryを紹介
Extended Collections FrameworkなるものをGitHubにて公開しています。
もっと使いやすいCollectionsが欲しかったので壮大な(そうでもないかも)一人プロジェクトで作っていました。
現在はjavassistを用いた方法を考えているので放置中。
以下その説明。
githubにあげたReadMeほぼそのまま。
主に以下の3つのコレクションを目指している。
Objective-C, Scala, Xtend, haskellなどの影響を受けている。
いるかどうかはわからないが複数人で利用する場合は劇薬になる場合があるかもしれないので要注意。
またJavaにてインターフェースを拡張する場合のコンセプトコードでもある。
ucollectionの実装はほぼ完成(現状ではjava.util以下のクラスのみ)。
ただし、テストとテストコード, JavaDocが未完成。
他はまだまだ実験段階。
またはNetBenasのプロジェクト形式なのでantでもビルド可能。
guavaに依存。
それぞれのパッケージは以下。
これはクラス名を同名にすることにより実現している(パッケージは異なる)。
例:共存する場合
例:入れ替える場合
拡張インターフェースはjava.util以下のインターフェースを継承している。
そのため拡張実装クラスはjava.utilのインターフェース型の変数にも代入可能。
拡張実装クラスはjava.util下のクラスを継承している(EnumSet以外)。
そのため、java.utilの実装クラス型の変数にも代入可能
拡張実装クラス、短縮名クラス、同名クラスは継承関係になっている。
java.utilクラス=>拡張実装クラス=>短縮名クラス=>同名クラス
左が親、右が子の関係である。
このような関係のため次のような結果になる。
ただし、3つのクラスは4つのインターフェース(java.util、拡張、短縮、同名)をすべて実装しているためにインターフェースを介した場合は同じように利用可能である。
4つの実装クラス(java.util、拡張、短縮、同名)は中身が同じならequalsメソッドでは等価になるように設計されている。
実装上はjava.utilのものと同じ。
スタティックファクトリーメソッドなどが追加されている。
もっと使いやすいCollectionsが欲しかったので壮大な(そうでもないかも)一人プロジェクトで作っていました。
現在はjavassistを用いた方法を考えているので放置中。
以下その説明。
githubにあげたReadMeほぼそのまま。
Extended Collections Framework概要
Java Collections Frameworkを拡張したフレームワークを目指している。主に以下の3つのコレクションを目指している。
- Java Collections Frameworkにメソッドを追加したコレクション:collections with utilities(ucollection)
- 関数型のようなコレクション:functional collections(fcollection)
- 動的に内部動作を最適化するコレクション:dynamic collections(dcollection)
Objective-C, Scala, Xtend, haskellなどの影響を受けている。
いるかどうかはわからないが複数人で利用する場合は劇薬になる場合があるかもしれないので要注意。
またJavaにてインターフェースを拡張する場合のコンセプトコードでもある。
ucollectionの実装はほぼ完成(現状ではjava.util以下のクラスのみ)。
ただし、テストとテストコード, JavaDocが未完成。
他はまだまだ実験段階。
利用方法
NetBeansプロジェクト形式で配布されるのでNetBeansでビルドしてください。またはNetBenasのプロジェクト形式なのでantでもビルド可能。
ライセンス
修正BSDライセンス。ucollectionについて
ucollectionの設計目標
- 各インターフェースを拡張し、よく使うメソッドを呼べるようにする。
- 各インターフェース、各実装クラスはJava Collections Frameworkと互換性を持たせる。
- 各インターフェース、各実装クラスはJava Collections Frameworkと共存可能。
- 各インターフェース、各実装クラスはJava Collections Frameworkの対応クラスと容易に入れ替え可能
- 短い名前を用意する。
guavaに依存。
ucollectionの使い方
Java Collections Frameworkと共存性を持たせるためにパッケージが4つに分かれている。それぞれのパッケージは以下。
- yuu.akron.ucollection:拡張実装クラスと短縮名クラス群
- yuu.akron.ucollection.another:java.util下のクラスと同名のクラス群
- yuu.akron.ucollection.interfaces:拡張インターフェースと短縮インターフェース群
- yuu.akron.ucollection.interfaces.another:java.util下のインターフェースと同名のインターフェース群
これはクラス名を同名にすることにより実現している(パッケージは異なる)。
例:共存する場合
例:入れ替える場合
拡張インターフェースはjava.util以下のインターフェースを継承している。
そのため拡張実装クラスはjava.utilのインターフェース型の変数にも代入可能。
拡張実装クラスはjava.util下のクラスを継承している(EnumSet以外)。
そのため、java.utilの実装クラス型の変数にも代入可能
拡張実装クラス、短縮名クラス、同名クラスは継承関係になっている。
java.utilクラス=>拡張実装クラス=>短縮名クラス=>同名クラス
左が親、右が子の関係である。
このような関係のため次のような結果になる。
ただし、3つのクラスは4つのインターフェース(java.util、拡張、短縮、同名)をすべて実装しているためにインターフェースを介した場合は同じように利用可能である。
4つの実装クラス(java.util、拡張、短縮、同名)は中身が同じならequalsメソッドでは等価になるように設計されている。
実装上はjava.utilのものと同じ。
スタティックファクトリーメソッドなどが追加されている。
2013年5月4日土曜日
自作シェルコマンド紹介
自作シェルコマンドをGitHubにて公開しています。
ベンチマークの結果をグラフにするために作成したコマンドです。
以下がそのリスト。
各コマンドはMac OS Xにて動作を確認しています。他のOSでは動くかどうかは無保証です。
また、自由に利用してもらってかまいません。
そして、利用は自己責任です。
標準の出力先は標準出力。
現在の対応ベンチマークソフトはxbench, CrystalDiskMark, CrystalMarkの3つ。
ネット上あげるために作成したがgoogleドキュメントの方が利用しやすいために中途半端になっている。
これもブログにあげるために作成したがgoogleドキュメントを使えばほとんど出番無し。
ただし、たいしたことやってないのに汎用性は高いので残してあります。
オプション無しだとcsvファイルの全要素を走査して全体の幅、各列の幅を決定します。
そのため、かなり低速です。
また、幅が大きくなると見づらくなります。
そういうときは-sオプションで列の幅を指定してください。
各列の幅以上の要素は途中でぶつ切れになります。
ベンチマークの結果をグラフにするために作成したコマンドです。
以下がそのリスト。
- bench2csv
- csv2graph
- csv2html
- printCSV
それぞれ簡単な解説
詳しい解説は各コマンドの使い方が-hオプションでみれるのでそれを参照してください。各コマンドはMac OS Xにて動作を確認しています。他のOSでは動くかどうかは無保証です。
また、自由に利用してもらってかまいません。
そして、利用は自己責任です。
bench2csv
各ベンチマークソフトの結果テキストからCSV形式にできる。標準の出力先は標準出力。
現在の対応ベンチマークソフトはxbench, CrystalDiskMark, CrystalMarkの3つ。
基本的な使い方
- bench2csv -c xbench.txt > xbench.csv
- xbenchの結果(自動判別)をCSV形式でファイルに出力
- bench2csv -cm xbench_multi.txt > xbench.csv
- 複数結果が格納されたテキストからCSV形式でファイルに出力
- bench2csv -c -f x Sample > xbench.csv
- フォルダ内の複数のXbenchの結果のファイルからCSVファイルを出力
csv2graph
CSVファイルをgnuplotを用いてグラフ画像に加工します。ネット上あげるために作成したがgoogleドキュメントの方が利用しやすいために中途半端になっている。
csv2html
CSVファイルをhtmlファイルの表形式に変換してくれる。これもブログにあげるために作成したがgoogleドキュメントを使えばほとんど出番無し。
ただし、たいしたことやってないのに汎用性は高いので残してあります。
printCSV
デバッグ用CSVファイルをコンソール上にテーブル形式で表示します。オプション無しだとcsvファイルの全要素を走査して全体の幅、各列の幅を決定します。
そのため、かなり低速です。
また、幅が大きくなると見づらくなります。
そういうときは-sオプションで列の幅を指定してください。
各列の幅以上の要素は途中でぶつ切れになります。
基本的な使い方
- printCSV -s 7 xbench.csv
- bench2csv -c xbench.txt | printCSV
2013年4月20日土曜日
アクティビティモニタのすすめ
アクティビティモニタはWindowsで言うタスクマネージャーまたはリソースモニターに相当する物です。
CPUの使用率、メモリの状況、ディスクの動作、ネットワークの通信状態などを見ることができます。
CPUやメモリなどはプロセス(プログラム)ごとの状況を見ることが可能です。
他にも、プロセスを終了させたり、各プロセスの詳細な情報を集めることもできます。
ここでは、一般的な使い方と今回のメインであるDockアイコンに情報を表示する方法を説明します。
表示するには
これを用いることでコンピュータの状態を常時監視できます。
これによって問題を早期に発見できる場合があります。
起動時に自動で起動させておきたい場合は、
また、自動起動時にウィンドウを表示しないようにする場合は、
まず、アクティビティモニタを開いて下のタブを切り替えながら原因がCPUの使いすぎなのか、メモリの使いすぎなのか、または別の理由なのか見当をつけます。
それに対応した項目で上のリストをソートします。
これで原因のプロセスを絞ることができます。
場合によっては右上の方のドロップボックスでリストに表示するプロセスを変える必要があります。
次に2のプログラムを停止する場合の説明です。
停止するプログラムがわかってると仮定します。
わかっているならば、該当のプロセスをクリックして選択し、左上のプロセスを終了をクリックします。
その後出てくるダイアログで終了、もしくは強制終了でプログラムを停止できます。
CPUの使用率、メモリの状況、ディスクの動作、ネットワークの通信状態などを見ることができます。
CPUやメモリなどはプロセス(プログラム)ごとの状況を見ることが可能です。
他にも、プロセスを終了させたり、各プロセスの詳細な情報を集めることもできます。
ここでは、一般的な使い方と今回のメインであるDockアイコンに情報を表示する方法を説明します。
場所
/Applications/Utilities/Activity Monitor.app日本語表記では
/アプリケーション/ユーティリティ/アクティビティモニタ.appです。
Dockアイコンに情報を表示
アクティビティモニタのDockアイコンには以下のいずれかの情報を表示できます。- 現在のCPU使用率
- CPU使用率の履歴
- ネットワークの使用状況
- ディスクの動作状況
- メモリの使用状況
表示するには
- Dockアイコンを右クリック
- Dockアイコン選択
- XXXを表示をクリック
これを用いることでコンピュータの状態を常時監視できます。
これによって問題を早期に発見できる場合があります。
起動時に自動で起動させておきたい場合は、
- Dockアイコンを右クリック
- オプションを選択
- ログイン時に開くをクリック
また、自動起動時にウィンドウを表示しないようにする場合は、
- システム環境設定を開く
- ユーザーとグループを開く
- アカウントを選択
- ログイン項目のタブをクリック
- リスト上のアクティビティモニタの左のチェックボックスをチェックする
一般的な使用方法
一般的にアクティビティモニタを使うときは以下の2つの場合です。- コンピュータが重いと感じた場合に原因を特定する場合
- フリーズしているプログラムなどを停止する場合
まず、アクティビティモニタを開いて下のタブを切り替えながら原因がCPUの使いすぎなのか、メモリの使いすぎなのか、または別の理由なのか見当をつけます。
それに対応した項目で上のリストをソートします。
これで原因のプロセスを絞ることができます。
場合によっては右上の方のドロップボックスでリストに表示するプロセスを変える必要があります。
次に2のプログラムを停止する場合の説明です。
停止するプログラムがわかってると仮定します。
わかっているならば、該当のプロセスをクリックして選択し、左上のプロセスを終了をクリックします。
その後出てくるダイアログで終了、もしくは強制終了でプログラムを停止できます。
2013年4月13日土曜日
LAN内通信高速化(ジャンボフレームの導入)
普段NASを設置していてファイル移動は主に有線LANを用いて行っている。
このような人にはLANの高速化は利便性が向上する。
以降、高速化の方法としてジャンボフレームの導入について説明していきます。
それを取り払ったのがジャンボフレームである。
パケットのサイズが大きくなるとヘッダ(送信先や送信元などの情報)によるオーバーヘッドが減り通信の効率が良くなる(ただし送信量が多いときなど)。
ジャンボフレームは正式な規格ではないため基本的には初期状態ではオフになっている。そのため自分で設定する必要がある。
ただし、高速化はできるが正式な規格に含まれていないためトラブルに合う可能性もあることに注意したい。
たとえば、PCとNASがハブを介して通信している場合はそれら3つがすべて対応していなければならない。もちろん、ギガビットイーサである必要がある。
ここではMACでの設定方法について説明する。
NASの設定方法は各機器の説明を参照してもらいたい。
ハブなど設定ができない機器は最初からオンであるようである。
なおWindowsではNICドライバの設定で可能なようである。
MACでの設定方法
計測はよく使うプロトコルで行いましょう。
今回は以下の3つについて説明していきます。
今回はddコマンドを用いました。
送受信ファイルのサイズは1GByte。
Windows, Macではおそらく最初から利用できます(ファイアウォールの設定が必要かもしれません)。
私の環境での結果です。
今回の計測ではジャンボフレーム7000での結果です。
受信ではデータを保存しないようにしているために保存先のデバイス(HDDなど)に依存していません。
ジャンボフレームなし
送信速度:4.08 MiB/s
受信速度:5.13 MiB/s
ジャンボフレームあり
送信速度:7.65 MiB/s
受信速度:6.71 MiB/s
SMBではNAS(ジャンボフレーム7000)が通信相手です。
AFPではMAC(ジャンボフレーム9000)が通信相手です。
この方法では設定を変更した後、再起動が必要な場合があります。
SMB
ジャンボフレームなし
送信速度:2m5.415s
受信速度:1m26.023s
ジャンボフレームあり
送信速度:1m34.159s
受信速度:0m51.539s
AFP
ジャンボフレームなし
送信速度:27.489s
受信速度:6.336s
ジャンボフレームあり
送信速度:26.830s
受信速度:6.019s
AFPは効果が少ないかもしれません。
LAN内でSMB, FTPをよく利用する人はできるだけ導入するといいでしょう。
AFPは効果を検証してみた方がいいかもしれません。
このような人にはLANの高速化は利便性が向上する。
以降、高速化の方法としてジャンボフレームの導入について説明していきます。
概要
1ギガイーサにおいて過去の規格と互換性を保つために送信できるパケットのサイズが制限されている。それを取り払ったのがジャンボフレームである。
パケットのサイズが大きくなるとヘッダ(送信先や送信元などの情報)によるオーバーヘッドが減り通信の効率が良くなる(ただし送信量が多いときなど)。
ジャンボフレームは正式な規格ではないため基本的には初期状態ではオフになっている。そのため自分で設定する必要がある。
ただし、高速化はできるが正式な規格に含まれていないためトラブルに合う可能性もあることに注意したい。
準備
ジャンボフレームを導入するには通信経路のすべての機器が対応していなければならない。たとえば、PCとNASがハブを介して通信している場合はそれら3つがすべて対応していなければならない。もちろん、ギガビットイーサである必要がある。
導入方法
通信経路上の機器でジャンボフレームをオンにすればいいだけである。ここではMACでの設定方法について説明する。
NASの設定方法は各機器の説明を参照してもらいたい。
ハブなど設定ができない機器は最初からオンであるようである。
なおWindowsではNICドライバの設定で可能なようである。
MACでの設定方法
- システム環境設定を開く
- ネットワークを開く
- 左側の欄で有線LANを選択する(Ethernetと表示されている)
- 右下の詳細を開く
- ハードウェアタブを開く
- 構成を手動、速度を自動設定、MTUをカスタムにし、下の欄を9000にする。
効果計測
実際に通信速度が向上したか計測してみます。計測はよく使うプロトコルで行いましょう。
今回は以下の3つについて説明していきます。
- FTP
- SMB
- AFP
準備
計測の前に送受信のファイルを準備しておきます。今回はddコマンドを用いました。
送受信ファイルのサイズは1GByte。
FTP
まず、計測を行う前に通信に用いる端末でFTPを利用できる用にします。Windows, Macではおそらく最初から利用できます(ファイアウォールの設定が必要かもしれません)。
私の環境での結果です。
今回の計測ではジャンボフレーム7000での結果です。
受信ではデータを保存しないようにしているために保存先のデバイス(HDDなど)に依存していません。
ジャンボフレームなし
送信速度:4.08 MiB/s
受信速度:5.13 MiB/s
ジャンボフレームあり
送信速度:7.65 MiB/s
受信速度:6.71 MiB/s
SMB/AFP
計測前に共有フォルダをマウントしておきます。SMBではNAS(ジャンボフレーム7000)が通信相手です。
AFPではMAC(ジャンボフレーム9000)が通信相手です。
この方法では設定を変更した後、再起動が必要な場合があります。
SMB
ジャンボフレームなし
送信速度:2m5.415s
受信速度:1m26.023s
ジャンボフレームあり
送信速度:1m34.159s
受信速度:0m51.539s
AFP
ジャンボフレームなし
送信速度:27.489s
受信速度:6.336s
ジャンボフレームあり
送信速度:26.830s
受信速度:6.019s
結論
ジャンボフレームを導入するとFTPとSMBは高速になるようです。AFPは効果が少ないかもしれません。
LAN内でSMB, FTPをよく利用する人はできるだけ導入するといいでしょう。
AFPは効果を検証してみた方がいいかもしれません。
2013年3月30日土曜日
おすすめMacソフトウェア
知り合いがMac買ったというので、個人的なおすすめアプリをまとめたのを書きました。
そのときのものを元に公開用に書いてみました。
そのときのものを元に公開用に書いてみました。
ブラウザ
- Firefox
- Google Chrome 速さを求めるなら。
- KeyRemap4MacBook
- キー入力をいろいろカスタマイズできる。キー入力だけでなくマウスのカスタマイズも可能。中央ボタンにエクスポゼ(misson control)などは個人的にはおすすめ。他にWindows用キーボードを利用するときなどは便利。
- XtraFinder
- Finderを機能強化する。タブを利用できるようにしたりWindowsのように動作するようにできる。たまに不安定。
- AppCleaner
- Windowsで言うアンインストーラのような物。ファイル名やフォルダ名から判断して削除候補をあげてくれる。
- Carbon Copy Cloner
- HDDイメージを作成可能。シェアウェア。バックアップなどに利用可能。
- Remote Desktop Connection Windowsにリモートアクセスする場合に。
- StuffIt Expander 圧縮ファイル解凍ソフト。Macのものより多くの形式に対応。
- TimeMachineEditor
- タイムマシンがバックアップする間隔を指定可能。バックアップばかりしてると感じたら利用を考えてみるべき。
- Trim Enabler 純正SSD以外を利用するなら。
- iText Express
- TextWrangle
- CotEdito
- mi
- Emacs
- MacVim
- MacVim-KaoriYa
- IntelliJ IDEA 12 CE
- Eclipse
- NetBeans
- dropbox 一番便利なクラウド
- googledrive googleサービスと連携するときに便利
- skydrive
- evernote
- 便利なメモアプリ。ただし無料だと1つの端末でしかログインできない(最近は変わってるかも)
- 辞書 国語、英和、和英が入ってるので便利
- アクティビティモニタ dockに入れてCPU仕様履歴を表示すると便利
- Automator
- 簡易なプログラムを作るときに便利。コマンドをアプリケーションでくるむことができる。いろいろなスクリプトを利用可能
- VMware Fusion
- 仮想化ソフト。安定性とVMware Playerとの連携を求めるなら
- Parallels 仮想化ソフト。速い動作を求めるなら。
- VirtualBox 仮想化ソフト。無料。不安定?。
- CrossOver
- Windowsエミュレータ。MS Officeを動かすならこっちの方が軽い。対応ソフトは少ない。Windowsいらず。
- Xen
- CrossOveerのサポートなし版(もともとこっちが源流)。無料。ただし導入は面倒かも。
- MacPorts コマンドをよく使うなら。
- Homebrew コマンドをよく使うなら。
- Skitch ペイントソフト。簡単な図を編集する場合は便利。
- Thunderbird
- メーラー。Mac標準のメーラーに不満な場合に。mozilla系は基本クロスプラットフォーム(Windows, Linux, Macなど)で利用できる。プロファイル(設定)の移行なども簡単にできる。
- VLC
- 動画再生ソフト。Quicktimeより多くの形式を再生可能。Quicktimeがあわない場合はこっち。
- Xbench ベンチマークソフト。
- Handbrake Macでよく利用される動画エンコード用ソフト。
2013年3月23日土曜日
トラックボール+KeyRemap4Macbook
KeyRemap4MacbookというOS X用のキーボードカスタマイズツールがあります。
キーボードカスタマイズツールですが、実はマウスボタンの機能もカスタマイズできます。
これを利用するとトラックボールやマウスが非常に便利になります。
今回は私が使用しているトラックボールLogicool M570(おそらく他のものやマウスでも応用可能)で利用している方法を紹介しようと思います。
インストールするとメニューバーに正方形のアイコンが表示されていればインストールできています。
LCCでもボタンのカスタマイズは可能です。
しかしながら、 KR4Mで一括してカスタマイズした方が手軽です。
また、KR4Mでは設定のプロファイルのような物をいくつか作成しておき、瞬時に切り替えることなどが可能なために便利です。
そこでKR4Mでカスタマイズしやすいように以下のようにボタンに機能割り当てをします。
システム環境設定から設定画面を開きます。
デバイスを選択して、設定ボタンを押します。
各デバイスの設定画面が開きます。
左上のボタンタブを選択します。
開いた画面の割り当てられたアクションを各ボタンごとに選択し、右下の詳細欄でボタンに割り当てる機能を指定します。
下に親指戻るボタンの設定例を示しておきます。
KR4Mではメニューバーのアイコンから「Open KeyRemap4Macbook Preferences」で設定画面を開きます。
開いた設定画面でKR4Mの設定を行っていきます。
KR4Mでは、はじめから用意されている設定(組み込み設定)が豊富に用意されています。
また、自分でカスタマイズした設定を追加もできます。
今回の例では両方必要なのでそれぞれ順に説明します。
例では「右クリックを押しながらカーソルの移動:チルトホイール(上下左右に移動)」が組み込み設定であり、他の4つはカスタマイズ設定です。
組み込み設定はとても簡単です。
Change Keyで好きな設定のチェックボックスをチェックするだけです。
「右クリックを押しながらカーソルの移動:チルトホイール(上下左右に移動)」の場合は
Pointing DeviceカテゴリのCursorMove to ScrollWheelカテゴリのRightClick+CursorMove to ScrollWhellをonにします。
自分でカスタマイズした設定はXMLファイルを編集することで追加できます。
XMLファイルはMisc&UninstallタブのOpen private.xmlを押すことでファイルをFinderで表示してくれます。
それを開いて編集してください(Safariなどで開くときは右クリックからOS X標準のテキストエディットで開いてください)。
開いたら編集していきます。
どのように書けばいいか公式のマニュアルがあります(英語のみ)。
今回の例でのXMLを載せておきます。
XMLファイルについて簡単な説明を載せておきます。
編集後、ファイルを保存します。
KR4Mの設定画面を開き、右上のReloadXMLボタンを押します。
編集内容が反映されるので必要な設定をonにします。
これで設定は完了です。
最後に動作確認をします。
設定によってはあまり出番はありませんが、どのボタンが押されたかやボタンが押された位置、どのキーが押されたかを表示してくれるEventViewerがKR4Mに付属しています。
それを用いて、想定したように動作しているか確認してください。
起動はKR4Mの設定パネルのMisc&Uninstallのタブからできます。
キーボードカスタマイズツールですが、実はマウスボタンの機能もカスタマイズできます。
これを利用するとトラックボールやマウスが非常に便利になります。
今回は私が使用しているトラックボールLogicool M570(おそらく他のものやマウスでも応用可能)で利用している方法を紹介しようと思います。
説明用環境
- OS X 10.8
- Logicool M570
使用ソフトウェア
- KeyRemap4Macbook 8.0.0
- Logicool Control Center
- (OS Xキーボードショートカット設定)
カスタマイズ概要
各ボタンに割り当てる機能をまとめておきます。- 右クリック:変更無し
- 中央クリック:Mission Control
- 左クリック:変更無し
- 右クリック+左クリック(同時押し): Launchpad
- 進むボタン:(Mission Controlの)左の操作スペースに移動
- 戻るボタン:(Mission Controlの)右の操作スペースに移動
- 右クリックを押しながらカーソルの移動:チルトホイール(上下左右に移動)
手順
1,インストール
まず、KeyRemap4Macbook(KR4M)とLogicool Control Center(LCC)をダウンロードとインストールしてください。KR4M
KR4Mインストール後、再起動を要求されるので再起動します。インストールするとメニューバーに正方形のアイコンが表示されていればインストールできています。
![]() |
| KR4Mアイコン |
LCC
LCCはシステム環境設定にアイコンが追加されます(一番下の行にあります)。![]() |
| システム環境設定内のLCC |
2,LCCの設定
LCCでもボタンのカスタマイズは可能です。
しかしながら、 KR4Mで一括してカスタマイズした方が手軽です。
また、KR4Mでは設定のプロファイルのような物をいくつか作成しておき、瞬時に切り替えることなどが可能なために便利です。
そこでKR4Mでカスタマイズしやすいように以下のようにボタンに機能割り当てをします。
LCCボタン割り当て機能
- 左ボタン:クリック クリック
- 右ボタン:クリック 右クリック
- ホイールボタン:クリック 中央ボタン
- 親指戻るボタン:高度なクリック ボタン番号4
- 親指進むボタン:高度なクリック ボタン番号5
手順
システム環境設定から設定画面を開きます。
デバイスを選択して、設定ボタンを押します。
![]() |
| デバイス選択画面 |
左上のボタンタブを選択します。
開いた画面の割り当てられたアクションを各ボタンごとに選択し、右下の詳細欄でボタンに割り当てる機能を指定します。
下に親指戻るボタンの設定例を示しておきます。
![]() |
| 親指戻るボタンの設定例 |
3,KR4M設定
KR4Mではメニューバーのアイコンから「Open KeyRemap4Macbook Preferences」で設定画面を開きます。
![]() |
| 設定画面を開く |
開いた設定画面でKR4Mの設定を行っていきます。
KR4Mでは、はじめから用意されている設定(組み込み設定)が豊富に用意されています。
また、自分でカスタマイズした設定を追加もできます。
今回の例では両方必要なのでそれぞれ順に説明します。
例では「右クリックを押しながらカーソルの移動:チルトホイール(上下左右に移動)」が組み込み設定であり、他の4つはカスタマイズ設定です。
組み込み設定
組み込み設定はとても簡単です。
Change Keyで好きな設定のチェックボックスをチェックするだけです。
「右クリックを押しながらカーソルの移動:チルトホイール(上下左右に移動)」の場合は
Pointing DeviceカテゴリのCursorMove to ScrollWheelカテゴリのRightClick+CursorMove to ScrollWhellをonにします。
![]() |
| 組み込み設定 |
カスタマイズ設定
自分でカスタマイズした設定はXMLファイルを編集することで追加できます。
XMLファイルはMisc&UninstallタブのOpen private.xmlを押すことでファイルをFinderで表示してくれます。
それを開いて編集してください(Safariなどで開くときは右クリックからOS X標準のテキストエディットで開いてください)。
![]() |
| private.xmlを開く |
開いたら編集していきます。
どのように書けばいいか公式のマニュアルがあります(英語のみ)。
今回の例でのXMLを載せておきます。
XMLファイルについて簡単な説明を載せておきます。
- (1)のnameタグはカテゴリ名です。
- (2)のnameタグは設定名です。
- (3)のidentifierタグは識別子のようなものです。他の機能とかぶらないようにすればいいようです。通常はprivate.「機能を表す文」のようにすればいいようです。
- (4)のautogenタグは設定の中身です。
- --PointingButtonToKey--はボタンにキーを割り当てるための機能です。
- --SimultaneousKeyPresses--はボタンやキーを同時押しした場合の動作を割り当てるための機能です。
- 構文:機能、変更前ボタン、変更後ボタン(各ボタン、キーは複数の場合あり)
編集後、ファイルを保存します。
KR4Mの設定画面を開き、右上のReloadXMLボタンを押します。
編集内容が反映されるので必要な設定をonにします。
これで設定は完了です。
![]() |
| カスタマイズ設定 |
4,動作確認
最後に動作確認をします。
設定によってはあまり出番はありませんが、どのボタンが押されたかやボタンが押された位置、どのキーが押されたかを表示してくれるEventViewerがKR4Mに付属しています。
それを用いて、想定したように動作しているか確認してください。
起動はKR4Mの設定パネルのMisc&Uninstallのタブからできます。
![]() |
| EventViewer起動ボタン |
![]() |
| EventViewer |
2013年3月9日土曜日
Clonerベンチマーク
JavaにてdeepCopyを実装しようとしていてClonerライブラリがあるというので、ベンチマークしてみました。
また、 独自実装したdeepCopyを実装するためにdeepClonableインターフェース(deepCloneメソッドのみ)を作成しました。
さらに、それを実装した拡張ArrayList、拡張Stringクラスを実装しています。
グラフの横軸が拡張ArrayListの要素数です。
縦軸がコピーにかかった時間[秒]です。
中身は拡張Stringクラスです(正確にはList<List<String>>)。
結果はjvmに2GByteメモリを割り当てて計測しています。
グラフ上では見えず難いですが、cloneの結果は横軸と重なっています。
ここからは計測に利用したプログラムの説明を載せていきます。
計測プログラムで用いている各クラスなどを以下に示します。
コピーするのはList<List<List<String>>>型(ArrayList, Stringはそれぞれ拡張した物なので注意)です。
java.util.ArrayListのclone実装(java SE 6)
Serializableを利用したdeepCopy実装
拡張ArrayListのdeepCopy実装:各要素に対してdeepCopyメソッドを実行
拡張StringのdeepCopy実装:イミュータブルなので自分を返す
比較対象
- 通常のcloneメソッド(シャローコピー)
- 自分で実装したdeepCopy
- Serializableを利用したユーティリティ(DeeCopy)
- ClonerライブラリのDeepCopy
また、 独自実装したdeepCopyを実装するためにdeepClonableインターフェース(deepCloneメソッドのみ)を作成しました。
さらに、それを実装した拡張ArrayList、拡張Stringクラスを実装しています。
結果
グラフの横軸が拡張ArrayListの要素数です。
縦軸がコピーにかかった時間[秒]です。
中身は拡張Stringクラスです(正確にはList<List<String>>)。
結果はjvmに2GByteメモリを割り当てて計測しています。
グラフ上では見えず難いですが、cloneの結果は横軸と重なっています。
簡単な考察
- clone > 独自実装 > Serializable > Clonerライブラリの順で速い
- 通常はcloneメソッドでなんとかする
- deepCopyがどうしても欲しいなら、使用頻度やパフォーマンスと相談して3つのどれか選択すればいい
- cloneはグラフではわからないが要素数に比例している。ただし、他よりかなり高速
- 独自実装をうまくやると高速
- Serializableを用いた方法ではSerializableを実装していないと利用できない制約がある。
- Clonerには制約はない。
- Clonerが遅いのは内部でリフレクションを用いているためである。ただし、コピーするクラスによってはリフレクションの使用を抑え速くなるように工夫されている。
- コピーしたオブジェクトによってはこれと異なる結果になる可能性もある。
ここからは計測に利用したプログラムの説明を載せていきます。
計測プログラム
計測プログラムで用いている各クラスなどを以下に示します。
- com.rits.cloning.Clonerクラス:Clonerライブラリ
- yuu.akron.ucollection.another.ArrayListクラス:拡張ArrayList
- yuu.akron.ucollection.interfaces.another.Listインターフェース:拡張Listインターフェース
- yuu.akron.ulang.DeepCloneUtilsクラス:Serializableを利用したdeepCopyユーティリティクラス
- yuu.akron.ulang.S.Sメソッド:java.lang.Stringクラスを拡張Stringクラスに変更する静的メソッド
- yuu.akron.ulang.Stringクラス:拡張Stringクラス
コピーするのはList<List<List<String>>>型(ArrayList, Stringはそれぞれ拡張した物なので注意)です。
java.util.ArrayListのclone実装(java SE 6)
Serializableを利用したdeepCopy実装
拡張ArrayListのdeepCopy実装:各要素に対してdeepCopyメソッドを実行
拡張StringのdeepCopy実装:イミュータブルなので自分を返す
2013年3月2日土曜日
仮想マシンベンチマーク
Windows 8を手に入れたので、個人的に期待していたHyper-Vのベンチマークを取ってみました。
比較対象
- Windows 7搭載のVirtual-PC
- VMWare Player
- 実機
計測環境
- CPU:core i5 2500
- マザボ:Asrock H67DE3
- メモリ:8G
- ベンチマークソフト:CrystalMark2003R3です。
- ゲストOS:XP,7(表記がなければx64)
- ホストOS:7,8(表記がなければx64)
- 実機:7,8(表記がなければx64)
- 計測回数:各1回
計測結果
簡単な考察
- VMwareとHyper-Vの結果はほとんど変わらないようだ。
- Virtual-PCは1コアしか利用できないためベンチマークの結果は低くなっている(設定で変えられるかは不明)。
- 仮想マシンと実機では実機の方が結果はいい。
個人的な結論
- 性能的には変わらないので機能で選択
- クライアントとして使うならVMWareを利用する方がいい
- サーバーとして使うならHyper-Vの方がいいかもしれない(ウィンドウを出す必要がない)。
登録:
投稿 (Atom)












