2011/11/27

GAE/JでWEBアプリを作ってみた

最近、gaelykを使ってwebアプリを作って見ました。
http://topic-research.appspot.com/

ページを作成するのにgaelyk用(?)のファイル「gtpl」っていうものを作らなだめですが、
びっくりするほど簡単にアプリを作ることができました。

日本語の情報は少ないけど、gaelykの公式サイトにチュートリアルがあったので
それを辞書的に使い、何とか基本的なこと(データを読んだり、書いたり)はできました。

バックエンド枠を使ったりする方法が分からなかったので、いい日本語サイトがないか、現在調査中。

それにしても、簡単にアプリ作れた。満足。

2011/10/03

[groovy] eclipseからGAE/J + gaelykの環境構築する方法

GAE/J + Grails勉強しようと思ったのですが、自分にはまだ敷居が高かったようなので、
いろんなサイトでお手軽と謳われている「Gaelyk」を使ってみました。

まずは、使い慣れているeclipseの環境を整えます。
  • OS:Windows7 64bit
  • eclipse:3.7
  • groovy:1.8.2
  • gaelyk:1.0
  • GAE:1.5.2

1.eclipseにGAEプラグインをインストールする
 ヘルプ->新規ソフトウエアのインストールをクリックします。
 作業対象に、以下URLを入力します。
  http://dl.google.com/eclipse/plugin/3.7

 しばらくすると、対象となるプラグインの一覧が表示されるので、
 「すべて選択」しインストールを開始してください。
 インストール途中でeclipseに「Androidに関するライブラリがあらへんで」って言われたら、
 該当するプラグインの選択を解除してください。
 ※私の環境だと上記のようなメッセージがでました。

2.Groovyプラグインのインストール
 ヘルプ->新規ソフトウエアのインストールをクリックします。
 作業対象に、以下URLを入力します。
  http://dist.springsource.org/release/GRECLIPSE/e3.7/

 しばらくすると、対象となるプラグインの一覧が表示されるので、
 「すべて選択」しインストールを開始してください。

3.Gaelykの入手
 以下より、Gaelykを入手してください。
 http://gaelyk.appspot.com/download

 上記サイトを見るとこんなことかいてますが、気にせず進めます。
 >The latest version was tested with Groovy 1.8.1, and with the 1.5.2 version of the App Engine SDK.
GAE、groovyの最新バージョンではテストされてないようです。

 入手したら適当な場所に解凍します。

4.適当なプロジェクトの作成
 eclipse上で適当なWebアプリを作成します。

 作成が終わったら、3で展開したファイルの[war]直下のファイルすべてを作成したWebアプリのwarフォルダ直下にすべて上書きします。

 Webアプリを起動して、動作確認できたら、とりあえず環境構築はOK(?)

 この後はJDOつかえるか試してみるか。
→こんな感じでお手軽に使える模様。
def entity = new Entity("てーぶる名")
entity.title = "タイトル"
・・・
entity.save()

2011/09/29

[groovy] Grailsを試してみた

ちょっと(かなり?)古い記事を参考にGrailsを試してみました。
http://d.hatena.ne.jp/mottsnite/20090822/1250950657

Grailsを使うと簡単にアプリができるんですね。。。
過去に苦労して携わった開発は何だったんだろうと思うぐらい驚きました。

2011/09/27

[groovy] GExcelAPIを使ってExcelのデータを取得してみた

概要

kimukouさんに教えて頂いた、nobeansさんが開発されたGExcelAPIを使用してExcelのデータを取得してみました。

内容

nobeansさんが作成したサンプルほぼそのままですが、以下コード例です。
import org.jggug.kobo.gexcelapi.GExcel
@GrabResolver(name="kobo-maven-repo", root="https://github.com/kobo/maven-repo/raw/master/release")
@Grab("org.jggug.kobo:gexcelapi:0.2")

class GExcelApiTest {

    void load(String fileName) {

        // Excelファイルを読込む
        def book = GExcel.open(fileName)

        // シートを取得する
        def sheet = book[0]
//        def sheet = book["Sheet1"] // シート名でも取得可能

        // セルの値を取得する
        println sheet.A1.value
        println sheet.A2.value

        println "-"*20
        def dump = { cell -> println "${cell.label}: ${cell.value} - ${cell.cellType}" }
        sheet.A_.each{ cell -> dump cell }
        println "-"*20
        sheet.B_.each{ cell -> dump cell }
        println "-"*20
        sheet._1.each{ cell -> dump cell }
        println "-"*20
        sheet._2.each{ cell -> dump cell }
        println "-"*20
        sheet.A1_B6.each{ row -> row.each { cell -> dump cell } }
    }
}
実行結果
123.0
水曜日
--------------------
A1: 123.0 - 0
A2: 水曜日 - 1
A3: true - 4
A4: 40808.0 - 0
A5:   - 1
A6: 1+1 - 2
--------------------
B1: null - 3
B2: null - 3
B3: null - 3
B4: null - 3
B5: null - 3
B6: null - 3
--------------------
A1: 123.0 - 0
B1: null - 3
C1: null - 3
D1: null - 3
--------------------
A2: 水曜日 - 1
B2: null - 3
--------------------
A1: 123.0 - 0
B1: null - 3
A2: 水曜日 - 1
B2: null - 3
A3: true - 4
B3: null - 3
A4: 40808.0 - 0
B4: null - 3
A5:   - 1
B5: null - 3
A6: 1+1 - 2
B6: null - 3
様々なイテレーターが用意されており、簡単にセルの値を取得することができました。

cell.valueで簡単にセルの値を取れます。
POIでやると、セルタイプに沿ったメソッドを実行して値を取らなきゃいけなかったり、
煩雑な部分が多かったですが、こちらは非常にシンプルで使いやすいです。

Excelデータの中身をさらしてはいませんが、実行結果のA4セルには日付を設定しています。
日付を出力して欲しかったのですが、数値が表示されました。
日付が取得できなかったのは少し残念ですが、非常に強力かつ便利なAPIなので今後も使っていきたいです。

これを使って、Excelから情報をDTOに格納し、テンプレートエンジンを使ってソースコードを自動生成するようなスクリプトでも書いてみようと思います。

2011/09/21

[groovy] POIでExcelのセルの値を取得してみた

概要

GroovyからApache POIを使用してExcelのデータを読んでみました。
Excel持ってないので、OpenOfficeで作成したExcelデータですが。。。

内容

groovyでPOIを使用してセルのデータを読むコードをこんな感じで書いてみました。
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

class POIUtils {
    static def getCellValue(Sheet sheet, rowNum, colNum) {

        // nullセーフナビゲーションを使用してセルにアクセスする
        Cell cellObj = sheet?.getRow(rowNum)?.getCell(colNum)
        switch (cellObj) {
        case null:
            ""
            break;
        default:
            switch (cellObj.cellType) {
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cellObj)) {
                    cellObj.getDateCellValue()
                } else {
                    cellObj.getNumericCellValue()
                }
                break;
            case Cell.CELL_TYPE_BLANK:
                ""
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                cellObj.getBooleanCellValue()
                break;
            case Cell.CELL_TYPE_ERROR:
                ""
                break;
            case Cell.CELL_TYPE_FORMULA:
                cellObj.getCellFormula()
                break;
            case Cell.CELL_TYPE_STRING:
                cellObj.getStringCellValue()
                break;
            }
        }
    }
}

上記を呼び出すソースは以下。
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;

