Learn to Live and Live to Learn

IT(たまにビジネス)に関する記事を読んで、考えて、使ってみたことをまとめる場。

Javaでマルチスレッドプログラム

マルチスレッドってそれとなくわかった気になって、使っていたのですが
改めて調べ直してみました。

マルチスレッドとは
複数の処理が一つのプログラム上で動いているように見せる方法。

種類

  • Threadクラスを継承
  • Runnableインターフェイスを実装
  • shynchronized

実戦

まず、『Treadクラスを継承』をやってみました。

Threadクラスのサブクラスを作って、そこに
runメソッド(=スレッド化したい処理)とmainメソッド(=スレッドを実行)
を書きます。

ソースコード

public class ExThread1 extends Thread {
	
	public void run () {
		// 10 9 8 ... 2 1 0
		for ( int i = 10; i >= 0; i-- ) {
			System.out.println(getName() + ":" + i);
			try {
				// 1秒間ストップ
				sleep(1000);
			} catch ( InterruptedException e ) {		
			}
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ExThread1 thread1 = new ExThread1();
		ExThread1 thread2 = new ExThread1();
		thread1.start();
		thread2.start();
	}

}

実行結果

Thread-1:10
Thread-2:10
Thread-1:9
Thread-2:9
Thread-2:8
Thread-1:8
Thread-1:7
Thread-2:7
Thread-1:6
Thread-2:6
Thread-1:5
Thread-2:5
Thread-1:4
Thread-2:4
Thread-1:3
Thread-2:3
Thread-1:2
Thread-2:2
Thread-1:1
Thread-2:1
Thread-2:0
Thread-1:0

ちなみにThread-1とThread-2を交互に実行していますが
1が終わった後に2をしたい場合は以下。

…
thread1.start();
try {
	thread1.join();
} catch ( InterruptedException e ) {
}
thread2.start();
…

スレッドの完了を待つ『joinメソッド』を使います。



参考URL
http://www.javaroad.jp/java_thread1.htm
http://www.tohoho-web.com/java/thread.htm
http://www.ne.jp/asahi/hishidama/home/tech/java/thread.html

Androidのモック作成

今までEclipseで直接xmlを書いたりGraphical Layoutを使ったりしていました。

  • もっと簡単に(開発!と意気込まずに、アイデア練るくらいで利用可能)
  • デザイナーさんっぽく(テンション上げたい)

モック作りがしたいと思いました。

そこで無料のUI設計ツール
Pencil Project
を使ってみました。

こんな感じ。
f:id:A_01:20140101235109p:plain

Androidアプリを作ってみましたが、他にも
iOSアプリやフローチャートなどいろいろ書けます。
また、すべて英語ではありますが、パーツは絵も載っていますし
操作はドラッグ&ドロップで直感的です。


ちょっと「ん?」と思ったところの解決法(という程でもないが)
Q.
キャンパスと端末の絵のサイズが合わない。どうしたら端末が収まるの?
A.
キャンバス上で右クリック→Resize Canvas→Fit Content(端末ぴったり)かFit Content with Padding...(余白作る)

Q.
端末の絵の背景が黒い。どうしたら白くなるの?
A.
端末の上で右クリック→Theme→Light Theme



Pencil Project公式ページ
http://pencil.evolus.vn/

Pencil Projectを紹介したブログ
http://mesubuta.blog.jp/archives/22383451.html

(なんかこの記事見直すとPencil Projectの回し者みたいになっている。笑)

PHPでMySQL

やり方を忘れて調べ直すことが多いのでまとめておきます。

<?php
$conn = mysqli_connect( 'host', 'user', 'password', 'database' ) or die( 'Error: ' . mysqli_error($conn) );

MySQLのデータベースに接続。
http://www.php.net/manual/ja/function.mysqli-connect.php

$query = 'SELECT * FROM table';
$result = mysqli_query( $conn, $query ) or die( 'Error: querying database.' );

クエリを書いて、実行。
http://php.net/manual/ja/mysqli.query.php

while ( $row = mysqli_fetch_array( $result ) ) {
    $hoge['hoge'] = $row['hoge']; // MySQLのhogeフィールド(カラム)にある値。
}

結果を取得。
http://www.php.net/manual/ja/mysqli-result.fetch-array.php

?>

おしまい。



http://blog.trippyboy.com/2011/php/php%E3%81%8B%E3%82%89mysql%E3%83%87%E3%83%BC%E3%82%BF%E3%83%BC%E3%83%99%E3%83%BC%E3%82%B9%E3%82%92%E5%8F%82%E7%85%A7%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

JobHistoryをWebUIで見る。

Hadoop2系ではMRv1(MapReduce Version1)に代わり
YARN(Yet Another Resource Negotiator)及びYARN上で動作するフレームワーク=MRv2が使われます。
JobTrakerとTaskTrackerは廃止され、ResourceManagerとNodeManagerが動作しています。

HDFSはそのままなので
NameNode http://localhost:50070/
は利用できます。

しかし
JobTracker http://localhost:50030/

JobHistory http://localhost:19888/
( ResourceManager http://localhost:8088/ )
( NodeManager http://localhost:8042/ )
になりました。

ちなみにJobHistoryは

$ mr-jobhistory-daemon.sh start historyserver

で起動できます。



参考URL
http://metasearch.sourceforge.jp/wiki/index.php?Hadoop2.2%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7
https://syncsortkb.syncsort.com/KBArticleView.aspx?ID=46584
http://www.cloudera.co.jp/blog/mr2-and-yarn-briefly-explained.html

ポートが開いているか確認

HadoopのWebUIが見たいのに見られへん!という件の続きです。
Hadoopは実行できるのでJobTrackerが起動していないわけではなさそうです。
ポートが開いていないのでは…?と思いtelnetしてみました。

telnet ホスト名(IPアドレス) ポート番号
$ telnet localhost 50030
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying fe80::1...
telnet: connect to address fe80::1: Connection refused
telnet: Unable to connect to remote host

こ、こねくしょんりひゅーずど、、

ちなみにちゃんと接続できるとこんな感じです。

$ telnet localhost 50070
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

確認はnetstatコマンドでもできます。

$ netstat -an | grep 50030
$ netstat -an | grep 50070
tcp4       0      0  *.50070                *.*                    LISTEN

※start-all.shでHadoopを起動しているときでないと50070番ポートも何も出ないので注意。


参考URL
http://linux.just4fun.biz/%E9%80%86%E5%BC%95%E3%81%8DUNIX%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/%E3%83%9D%E3%83%BC%E3%83%88%E3%81%8C%E9%96%8B%E3%81%84%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B%E6%96%B9%E6%B3%95.html

データをputしてhadoopを実行

入力データ用のディレクトリを作成。

$ hadoop fs -mkdir /input

データをput=アップロード。

$ hadoop fs -put input/test.txt /input/

毎度おなじみワードカウント。

$ hadoop jar hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount /input/test.txt /output/wordcount

結果を確認。

$ hadoop fs -ls /input
Found 2 items
-rw-r--r--   1 A_01 supergroup          0 2013-12-25 23:52 /output/wordcount/_SUCCESS
-rw-r--r--   1 A_01 supergroup         62 2013-12-25 23:52 /output/wordcount/part-r-00000

Rでデータの視覚化【棒グラフ編】

棒グラフ

barplot(データ, biside=, horiz= ,col=, legend= )

※データは必須。

Rが用意してくれているデータを読み込んどきます(=data関数)。

> data(VADeaths)

一番ベーシックな書き方。

> barplot(VADeaths)

f:id:A_01:20131222205018p:plain

biside=TRUEだとこんな感じ。

> barplot(VADeaths,beside=TRUE)

f:id:A_01:20131222205028p:plain
列における行が別々の棒グラフになって表示されます。

カスタマイズ

> barplot(VADeaths,beside=TRUE,col=c("lightblue","mistyrose","lightcyan","lavender","cornsilk"),legend=rownames(VADeaths))
> title(main="Death Rates in Virginia",font=5)

f:id:A_01:20131222205037p:plain
colで棒の色指定、legendのrownamesで凡例を設定。titleで棒グラフに名前を付けます。

注意)横軸(Rural MaleやUrban Female)が出てこないなーと思ったときは棒グラフの出力されているウインドウの大きさを変えてみてください。

http://www1.doshisha.ac.jp/~mjin/R/05.html