ギークな話題とコンピュータの知識を届ける愛犬家ブログ。

Javaではint定数の代わりにenumを使用する

Javaではint定数の代わりにenumを使用する

最近はEffective Javaをずっと読んでいる。Javaでは定数宣言にpublic static final intを使わず、enumを使えとのことだったのでメモしておく。 従来の定数宣言 従来は、Javaで定数宣言をするときは、以下のように宣言していた。 //色の黒と白 public static final int COLOR_BLACK = 0; public static final int COLOR_WHITE = 1; //アニメ「プリキュア」のキュアブラックとキュアホワイト public

Javaのcloneメソッドの使い方

Javaのcloneメソッドの使い方

JavaにもPHPのcloneメソッドのような機能があり、PHPのcloneメソッドのような使い勝手を期待したが、あまり良いものではなかった。使い方が結構特殊だったのでメモを残しておく。 2種類のコピー方法 オブジェクトのコピーにはシャローコピーとディープコピーの2種類があり、cloneメソッドの使い方を学ぶ上では、前提知識として持っておくべきである。以下より、それぞれのコピーについて説明する。 シャローコピー シャローコピー(浅いコピー)は、コピー元のオブジェクトとコピー先のオブジェクトがメモリ上の同じデータ(インスタンス変数)を参照している状態である。 コピー元のオブジェクトに対してインスタンス変数に変更を加えると、コピー先のオブジェクトが参照しているデータが同じ物なので、コピー先のオブジェクトから見たインスタンス変数も変更されることになる。 つまり、シャローコピーは参照のコピーのみを行う。 ディープコピー ディープコピー(深いコピー)は、オブジェクトのみのコピーではなく、オブジェクトとメモリ上のデータ(インスタンス変数)

継承とコンポジションをどう使い分けるか

継承とコンポジションをどう使い分けるか

Effective Javaを読んでいたところ、勉強になったことがあったのでメモしておく。 コンポジションとは コンポジション(Composition)は、日本語で「混合物」を意味する単語である。あるクラスの機能を持つクラスのことを指す。 特定のクラスの機能を、自分が作るクラスにも持たせたい場合に、継承を使わずフィールドとしてそのクラスを持ち、そのクラスのメソッドを呼び出すメソッドを持たせること。そうすることで、クラスに他のクラスの機能を組み込むことができる。 厳密なオブジェクト指向では、継承は「機能の継承」を目的とせず、「スーパークラスはサブクラスの一種である」といういわゆる「is-a」の関係を持たなければならない。そのため、単に機能を持たせたい場合には、継承ではなくコンポジションとすることが推奨される。 継承とコンポジションをどう使い分けるか 継承を使ったほうが良い場合とコンポジションを使ったほうが良い場合があるが、

Javaのstaticファクトリーメソッドについて

Javaのstaticファクトリーメソッドについて

Effective Javaを読んでいたところ、とても重要そうなテクニックを見つけたのでメモしておく。 staticファクトリーメソッドとは staticファクトリーメソッドとは、オブジェクトを返す単なるstaticのメソッドである。 通常、クラスのインスタンスはコンストラクタが提供するが、代わりにstaticなメソッドでオブジェクトを提供する方法もある。無意識にコンストラクタでインスタンスの提供を行わないように注意したい。 staticファクトリーメソッドは、デザインパターンのファクトリーメソッド(Factory Method)ではない点に注意。 staticファクトリーメソッドの例 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } staticファクトリーメソッドの長所 コンストラクタと異なり、

Builderパターンについて

Builderパターンについて