class Startup {
    static void main(args) {

        // ローンパターンを使用し、ストリーム使用後に安全にクローズする
        new FileInputStream("./resources/test.xls").withStream {fis ->
            Sheet sheet = WorkbookFactory.create(fis).getSheetAt(0)

            println(POIUtils.getCellValue(sheet, 0, 0));

            // groovy版のループを使用し、1行目から10行目までのセルの値を書き出す
            // TODO クロージャ内でfor文が使えない!!!
            // なぜかorg.codehaus.groovy.control.MultipleCompilationErrorsExceptionが発生。。。
            for (def i in 0..<10) {
                println(i.toString())
            }
        }
    }
}
上記ソース上のコメントにも書きましたが、クロージャ内でfor文を書くと org.codehaus.groovy.control.MultipleCompilationErrorsExceptionが発生しました。 なんで???意味不明です。書き方が悪いのかな。 もう少し調査します。 あと、POIUtilsの部分ももっと(?)groovyチックに書きたいです。 徐々に勉強しながらカスタマイズしていこう。 2011/09/22追記 クロージャ内のfor文はうまくいかなかったですが、以下のようにループを書いてやるとうまくいきました。 原因は不明です。
//            for (def i in 0..<10) {
//                println(i.toString())
//            }
            10.times {
                println(POIUtils.getCellValue(sheet, it, 0));
            }
           for (int i = 0; i < 10; i++) {
                println(POIUtils.getCellValue(sheet, i, 0))
            }

クロージャ内の制御文は失敗する仕様なのかも知れない。。。
原因分かればまた追記します。

ただ単に構文ミスってようです。
これで動作しました。

2011/09/16

[groovy] groovyの勉強開始

最近ある問題を解決するために、色々調査していたらこの言語に出会った。
勉強を始めると面白い。

もっと深く勉強したいので、以下を購入してみた。
早く届かないかなぁ。



しばらくは、groovyを中心にブログを書こうと思う。

2011/09/15

[Java] Swing:JTableのセルにComboBoxを設定する方法

概要

JTableのセルにComboBoxを設定する方法を調査したので、説明します。

内容

以下のようにテーブル列のセルエディターに対して、生成済のコンボボックスを引数としたDefaultCellEditorを設定してあげれば、テーブルのセルにコンボボックスを設定することができます。
jTable1.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(cmb_cell1));

これがお手軽で簡単です。
その他の方法としては、CellEdirotを実装したクラスを独自実装し、やる方法があります。

2011/09/13

[Java] swing:jtableのセルをチェックボックスに変更する方法

概要

NetBeansを使えばJTableのセルを簡単にチェックボックスに変更できます。

内容

セルの型をBooleanに変えれば、表示がチェックボックスに変わります。
Booleanにしたら、内部的にエディター、レンダラーがJCheckBoxに変わるのかな。

2011/09/11

[Java] Velocityのログを無効化する方法について

概要

Velocityを使用すると、「velocity.log」というのが勝手に作成されます。
それを作成しないようにする方法について説明します。

内容

以下のようにVelocityの初期処理前にログを設定しないようプロパティを設定すればよいです。
        Velocity.setProperty(VelocityEngine.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.NullLogSystem");
        Velocity.init();

[Java] javaからgroovyスクリプトを実行する方法

概要

Javaプログラムからgroovyスクリプトを実行する方法について説明します。

内容

groovyスクリプトを実行するためには、以下のライブラリをビルドパスに追加します。
・groovy-1.8.2.jar
・commons-cli-1.2.jar
・antlr-2.7.7.jar
・asm-3.2.jar

そして、以下のようにプログラムを作成すれば、groovyスクリプトを実行できます。
        // GroovyScriptエンジンを生成する
        GroovyScriptEngine engine = new GroovyScriptEngine(".");

        // スクリプトにパラメータをBindする
        Binding binding = new Binding();
        binding.setProperty("formula", dto);

        // スクリプトを実行する
        engine.run("test.groovy", binding);

上記の例では、カレントディレクトリにある「test.groovy」を実行しています。

[Java] Velocityを使用してファイルを作成する方法

概要

Velocityというテンプレートエンジンを使用して、ファイルを作成する方法について説明します。

内容

以下の手順でテンプレートエンジンからファイルを作成することができます。
1.テンプレートエンジンを初期化する
2.テンプレートに渡すパラメータを設定する
3.テンプレートのマージ結果をStringWriterに設定する

以下サンプルコードです。
private File createGroovyScript(FormulaDTO dto) throws Exception {

        File file = File.createTempFile("priceCalc", ".groovy", new File("."));

        // Velocityテンプレートエンジンを初期化する
        Velocity.init();

        // テンプレートに渡すパラメータを設定する
        VelocityContext context = new VelocityContext();
        context.put("formula", dto);

        // テンプレートのマージ結果をStringWriterに設定する
        StringWriter sw = new StringWriter();
        Template template = Velocity.getTemplate("/template/template_groovy.vm", "UTF-8");
        template.merge(context,sw);

        // 結果を一時ファイルに設定する
        FileWriter writer = new FileWriter(file);
        writer.write(sw.toString());
        writer.close();

        return file;
    }

template_groovy.vm
import jp.co.technos.common.dto.FormulaDTO;

def calculate(FormulaDTO data) {
    data.setResult(${formula.formula})
}

FormulaDTO data = (FormulaDTO) formula
calculate(data)

2011/08/24

[Java] クラスファイル以外のリソースをjarに含める方法について

概要

今更ながらApache Antを使用してjarにリソースファイルを含める方法について調査したので、以下に記載する。

動作環境

項目内容
OSMac OS X 10.06
DBant 1.8.2

内容

こんな感じで build.xmlを作成したら動いた。

    
    
        
        
    

    
    
        
        
    

    
    
        
        
        
        
            
                   
            
            
        
        
        
            
                
            
        
    

    
    
        
            
        
    


上記、リソースコピーのように、特定の拡張子のファイルをがっつりコピーするのが楽。
リソース指定で一つずつ選ぶこともできるけど、めんどくさそうだった。

2011/08/23

[Ubuntu] apacheのバージョン確認方法について

概要

ubuntuにインストールされているapacheのバージョン確認方法について調べたので、こちらにメモします。

動作環境

項目内容
OSUbuntu10.04

前提事項

apacheがインストールされていること。

内容

以下のコマンドを実行すると確認できます。
apache2ctl -v

2011/05/18

[Windows Server] Windows Server 自動再起動の方法について

概要

Windows Serverを自動的に再起動する方法について、以下に記載します。

動作環境

項目内容
OSWindows Server2008


内容

以下のような設定を行えば、可能なようです。

--
(1) [スタート]-[管理ツール]-[タスク スケジューラ]を起動
(2) 「基本タスクの作成]をクリック
(3) 「名前」と「説明」を入力し[次へ]をクリック
(4) 「毎日」を選択して[次へ]をクリック
(5) 時間を再起動したい時間に変更して[次へ]をクリック
(6) 「プログラムの開始」を選択して[次へ]をクリック
(7) 「プログラム/スクリプト」に「shutdown」と入力、「引数の追加」に「/r /t 0」と入力して[次へ]をクリック
(8) [完了]をクリック

2011/04/25

[eclipse] PHPの開発環境を整えてみる

概要

Eclipseには、PHP開発用のIDEがあります。
「 Eclipse for PHP Developers」という名前で提供されています。
今回はそれを導入するための手順について、調査しました。

動作環境

項目内容
OSMac OS X 10.06

内容

Pleiades All in One ダウンロードサイトから、PHP版のファイルをダウンロードし、展開するだけです。

参考情報

Pleiades All in One 日本語ディストリビューション (zip) ダウンロード

[Mac] MacProServerでRAIDを構成する方法について

概要

Mac Pro ServerでRAIDを構成する方法について、調査しました。

動作環境

項目内容
OSMac OS X 10.06

前提事項

なし

内容

基本的に、RAIDユーティリティを使用してRAIDを構成するようです。
詳細はAppleの公式ドキュメントを参照して下さい。
何か詰まるところが、あればこちらに追記します。

テスト


参考情報

RAID ユーティリティユーザーズガイド

2011/04/18

[Java] jarファイルの署名方法について

概要

jarファイルに署名をすると、JavaWebStartやAppletでローカルマシンのファイルにアクセスすることができます。

今回はjarファイルに署名をする方法について書きます。

動作環境

項目内容
OSMac OS X 10.06
JavaJava 6

前提事項

なし

内容

大まかなな流れとしては、
 1.KeyStoreの作成
 2.Jarファイルに署名
という流れになります。

1.KeyStoreの作成

Javaのkeytoolを使用して、KeyStoreを作成します。
以下のようなコマンドを入力します。
keytool -genkey -keyalg rsa -alias dummy

実行すると、色々聞かれますので適当に入力します。
ここで作成するのは、自作のKeyStoreなので、配布に使用する場合等は、ベリサインなど公的な署名を
使用した方がいいみたいです。

2.Jarファイルに署名

Javaのjarsignerを使用して、署名します。
以下のようなコマンドを入力します。
jarsigner Jarファイルのパス dummy

上記のコマンドが終了したら、署名されています。
少しJarファイルのサイズが大きくなっているはずです。


参考情報

Jarの署名方法

[Java] Macでkeytoolを使用したときの文字化け対処方法について

概要

MacでJavaのkeytoolを使用すると、Macで扱う文字コードとJavaで扱う文字コードが異なるため、
文字化けが発生します。

その解消方法を今回は書きます。

動作環境

項目内容
OSMac OS X 10.06
JavaJava 6

前提事項

なし

内容

ターミナルの「環境設定」を開きます。
設定タブを選択し、「文字エンコーディング」に「Shift-JIS」を入力します。

これでMacとJavaの文字コードが一致したため、文字化けが発生しなくなります。
ただし、文字コードがSJISでないツールを使用するときは、またもとに戻したりしなければならないです。

参考情報

MACでJavaのkeytoolコマンドを使用した時の文字化け対応

2011/04/12

[Windows Storage Server2008] WBADMIN START BACKUPによる共有フォルダへのバックアップについて

概要

Windows Server 2008でのバックアップ機能の「WBADMIN START BACKUP」を
使ったバックアップ方法について書きます。

動作環境

項目内容
OSWindows Storage Server2008
筐体Dell Power Valut NX3100

前提事項

なし

内容

以下のようなコマンドでバックアップが取得できます。
タスクスケジューラーと組み合わせれば、定期的にバックアップが取得できそうです。
wbadmin start backup -backupTarget:<コンピュータ名><共有名><フォルダ名> -include:C: -vssFull -quiet

基本的に上記のようなコマンドで問題ないのですが、バックアップ先が共有フォルダで、
アクセス制御が設定されている場合、失敗します。

ですので、以下のようにユーザーID、パスワードを指定するとうまくいきます。
wbadmin start backup -backupTarget:<コンピュータ名><共有名><フォルダ名> -include:C: -vssFull -user:<ユーザー名> -password:<パスワード> -quiet

テスト

なし

参考情報

コマンド ラインを使用してシステム状態のバックアップを作成する

最後に

GUIからやるとなぜかうまくいくんですよね。
共有への接続情報が残ってるからかもしれません。

2011/04/08

[サーバ製品] DELL PowerVault-NX3100:ネットワーク冗長化の方法について

概要

DELL PowerVault-NX3100は、オンボードでNICが2個ついています。
それらを束ねて1つのアダプタとして利用し、ネットワークの冗長化を行う方法について紹介します。

なお、1つのアダプタとして利用することを「teaming」というそうです。
LinuxだとBondingっていうみたいです。

動作環境

項目内容
OSWindows Storage Server 2008
サーバ機NX3100

前提事項

なし

内容

以下のWEBページをNX3100に読み替えて設定を行うとうまくいきました。
サーバー機のネットワーク冗長化(Windows編)
NX3100の場合、既にドライバはプリインストールされているので、設定のみ行えばよいです。

テスト

なし

参考情報

サーバー機のネットワーク冗長化(Windows編)

最後に

なし

2011/04/03

[Windows Storage Server2008] ローカルユーザをWindowsコマンドで追加する方法について

概要

ローカルユーザの登録はGUIから追加できますが、大量に登録する必要がある場合、大変手間です。
そこで、コマンドプロンプトで簡単に作成する方法を検討してみます。

動作環境

項目内容
OSWindows Storage Server2008

前提事項

なし

内容

ユーザーをコマンドプロンプトから登録するには、以下のコマンドを使用します。
net user [ユーザー名 [パスワード | *] [オプション]] [/domain]
         ユーザー名 {パスワード | *} /add [オプション] [/domain]
         ユーザー名 [/delete] [/domain]
このコマンドを使用するとユーザーを作成することができるようです。
以下、MicroSoftのリファレンスです。
--
net user コマンドを使うと、コンピュータのユーザー アカウントの作成および変更を行うことができます。
コマンドライン スイッチを指定せずにこのコマンドを使用すると、コンピュータ内のユーザー アカウントの一覧が表示されます。
ユーザー アカウント情報はユーザー アカウント データベースに格納されます。
このコマンドはサーバー上でのみ使用できます。
以下省略。。。
--

後は、作成したユーザーにグループ設定をする方法ですが、こちらもコマンドライン上で行えるようです。
NET GROUP 
[グループ名 [/COMMENT:"テキスト"]] [/DOMAIN]
         グループ名 {/ADD [/COMMENT:"テキスト"] | /DELETE}  [/DOMAIN]
         グループ名 ユーザー名 [...] {/ADD | /DELETE} [/DOMAIN]

これらを組み合わせると、簡単にコマンドライン上からユーザーを登録できそうです。

多分使う順番は、以下のような感じになりそうです。
1.NET USER コマンドでローカルユーザーを登録する。
2.NET GROUP コマンドでユーザーにグループを設定する。

テスト

実際に実機で試しておりません。
試したら、こちらに結果をかきます。

参考情報

Net User コマンドの使用方法
コマンド NET HELP GROUP

最後に

WSHと上記コマンドを組み合わせると、ユーザーを一括登録できそうなツールを作成できそうです。
今はやりませんが、そのうち試してみたいと思います。

2011/03/31

[Java] SpringFrameworkのトランザクション管理について

概要

SpringFrameworkのトランザクション管理の方法について説明します。

動作環境

項目内容
OSMac OS X 10.06
DBMySQL 5.5
開発環境eclipse3.6
SpringFramework1.2
iBatis2.0

前提事項

・特になし

内容

Springでは、トランザクション管理に以下のクラスを使用するようです。
org.springframework.transaction.interceptor.TransactionProxyFactoryBean

こちらをapplicationContext.xmlに定義します。
こんな感じで実装しました。
  
      
        
      
      
        
      
      
        
          PROPAGATION_REQUIRED
        
      
  

重要なのは、上記の「transactionAttributes」です。
prop keyで指定するメソッドにて、トランザクションの状態を定義するようです。
この例だと、すべてのメソッドを同じようにトランザクション管理するという内容になります。

テスト

なし

参考情報


最後に

次回以降は、Swing+SpringFramework+iBatisを組み合わせたアプリケーションを作成します。

2011/03/30

[Java] SpringFrameworkとiBatisを連携させてみる

概要

今更ながら、SpringFrameworkとiBatisを連携を試してみます。
applicationContextの設定から、sqlMapの設定、テストまでを大まかに説明します。

動作環境

項目内容
OSMac OS X 10.06
DBMySQL 5.5
開発環境eclipse3.6
SpringFramework1.2
iBatis2.0

前提事項

・以下のテーブルを作成していること。
CREATE  TABLE `PERSON` (
  `PER_ID` INT NOT NULL ,
  `PER_FIRST_NAME` VARCHAR(40) NOT NULL ,
  `PER_LAST_NAME` VARCHAR(40) NOT NULL ,
  PRIMARY KEY (`PER_ID`) )
ENGINE = InnoDB;
・mysqlのJDBCドライバを入手済であること。

内容


1.SpringFrameworkのライブラリを入手する。
現時点の最新バージョンは3.0.5ですが、今回は1.2系のライブラリを入手します。
以下のURLより入手できますので、入手し適当な場所に解凍して下さい。
こちら

2.iBatisのライブラリを入手する。
現時点では「iBatis」と言う名前から「MyBatis」という名前に変更になっています。
入手についてはこちらを参考にして下さい。

3.Springの定義ファイルを作成する。

Springの定義ファイル「applicationContext-ibatis.xml」を作成します。
このファイルでは、
 ・データソースの設定
 ・iBatis設定ファイルの設定
 ・Daoに対してデータソースの設定
を行っています。



  
  
      
        com.mysql.jdbc.Driver
      
      
        jdbc:mysql://localhost/ibatis
      
      
        ibatis
      
      
        ibatis
      
  

  
      
        
      
  

  
      
        
          dao/sqlMapConfig.xml
        
      
  

  
      
        
      
      
        
      
  

  


4.iBatisの定義ファイルを作成する。

iBatisで使用する定義ファイル「sqlMapConfig.xml」を以下のように作成しました。




  


5.O/Rマッピングファイルを作成する。

O/Rマッピングファイル「PersonDao.xml」を以下のように作成しました。




  
  

上記は見ての通り、SQLです。
Hibernateだと、確かかけないんです。SQLを。
iBatisだとSQLを書けるのでSQLを良く使用しているエンジニアだと取っ付きやすいと思います。

6.DTOを作成する。
DBからの取得した結果を格納するためのDTOを作成します。
以下のようなクラスを作成しました。
public class Person {

 private int id;
 private String firstName;
 private String lastName;
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getFirstName() {
  return firstName;
 }
 public void setFirstName(String firstName) {
  this.firstName = firstName;
 }
 public String getLastName() {
  return lastName;
 }
 public void setLastName(String lastName) {
  this.lastName = lastName;
 }
}

7.Daoクラスを作成する。

今回の例では、インタフェースとその実装クラスそれぞれを作成しました。

・PersonDao
public interface PersonDao {
 public List selectAll();
}
・PersonDaoImpl
public class PersonDaoImpl extends SqlMapClientDaoSupport implements PersonDao {

 @Override
 public List selectAll() {
  return (List) getSqlMapClientTemplate().queryForList("selectAll");
 }
}


テスト

1〜7で使用する準備が整ったので、実際に使用できるか試してみます。
public class StartUp {

 public static void main(String[] args) {

  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-ibatis.xml");
  BeanFactory factory = (BeanFactory) context;
  PersonDao dao = (PersonDao) factory.getBean("personDao");
  List personList = dao.selectAll();
  System.out.println(personList.size());
 }
}

実行すると、以下のような感じでログが表示されました。
正常に連携できました。
2011/03/30 22:42:27 org.springframework.context.support.AbstractApplicationContext prepareRefresh
情報: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@39617189: display name [org.springframework.context.support.ClassPathXmlApplicationContext@39617189]; startup date [Wed Mar 30 22:42:27 JST 2011]; root of context hierarchy
2011/03/30 22:42:27 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
情報: Loading XML bean definitions from class path resource [applicationContext-ibatis.xml]
2011/03/30 22:42:27 org.springframework.context.support.AbstractApplicationContext obtainFreshBeanFactory
情報: Bean factory for application context [org.springframework.context.support.ClassPathXmlApplicationContext@39617189]: org.springframework.beans.factory.support.DefaultListableBeanFactory@39b8d6f7
2011/03/30 22:42:27 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
情報: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@39b8d6f7: defining beans [dataSource,transactionManager,sqlMapClient,personDao]; root of factory hierarchy
2011/03/30 22:42:27 org.springframework.jdbc.datasource.DriverManagerDataSource setDriverClassName
情報: Loaded JDBC driver: com.mysql.jdbc.Driver
1

参考情報

なし

最後に

説明をほとんどしませんでしたが、上記の内容をおのおのの環境に合わせて使って貰えれば動作すると思います。
次回以降、トランザクションに関して試してみたいと思います。

[Ubuntu] 起動時に共有フォルダをマウントする方法について

概要

Ubuntu起動時に共有フォルダをマウントする方法について説明します。


動作環境

項目内容
OSUbuntu10.04

前提事項

・マウント先がWindowsであること

内容

mountを定義しているファイルは「/etc/fstab」です。
こちらを編集して、Ubuntu起動時にマウントされるようにします。

1.fstabを編集する。

fstabファイルの末尾に以下の内容を追記します。
/マウント相手のIPアドレス/マウントしたいフォルダ名
 マウント先 smbfs username=相手先のユーザー名,password=相手先ユーザーのパスワード,
gid=相ファイルシステムのグループID,uid=ファイルシステムのユーザID,
codepage=cp932,iocharset=utf8,rw,defaults 0 0
これらを1行で記述します。

項目の詳細な内容は以下の通りです。
項目内容
マウント相手のIPアドレスマウント先のファイルサーバのIPアドレスを指定する。
マウントしたいフォルダ名マウント先のフォルダ名を指定する。
マウント先マウントしたいディレクトリを指定する。
相手先のユーザー名WindowsのユーザーID
相手先ユーザーのパスワードWindowsのパスワード
ファイルシステムのグループIDマウントするUbuntuユーザーの属するグループIDを指定する。
ファイルシステムのユーザIDマウントするUbuntuユーザーIDを指定する。
複数のマウント先がある場合、上記の内容を追記します。

2.Ubuntuを再起動する
設定が終わったら、再起動します。

3.テストする
うまくマウントできているか、確認します。

テスト

なし

参考情報

fstabにsmbfsの自動mountを定義
ファイルシステムのマウントとアンマウント、「/etc/fstab」がキモ

2011/03/29

[Windows Storage Server] Guestユーザーを有効にする方法について

概要

Windows Storage Server2008で作成した共有領域に、パスワードなしでアクセスする方法を紹介します。

動作環境

項目内容
OSWindows Storage Server2008

前提事項

なし

内容

アクセス可能な領域にアクセスすると、Guestユーザとして扱われます。
通常、Guestユーザでアクセス可能な領域にアクセスはできないため、
ユーザー認証するための確認ダイアログが表示されます。

その確認ダイアログを表示しないようにするためには、Guestユーザを有効とするように設定変更します。
以下、設定変更の仕方について説明します。
1.ローカルセキュリティポリシーを開く。
「コントロールパネル」-「管理ツール」-「ローカルセキュリティポリシー」

2.「セキュリティオプション」を選択する。
左側のツリーで、「セキュリティの設定」-「ローカルポリシー」-「セキュリティオプション」を選択します。

3.Guestアカウントの有効化する。
右側のリストで、「アカウント: Guest アカウントの状態」を「有効」にします。

テスト

なし

参考情報

Windows Server 2003の共有フォルダ

2011/03/28

[Java] iBatisの入手方法について

概要

iBatisのライブラリの入手方法について説明します。
本当はMyBatisに関して書きたかったのですが、現時点ではSpringFrameworkと連携できなさそうなので、iBatisについて書きます。

動作環境

項目内容
OSMac OS X 10.06
JavaJDK6
iBatis2.3.4
DBMySQL 5.5

前提事項

なし

内容

iBatisは現在「MyBatis」という名前に変わりライブラリの入手が困難になったようです。
MyBatisだと、SpringFrameworkと連携できないようなので、iBatisにはまだ需要があると思うのですが、、、。

iBatis2は以下のページから入手可能です。
そのうちページが見れなくなるかも知れません。
その頃には、SpringFrameworkと連携できるようになっているかもしれませんね。
こちら

テスト

なし

参考情報

[Java][iBATIS][mybatis]iBATIS2/iBATIS3/mybatis各種アーカイブ・ドキュメント一覧

[CentOS] インストールされたパッケージを確認する方法について

概要

インストールされたパッケージを確認する方法について説明します。

動作環境

なし

前提事項

なし

内容

インストールされているパッケージを確認するには、以下のコマンドを実行します。
rpm -qa

テスト

なし

参考情報

rpm -qa | grep httpd

[CentOS] OSバージョンを確認する方法について

概要

OSのバージョン情報を確認する方法について説明します。

動作環境

なし

前提事項

なし

内容

CentOSのバージョン情報を確認するには、ファイルをcatコマンド等で表示させます。
cat /etc/redhat-release

テスト

なし

参考情報

CentOSのバージョン確認

[CentOS] ホスト名の確認方法について

概要

CentOSのホスト名の確認方法について説明します。

動作環境

なし

前提事項

なし

内容

ホスト名が確認できるファイルがあるので、そちらをviエディタで開き確認します。
view /etc/sysconfig/network

テスト

なし

参考情報

[CentOS] ホスト名の変更

2011/03/27

[MySQL] Macでアンインストールする方法について

概要

MacにインストールされたMySQLをアンインストールする方法について説明します。

動作環境

項目内容
OSMac OS X 10.06
DBMySQL 5.5

前提事項

・特になし

内容

MySQL5.5をアンインストールするには、いくつか手順を踏まなくてはならないようです。
基本的には、インストール時に作成されたファイルをすべて消せばよいみたいです。

手順は以下の通りです。
sudo rm -rf /usr/local/mysql
sudo rm -rf /Library/StartupItems/MySQLCOM/

テスト

・なし

参考情報

MacからMySQLをアンインストールする方法

[Java] Swing:NetBeansでGUIコンポーネントをパレットに追加する

概要

今回は、作成したGUI コンポーネントをNetBeansのパレットに追加する方法について説明します。

動作環境

・Java SE 6
・NetBeans 6.9.1
・Mac OS X 10.6

前提事項

・特になし

内容

やり方は至って簡単です。
作成したGUIコンポーネントを選択し、「右クリック->ツール->パレットに追加」を選択します。
後は、パレットのどの位置にGUIコンポーネントを配置するか選択すればよいです。

テスト

・なし

参考情報

NetBeansでGUIコンポーネントをパレットに追加する

2011/03/25

[サーバ製品] DELL PowerVault-NX3100:初期パスワードでログインする方法について

概要

DELL PowerVault-NX3100の初期パスワードに「@」が含まれている場合があります。
NX3100にUSB日本語キーボードを接続しても、英語キーボードとして認識される場合があります。
日本語キーボードとキー配列が異なるため、英語キーボードの配列を知らないとはまります。
(私は小1時間はまってました。。。)
その場合の対処方法を説明します。


動作環境

・特になし。


前提事項

・特になし。


内容

英語キーボードで「@」を入力するには、「Shift + 2」をパンチします。
初期パスワードに「@」に含まれていても、上記のように入力してあげれば無事ログインできます。
なお、注意としては、初期設定時に画面に大きく表示されるパスワードを忘れないこと!
これを忘れちゃうと、、、ですよね。

なお、英語キーボードとして認識された日本語キーボードのドライバをインストールしようと
挑戦してみましたが、諦めました。。。


テスト

・特になし。


参考情報

・特になし。

[Java] Swing:JTableのセルにJButtonを追加する方法について

概要

今回は、SwingのJTableのセルにJButtonを追加する方法について試してみます。


動作環境

・Java SE 6
・NetBeans 6.9.1
・Mac OS X 10.6


前提事項

・特になし


内容

SwingのJTableのセルにJButtonを追加するには、大まかに以下の手順が必要です。
1.JButtonのサブクラスを作成する
2.TableCellRendererを実装したクラスを作成する
3.TableCellEditorを実装したクラスを作成する
4.JTableとTableCellRenderer、TableCellEditorを関連付ける

以下、サンプルプログラムを交えて説明します。
なお、サンプルプログラムは「削除ボタンを押下したら、行を削除する」という動作をします。

1.JButtonのサブクラスを作成する
手順2、3のために、JButtonのサブクラスを作成します。
サンプルでは、以下のような実装しました。
public class DeleteButton extends JButton {

    @Override
    public void updateUI() {
        super.updateUI();
        setFocusable(false);
        setText("削除");
    }
}

2.TableCellRendererを実装したクラスを作成する
1で作成したボタンのレンダリングに関する情報を設定します。

なお、TableCellRendererとは、JavaDocによると
「JTable のセルのレンダリングになる可能性のあるオブジェクトが要求するメソッドを定義します。」
というものです。

サンプルでは、以下のように実装しました。
public class DeleteButtonRenderer extends DeleteButton implements TableCellRenderer {

    public DeleteButtonRenderer() {
        super();
        setName("Table.cellRenderer");
    }

    public Component getTableCellRendererComponent(
            JTable jtable, Object o, boolean bln, boolean bln1, int i, int i1) {
        return this;
    }
}
セルに表示されるコンポーネントを返却するメソッド「getTableCellRendererComponent」で
「DeleteButton」自身を返却しています。
これにより、セルに「DeleteButton」が表示されることとなります。


3.TableCellEditorを実装したクラスを作成する
JButtonがユーザの入力やイベントを受信できるようにTableCellEditorを実装します。

public class DeleteButtonEditor extends DeleteButton implements TableCellEditor {

    public DeleteButtonEditor(final JTable table) {
        super();
        addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                int row = table.convertRowIndexToModel(table.getEditingRow());
                fireEditingStopped();
                ((DefaultTableModel)table.getModel()).removeRow(row);
            }
        });
    }
    
    public Component getTableCellEditorComponent(
            JTable jtable, Object o, boolean bln, int i, int i1) {
        return this;
    }

    public Object getCellEditorValue() {
        return "";
    }

    public boolean isCellEditable(EventObject eo) {
        return true;
    }

    public boolean shouldSelectCell(EventObject eo) {
        return true;
    }

    public boolean stopCellEditing() {
        fireEditingStopped();
        return true;
    }

    public void cancelCellEditing() {
        fireEditingCanceled();
    }

    public void addCellEditorListener(CellEditorListener cl) {
        listenerList.add(CellEditorListener.class, cl);
    }

    public void removeCellEditorListener(CellEditorListener cl) {
        listenerList.remove(CellEditorListener.class, cl);
    }
    public CellEditorListener[] getCellEditorListeners() {
        return (CellEditorListener[])listenerList.getListeners(CellEditorListener.class);
    }
    protected void fireEditingStopped() {
        // Guaranteed to return a non-null array
        Object[] listeners = listenerList.getListenerList();
        // Process the listeners last to first, notifying
        // those that are interested in this event
        for(int i = listeners.length-2; i>=0; i-=2) {
            if(listeners[i]==CellEditorListener.class) {
                // Lazily create the event:
                if(changeEvent == null) changeEvent = new ChangeEvent(this);
                ((CellEditorListener)listeners[i+1]).editingStopped(changeEvent);
            }
        }
    }
    protected void fireEditingCanceled() {
        // Guaranteed to return a non-null array
        Object[] listeners = listenerList.getListenerList();
        // Process the listeners last to first, notifying
        // those that are interested in this event
        for(int i = listeners.length-2; i>=0; i-=2) {
            if(listeners[i]==CellEditorListener.class) {
                // Lazily create the event:
                if(changeEvent == null) changeEvent = new ChangeEvent(this);
                ((CellEditorListener)listeners[i+1]).editingCanceled(changeEvent);
            }
        }
    }
}
DeleteButtonEditorのコンストラクタで、ボタン押下時のイベントを設定しています。
また、イベントを受信する必要があるため、isCellEditable、shouldSelectCellで「true」を返却しています。
fireEditingStopped、fireEditingCanceledはAbstractCellEditorクラスよりコピーしたものを使用しています。
こちらのメソッドはセルの編集の終了、キャンセルを感知し他のオブジェクトに通知するため使用されます。

4.JTableとTableCellRenderer、TableCellEditorを関連付ける
JTableに2、3で作成したオブジェクトを関連付けます。

関連付けの方法は、以下の通りです。
4.1.NetBeansのデザインビューを開き、テーブルを選択します。
4.2.右クリックし、表の内容を選択します。
4.3.列タブを選択し、ボタンを表示したい列を選択し、エディターの横のボタンをクリックします。

プルダウンでカスタムコードを選択し、以下のコードを入力します。
DeleteButtonEditorの引数には、JTableの変数名を指定します。
new widets.DeleteButtonEditor(jTable1)
※2011/05/20 追記
BeanBindingを使用しテーブルセルの設定を実施した場合、型が「null」となります。
nullのままだと、エディターがうまく動作しないため、何か適当な値を設定して下さい。

4.4.レンダラの横のボタンを押下し、レンダラを設定します。
プルダウンでカスタムコードを選択し、以下のコードを入力します。
new widets.DeleteButtonRenderer()

以上、で設定が完了です。


テスト

作成したプログラムが想定通り動作するか、検証します。

起動直後の画面は以下のようになりました。
ボタンがセルに表示されています。

削除ボタンを押下したら、行が削除されました。
実装内容が想定通り反映されました。


参考情報

この記事は以下を参考にさせて頂きました。
JTableのセルにJButtonを追加して行削除

[MS-DOS] 指定したフォルダおよびその内部のフォルダ、ファイルを削除する方法

エクスプローラーの右クリックで削除する方法だと、ファイル数が多い場合、かなり時間がかかります。
そこで、コマンドプロンプトを使用し、すばやく削除する方法について書きます。

コマンドプロンプトを立ち上げ、以下のコマンドを実行すればよいです。
rmdir /s /q ディレクトリ名
上記のコマンドだと/qオプションを指定しています。
このオプションを指定すると、確認メッセージを表示しないで削除してしまうため、
実行する前はよく確認してから実行するようにして下さい。

[MS-DOS] grepと同じような機能を持ったコマンド

コマンドプロンプトでgrepコマンドと同じような処理をしたい場合、
使用するのが「find」というコマンドです。

以下のように使用します。
find "検索したい文字列" *.txt
検索したい文字列をダブルクォーテション(”)で囲むのを忘れずに!

ただ、grep機能は、sakuraエディター等、高機能なエディターに標準で装備されていますので、
使用する機会はあまりなさそうですが。。

2011/03/24

[eclipse] VM引数について

eclipseを初期設定のまま、メモリを大量に使用するプログラムを実行すると、
時々「OutOfMemory」が発生します。

ついつい忘れがちになってしまうVM引数の設定についてのメモです。
書き方としては、このような感じです。
-Xms512m -Xmx512m
Xms:最小メモリ
Xmx:最大メモリ

VM引数には上記の他にも色々ありますが、上記は忘れずに設定しておきたい所です。
以下のブログには、詳しく書いてありましたので、リンクを貼ります。
こちら

[Excel VBA] プログラムを同期実行する方法

Shell関数を使用すれば、任意のプログラムを実行できます。
しかし、Shell関数は非同期での処理となります。
そのため、プログラムの終了を待たずに
Shell関数以降のステートメントが実行されます。

非同期での処理では都合が悪いケースがあるため、
同期実行する方法を以下に示します。

以下、ソースコードです。
Dim strShellCommand As String     ' シェルコマンド
Dim objWSH As Object              ' WSH

strShellCommand = " "             ' 実行したいコマンド
    
' WSHを使ってコマンドを実行する
Set objWSH = CreateObject("WScript.Shell")
objWSH.Run strShellCommand, vbNormalFocus, True ' 第3引数がTrueなら、同期実行
Set objWSH = Nothing              ' オブジェクトを解放

[Java] NetBeansでJTableで「Bean Binding」を使ってみる

NetBeansには、「Bean Binding」という便利な機能があって、
その機能を使えば簡単にJTableにデータを設定できるようです。

以下のような機能を持つサンプルを交え、「Bean Binding」を使用してみます。
・「追加」ボタンを押下するとJTableにDTOのデータが追加される。

1.ライブラリを追加する

Bean Bindingを使うので、ライブラリを追加します。
プロジェクトを選択し、右クリック->プロパティを選択します。
ダイアログが開くので、「ライブラリ」を選択します。
その後、ライブラリの追加を押下します。
「Beans Binding」というのがあるので、そちらを選択し追加します。

2.バインドさせるDTOを作成する

バインドさせるためのDTOを作成します。
今回はこんな感じのDTOを作成しました。
public class SampleDTO {

    private String userId;
    private String userName;

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserId() {
        return userId;
    }

    public String getUserName() {
        return userName;
    }
}

3.Bindさせるためのコードを作成する

1でリンクしたライブラリには、Bindを容易にするためのクラスが実装されています。
ObservableCollectionsというクラスで、こちらを使用してBindするためのコードを作成します。

以下のようなコードになります。
public class SampleTable {

    private List sampleDtoList = 
            ObservableCollections.observableList(new ArrayList());

    public List getSampleDtoList() {
        return this.sampleDtoList;
    }

    public void setSampleDtoList(List sampleDtoList) {
        this.sampleDtoList = sampleDtoList;
    }
 
 〜〜〜中略〜〜〜
}

4.追加ボタンのアクションを設定する

追加ボタンを押下したら、SampleTableのsampleDtoListにSampleDTOを追加するコードを作成します。
以下のようなコードになります。
    private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {

        SampleDTO dto = new SampleDTO();
        dto.setUserId("1");
        dto.setUserName("しがのん");
        this.sampleDtoList.add(dto);
    }

5.JTableとDTOを紐付ける

JTableとDTOを紐付けるための設定をします。

JTableを右クリックし、表の内容を選択します。
表示されたダイアログの「バインド」を選択します。

「式をバインド」の箇所に「sampleDTOList」を設定するのがポイントです。

設定が終わったら、列の設定をします。

DTOのプロパティを記述するのがポイントです。

完了したら「閉じる」を押下して完了です。

6.テストする

以上1〜5で「Bean Binding」の設定が完了です。
早速テストしてみます。


追加を押下すると↓


行が追加されています。

すごいシンプルなコードでJTableにデータが追加できました。
この機能がなかったら、ごりごりコードを書くはめでしたが、この機能のおかげですごいシンプルに実装できました。
この機能を使ってDBの結果等もシンプルにJTableに設定できそうです。

[Java] NetBeansでJTableのレイアウトを変更するには

NetBeansのレイアウトビューを表示します。
JTableを選択し、右クリックをし「表の内容」を選択します。

すると、以下のダイアログが表示されるので、そちらからJTableのレイアウトが変更できます。

[Mac] バックスラッシュを入力する方法について

Macでバックスラッシュを入力するには、「Option + ¥」で入力できます。

2011/03/23

[MySQL] JDBCドライバの入手方法について

JavaからMySQLに接続するためには、JDBCドライバが必要です。
JDBCドライバとは、異なるデータベースに対するアクセスを行う際に、個々のデータベース毎にプログラムを書き換えなくていいように、データベースとJavaプログラムの間にあってデータベース毎の差を吸収してくれるものです。
こちらから、引用しました。。
こちら

ドライバは、以下より入手できます。
こちら

表示されたページの「Connector/J」をクリックしたら、ダウンロード画面が表示できますので、
そちらより入手することが可能です。

[Mac] MySQL5.5をインストール

Mac OS XにMySQLをインストールしてみます。
■環境
OS : Mac OS X 10.6
MySQL : 5.5

1.packegeをダウンロードする

以下のWEBページより、「MySQL Community Server」を選択します。
こちら

表示されたページの「Mac OS X ver. 10.6 (x86, 64-bit), DMG 」のダウンロードボタンを押下します。
すると、ダウンロードが始まります。

2.インストールする

ダウンロードしたファイルを実行し、インストールします。

3.起動する
コンソールを立ち上げて、コマンドを実行し、MySQLのプロセスを立ち上げます。

$ sudo /usr/local/mysql//bin/mysqld_safe

プロセスが立ち上がっているのを確認すればOKです。

4.ログインする
コンソールより、以下のコマンドを実行し、ログインします。
$ /usr/local/mysql//bin/mysql -u root
ログインできれば、OKです。

こちらが参考になります。
MySQLのインストール

2011/03/22

[Mac] 半角カタカナを入力する方法について

デフォルトの設定だと、半角カタカナが入力できません。
そこで、以下の操作をすることにより、半角カタカナを入力できるようにします。

1.システム環境設定をクリック

2.言語とテキストをクリック

3.入力ソースタブを選択

4.半角カタカナにチェックを入れる。

上記設定をすれば完了です。
実際に半角カタカナを入力するには、
日本語入力モードで半角カタカナに変換したい文字列を入力後「ctrl + ;」で変換できます。

2011/03/18

[JavaFX] JavaFXでTableを表示する

以下のWEBページを参考にやってみたら、Tableを表示することができました。
こちら

ちょっと表示が微妙なので、カスタマイズすれば使えるようになると思います。
それにしても、JavaFXの文法がよくわかりません。
どっか、いいページありませんかねぇ。
良さそうな本も出ていないし。

[Ubuntu] 使用したいポートを設定する方法

使用したいポートを設定するには、viエディターで「/etc/services」を編集します。

2011/03/17

[JavaFX] データバインドについて

NetBeansのHPに詳しく書いていました。
簡単な内容なので、30分程度でサンプルを試し理解を深めることができます。
こちら

それにしてもTableが簡単に使えないのは痛いです。。。
業務アプリに、Tableは必須なのに。。

[Ubuntu] sudoresファイルを編集する方法について

sudoresファイルの編集には、以下のコマンドを実行します。

sudo visudo

なお、sudoresファイルとは、sudoコマンドのための設定ファイルです。
こちらに設定しておくと、スーパーユーザー権限でないと実行できないプログラム(例えば、apt-getなど)
をsudoなしで実行できるようになります。

[Ubuntu] パッケージの削除(依存関係のあるパッケージも合わせて削除)について

パッケージおよび、依存関係のあるパッケージも削除するには、以下のコマンドを実行します。

apt-get purge パッケージ名

[Ubuntu] ユーザーを追加する方法について

ユーザーの作成は、adduserコマンドを使用します。
adduserコマンドにて、ユーザーを作成するとホームディレクトリも合わせて作成されます。

$ adduser USER_NAME

2011/03/15

[Ubuntu] ユーザー情報に関するファイルについて

Ubuntu10.04では、以下のファイルでユーザー情報を管理しているようです。

内容ファイル名
ユーザー/etc/passwd
パスワード/etc/shadow
グループ/etc/group

2011/03/14

[Java] Java Web Startを試してみる

今更ながら、Java Web Startを試してみます。
Java Web Startとは、Web ブラウザに関連付けて使用するヘルパーアプリケーションです。
詳細はこちらを参照ください。

「Java Web Startを試す」のゴールは、
「Webサイト経由でアプリケーションをダウンロードし、Swingの画面が表示される」
とします。
以下のような画面が表示されれば、OKとします。


なお、実験する環境は以下の通りです。
項目 内容
OS Mac OS X 10.06
Java Version 1.6.0_24
WEBサーバ Tomcat6.0
※WEBサーバはTomcatを使います。


■WEBサイトを設定する
Java Web Start は、HTTP プロトコルや Web サーバーといった既存のインターネットテクノロジを利用します。
アプリケーションをクライアントマシンに配備できるようにするには、アプリケーションを構成するすべてのファイルに Web サーバーからアクセスできる必要があります。

1. Java Web Start の MIME タイプを使用できるように Web サーバーを設定する
WEBサーバを設定して、拡張子「.jnlp」を持つすべてのファイルが「application/x-java-jnlp-file MIME タイプ」として設定されるようにします。

MIMEタイプの設定はWEBサーバごとに異なるようです。
実験する環境は「Tomcat」ですので、web.xmlに以下を追加します。

    jnlp
    application/x-java-jnlp-file
  

2. アプリケーションに対する JNLP ファイルを作成する
hello.jnlpというファイルを作成します。
以下のように記述しました。


  
    Hoge Test
    Shiganon
    
  

  
    
    
  

  



3. Web サーバー上でアプリケーションをアクセスできるようにする
SwingアプリのJarファイルをJNLPファイル内に記載されたURLのパスにコピーします。
JNLP ファイル内に記載された URL を使って、アプリケーションの JAR ファイルと JNLP ファイルにアクセスできることを確認してください。

4. アプリケーション起動用 Web ページを作成する
アプリケーションへのリンク元のHTMLを作成します。

■実行する


何かつるっとできちゃいました。

次のエントリー以降は、少し掘り下げた内容を実験していければと思います。

[Ubuntu] シャットダウンの方法について

以下のコマンドを実行すると、シャットダウンされます。
sudo shutdown -h now

以上です。

[Ubuntu] IPアドレスを固定する方法について

1.ネットワーク設定ファイルの編集
/etc/network/interfacesというファイルを以下のように書き換えます。

auto eth0
iface eth0 inet static
    address xxx.xxx.xxx.xxx    # IPアドレス
    netmask 255.255.255.0      # サブネットマスク
    network xxx.xxx.xxx.0      
    gateway xxx.xxx.xxx.yyy    # ゲートウェイ

書き換える際は、管理者権限にて行う必要があります。
sudo vi /etc/network/interfaces

2.ネットワーク設定の更新
以下のコマンドを実行し、ネットワーク設定を更新します。
sudo /etc/init.d/networking restart

以上です。

2011/03/10

[JavaFX] eclipseでJavaFXを開発できるよう設定する方法

JavaFXプラグインが提供されているので、eclipseにインストールします。


なお、設定した環境は以下になります。
環境
・OS:Mac OS X Snow Leopard 10.6
・eclipse:3.6
・JDK:6.0




[ヘルプ]->[新規ソフトウエアのインストール]を選択します。
表示されたダイアログの「追加」ボタンを押下し、以下のように入力します。

あとは、次へボタンを押下し、インストールを完了させます。
その後、eclipseを再起動し完了です。

追記:
サンプルアプリを作ってみましたが、動かない。。。
ちらっと表示されすぐ、ハングアップしました。
おとなしく、NetBeansでやるのがいいのかもしれません。

実行構成で引数に「${resource_name}」を追加すれば起動するようになりました。

[Ubuntu] インストールされているアプリケーション一覧を表示する方法

アプリケーションの一覧を表示させるには、コンソールにて以下のコマンドを実行します。

 # dpkg -l

これを実行すると、以下のように一覧表示されます。

各項目は左から、
 ・パッケージ名
 ・バージョン
 ・説明
となります。

2011/03/09

[Ubuntu] VirtualBox上で動いているUbuntuにsambaへアクセスする方法について

VirtualBox上で動作しているUbuntuのsambaへ、
アクセスする方法について試してみました。
※Ubuntuにsambaがインストールされていることを前提とします。

私の環境は以下の通りです。
・Ubuntu:10.04

・sambaの設定

1.共有ディレクトリを作成する

sambaで共有するディレクトリを作成します。
ここでは、「/var」直下にsambaというディレクトリを作成します。
> sudo mkdir -m 777 samba

2.sambaの設定ファイルを修正する

先ほど作ったディレクトリを共有できるように、設定ファイルを修正します。
設定ファイルは、以下の場所にあります。
/etc/samba/smb.conf

編集は以下のコマンドにて実行できます。
> sudo vi smb.conf

smb.confを以下のように修正します。
--
[global]
    map to guest = Bad User
〜〜〜 中略 〜〜〜
[share]
path = /var/samba
writeable = yes
force create mode = 0666
force directory mode = 0777
guest ok = yes
guest only = yes

--


3.sambaを再起動し設定を有効にする


再起動は以下のコマンドにて実施します。


> sudo service smbd restart


・接続テスト


macから接続してみます。
finderのサーバへ接続で接続してみます。


接続できました。



[Ubuntu] IPアドレスの確認方法について

UbuntuでIPアドレスを確認するには、以下のコマンドを使用します。
$ ifconfig

ターミナルで上記のコマンドを入力すると、以下のような結果が得られます。
そちらの「inetアドレス」というのがIPアドレスとなります。

[Windows] ネットワーク接続のキャッシュを削除する方法

ネットワーク接続を一度した場合、接続情報のキャッシュが残ります。
通常、ネットワークドライブの切断から削除できますが、
guestユーザでアクセスした場合は、この方法では削除できません。

キャッシュは、以下のように削除できます。

コマンドプロンプトを立ち上げて、以下のコマンドを入力するだけです。

> net use ネットワーク接続名 /delete

ネットワーク接続名を調べるには
> net use
コマンドを実行すれば良いです。

2011/03/08

[MySQL] 文字列を数値に変換する方法

Oracleには、TO_NUMBERという変換する関数がありますが、
MySQLには文字列を数値に変換する関数がありません。

ですので、文字列フィールドに1〜100までデータが登録されている場合に、
以下のクエリを実行すると。。。

■クエリ
select max(col1) from test_tbl;
■結果
99

上記のクエリだと、test_tblの中から一番大きい文字列を検索します。
一番大きい文字列は「100」ではなく、「99」なのでこのような結果となります。

数値としての最大値を取得するには、文字列フィールドを数値に変換する必要があります。
やり方は2通りあります。(もっとありそうですけどね。)

1.暗黙的な型変換を利用する方法

文字列フィールドに対して算術演算をすると、暗黙的に数値へ変換されます。
これを利用して、数値に変換し最大値を算出します。

先ほどのクエリに対して、この方法を実施すると。。。
■クエリ
select max(col1+0) from test_tbl;
■結果
100

上記のように暗黙的に数値変換されてから最大値が算出されるので、
数値としての最大値100が結果として取得できます。

2.CAST関数を利用する方法

上記1の方法でもできますが、プログラムのあちこちに上記のような暗黙変換するようなロジックがあるのは、個人的に気持ち悪いです。
あのようなコードがあると、プログラムの見通しも悪くなりますしね。

そこで、CAST関数を利用して明示的に変換する方法について説明します。

CAST関数を使用するとこのようなクエリになります。
■クエリ
select max(cast(col1 as SIGNED)) from test_tbl;
■結果
100

SIGNEDを指定して、col1を整数に変換しています。
SIGNEDの他にも色々オプションがあるようです。

2011/03/07

[Ubuntu] LAMP環境を導入するには

Ubuntuにはtaskselというよく使うインストールをまとめて実行するコマンドです。

コマンドにて、以下のコマンドを実施します。

$ sudo tasksel

後は自動的にダウンロードが始まり、インストールされます。



2011/03/06

[Ubuntu] シャットダウンするには

以下のコマンドを実行すれば良いです。

$ sudo shutdown -h 0

[Ubuntu] Server版インストール後にGUIを載っけるには

Ubuntu Serverをインストールしただけだと、CUIで何かと不便でした。
ですので、Serverインストール後、GUIを使えるように設定してみます。

なお、Ubuntuは以下のバージョンを使用しています。
・Ubuntu10.04 LTS

1.apt-getでdesktopをインストール

ubuntuには「apt-get」という便利なコマンドがあるので、そちらを使用してdesktopをインストールします。
※apt-getについては、こちらに詳しく書かれていますので、参照ください。
http://www.jitaku-server.net/apt_get_basic.html

コマンドは以下のようになります。

$ sudo apt-get install ubuntu-desktop


このコマンドを実行すると、以下のようにインストールが始まります。


完了しましたら、以下のコマンドにてDesktopが起動します。


 $ startx




こんな感じで起動します。

2011/03/05

[Javadoc] メソッドに対するコメントの基本

メソッドに対するコメントは、以下4つの内容から構成されます。

  • 主説明
  • 引数の説明
  • 返却値の説明
  • 例外の説明
・主説明
メソッドの仕様を文章として記述するものです。

・引数の説明
メソッドが受け取る引数それぞれについて、メソッドを呼び出す側が意識すべき制約を記述するものです。
使用するブロックタグ:@param

・返却値の説明
メソッドが返す値について説明するものです。
使用するブロックタグ:@return

・例外の説明
メソッドが発生させる可能性がある例外について説明するものです。
検査例外については記述が必須ですが、非検査例外(実行時例外:RuntimeExceptionなど)は省略可能です。
使用するブロックタグ:@throws

以上から、メソッドコメントはこのような形になります。

/**
 * (主説明)
 *
 * @param 引数名 説明
 * @return 戻り値の説明
 * @throws 例外名 例外の説明
 */

[mac] macにubuntuをインストールする

近々会社で、ubuntuのインストールをすることになりそうなので、
自宅で勉強がてら、インストールをしてみることにします。

不要なPCがあればそいつで実施しようと思いますが、そんな環境もないため、
持っている唯一のPCであるmacbookにインストールしてみます。

インストールするubuntuのバージョンは10.04 LTSです。

以下手順となります。

1.ubuntu(Ubuntu Server Edition)の入手〜ディスクの作成

サーバー版を入手するため、Get Ubuntu Server Edition Downloadのページを表示し、
イメージディスクを作成して下さい。


Start downloadをクリックすると自動的にダウンロードが始まります。
約684MBもあるので、完了まで気長に待ちましょう。

保存が完了しましたら、ファイルをCDにコピーします。
※CDではなく、USBメモリにイメージをコピーしてもOKなようです。

2.Ubuntu用のHDD容量を確保

Ubuntu用のHDD容量をMacに標準搭載されている「Bootcamp」で確保します。
※MacだとHDDにあちこちにファイルを作成するため、予めデフラグツールを使用して、
整理してから実行して下さい。

以下のように、適当に32GB確保します。

3.Ubuntuのインストール

一旦Macを落とし、1で作成したディスクを入れ起動します。
Macか、CDで起動するか聞いてくるので、CDで起動する。
あとは、Ubuntuをインストールし、完了です。

2011/02/24

コールドスタンバイ構成の運用

■運用方法
現用機が故障したら、予備機をしようするように、設定変更する。

例えば以下図のようにルータが故障した場合は、
ルータの予備機に線をつなぎ変えることで、システムを復旧させる。


■注意点
現用機と予備機の設定内容は常に同じにしておくこと。

■用語
・コールドスタンバイ
⇒予備機を普段使わずにおき、現用機が故障したら予備機を接続する運用体制のこと。
※詳細はwiki参照。

2011/02/23

システム冗長化の基本

システムの冗長化とは
「障害が発生しても予備の機材でシステムの機能を継続できるようにすること」
を指すようです。

システム冗長化するには、以下のステップを実践することが基本なようです。
  1. 障害を想定する。
  2. 障害に備えて予備の機材を準備する。
  3. 障害が発生した際に予備の機材に切り替えられる運用体制を整備する。
1.障害を想定する。
どのような障害が発生するのか、想定することから始まります。

例えば、以下のような構成の場合であれば
  • ルータが故障してシステムが停止する。
  • サーバが故障してシステムが停止する。
というのが考えられます。

2.障害に備えて予備の機材を準備する。
上記の構成であれば、以下の機材の予備を準備することになります。
  • ルータ
  • サーバ
予備機を追加した構成は以下のようになります。

    3.障害が発生した際に予備の機材に切り替えられる運用体制を整備する。
    動作中の機材と予備の機材をどのように運用するか、
    それら体制を整備します。
    • どの部分にどのような障害が発生するか
    • 障害が発生した場合、機材をどのように運用するのか
    など、様々な対応を検討する必要があります。