2012年12月31日月曜日

JavaでIPv4アドレスを取得する方法

Javaで自分のPCのローカルホストのIPv4アドレスを取得する方法のメモです。

やっていることは、自分のPCが所持しているアドレスをすべて探索し、それらをIPv4の正規表現でチェックしているだけです。また、このときループバックアドレスは除外している。IPv6も正規表現を変えれば対応できます。

Pattern p = Pattern.compile("^(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[01]?\\d\\d|2[0-4]\\d|25[0-5])$");
try {
Enumeration<NetworkInterface> enuIfs = NetworkInterface.getNetworkInterfaces();
while (enuIfs.hasMoreElements()) {
NetworkInterface nic = enuIfs.nextElement();
Enumeration<InetAddress> enuAddress = nic.getInetAddresses();
while (enuAddress.hasMoreElements()) {
InetAddress address = enuAddress.nextElement();
Matcher m = p.matcher(address.getHostName());
if (m.find() && !address.isLoopbackAddress()) {
System.out.println(address.getHostName());
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}


補足
  • ローカルホストを取得する方法として、InetAddress.getLocalHost()でアドレスを取得できるが、PCが複数アドレスを所持している場合は、こちらはうまく動作しない場合がある。 

  • IPv4の判定として"address instanceof Inet4Address" といった感じでクラスでも判定できる。しかし、こちらでやるとローカルホストだけでなく、他のNICのアドレスも取得できてしまう(例えばVmwareを使っている場合は、VMware Network AdapterのIPも取得できる)。 そこで、今回はアドレスのホスト名をIPv4の正規表現でチェックして判定している。こちらの方法だと、ローカルホストだけ取得できた。

2012年12月1日土曜日

Eclipse - エディタの切り替えショートカットメモ


クイックアクセス: Ctrl + 3
ステップ: ショートカット → 検索、選択 → Enter
エディター、ビュー、メニューなどの項目を検索し、簡単に呼び出せる。
また、前回アクセスした履歴も表示されるので結構便利。
ただし、ウィンドウをまたいでの呼び出しはできない。


エディタの即時切り替え: Ctrl + e
ステップ: ショートカット → 検索、選択 → Enter
エディターを検索から、即時切り替えできる。
ただし、エディターを分割している場合は、アクティブになっている分割されたエディタ上のファイルしか検索できないので微妙。



エディタの切り替え: Ctrl + Shift + e
ステップ: ショートカット → 選択 → Enter
エディタのファイル一覧が別ウィンドウで表示され、ファイルを選択しての移動となる。
ファイル名だけでなく、ファイルパスも表示される。
また、ウィンドウをまたいでのファイル選択ができるので、複数ウィンドウで作業する場合は便利。
しかし、検索機能がついてないのが残念。


次のエディタ(ダイアログあり): Ctrl + F6
前のエディタ(ダイアログあり): Ctrl + Shift + F6
ステップ: ショートカット*n → ボタンを離す
エディタのファイル一覧がダイアログで表示され、ショートカットを何度か押してファイルを選択する。
分割されたエディタをまたいでの移動は可能だが、ウィンドウをまたいでの移動ができない。


次のエディタ(ダイアログなし): Ctrl + PgDown
前のエディタ(ダイアログなし): Ctrl + PgUp
ステップ: ショートカット
ショートカットを押すたびに、次の(前の)エディタに切り替わる。
分割されたエディタ間の移動はできない。

2012年11月24日土曜日

Javaにおけるオブジェクトの使用メモリサイズの測り方

Javaでオブジェクト(インスタンス)の使用メモリサイズを測る方法のメモです。

1. ライブラリ「sizeOf」を利用する
http://sourceforge.net/projects/sizeof

使い方
上のリンクからSizeOf.jarをダウンロードし、BuildPathを通します。
(eclipseでBuildPathを通す場合は、プロジェクトを右クリックして、BuildPath -> Configure BuildPathをクリックすると、Java Build Pathのウィンドウが表示されるので、このウィンドウのLibrariesタブのAdd JARsボタンから追加できます。)

実行時にVMの引数に次の行を追加して実行します。
-javaagent:[SizeOf.jarのファイルパス]
私の場合は、プロジェクト/lib/SizeOf.jarに入れているので以下のようになります。
-javaagent:./lib/SizeOf.jar
(eclipseでVMの引数を設定する場合は、Run -> Run Configurationsを開き、ArgumentsタブのVM arguments項目に引数を入力します。)

以下に、サンプルのソースコードを載せておきます。
import net.sourceforge.sizeof.SizeOf;

public class SizeOfTester {
 public static void main(String[] args) {
     String str = "String";
     SizeOf.skipStaticField(true); // 初期化コード
     SizeOf.setMinSizeToLog(10); // 初期化コード
     long size = SizeOf.deepSizeOf(str); // オブジェクトのサイズを取得
     System.out.println(size);
    }
}

2. ライブラリ「Classmexer」を利用する
http://www.javamex.com/classmexer/

使い方
上のリンクから、classmexer.jarをダウンロードし、BuildPathを通します。
実行時にVMの引数に次の行を追加して実行します。
-javaagent:[classmexer.jarのファイルパス]

以下に、サンプルのソースコードを載せておきます。
import com.javamex.classmexer.MemoryUtil;

public class ClassmexerTester {
 
    public static void main(String[] args) {
     String str = "String";
     long size = MemoryUtil.deepMemoryUsageOf(str); // オブジェクトのサイズを取得
     System.out.println(size);
    }
}


2012年11月17日土曜日

JVMの使用メモリサイズの測り方

JavaにおけるJVMの使用メモリサイズの測り方のメモです。


基礎知識
まず、JVMは以下の様なメモリプールを持ちます。
+----------------------------------------------+
+////////////////           |
+----------------------------------------------+
 |--------|
 init
 |---------------|
 used
 |-----------------------|
 committed 
 |----------------------------------------------|
 max

ここで、
initは、JVMが起動時にOSに要求するメモリ容量
usedは、現在のメモリ使用量
committedは、使用出来る状態になっているメモリ空間の容量
maxは、JVMが利用できるメモリ容量の最大値
となります。

また、JVMでは、2種類のメモリ(ヒープとそれ以外)を管理しています。
ヒープメモリ:ヒープは実行時データ領域であり、ここからすべてのクラスインスタンスと配列のメモリーが割り当てられます。

ヒープ以外:実行定数プール、フィールド及びメソッドデータ、メソッド及びコンストラクタのコードなど、クラス単位の構造体が格納されます。


以下に、これらのメモリ情報を取得するコードを載せておきます。


ソースコード
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;

public class MemoryTester {
 // Java仮想マシンのメモリ管理システムにアクセスするためのオブジェクトを取得
 private static MemoryMXBean mbean = ManagementFactory.getMemoryMXBean();
 
 public static void main(String[] args) {
  MemoryTester tester = new MemoryTester();
  tester.testMemoryMXBean();
  tester.testRuntime();
 }
 
 private void testMemoryMXBean() {
  System.out.println("\ntestMemoryMXBean");
  
  // ヒープメモリの使用量の情報を持つオブジェクトを取得する
  MemoryUsage heap = mbean.getHeapMemoryUsage();
  System.out.println("heap init:" + heap.getInit());
  System.out.println("heap used:" + heap.getUsed());
  System.out.println("heap committed:" + heap.getCommitted());
  System.out.println("heap max:" + heap.getMax());
  System.out.println(heap);
  
  // ヒープ以外のメモリの使用量の情報を持つオブジェクトを取得する
  MemoryUsage nonHeap = mbean.getNonHeapMemoryUsage();
  System.out.println("nonHeap init:" + nonHeap.getInit());
  System.out.println("nonHeap used:" + nonHeap.getUsed());
  System.out.println("nonHeap committed:" + nonHeap.getCommitted());
  System.out.println("nonHeap max:" + nonHeap.getMax());
  System.out.println(nonHeap);
 }
 
 private void testRuntime() {
  System.out.println("\ntestRuntime");
  // Runtimeによるヒープメモリの取得
  Runtime runtime = Runtime.getRuntime();
  System.out.println("heap committed:" + runtime.totalMemory());
  System.out.println("heap used:" + (runtime.totalMemory() - runtime.freeMemory()));
  System.out.println("heap max:" + runtime.maxMemory());
 }
}

2012年11月10日土曜日

QTTabbarの設定

QTTabBarとは、Windowsエクスプローラにタブ機能やプレビュー機能を追加してくれるソフトです。

QTTabBar v1.5.0.0 Beta 2
http://sourceforge.net/projects/qttabbar/


以下、自分の行った設定です。

1. フォルダをクリックした時に現在のタブで開くようにする
オプションのウィンドウ項目で、「ウィンドウをキャプチャする」のチェックを外す。
しかし、これをやると新規でエクスプローラを立ち上げた時に、既存のエクスプローラにタブとして統合されなくなるけど、そこはしょうがないみたい。

2. 新規ウィンドウで前回のタブを復元する
オプションのウィンドウ項目で、「新規ウィンドウでタブを復元する」にチェックを入れる。

3. タブに閉じるボタンを配置する
オプションのタブ2項目で、「タブに閉じるボタンを表示する」にチェックを入れる。

4. Ctrl+Tabでタブを切り替える際のメニューを表示しないようにする
オプションのタブ2項目で、「Ctrl+Tabキーでタブスイッチャーを表示」のチェックを外す。

5. ウィンドウの閉じるボタンでウィンドウを閉じるようにする
オプションのタブとウィンドウ項目で、「ウィンドウの✕ボタンで」の設定をウィンドウを閉じるにする。

2012年11月3日土曜日

LYNX 3D SH-03C(02.00.01)の一時ルート化方法

注意!!
ご利用は、自己責任でお願いします。


私の愛用しているLinx3dを一時ルート化して、プリインストールアプリを無効にしてみたので、その方法をメモっときます。


使用端末
機種:LYNX 3D SH-03C
アンドロイドバージョン:2.2.2
ビルド番号:02.00.01


使用アプリ
SHBreakV2 (これで一時ルート化する)
ISTweak (これでアプリの無効をする)
Terminal Emulator(緊急事態用w)


1. 事前準備
事前に上記のアプリをインストールしてください。
TerminalEmulatorは、マーケットにあるけど、それ以外はないからググったりして探してください。
アプリをインストールしたらオフラインモード(ルート化中はずっと)にしてください。これをやらないと後でwifiが使えなくなる可能性があります。


2. 一時ルート化
SHBreakV2を起動して設定とかそのままで、Break!ボタンを押します。
すると、なんか色々なメッセージが出てくるので、OKボタンを押せばルート化は完了です。


3. プリインストールアプリを無効にする
ISTweekを起動してApplicationListを選択し、SelectDirecotoryで/system/appを選択します。
すると、アプリの一覧が出てくるので、無効にしたいアプリを選択してDisableボタンを押します。

すると、待機中になっていくらまっても完了がでてこない、、、

なんどかタッチしてると強制終了の画面が出てくるので、強制終了を押す。
するとなぜかアプリの無効化は成功している。なぞww

最後に、端末を再起動したら終わりです。
再起動するとルート権限はなくなります。

ちなみに、自分が無効化したアプリは以下のアプリです。
maiker site
mixi for sh
twitter for sh
promice mail


4. おまけ:以上の作業後にwifiが使えなくなった場合の対処法
SHBreakV2でルート化したあとに、ISTweekを使ってsuコマンドを有効にします。
次に、Terminal Emulatorを使って以下の2つのコマンドを順に実行すれば治ります。
$ su
#bash-4.2# rm -rf /data/misc/dhcp/*

解説
「su」 コマンドでsuper user権限(root)でコマンドを実行できるようにします。
「rm -rf /data/misc/dhcp/*」 コマンドで/data/misc/dhcpフォルダ内のすべてのファイルを削除しています( rm -rf は対象のディレクトリを強制的に削除するというUNIXコマンド)



以上です。
繰り返しになりますが、ご利用は自己責任でお願いします。

2012年11月1日木曜日

お手軽にSyntax Highlighter ( 2.1.364 )を導入する方法

以下のコードを</head>の直前に入れるだけで下準備は完了です。
<!-- Syntax Highlighter -->
<link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/2.1.364/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shCore.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCpp.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCSharp.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushCss.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJava.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushJScript.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPhp.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPython.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushRuby.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushSql.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushVb.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushXml.js' type='text/javascript'/> 
<script src='http://alexgorbatchev.com/pub/sh/2.1.364/scripts/shBrushPerl.js' type='text/javascript'/> 
<script language='javascript'> 
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.config.clipboardSwf = &#39;http://alexgorbatchev.com/pub/sh/2.1.364/scripts/clipboard.swf&#39;;
SyntaxHighlighter.all();
</script>
コードの貼付け方
<pre class="brush: script-type">
script-typeにjsとかjavaと指定して、ここにソースコードをHTMLエスケープして貼り付ける
</pre>
例えば、Javaのソースコードを次のように貼り付けると、
<pre class="brush: java">
package test;
public class Test {
 /**
* @param args
*/
 public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello World!");
 }
}
</pre>
以下のように表示されます。
package test;

public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  System.out.println("Hello World!");
 }
}

2012年1月21日土曜日

明けましておめでとうございます。

大晦日を満喫するまもなく、研究三昧。

そして研究をようやくまとめきってほっと一息ついたこの頃です。
後は、研究室内の発表を残すところとなりました。


しかし、教授から「学会発表やらないか?」とのお達しが…

うはっ

これから就活なのに…

忙しい日々は続きそうですね。
まあ、そんなこんなで今年もよろしくお願いします。

2011年2月27日日曜日

近況

ひさびさの更新です。
約1ヶ月ぶり…

最近は忙しかったからね、なかなか更新できないんですよ。
梗概集の原稿とか卒論とか研究発表用のスライド作りとか…
まあ、それも全部終わりようやく開放されました。


でも院に進学するから、まだまだ研究は続くわけで
そして、今年の末あたりからは就職活動も始まるわけで、またいそがしい一年になりそうだ。


とりあえず、3月の用事は、
院進学の手続き、講義お手伝いの割り当て、研究室の大掃除、卒業式、卒業パーティってな感じだ。後は、家にひきこもるか、友達と遊ぶかってなかんじだな


そういえば、卒業旅行とか結局行けなかったなー。
なんか卒論とかもろもろ終わったらいこーぜー、みたいな話はしてたんだけど、もう3月なるし就職組みは研修とか始まる時期だし、行けそうにないみたい。
だから、卒業旅行とかは早めに行っといたほうがいいかもね。

そもそも卒論って1月中には終わってんだろーって勘違いしてたのがいけなかったね(笑)。
うちの大学というか研究室はいろいろと遅いんですよ。


ざっと卒論完成までの流れを説明すると、

研究室での活動が始まるのは4月からで 、
 4月から6月までは、自分の興味のあること調べたことなど発表して、卒研のテーマを決めていき、
7月ぐらいに卒研のテーマの暫定版みたいなの決めて、
8月(夏休み)は家で暫定版のテーマを明確化していき、
9月ぐらいに卒研のテーマがほぼ確定して、
そっからは、卒研の近況報告とかしつつ進めてくかんじで、
今年の1月に大体の大枠ができて、文章の提出、再提出を繰り返し、
2月中盤に研究発表会があって、
2月終盤に卒業論文の最終版を提出する。

私の場合、こんな感じ。
当然、個人差はあります(笑)


卒論とかこれからの人は、早めに準備しようね。

2011年1月25日火曜日

スレッドの処理時間(CPU時間)を計測する方法 - Java

最終更新日:2011/5/15

CPU時間を計測するJavaソース
ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
long startCpuTime = threadMXBean.getCurrentThreadCpuTime();
// ここに時間を計測する処理を記述
long stopCpuTime = threadMXBean.getCurrentThreadCpuTime(); 
long transactionCpuTime = stopCpuTime  - startCpuTime;
メモ
ThreadMXBean(Java仮想マシンのスレッドシステムの管理インタフェース)を使います。
これで、処理の開始時間と終了時間のCPU時間を計り、処理にどれだけ時間がかかったかを計測できます。
getCurrentThreadCpuTime()は、現在のスレッドの合計 CPU 時間をナノ秒単位で返します。
CPU時間とは、プロセス開始から現在までのCPU使用時間実時間です。リアルタイムの時間とは違います。

また、java.lang.managementパッケージには、スレッド以外にもシステム情報を管理できるインターフェイスがいろいろ入っています。くわしくは、Javaドキュメントを見てね。


補足
リアルタイムの処理時間を計測するJavaソース
long startTime = System.currentTimeMillis();
// ここに時間を計測する処理を記述
long stopTime = System.currentTimeMillis();
long transactionTime = stopTime - startTime;

携帯メールだけでできること

1. ケータイメール大辞典
  • 調べたいキーワードをケータイのメール本文に入力して、ask@m.agw.st宛に送信する。
  • ウィキペディア検索の結果がテキストメールで送られてきます。

2. Twil
  • Twilにユーザ登録すると専用メールアドレスが発行される。
  • 専用メールアドレスに空メールを送ると、タイムラインがメールで返信される。
  • 専用メールアドレスにメールを送ると、メールの本文がTwitterに書き込まれる。
  • その他機能については本サイトを見てください。


その他メモ
Googleのモバイル 検索メール (Beta)がサービス終了したみたい、残念。
メールで路線検索サービスというのもあったが、有料だったりau専用だったりする。

2011年1月15日土曜日

android(ドコモ:lynx 3d sh-03c)メモ

3G回線使わないようにしてたのに3日でパケット量が60000(7.7MB)ぐらい使ってた。
スマートフォンおそろしい子
どこでそんなにつかったのやら


なんか裏でいろいろ通信するみたいですね。スリープ状態でも…
アプリを停止させても、たいてい裏で動いている、またメモリ上に残っている。
そして、アプリを完全に停止させるにはタスクマネージャで消す必要がある。
しかしながら、アプリをタスクマネージャで停止させても、いつのまにか復活していたりする。


3G Watchdog使って1日の通信量しらべてみた。
丸一日3G回線使うと、メール待ち受けだけでも100,000バイトぐらいつかうみたい。
つまり、1ヶ月で3000,000バイトは使うことになる。
パケホーダイでは、1パケットが0.084円、1パケットが128バイトなので、
1日あたり65.625円、1ヶ月で1968.75円分のパケット代を使うことになる。
ちなみに、パケホーダイの上限は5985円=71250パケット=9,120,000バイト


次に、OSMoniterというアプリでなにが通信してるのか見てみた。
EffectService、com.google.android.syncadapters.contacts、Googleトークストレージ、System、カレンダー、アカウントと同期の設定、というのが勝手に通信してたみたいです。(確認できたものだけ)
そこで、アカウントの同期の設定で、バックグラウンドデータの通信をできないようにすると、これらの通信が一部なくなる。(EffectService、com.google.android.syncadapters.contactsは残る)
しかしこれをすると、スリープ状態でのSPモードメール受信ができなくなる。

スリープ状態でのSPモードのメール受信は、アカウント同期の設定のアカウントを管理で、Gmailの同期を許可する必要があるみたいで、これをするとGmailも自動的に受信することになる。


また、これらとは別に3G接続時に約1500バイトの通信量が発生してたりする。


パケット使いたくない人はスマートフォンはやめた方がいいですねー。マジで、、
私の場合、パケットは極力使いたくないので今はガラケー使ってます(笑)
wifiでメール受信できるようになったらスマートフォン使うかもねww


spモードメールについて
1/15日現在、3G回線のみでの通信なので回線切ったり、wifiにつなぐと受信できなくなる。(そのうち対応するみたいです…)
スリープ状態における受信は可能。(wifi時は無理)
なので、現段階ではwifi切り替えアプリが必須かも
もしくは、「メール通知」というアプリを使えばwifi状態でも通知だけは確認することはできる。

wifi状態で、スリープ状態にすると無線が切れて3G回線を使ってる?
でもメールは受信できない?
よくわからん


ファイアウォールアプリ
これがあれば、アプリごとに通信の許可、不許可を設定できる。でもrootものは自己責任。
DroidWall(AndroidのFireWall、root(su)必須なのがちょっと…)
andfire(AndroidのFireWall、root(su)権限に設定してくれる?…)



裸眼3D機能について
3Dコンテンツはあまり期待しないほうがいいかと。
地球防衛軍3D(目がつかれて長時間は遊べないけど、まあ面白いと思います)
jetVD(youtubeの動画視聴ソフト、外部プレイヤーが使えるので3D再生できる、3D検索ワードは「yt3d」)


メモリについて
内部メモリが290MBしかないので、本体にアプリをあんまりインストールできない。
システムメモリは596MBあるので、アプリをたくさん起動しなければ十分快適です。


PromiceMailのバグについて
なぜか「PromiceMailが強制終了しました」と、ポップアップがたびたび出てきてイラッとします。
削除したくてもプリインストールアプリだから削除できない。(rootを取れば削除できる)



プロバイダーについて
NTTドコモのISPは、「spモード」「iモード」「mopera U」「ブラックベリーインターネットサービス」の4つがある。
「spモード」:3G回線、スマートフォンで利用可能。spモードメールアドレス。
「iモード」:iモード回線、ガラケーで利用可能。iモードメールアドレス。
通常この2回線を契約することになり、メールアドレスを2つ所持することになる。メールアドレスは両回線で入れ替えることが可能、ただし入れ替え作業はスマートフォンからしか行えない。



2011年1月10日月曜日

ブログのアクセス解析してみた

以下、解析結果

全ページビュー:2,187
1位:overlayweaverの使い方(eclipse) - overlayweaver 2010/07/08:426 ページビュー
2位:Socketの勉強をしよう - Java 2010/07/11:154 ページビュー
3位:分散環境エミュレータを使ってみよう - overlayweaver 2010/07/10:123 ページビュー
4位:Linux on VMwarePlayer - 仮想OS、仮想LAN、OverlayWeaver 2010/09/01:108 ページビュー
5位:標準入出力コンポーネントを作ろう - Java - GUI 2010/07/27:104 ページビュー

記事は、OverlayWeaver、Javaネタがよく見られてるみたいですねー
参考になっていれば幸いですが、間違ったことを書いてる可能性もあるので、鵜呑みにはしないようお願いします。


ブラウザ別のページビュー
1位:Firefox:773 (35%)
2位:Internet Explorer:690 (31%)
3位:Chrome:336 (15%)
4位:Safari:89 (4%)
5位:FireTorrent:87 (3%)

Chromeが伸びてるみたいですねー。
あと、上位の4つはブラウザってわかるけど5位のFireTorrentってなんだよ。これってFirefoxのTorrentダウンロード用のアドオンだよなー(笑)


オペレーティング システム別のページビュー
1位:Windows:1,845 (86%)
2位:Macintosh:141 (6%)
3位:Other Unix:119 (5%)
4位:iPad:14 (<1%)
5位:iPhone:9 (<1%)

iPad、iPhoneからこのブログが見られてたのは正直驚きました。これからは、タブレットとかスマートフォンでのネットサーフィンが増えてくるのでしょうね。
しかし、Windowsがダントツ(笑)


国別のページビュー
1位:日本:1,936
2位:アメリカ合衆国:73
3位:オランダ:35
4位:カナダ:34
5位:マレーシア:26

意外と海外からのアクセスが多くてびっくりです。
国際化だね(笑)


はじめてアクセス解析してみましたが結構面白かったです。
また気が向いたらやろうかなー

ノシ

2011年1月2日日曜日

JavaScript勉強中

あけましておめでとうございます。


年末は、友達とボーリングをやって、そっから徹夜でモンハン。
正月は、初詣に行き昼飯食って、解散という流れでした。

モンハンは全クエストをクリアしてしまい、あとは新たな配信クエストをこなすだけとなってしまいました。ちなみに、プレイ時間は200時間越えた(笑)


卒論の方は、とりあえず30ページ書けました。ただ飛ばし飛ばしなので、これから埋めていくかんじです。あとは、付録のプログラムの最終調整です。
とりあえず終わりそうだけど、問題は教授に見せてからどれだけ直されるかなんですけどねー… (; ̄ー ̄川


………


さてさて

私の2011年の目標は、

「新しいプログラミング言語を習得する!!」


ということで、JavaScriptを勉強しようと思います。
なぜかというと、流行ってそうだから…


やったこと

1. マンガで分かるJavaScriptプログラミング講座を読んだ。
初心者向け。絵はともかくとして、すらすら読めて内容もよかったです。
そして、マンガだけでなく補足説明もちゃんと書いてあるのがいいですねー。

2. イヌでもわかるJavaScript講座を読んだ。
復習+ちょい実践向け?いきなり実行例、ソースから入るのがいいです。そっからその解説。
いろんなソース乗ってるのでいいかも
しかし、まだ読み途中です。

3. 開発環境の整備
EclipseにAptanaのプラグインを入れた。
FireFoxにFireBugのプラグインを入れた。
正直使いこなせてないです。初心者にはメモ帳で十分かもね…


今日は、勉強ばっかでしたけど
明日はなにかしら作ってみたいと思います。

以上。


参考資料
1.マンガで分かるJavaScriptプログラミング講座
2.イヌでもわかるJavaScript講座

2010年12月15日水曜日

Javaでグラフを作る方法 - Java

あるデータをプログラムで解析するときにグラフで表示できたらいいよなー

というわけでJavaでグラフを作る方法です。


eclipseとJFreeChartを使います。

JFreeChartのプロジェクトページ(http://www.jfree.org/jfreechart/)から最新版のものをダウンロードして解凍します。(今回はjfreechart-1.0.13で説明します)

解凍したら、jfreechart-X.X.X\lib の中にあるjfreechart-X.X.X.jarとjcommon-X.X.X.jarをeclipseのJavaプロジェクトのフォルダ直下に入れておきます。
プロジェクトを右クリックし、Properties → JavaBuildPath → Libraries → AddJARs をクリックし、jfreechart-X.X.X.jarとjcommon-X.X.X.jarを選択し、OKをクリックします。

これで、JFreeChartを使ってグラフが書けるようになります。


さてどう使うかというと、プログラムを見たほうが早いと思います。

参考資料に簡単なのが乗っててわかりやすかったです。


参考資料
1.ThinkIT「JFreeChartでグラフ作成(前編)様々なグラフ 」

2010年12月1日水曜日

近況

ついに、12月1日になりました。

ついに、待ちに待ったモンハンPSP3rdが発売しました。まだ買ってないけどーORZ

龍馬伝が終わりました。


そして、卒論の期限があと2ヶ月くらい…
そろそろ本腰入れていかないとまずい時期ですね。
とりあえず、タイトル、目次(暫定)が完成し、これから中身を埋めていこうというところです。
うちは卒論の総ページ数が30ページですので15分の1ができたとこ…ORZ

付録のプログラムは、7割がたできてるのでなんとかなりそうかな?
しかし、プログラムの評価とかも考えていかなければならないの大変です。

2010年11月21日日曜日

Concurrency Utilities - Java

OverlayWeaverのIterativeRoutingDriverクラスのrouteメソッドを読んでいて思ったこと。
java.util.concurrent.ExecutorServiceってなんだ?

ってことで調べてみました。


まず、並行プログラミングをするとき、よくThreadクラスを使って行いますね。しかし、これを使いこなすのはちょっと難しい。ってことで、J2SE 5.0からは並行プログラミングを容易にするのためのライブラリConcurrency Utilitiesが導入されました。これで、スレッドを簡単に?操れるみたい。
(ライブラリは、java.util.concurrentに含まれています。)


そんでExecutorServiceというのは、そのライブラリの中に含まれているタスクの非同期実行を担当するExectuorインターフェイスの派生インタフェースです。
そして、実際に使用するのはその実装クラスであるThreadPoolExecutorクラスで、これを利用するとスレッド・プール方式での処理が実行可能となる。(参考資料2のイグゼキュタの仕組みの項目を見るとわかりやすいです。)

詳しい説明は、参考資料を見てください。

いや、別に説明するのがめんどくさいわけではないんだからね。ξ゚⊿゚)ξ


とりあえず、勉強がてら作ってみたプログラムを載せときます。

import static java.util.concurrent.TimeUnit.MILLISECONDS;

import java.util.Date;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class ThreadPoolExecutorTest {

 public static void main(final String[] args) {
  new ThreadPoolExecutorTest().start();
 }

 public void start() {
  System.out.println("開始");

  // Runnableを使う場合
  final BlockingQueue queue = new LinkedBlockingQueue();
  for (int i = 0; i < 10; i++) {// タスクをqueueに事前に積んでおき実行することができる
   queue.add(new Task(1));
  }

  System.out.println("タスク実行その1");
  final ExecutorService executerService = new ThreadPoolExecutor(3, 3,
    500, TimeUnit.MILLISECONDS, queue,
    new ThreadPoolExecutor.CallerRunsPolicy());
  
  System.out.println("タスク実行その2");
  for (int i = 0; i < 10; i++) {
   executerService.execute(new Task(2));// タスクの実行
  }
  
  // Callableを使う場合
  System.out.println("タスク実行その3");
  int timeout = 1000;
  for (int i = 0; i < 10; i++) {
   if (i == 5) {
    timeout = 50;
   }
   Future future = executerService.submit((Callable) new Task(3));// タスクの実行
   try {
    // タスクの結果を取得する。ただし、設定した時間までに処理が終わらなかったらタイムアウトする。
    Date time = (Date) future.get(timeout, TimeUnit.MILLISECONDS);
    System.out.println("タスク終了時間: " + time);
   } catch (InterruptedException e) {
    e.printStackTrace();
   } catch (ExecutionException e) {
    e.printStackTrace();
   } catch (TimeoutException e) {
    System.err.println("タスクがタイムアウトしました");
    e.printStackTrace();
   }
  }

  // 必ずshutdownを実行する。実行しないとスレッドが開放されない。
  System.out.println("ShutDown実行。");
  executerService.shutdown();
  System.out.println("終了");
 }

 private static class Task implements Runnable, Callable {
  int taskNumber = 0;

  Task(int taskNumber) {
   this.taskNumber = taskNumber;
  }

  @Override
  public Date call() {
   try {
    System.out.println(taskNumber + "タスク開始");
    MILLISECONDS.sleep(100L);// 100 ミリ秒のスリープ
    System.out.println(taskNumber + "タスク終了");
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   return new Date();
  }

  @Override
  public void run() {
   try {
    Date time = this.call();
    System.out.println(taskNumber + "タスク終了時間:" + time);
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }
}

参考資料
1. 「Java SE 6完全攻略」第49回 Concurrency Utilitiesの変更点 その1 
2. 第6回 並行プログラミング用ライブラリ(1)――Excecutorの仕組み

2010年11月20日土曜日

プロセス、スレッド、タスクの違い - Java

ちょっと気になったので、メモっときます。

プロセス(Process:手順、処置)
 プログラムの実行単位です。プロセスは1つ以上のスレッドと、ファイル、ヒープメモリなどのリソースで構成される。マルチプロセスと言うと、1つのOS上で同時に複数のプログラムを並行して動かせる機能。

スレッド(Thread:糸)
 プロセス(プログラム)内の処理単位です。マルチスレッドと言うと、1つのプロセス内で同時に複数の処理を行える機能。

タスク(Task:仕事の単位)
 プロセス内の実行単位です。(←推測です。Timerクラスのドキュメントを見ると、「タスク実行スレッド」という言葉が使われているからという理由、(゚_゚i))
 ちなみに、Timerクラスでは、TimerTask(implements Runnable)型のインスタンスをscheduleメソッドに入れて、何秒後に実行とか、何秒ごとに実行とかができるみたいですね。


参考資料
1.プロセス、スレッド、ファイバ、タスク、ジョブ、違いを整理してみようAdd Star

2010年10月6日水曜日

今日はCEATEC JAPAN 2010 に行ってきました。

見てきたもの(一部省略)

3D
1.SHARP
3D映像を体験できました。風景やCGキャラなどは立体的に見えてすごかったです。
しかし、人間やアニメのキャラクターが出るシーンは、2Dのキャラと背景に高低差を付けただけなかんじで微妙でした。
 あと、クアトロンという4原色のディスプレイも見てきました。従来のものと比較するとすごくきれいになって驚きました。やばいです。

2.SONY
  3D大画面LEDがすごかったです。臨場感もあり、風景の映像が流れるとほんとにそこにいるような感覚になってやばかったです。
また、リアルタイムで3D映像に変換しそのままディスプレイに流すという技術もすごかったです。

3.東芝
普通の2Dゲームを3Dにリアルタイムで変換し、プレイするというのがすごかった。あと、裸眼3Dなるものがあったらしいのだが、2時間待ちとかであきらめました。


グリーンIT
1.NISSAN
    ソーラーツリーというのがありました。名前のとおりソーラーパネルを葉に見立てたもので、太陽の向きにその葉を向けて発電効率を上げようというもの。あとソーラーパネル(葉の部分)が透明になっていてデザインもよかったです。
電気自動車の未来的な話もしてました。自動車が道路を走りながらワイヤレスに充電できたり、自動車同士で通信しあって衝突しないようにするというものでした。これは、デモがあったのですが実際の車は使わず、eporo というロボットでやっていました。

2.FUJITSU
スマートグリッドとかホームネットワークのお話。スマートグリッドは、各家庭にスマートメーターを取り付けてスマートメーター同士でアドホックネットワークを構築して電力状況を確認するというもの。
ホームネットワークというのは、家の中にサーバーを一つおいてエネルギー利用を最適化するといったものでした。


NGN
1.NTT
  VOIPとかSIPの話。電話にIPが使われてるということと、その通信プロトコルにSIPが使われているというもの。


クラウドとか
なんか微妙でした。


半導体デバイスとか
がんばったけど、よくわからなかった。


その他?
1.知識創成コミュニケーション研究センター
概念辞書がおもしろかったです。検索した言葉の多様な意味的関係をWebから取得するというもの。ガンダムのパイロットを検索してて、知ってるキャラがちらほらとww

2.YAMAHA
ボーカロイドのポスターがあってそっから声が出てくるというもの。そのポスターが通路に一定間隔で置かれてたので、その通路を通ってったら飲食コーナーがあった。
あと、YAMAHAブースにはミクと誰か?のコスプレイヤーもいましたw


こんなかんじです。

あとは、おみやげをたくさんもらってきました(笑)
手さげ袋が3つ。
ボールペンが3つ。
ペン消しゴムが2つ。
メモ帳っぽいのが2つ。
携帯ストラップが1つ。
昆布キャラメルが1箱。

2010年10月4日月曜日

近況

先日、大学院の合格が決まりました。
やったね!!


今やってること
1.卒研「P2P関連のこと?」
2.授業の課題「パズルゲーム作ってる」、10月19日まで
3.授業の課題2「パブリックコメントの1505番と1506番を出す。」、10月22日まで
     1505番「クラウド対応型セキュリティ対策技術の研究開発」
     1506番「国際連携によるサイバー攻撃予知・即応技術の研究開発」


最近読んだ本
1.Javaネットワークの真髄(途中で挫折ORZ)
2.ルー・ガルー(分厚いけど中身はスラスラ読めて面白かった。近未来ICT、推理、戦闘もの?)
3.数学ガール(読み途中、頭使うのでおもしろいです。けど中盤からよくわかんなくなってきた)


ポケモン
四天王2回目クリア、シロナも倒した。けど伝説ポケはレシ、ビク以外放置。
いまは、新環境の状況整理。


夏アニメが終わって、秋アニメがはじまた。

いそがしいw