デザインパターンのうちのBuilderパターンを勉強したのでメモしておく。 Builderパターンとは Builderとは、建築者や建築業者などを意味する単語である。 このパターンは複数のコンストラクタを用いて初期化を行いたいような場合に複雑さを抑えることが出来る。 Builderパターンを使わない場合の初期化処理 伝統的には、複数のコンストラクタで初期化を行うときには以下のように記述する。 public class Foo { private int a; private int b; private int c; public Foo(a) { //何らかの初期化処理 } public Foo(a, b) { //何らかの初期化処理 } public

EclipseのWindow Builderを使ってみる

EclipseのWindow Builderを使ってみる

Swingを触り始めたので、Window Builderも触ってみる。 Window Builderとは GUIアプリケーションのデザインを簡単にしてくれるEclipseのプラグインである。 実際にGUIを見ながらコンテナやコンポーネントを配置していくことで直感的にアプリケーションをデザインすることが出来る。 Window Builderをインストールする まずは以下のサイトから自分のEclipseのバージョンに合ったlinkをクリックする。 http://www.eclipse.org/windowbuilder/download.php リンク先のURLをコピーし、Eclipseの[ヘルプ]->[新規ソフトウェアのインストール]から作業対象に先ほどコピーしたURLをペーストして、これを追加する。「Swing デザイナー」「SWT デザイナー」「WindowBuilder

JavaのtoStringメソッドは常にオーバーライドする

JavaのtoStringメソッドは常にオーバーライドする

まだ業務が始まらないので、窓際の席で細々とJavaの基礎を復習している。Effective Javaを読み始めたので、この本の中で知らなかったことを順次メモしていこうと思う。 toStringメソッドとは toStringメソッドは、インスタンスの文字列表現を返すメソッドである。その文字列は「クラス名@ハッシュコード」のような形式であり、具体的には「PhoneNumber@163b91」となる(正確にはgetClass().getName() + '@' + Integer.toHexString(hashCode())と等しい値を返す)。toStringメソッドは、java.lang.Objectに実装されているメソッドであり、Javaの実装では全てのクラスがjava.lang.

Javaのイニシャライザについて

Javaのイニシャライザについて

Javaの初期化と言えば、一般的にはコンストラクタだが、Javaにはスタティックイニシャライザとインスタンスイニシャライザを使って初期化を行う方法があり、今まで知らなかったのでメモしておく。 スタティックイニシャライザとは スタティックイニシャライザは、主にクラス変数(staticな変数)を初期化するときに使用する。クラス変数の場合はインスタンスを生成しなくても使用できるので、コンストラクタは必要ない。スタティックイニシャライザを使用すると、クラスが初期化される直後にクラス変数を初期化することが出来る。 スタティックイニシャライザ(Static Initializer)は他にも「クラス初期化子」「静的初期化子」「静的ブロック」「staticブロック」とも呼ばれている。 static {}がスタティックイニシャライザである。 class InitializeTest { public static int[] foo

Swingのフレームで画面遷移するアプリケーションを作った

Swingのフレームで画面遷移するアプリケーションを作った

Swingのフレーム(JFrame)とパネル(JPanel)で画面遷移するアプリケーションを作ってみた。アプリケーションとは言ってもハイアンドローという簡単な数当てゲームなのだが、今後本格的にSwingで開発するようになったときのために自分用にメモしておく。 Swingで画面遷移するアプリケーション Swingでハイアンドローを作った。ハイアンドローは、現在の数字が次に来る数字より大きいか小さいかを当てるゲームである。数字は0~100までが使用される。次に来る数字が大きいと思ったらHigh、小さいと思ったらLowのボタンをクリックする。クリックしたボタンに応じて結果が分岐し、自分の答えが当たっていれば「正解」のメッセージ、外れていれば「不正解」のメッセージを表示する。 ソースコードは以下である。 import java.awt.Container; import javax.swing.

Cygwinに快適なJava環境を構築した

Cygwinに快適なJava環境を構築した

CygwinにJavaをインストールしようと思い、Cygwinのsetup.exeやapt-cygからパッケージを探したのだが、見つからなかった。 調べてみるとCygwin用のJavaは提供されていないらしく、既存のCygwinユーザの方々は渋々Windows用のJavaを使っているようだ。しかし、Windows用のJavaをCygwinで使おうとすると、パスの書き方をWindowsのパスの書き方にしないといけなかったりで、なかなか煩わしい(Windowsのディレクトリ構造を表す円マークはCygwinではエスケープ文字という扱いがされていたりして)。 そこで、CygwinでJavaを快適に使うための方法が紹介されている記事を見つけたので、それを参考にしてjava_wrapperを導入してみたのでメモしておく。 java_wrapperを導入する まずは、こちらのサイトからjava_wrapperをダウンロードする。 Cygwin上でJavaコマンドを快適に使用する環境 プロジェクト日本語トップページ – SourceForge.JP ダウンロードしたjava_wrapperをCygwinの/binに配置する。 続いて、環境変数JAVA_HOMEにWindows版のJavaがインストールされている(

Swingプログラミングの導入

Swingプログラミングの導入

業務で使うのでJavaのSwingを勉強し始めた。ちょっと触ってみた所感としては、ゲームプログラミングみたいで楽しい。昔やってたフラッシュゲームのプログラミングに似ている。 Swingとは Swingは、プログラミング言語JavaのGUIツールキット。同じくJavaのGUIツールキットであるAWT(Abstract Window Toolkit)を拡張したもの。 AWTはオペレーティングシステムのウィンドウシステムに準じたデザインになるのに対し、Swingで作成したGUIはJavaプログラム上で描画されるので、より柔軟な設計が可能となる。AWTに対しSwingのようなコンポーネントを軽量コンポーネントと呼ぶ。プラグイン可能なルック・アンド・フィールを持っているので、簡単にルック・アンド・フィールを切り替えることができる。またAWTには無かった、表、スライダー、スピナ、ツリー表示をするコンポーネントなど高度なコンポーネントが用意されている。 コンテナとは Swingを使ったプログラムではベースとなるウィンドウを作成する。そしてウィンドウの中に様々な部品を追加していくことになる。

EclipseにVrapperを導入する

EclipseにVrapperを導入する

PHPを書いていたときは他に良いエディタが無かったから仕方なくVimを使ってたけど、Javaを書くときはEclipseでいいよね、ということでEclipseにVrapperを導入した。 Vrapperとは EclipseのキーバインドをVimっぽくしてくれるEclipseのプラグインである。 Vrapperの導入方法 [ヘルプ]->[新規ソフトウェアのインストール]にて、[作業対象]に以下のURLを入力してインストールする。 http://vrapper.sourceforge.net/update-site/stable インストールが終わると、Eclipseの上部メニューにVimのトグルボタンが追加されている。ボタンがオンになっている間はVimのキーバインドが有効になる。 キーバインドの設定 続いて、EclipseのキーバインドとVimのキーバインドで重複しているものを取り除く作業を行う。 メニューの[ウィンドウ]->[設定]

比較演算子==と===の違い

比較演算子==と===の違い

比較演算子===について間違った認識をしていたのでメモしておく。 オペランドとは コンピュータプログラミングにおいて、演算の対象となる値や変数のことである。「被演算子」と訳されることもある。 演算内容をあらわす記号などは「演算子」または「オペレータ(operator)」という。例えば「A+10」という式では、「A」と「10」がオペランドで、「+」がオペレータである。 比較演算子== 比較演算子==は、等価比較を行う。それぞれのオペランドが等しいときにtrueを返す。 オペランドは比較前に同じ型に変換される。 == による緩やかな比較 `TRUE`

遅延評価を利用した汎用的なプログラミングテクニック

遅延評価を利用した汎用的なプログラミングテクニック

「オブジェクト指向 JavaScript」を読んでいたところ、遅延評価を使ったプログラミングテクニックが紹介されていたので、覚えることにした。自分では使わないにしても、他人のコードを読んだときには理解できるようにしたい。 オペランドとは コンピュータプログラミングにおいて、演算の対象となる値や変数のことである。「被演算子」と訳されることもある。 演算内容をあらわす記号などは「演算子」または「オペレータ(operator)」という。例えば「A+10」という式では、「A」と「10」がオペランドで、「+」がオペレータである。 遅延評価とは 論理演算子を繋いだ式を評価するときに、最後の演算子の直前までに結果が明確になっているときは、

ダンプファイルとトランザクションログでデータベースをフルバックアップする方法

ダンプファイルとトランザクションログでデータベースをフルバックアップする方法

データベースのバックアップについて、あまり意識したことが無かったので、メモしておく。 ダンプファイルとトランザクションログ MySQLのデータを完全にバックアップするには、ダンプファイルとトランザクションログが必要である。 以下より、それぞれのファイルの役割について説明する。 ダンプファイル ダンプファイルとはメモリやレジスタ、ファイル、ディスクなどのある瞬間の中身を丸ごと記録したファイルである。 MySQLでは、mysqldumpコマンドを使って、データベースを丸ごとエクスポートすることが出来る。 DBのダンプファイルを作成するには、以下のようにする。 mysqldump -u ユーザ名 -p DB名 > 出力先ファイル名 ダンプファイルからデータを復元するには、以下のようにする。 mysql -u ユーザ名 -p

Jmeterでウェブサイトの負荷テストを行う方法

ウェブサイトの負荷テストにJmeterを使ってみた。使い方を忘れないようにメモしておく。 Jmeterとは Apache JMeter(アパッチ ジェイメーター)は、Apacheソフトウェア財団にて開発されているソフトウェアである。クライアント・サーバシステムのパフォーマンス測定および負荷テストを行うJavaアプリケーションである。HTTPレスポンスの内容の妥当性を判定することもできるため、パフォーマンステストのみならず、機能テストに使用することも可能である。 Jmeterの使い方 今回はJmeterのインストールから負荷テストの結果表示までを順序を追って説明する。今回対象とするウェブサイトには以下の2つの条件がある。 Basic認証が設けられている IDとパスワードを入力してログインする必要がある Jmeterをセットアップする 公式サイトのBinariesからダウンロードして解凍し、適当なディレクトリに設置する。 binディレクトリにあるApacheJMeter.jarを選択して起動する。 負荷テストを作成する Jmeterを立ち上げると「テスト計画」と「ワークベンチ」が左ペインに表示される。「テスト計画」とはプロジェクトのようなものである。これに設定を追加していくことで負荷テストを作成することが出来る。 スレッドグループを設定する 実際にどの程度の負荷をかけるのかを設定する。左ペインの「テスト計画」を右クリックし、 Threads(Users)からスレッドグループを選択する。スレッドグループには主に以下の3つの項目を設定する。 スレッド数 :アクセスしてくるユーザの人数だと考える。

ユニットテストにおけるテスト手法

仕事でPHPのユニットテストを書いている。普段はユニットテストの手法としてブラックボックステストを行っているが、他の方法も調べたのでメモを残しておく。 代表的なテスト手法 やみくもにテストを増やしても、費やした時間に対して効果的なテストをしているとは限らない。ここで紹介する代表的なテスト手法に従ったテストを書くことで短時間で十分なテストを作ることが出来る。 ユニットテストには、主に大枠として以下の2つのテスト方針が存在する。 ホワイトボックステスト ブラックボックステスト 以下より、それぞれのテスト方針の詳細とその中で行われるテスト手法を説明する。 ホワイトボックステスト ホワイトボックステストとは、ソースコード中の文や分岐、条件などを実行してバグを見つけるテストである。実行してバグを見つけるので、どの文、分岐、条件も1回は実行する必要がある。つまり、ホワイトボックステストでは、テストで実行した文、分岐、条件の割合が、テストの進捗を計る指標となる。この割合を「カバレッジ率(網羅率)」という。 ホワイトボックステストでは、カバレッジ率が100%になるのに必要なだけテストケースを作成する。 また、テストで確認する対象(文、分岐、条件)により、ホワイトボックステストの指標は、ステートメントカバレッジ(命令網羅)、ブランチカバレッジ(

Vimのマクロで連番を入力する方法

仕事でMacVimでPHPを書いてるときに連番の配列を大量に作成したい場面があり、手入力が面倒なのでマクロでやろうと思ったがやり方がすぐに出てこなかったのでメモしておく。 やり方 qa :aに対して記録開始 yy :行コピー p :貼り付け <Ctrl-a> :対象にしたい連番をインクリメント q :記録終了 @a :記録を再生する @aの箇所は10@aなどに変えると「10回繰り返し」のようにアレンジすることが出来る。 参考 Vimでマクロを使って連番の文を簡単に入力する方法 | Memo on the Web

MacVimでノーマルモード時は日本語入力を無効にしたい

仕事でMacVim-kaoriyaを使っている。間違って日本語入力の状態でノーマルモード中にh,j,k,lでカーソル移動を行おうとして、MacVim-kaoriyaが誤動作してしまい、辛かったので対処した。 書類ごとに入力ソースを自動的に切り替える キーボード環境設定 を開き、 書類ごとに入力ソースを自動的に切り替える にチェックを付ける。 このように設定することで、MacVimのノーマルモード時にブラウジングに入り、日本語入力に切り替えてしまったとしても、MacVimに戻ってきた時は英語入力に切り替わる。 最新のMacVim-kaoriyaを使用する 最新のMacVim-kaoriyaでは、インサートモードを抜けたときに自動的に英語入力に切り替わるようになっている。

Gruntの使い方

Gruntを使い始めてから半年経った。Gruntは主にJavascriptとCSSファイルのminifyを自動化する目的で使用している。 Gruntとは Gruntとは,JavaScriptで書いたタスクを実行してくれるアプリケーション(JavaScript Task Runner)である。面倒な作業として,以下のような作業があるが,Gruntを使うことでこれらを自動化することが出来る。 minify(圧縮)や結合 単体テストの実行 JSLint(構文チェック)の実行 CoffeeScriptやTypeScriptを使用している場合にはコンパイル(JavaScript変換)の実行 SCSS(Sass)やLESSなどのCSS拡張メタ言語を使用している場合には,コンパイル(CSS変換)の実行 Gruntの使い方 GruntはNode.jsを使用して作られている。そのためGruntをインストールする際には,あらかじめhomebrewなどでNode.jsをインストールしておく必要がある。 Gruntのインストール Gruntは,Grunt本体とgrunt-cliが組み合わさって動作する。そのため,Grunt本体とgrunt-cliを一緒にインストールするが,コマンドから直接インストールするのではなく,package.jsonというファイルを作成し,このファイルを介してインストールする。 package.

Jenkinsの使い方

GitHubとJenkinsを組み合わせてユニットテストが成功しているかを常にJenkinsに確認させている。Jenkinsを使い始めてから半年経ったので,使い方や導入方法をメモしておく。 継続的インテグレーションとは 継続的インテグレーション,CI(continuous integration)とは,主にプログラマーのアプリケーション作成時の品質改善や納期の短縮のための習慣のことである。エクストリーム・プログラミング(XP)のプラクティスの一つで,狭義にはビルドやテスト,インスペクションなどを継続的に実行していくことを意味する。 Jenkinsとは JenkinsとはJavaで書かれたオープンソース継続的インテグレーションツールである。Jenkinsには,2つの主要な機能がある。 1つ目は,継続的なソフトウェアのビルドとテストを行うことが出来る機能である。Jenkinsは「継続インテグレーションシステム」を提供し,開発者が変更をプロジェクトに統合でき,ユーザーがより新しいビルドを容易に取得できるようにする。自動化された継続的なビルドは,生産性を大いに向上させる。 2つ目は,外部で起動するジョブの実行を監視することが出来る機能である。cronによるジョブやprocmailのジョブで,リモートマシンで動作するものが含まれる。例えば,cronについて言えば,出力をキャプチャーした定期的なメールを受信し,それを監視するようなことが出来る。 Jenkinsの使い方 今回はCentOSにJenkinsをインストールして使用する。JenkinsはJavaで実装されているので,あらかじめJavaをインストールしておく必要がある。 Jenkinsをインストールする インストールする前に,yumリポジトリを追加する必要がある。

Capistranoの使い方

仕事でCapistranoを使っている。使い始めて半年経ったので,使い方をまとめておく。 Capistranoとは Capistranoは複数のサーバー上でスクリプトを実行するためのオープンソースのツールであり,その主な用途はウェブアプリケーションのソフトウェアデプロイメントである。1つ以上のWebサーバ上のアプリケーションを新しいバージョンにする作業を自動化出来たり,データベースを変更するといった作業もできる。 Capistranoをインストールする Capistranoはrubyで書かれているので,インストールするにはRubyとRubygemsとBundlerが必要である。 Gemfileという名前のファイルを作成し,以下の記述を追加してbundle installを実行することでインストールすることが出来る。 gem 'capistrano', '~> 3.0.1' Capistranoの設定ファイルを作成する Capistranoのインストールが終わったら,Capistranoの設定ファイルを作成する。以下のコマンドを実行する。 bundle exec cap install 実行するとCapfileとconfigディレクトリとlibディレクトリが作成される。 config/deploy/ステージ名.rbを記述する方法 ステージ名.rbにはステージ毎の設定を書くことが出来る。今回はtest.rbという名前で簡単な例を作成する。 サーバはlocalhostを対象にし,そのサーバへはvagrantというユーザでログインし,そのサーバに「Webサーバ」というロールを与えるということを設定している。 server

ネットゲームでよく使う英語表現

海外で運営されているオンラインゲームをプレイしている。この記事ではネットゲームで使うことが出来る英語表現をメモしておく。最終的にはこの記事を見ないでもチャットで使えるようにしたい。 パーティーに参加したいとき Can I join your party? あなたのパーティーに入れてくれない? Could I join your party? あなたのパーティーに入っても良いかな? May I join your party? あなたのパーティーに参加してもよろしいですか? Would you like to go with me? 私と一緒に行きませんか?(ダンジョン前で発言する) Looking for party(LFPでも伝わる) パーティーを探しています。 Looking for member(LFMでも伝わる) メンバーを探しています。(パーティーメンバーを募集するときに発言する) Invite me(

Puppetの使い方

Puppetを使い始めて半年経つので,そろそろ使い方をブログにまとめておく。 Vagrant + Puppet 今回は,VagrantとPuppetを組み合わせて使用する。 Vagrantの概要や使い方についてはこちらの記事をご閲覧いただきたい。 Puppetとは Puppetはオープンソースの構成管理ツールである。Rubyで書かれており2.7.0まではGPL,それ以降はAPLライセンスとなっている。 PuppetはUnix系やWindowsの設定を管理するようデザインされている。ユーザーはシステムリソース及び状態をPuppetによる表現もしくはRubyのDSLで表現する。この情報はmanifestと呼ばれるファイルに保存される。 仮想マシン上でPuppetを使ってみる PuppetはPuppet自身を用意(構成管理)することが出来ない為,Vagrantで仮想マシンを構築する際には予めRubyとPuppetがインストールされているBoxを使用する。 ちなみに手動でPuppetをインストールするには以下のようなコマンドを使用する。 gem install puppet --no-rdoc --no-ri manifestを準備する manifestとは,サーバのあるべき状態を記述することができる設定ファイルである。 Puppetではサーバー設定を記述したファイルを「manifest(マニフェスト)」と呼び,設定すべき項目を「リソース」と呼ぶ。扱えるリソースの種類(リソースタイプ)にはユーザーの管理を行うためのuserやサービスの管理を行うためのservice,ソフトウェアパッケージの管理を行うpackageなど様々なものが用意されており,これらリソースに対し設定すべき項目とその値をmanifestに記述していく。 manifestを書いてみる 以下のような内容のファイルを作成し,

Vagrantの使い方

Vagrantを使い始めて半年経つので,そろそろ使い方をブログにまとめておく。 Vagrantとは 仮想環境の雛形を作成し,どこでも簡単に同じ環境を再現できるようにするソフトウェア。コンピュータ上にVirtualBoxで仮想マシンを起動し,その上でLinuxやWindows,Mac OS Xなどを動作させることが出来る。Vagrantでは仮想マシンやOSの設定をテキストファイルで与えることで特定の状態に初期化することが出来,この設定ファイルをコピーすることでどこでも簡単に同じ仮想環境を再現することができる。 Vagrantのセットアップ 上記の通り,VagrantはVirtualBoxと連携して動作するので両方をインストールする必要がある。 今回はHomebrewとhomebrew-caskを使ってVirtualBoxとVagrantをインストールする。 brew cask install virtualbox brew cask install vagrant Boxとは BoxとはVagrant用に調整されたOSが格納されたファイルである。以下のページから様々なBoxをダウンロードすることが出来る。   A list of base boxes for Vagrant – Vagrantbox.es Boxを追加する 仮想環境を構築するにはOSが必要なので,以下のコマンドでVagrantにBoxを追加する。 vagrant box add precise64 http: