Java言語の基礎 2011 年 8 月 30 日 No Comments

■メインメソッドの定義
public static void main (String型の配列) {
処理
}

記述説明 説明
public アクセス修飾子の一種で、外部のクラスからメインメソッドにアクセスできることを意味する
static 修飾子の一種で、メインメソッドはクラスのインスタンス化をしなくても、アクセスが可能であることを意味する。
void メインメソッドが呼び出されても、呼び出しもとに処理結果を返さないことを意味する
main メインメソッド名。必ずすべて小文字で記述しなければならない。
main String型の可変長引数でも可

○正しい記述例

記述例 説明
public static void main(String[] args){} 一般的な記述
public static void main(String args[]){} もう一つの一般的な記述。[]は配列名の前でも後でも可
public static void main(String args[]){} もう一つの一般的な記述。[]は配列名の前でも後でも可
public static void main(String x[]){} 配列名は任意に指定可能
public static void main(String… args){} 可変長引数リストを使うこともできる

×誤った記述例

記述例 説明
static void main(String[] args){} 一般的なメソッドとしては正しい書式で、コンパイルも成功するが、public指定がないためJVMからアクセスできずに実行時エラーになる
public void main(String[] args){} 一般的なメソッドとしては正しい書式で、コンパイルも成功するが、クラスからインスタンスを生成してからでなければこのメソッドにアクセスできない。実行時エラーになる
public static main(String[] args){} 戻り値の指定がなく、メソッドの宣言が不正であるためコンパイルエラーになる
public static void main(String args){} 一般的なメソッドとしては正しい書式で、コンパイルも成功するが、引数の方が違うためJVMがメインメソッドとして認識せず、実行時エラーになる
public static void Main(String[] args){} 一般的なメソッドとしては正しい書式で、コンパイルも成功するが、メソッド名の戦闘が大文字でメインメソッド名としては間違っているためJVMがメインメソッドとして認識せず、実行時エラーになる

■列挙型の定義
enum Month {←(1)
JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER
}
class Sample1_10 {
public enum DayOfWeek {←(2)
SUNDAY, MONDAY, TUESDAY, WEDNEDAY,
THURSDAY, FRIDAY, SATURDAY
}
public enum Sex {←(2)
MAN, WOMAN
}
public static void main (String[] args) {
//この箇所に列挙型を定義するとエラーになる
System.out.println(”誕生日は” + Month.FEBRUARY+ “です”);←(3)
}
}
(1)public指定をしていないのでソースファイル名は列挙型名と同じでなくても良い
(2)クラス内では複数のpublicな列挙型を定義できる
(3)実行すると「誕生部はFEBURUARYです」と表示される

■javacコマンド
javac [オプション] [ソースファイル名1] ・・・ [@argfiles]
@argfilesとはオプションとソースファイルを列挙したファイルのこと。

予約語 意味
abstract 抽象クラスや抽象メソッドを宣言するための修飾子
assert アサーションエラーを発生させるかどうかの指定
boolean 真偽型の宣言
break switch文や繰返し文を抜け出す
byte byte型の宣言
case switch文の分岐先を指定
catch 例外処理発生時の処理先を指定
char char型の宣言
class クラスの定義
const 未使用
continue 繰り返しの先頭に戻る
default switch文で該当する分岐先がない場合の分岐先を指定
do 繰り返し文do〜whileにおける繰り返しの開始点を指定
double 倍精度浮動小数点数型の宣言
else if文の条件が偽である場合の分岐先を指定
enum 列挙型の宣言
extends スーパークラスを指定
final これ以降の変更は不可であることを示す
finally try〜catch〜finally文で、必ず実行される処理のブロックを示す
float 単精度浮動小数点数型の宣言
for 繰り返し文
goto 未使用
if 分気文
implements クラスへのインターフェース実装の宣言
import 利用するパッケージの指定
instanceof 型チェックのための演算子
int int型の宣言
interface インタフェースの定義
long long型の宣言
native 他言語で記述されたメソッドであることを表す
new 新規オブジェクト(インスタンス)を作成する
package パッケージの宣言
private 他クラスからアクセスできないようにする
protected 自クラスとサブクラス以外からアクセスできないようにする
public すべてのクラスからアクセスできるようにする
return メソッドの終了、戻り値の指定
short short型の宣言
static staticクラスのメンバであることを示す
strictfp 浮動小数点数の取り扱い方法の変更
super スーパークラスのメンバの呼び出し
switch 多重分岐文
synchronized スレッドの同期化
this 自クラスのメンバを指す
throw 例外を投げる
throws 例外を呼び出し元に送ることを宣言する
transient 直列化から除外する
try try文の開始
void メソッドの戻り値がないことを示す
volatile コンパイラの最適化を制御する
while 繰り返し分

■識別子
・クラス名
・変数名(メンバ変数名、ローカル変数名、引数名など)
・配列名
・メソッド名
・インタフェース名
・列挙型名
・ラベル名
識別子にはファイル名やパッケージ名は含まれません。

■識別子の命名規則
・予約後は使用できない
・定数(true,false,nullなど)は使用できない
・識別子の先頭文字に数字は使用できない
・記号はドル記号($)とアンダースコア(_)のみ使用可能
※一文字でも大文字になっていれば使用可能

○識別子の正しい例
・Private…privateは予約後だが、先頭文字が大文字なので可
・int32…intは予約後だが、32という数字が付いているので可
・trueA…trueは予約後だが、Aという文字が付いているので可
・$_$_$_$…記号だが、$と_なので可

×識別子の誤り例
・short…shortは予約後
・true…trueはあらかじめ定義された定数なので不可
・23Yen…最初の文字が半角の数字なので不可
・section%…半角の%記号は使用不可
・assert…assertは予約語の1つなので不可。ただしバージョン1.3以前のプログラムであれば可
・enum…enumは予約語の1つなので不可。ただしバージョン1.4以前のプログラムであれば可

■データ型
データ型
├ 基本データ型
├ boolean型
├ char型
├ byte型
├ short型
├ int型
├ long型
├ float型
└ double型
└ 参照型

■基本データ型の種類

データ型 サイズ 符号 値の範囲 通称
boolean 1bit - trueまたはfalse 真偽型
byte 8bit 付き -128〜127 バイト型
short 16bit 付き -32768〜32767 2バイト整数型
char 16bit なし ‘¥u0000′〜’¥uFFFF’ 文字型
int 32bit 付き -231〜231-1 4バイト整数型
long 64bit 付き -263〜263-1 8バイト整数型
float 32bit 付き 約1.4×10-45〜3.4×1038 単精度浮動小数点数型
double 64bit 付き 約1.4×10-324〜1.8×10308 倍精度浮動小数点数型

■符号ビット
負数が扱えるデータ型のことを符号付き(signed)、正数だけを扱うデータ型のことを符号なし(unsigned)といいます。
byte型のサイズは8bitですが、その最初の1bitが符号ビットで、正数を表す場合はこの値が0、負数を表す場合はこの値が1になる。
最初が符号専用ビットなので、byteがたでは実際の数を表すビットは残りの7bitとなります。1bitは0か1かどちらかの値を持つので、7bitでは2の7乗、すなわち128通りの数を表現することができます。符号ビットが1の場合は128通りの数値が表現することができる。符号ビットが1の場合は128通りの数値が表現できるのでbyteがたの負数の範囲は-128から-1までになります。符号ビットが0の場合も128通りの表現ができますが、0という正でも負でもない値を含むので、正数の範囲は1から127までとなる。

■浮動小数点数型の精度
class Sample{
public static void main (String[] args) {
System.out.println(33333333.3333333333f);
System.out.println(33333333.3333333333);
}
}

実行結果
>java Sample
3.33333344E8
3.333333333333333E8
浮動小数点数型では、float型よりもdouble型を利用したほうが演算の精度が高まる。逆にfloat型の方が使用するメモリを節約することができます。

■リテラル
ソースファイル内に直接記述した値のこと。
リテラルの種類

種類 データ型
真偽リテラル boolean true false
文字リテラル char ‘¥u0001′ ‘¥u0002′ ‘a’
整数リテラル int 100 200
long 100l 200L
浮動小数リテラル float 100f 200F
double 100.0 200.0d
文字列リテラル String “ABC”
空リテラル 参照型 null

▼文字列リテラル正しい例
・”Abcdeあいうxyz”…全角文字と半角木を混在してもかまわない
・”lmn¥nopqr”…エスケープシーケンスが混在してもかまわない
▼文字列リテラルの誤った例
・”My name is “Tom”.”…文字列内でダブルクォーテーションは使用不可

phpテストツール調査メモ 2010 年 9 月 7 日 No Comments

■lime
limeでなるべく気軽にユニットテストを書く

limeでTDDを体験す

■phpunit
本家

PHPUnitでできる単体テスト

PHPで顔認識OpenCV調査メモ 2010 年 8 月 11 日 No Comments

◆yumでインストール
通常のリポジトリにはないので以下の設定にてインストール
http://wiki.princo.org/?CentOS%20or%20RHEL%A4%C7dag%A4%CEyum%A5%EA%A5%DD%A5%B8%A5%C8%A5%EA%A4%F2%BB%C8%A4%A6

yum -y install opencv –enablerepo=dag
yum -y install opencv-devel –enablerepo=dag
yum -y install re2c –enablerepo=dag

※参考URL
http://opencv.willowgarage.com/wiki/Mac_OS_X_OpenCV_Port

http://d.hatena.ne.jp/tamakiii/20091125/1259172941

http://d.hatena.ne.jp/visual-photo-search/20100419/1271691039

OpenCVで学ぶ画像認識
http://gihyo.jp/dev/feature/01/opencv

OpenCV
http://www.rinpa.com/wiki/index.php?OpenCV

http://www.er.ams.eng.osaka-u.ac.jp/yamamoto/index.php?OpenCV

http://blog.tufu.org/archives/48

モーションポートレートパーク
http://mppark.jp/

mongodbで表示期限内のレコードを取得メモ 2010 年 6 月 21 日 No Comments

「日時を使った検索がうまくいかない」
http://d.hatena.ne.jp/stog/20100526/1274899622

以下、シェルでテスト
var d = new Date(2000, 0, 1)
print(d)
Sat Jan 01 2000 00:00:00 GMT+0900 (JST)
db.collectionname.find({’start_datetime’ : { $lte : d } })
db.collectionname.find({’end_datetime’ : { $gte : d } })

PHPでのコード

PHP
$today = new MongoDate(time());
$query = array(
'start_datetime' => array('$lte' => $today),
'end_datetime' => array('$gte' => $today),
);

phpテスト 2010 年 6 月 7 日 No Comments

limeでなるべく気軽にユニットテストを書く
http://d.hatena.ne.jp/anatoo/20090503/1241279965

ネットワーク 2010 年 5 月 26 日 No Comments

ネットワークの基本設定
http://www.miraclelinux.com/technet/document/linux/training/1_5_1.html

nmap No Comments

開いてるポートの確認
# nmap localhost

ネットワーク内のホスト確認
# nmap sP 192.168.0.0/24

空いているポート確認
# nmap -v localhost

EC2でELB経由のアクセスで、クライアントIPはx-forwarded-forに入っている 2010 年 5 月 25 日 No Comments

X-Forwarded-Forを使って、バックエンドでアクセス制限
http://d.hatena.ne.jp/bushimichi/20090319/1237436618

[Amazon][ELB][EC2][Nginx] ELBとNignxを利用した場合の注意点と解決
http://blog.hansode.org/archives/52292406.html

ELBでのHTTPSは”X-FORWARDED-FOR”がつかない(AWS)
http://blog.suz-lab.com/2010/05/elbhttpsx-forwarded-foraws.html

Is ELB now sending client IP in REMOTE_ADDR but not X-FORWARDED-FOR
http://developer.amazonwebservices.com/connect/message.jspa?messageID=145721

logrotate No Comments

logrotate によるログのローテーション
http://linux.kororo.jp/cont/server/logrotate.php

EC2 centos5.5 32bitにphp5.3.2をインストール 2010 年 5 月 22 日 No Comments

■Apache
□バージョン隠匿
# vim /etc/httpd/conf/httpd.conf
526 ServerSignature Off
追記
DirectoryIndex index.php index.xhtml index.html index.html.var
AddType application/x-httpd-php .php

■PHP最新ソースをダウンロード
http://jp.php.net/get/php-5.3.2.tar.gz/from/this/mirror

■解凍
# tar zxvf php-5.3.2.tar.gz

■シンボリックリンク
# ln -s /usr/local/src/php-5.3.2 /usr/local/php

■各種モジュールインストール
# yum -y install libxml2-devel.i386
# yum -y install openssl-devel.i386 openssl-perl.i386 openssl097a.i386 xmlsec1-openssl.i386 xmlsec1-openssl-devel.i386
# yum -y install curl-devel.i386
# yum -y install libjpeg-devel.i386
# yum -y install libpng-devel.i386
# yum -y install libmcrypt.i386 libmcrypt-devel.i386
# yum -y install autoconf213.noarch
# yum -y install libtiff-devel.i386
# yum -y install php-mcrypt.i386
# yum install libxslt.i386 libxslt-devel.i386

■configure
./configure –with-apxs2=/usr/sbin/apxs –prefix=/usr/local/php –with-zlib -enable-zend-multibyte –enable-mbstring –enable-dom –enable-mbregex -with-gettext –with-kerberos –enable-ftp –with-openssl –enable-sysvsem –enable-sysvshm –enable-sysvmsg –enable-shmop –with-curl –with-iconv –enable-soap –with-config-file-path=/usr/local/php –with-pear=/usr/local/php/pear –with-mcrypt –with-gd –with-jpeg-dir=/usr/lib –with-libdir=lib –with-xsl –enable-pdo=shared –with-pdo-sqlite=shared –with-sqlite=shared –enable-sqlite-utf8

make
make test
make install

php-mcrypt php-readline
php.ini
/usr/local/php/php.ini
□PHPバージョン隠匿
expose_php = Off
□php.iniでタイムゾーン設定が必要
date.timezone = ‘Asia/Tokyo’

■ZendFrameworkインストール
# cd /usr/local/src
# svn co http://framework.zend.com/svn/framework/standard/trunk/
# mv trunk ZendFramework
# ln -s /usr/local/src/ZendFramework /usr/local/ZendFramework
# vim /usr/local/php/php.ini
include_path = “.:/usr/local/ZendFramework/library/”