k-hatano のアーカイブ

Eclipse のクリーン

2014年6月30日

Eclipse に新しいプラグインを入れた直後などに Eclipse がうまく動作しなくなった場合、Eclipse をクリーンするのがひとつの手です。 方法は、eclipse.exe と同じディレクトリに「eclipse.exe -clean.cmd」というWindows コマンドスクリプトファイルがあればそれを起動するだけなので楽です。 「eclipse.exe -clean.cmd」がない場合は、eclipse.exe のショートカットを作成し、プロパティからリン
続きを読む

言語ファイルで定義した単語の参照方法

2014年6月26日

Aipo では多言語化対応のために単語 (プログラミング言語にまつわる単語ではなく、「編集」「削除」「閉じる」などの一般的な単語や) を AipoLocalization_**.properties (**はjaなどの言語を表す2文字) ファイルで定義しています。 例えば COMMON_CLOSE (「閉じる」と定義されています)をプログラムから参照する方法を以下に示します。 Velocity $l10n.COMMON_CLOSE Java ALLocaliza
続きを読む

Java における例外処理の注意点

2014年6月23日

例えば以下のようなプログラムを実行する場合を考えます。 public void method2(String urlStr) throws Exception{ InputStream input = null; try{ URL url = new URL(urlStr); input = url.openStream(); int len=0; byte buf[] = new byte[1024]; while( (len =
続きを読む

URL.openStrean実行時にエラーが発生する場合

2014年6月19日

URL を指定し、Web ページの内容などをダウンロードしたい場合は、例えば Java では以下のように記述できます。 InputStream input = null; try{ URL url = new URL("http://example.com/index.html"); input = url.openStream(); int len=0; byte[] buf[] = new byte[1024];
続きを読む

マージとリベースの違い

2014年6月12日

Git で、ブランチを統合する方法としてマージとリベースがありますが、どのような違いがあるのでしょうか。 マージ(Merge)を行った場合は、統合前のブランチの変更履歴はあくまで統合後とは分離した状態で保持されます。統合後も修正内容が比較的わかりやすく、後述するリベースの問題点も起きませんが、プロジェクトの規模が大きくなると履歴が複雑になるともいえます。 リベース(Rebase)を行った場合は統合前のブランチに対するコミットも、統合後のブランチへのコミットとして付け替
続きを読む

各言語でのハッシュ(連想配列)を扱う文の比較(続き)

2014年6月9日

この投稿は、私の以前の投稿( http://hacknote.jp/archives/2972/ )の続きです。 ハッシュは連想行列と呼ばれることもあれば、辞書と呼ばれることもあります。また、配列とほぼ同一に扱われることもあります。 また、言語ごとにハッシュを扱う文の比較をしてみようと思います。 Perl %hash = (); # %hash=('name'=>'Suzuki',...);のように初期化も可。 $h
続きを読む

コメントアウトの注意点

2014年6月5日

プログラム中の数行を飛ばして実行したい場合、その部分をコメントアウトするのが一般的ですが、/* ~ */ でコメントアウトするときには注意が必要です。 なぜなら、/* ~ */ は入れ子などを考慮しないため、もし囲んだ部分に /* ~ */ によるコメント部分があったら */ 以降がコメントアウトされないからです(//~ の場合は問題ありません)。 // 例 public void test(){ /* System.out.println("
続きを読む

演算子の優先順位に関する注意点

2014年6月2日

例えば、Java で書かれた以下のプログラムの実行結果はどうなると思いますか。 public class Enzan { public static void main(String[] args){ int val = 1 + 1 << 2; System.out.println(val); } } 正解は 8 です。 ビットシフトは 2 のべき乗の値を求めたいときに使われることも多いので、どうしても加算、減算より優先順位が高いよ
続きを読む

各言語でのハッシュ(連想配列)を扱う文の比較

2014年5月29日

ある程度最近のプログラミング言語にはハッシュ(連想配列)と呼ばれる、キーと値を対にして扱うデータ構造が用意されていることが多いです。 定義方法やループのしかたは言語によってまちまちです。ここで少しまとめてみようと思います。 Java Map<String,String> map = new HashMap<String,String>(); map.put("name","Suzuki"); map
続きを読む

JavaScript のデバッグをする際のポイント

2014年5月26日

Aipo で Java ファイルのデバッグをする時は、Eclipse でソースコードにブレークポイントを打てばそこで処理が止まるので非常に楽です。 それに対して JavaScript ファイルはブラウザの開発ツールを利用することになります。JavaScript は圧縮されるので修正箇所を探すのがやや面倒ですが、その際にポイントになることをいくつか示してみようと思います。 まずスケジュール(schedule)やフォルダ(cabinet)ポートレットなどの場合は.jsファ
続きを読む

ソーシャルアプリの動作を簡単に確かめたいとき

2014年5月19日

ソーシャルアプリによる拡張性も、Aipo の大きな特長です。 ソーシャルアプリを自分で作成したとき、ローカル環境で簡単に動作を確かめるにはどうすればいいでしょうか。 こちらの投稿あたりがヒントになると思いますが、“{aipoディレクトリ}/war/target/aipo” ディレクトリにあるファイルは http://localhost:8080/aipo/ に続けてパスを指定することによって直接アクセスできます(ローカル環境で8080ポートでサーバを起動している場合)
続きを読む

一定時間待たせる処理の注意点

2014年5月15日

例えば 30 秒待たせる処理を実装する場合は、開始時刻を記録して、現在の時刻と開始時刻の秒数の差が 30 を超えるまで何もしないループを続けるようなプログラムを書くのはやめましょう。 理由は、実際にそのようなプログラムを実行してタスクマネージャを起動してみるとわかるのですが、CPU 使用率が異常に上がり、CPU に負荷が掛かるからです。低級言語(機械語に近い言語)であるほど CPU への負荷は顕著に現れます。 しかし、言語によってはそれが唯一の方法であることもあるので
続きを読む

MySQL の最適化の初歩の初歩

2014年5月12日

自分の過去の投稿( http://hacknote.jp/archives/2464/ , http://hacknote.jp/archives/2542/ )を併せてご覧いただけると幸いです。  users、groups というテーブルがあって、group_idが1のメンバーの名字と名前を取ってきたい場合、以下のようなSQL文を思いつくと思います。 SELECT DISTINCT first_name,last_name FROM users a,groups b
続きを読む

MySQL の EXPLAIN 構文について(続き)

2014年5月8日

今回の投稿は、前回の自分の投稿( http://hacknote.jp/archives/2464/ )の続きになります。 前回は EXPLAIN 構文の type 列がの値もつ意味について述べましたが、今回はそれ以外の列の値の意味をおおまかに述べてみようと思います。 possible_keys … テーブルにアクセスする際の軸として使用可能なキー key … 軸として選択されたキー ref … key と実際に比較されている値 key_len … keyの長さ
続きを読む

MySQL の EXPLAIN 構文の type について

2014年5月1日

MySQL の SELECT 文で実際に走査されている列などを調べるには、SELECT 文の最初に EXPLAIN を付けます。 例: EXPLAIN SELECT * FROM members WHERE group_id=1 AND status='present';  結果は table、type などをカラムとして持つ 1 行のテーブルとして返ります。 table、key などの意味は読んで字の如くです。それ以外については説明すると長く
続きを読む

Aipoの実行中にメモリ不足になったとき

2014年4月30日

Aipo の実行中に、突然 Eclipse のデバッガに java.lang.OutOfMemoryError: PermGen space のようなエラーメッセージが表示されて Aipo の処理が止まってしまった場合、紛れも無くメモリ不足です。 対処法としては、Eclipse で「ウィンドウ」メニューから「設定 > Tomcat > JVM設定」と選び、JMVパラメータを -XX:MaxPermSize=128M -Xmx512m -Xms40m
続きを読む

MySQL の実行速度を計測する方法

2014年4月24日

同じ関数を100回計算して関数の実行速度を計測するようなことは、特に情報系の学生の方なら経験があると思います。 MySQL でも同じようなことができます。例えば以下のようなSQL文を実行します。 SELECT BENCHMARK(100,(SELECT member_id FROM members m0 WHERE (m0.group_id = 1) AND (m0.status = 'present'))); しかし、対象となるSELECT文は
続きを読む

JavaScript をコマンドプロンプトから実行

2014年4月23日

Windows のコマンドプロンプトや UNIX のコンソールから実行できる「jrunscript」コマンドをご存知でしょうか。 これは入力した JavaScript のスクリプトをその場で実行する、JavaScript インタプリタです。基本的に Java の実行環境がインストールされていれば実行できます。 さすがに GUI の動作テストなどはできませんが、文字列操作や数値計算をする自前の関数をちょっとテストするときなどには便利かもしれません。
続きを読む

Tomcatコンテキストの実体(補足)

2014年4月17日

この投稿は、以前自分が書いた投稿(Tomcatコンテキストの実体 http://hacknote.jp/archives/2009/ )の補足になります。 どうして"<Tomcatホームディレクトリ>\conf\Catalina\localhost"にTomcatコンテキストファイルがあるのかといいますと、それは当たり前で、Eclipseの「設定 > Tomcat > コンテキストディレクトリー」でここに設定しているからです。 また、docBa
続きを読む

エラーの箇所を特定しやすくするために

2014年4月16日

ログに長々をエラーメッセージが出力された時、バグの場所を特定するにはどうすればいいでしょうか。 エラーログにはエラーのスタックトレース(エラーが起きたメソッド名、.javaファイル名とその行数など)が表示されるので、その1つがバグの場所そのものなのですが、その中にはJavaの組み込みメソッドも数多く表示されますし編集不可のファイルも表示されるので、この中からバグの場所を探し出すのはなかなか大変です。 そんなときに助けになるのがエラーログの最初の行です。例えば次のような
続きを読む