2012年7月24日火曜日

[phpunit] phpunitのオフラインインストール


おつかれさまです。

概要
------------------------------------------------------------

  • bitnami wamp stack 5.3.10 をベースとした開発環境にphpunitをインストールする。
  • 上記stackに一応pearは入っているがいろいろ足りない。
  • 必要なファイルをダウンロードしてから、オフラインでのインストールを行う。


pearをupgradeする。その前に前提パッケージを揃える。
------------------------------------------------------------
pearのupgradeが必要とわかりました。
その前に前提パッケージをupgade/installします。

  • Archive_Tar
  • Structures_Graph
  • XML_Util


Archive_Tar
-------------------
http://pear.php.net/package/Archive_Tar/
からのダウンロードリンクはこちら。
http://download.pear.php.net/package/Archive_Tar-1.3.10.tgz
アップグレードする。
pear upgrade --offline Archive_Tar-1.3.10.tgz

Structures_Graph
-------------------
http://pear.php.net/package/Structures_Graph/
からのダウンロードリンクはこちら。
http://download.pear.php.net/package/Structures_Graph-1.0.4.tgz
アップグレードする。
pear upgrade --offline Structures_Graph-1.0.4.tgz

XML_Util
-------------------
http://pear.php.net/package/XML_Util/
からのダウンロードリンクはこちら。
http://download.pear.php.net/package/XML_Util-1.2.1.tgz
アップグレードする。
pear upgrade --offline XML_Util-1.2.1.tgz


PAER1.9.4にアップグレードする。
------------------------------------------------------------
http://pear.php.net/package/PEAR/download
ここからPEAR 1.9.4のtgzを取得する。これがダウンロードのリンク。
http://download.pear.php.net/package/PEAR-1.9.4.tgz

コマンドと実行結果
---
J:\software\phpunit>pear upgrade --offline PEAR-1.9.4.tgz
upgrade ok: channel://pear.php.net/PEAR-1.9.4
PEAR: Optional feature webinstaller available (PEAR's web-based installer)
PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)
PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)


PEAR: To install optional features use "pear install pear/PEAR#featurename"
---

PHPUnitとその前提パッケージをダウンロードする。
------------------------------------------------------------
チャネル
http://pear.phpunit.de/channel.xml をファイル保存する。(channel_phpunit.xml)

PHP_Timer
http://pear.phpunit.de/get/PHP_Timer-1.0.2.tgz

Text_Template
http://pear.phpunit.de/get/Text_Template-1.1.1.tgz

File_Iterator
http://pear.phpunit.de/get/File_Iterator-1.3.1.tgz

PHP_TokenStream
http://pear.phpunit.de/get/PHP_TokenStream-1.1.3.tgz

PHPUnit_MockObject
http://pear.phpunit.de/get/PHPUnit_MockObject-1.1.1.tgz

PHP_CodeCoverage
http://pear.phpunit.de/get/PHP_CodeCoverage-1.1.3.tgz

PHPUnit
http://pear.phpunit.de/get/PHPUnit-3.6.11.tgz

チャネル
http://pear.symfony-project.com/channel.xml をファイル保存する。(channel_symfony.xml)

YAML - The Symfony YAML Component.
http://pear.symfony-project.com/get/YAML-1.0.6.tgz


PHPUnitとその前提パッケージをインストールする。
------------------------------------------------------
以下がコマンド。依存関係があるので3段階に分けている。
---
path %path%;C:\Program Files\BitNami WAMPStack\php
pear channel-add channel_phpunit.xml
pear channel-add channel_symfony.xml

【第一陣】
pear install --offline PHP_Timer-1.0.2.tgz
pear install --offline Text_Template-1.1.1.tgz
pear install --offline File_Iterator-1.3.1.tgz
pear install --offline PHP_TokenStream-1.1.3.tgz
pear install --offline YAML-1.0.6.tgz

【第二陣】
pear install --offline PHPUnit_MockObject-1.1.1.tgz
pear install --offline PHP_CodeCoverage-1.1.3.tgz

【第三陣】
pear install --offline PHPUnit-3.6.11.tgz
---

インストール作業後の状態
------------------------------------------------------------
J:\software\phpunit>pear list -a
INSTALLED PACKAGES, CHANNEL __URI:
==================================
(no packages installed)


INSTALLED PACKAGES, CHANNEL DOC.PHP.NET:
========================================
(no packages installed)


INSTALLED PACKAGES, CHANNEL PEAR.AMAZONWEBSERVICES.COM:
=======================================================
PACKAGE VERSION STATE
sdk     1.5.1   stable


INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET:
=========================================
PACKAGE          VERSION STATE
Archive_Tar      1.3.10  stable
Console_Getopt   1.2.3   stable
PEAR             1.9.4   stable
Structures_Graph 1.0.4   stable
XML_Util         1.2.1   stable


INSTALLED PACKAGES, CHANNEL PEAR.PHPUNIT.DE:
============================================
PACKAGE            VERSION STATE
File_Iterator      1.3.1   stable
PHPUnit            3.6.11  stable
PHPUnit_MockObject 1.1.1   stable
PHP_CodeCoverage   1.1.3   stable
PHP_Timer          1.0.2   stable
PHP_TokenStream    1.1.3   stable
Text_Template      1.1.1   stable


INSTALLED PACKAGES, CHANNEL PEAR.SYMFONY-PROJECT.COM:
=====================================================
PACKAGE VERSION STATE
YAML    1.0.6   stable


INSTALLED PACKAGES, CHANNEL PECL.PHP.NET:
=========================================
(no packages installed)
---

インストール作業はこれで終わりです。
シンプルな動作確認は通りましたが不足があったら更新します。

後日談
--------------------------------------------

  • C:\php\pear にいろいろインストールされてしまう。事前に以下をすべき。
    > pear config-set doc_dir "C:\Program Files\BitNami WAMPStack\php\PEAR\docs"
    > pear config-set data_dir "C:\Program Files\BitNami WAMPStack\php\PEAR\data"
    > pear config-set test_dir "C:\Program Files\BitNami WAMPStack\php\PEAR\tests"
  • EULAは上記に格納されるのでとても重要。
END

2011年11月20日日曜日

2011年3月20日日曜日

[java][swing][netbeans] GUIフレームワークを探していてハッと

こんにちは

Swing API を使ってNetBeans IDE みたいなアプリケーションを作りたいけど、
  • いちからSwingレベルでゴリゴリするのも飽きたし、手間だし
  • 将来のエクステンションの差込口のデザインも面倒だし、
  • GUIのクラス設計って悩ましいわりに良さが出にくいし、
  • 先人の教えと成果物に全面的に頼りたいもんだわ。
そんな僕はNetBeans プラットフォームで作ればいいんじゃ。
以前、Eclipse RCP で一本作ったことがあるけど、あれと
ノリ一緒なんじゃ。
そこでNetBeans プラットフォームで作られたプロダクトを眺めてみます。

NetBeans Platform Showcase(英語)
http://netbeans.org/features/platform/showcase.html

そうそう、こういうのを作りたいわけです。

NetBeans プラットフォーム(日本語)
http://netbeans.org/features/platform/index_ja.html

Eclipse RCP にしない理由
  • Swing(つうかPure Java )にこだわってみた
  • GUIビルダのことがスキダカラー(ナレテルカラー)
  • Java Web Start としてまとめあげるのが面倒くさそうな予感(あるいは無理か)
TODO
  • Java Web Start で起動できるかな。
  • 開発環境の準備に色々ダウンロードできない職場なんだけど、大丈夫だろうか。
  • アプリケーションのサイズが大きくなりすぎないだろうか。
  • 他のプログラマにとって天国だろうか地獄だろうか。学習コストの評価。
  • NetBeans のバージョンにものすごく左右されるんだろうか。
    6.8で始めちゃうけど。

ではまた。

2011年3月6日日曜日

先人の教え - UNIX哲学

UNIX哲学 - Wikipedia
http://ja.wikipedia.org/wiki/UNIX%E5%93%B2%E5%AD%A6

UNIX哲学とは、ソフトウェア開発に関する文化的な規範と哲学的アプローチのまとまりであり、
UNIX OSの先駆的な開発者たちの経験に基づいている。

週末に目を通して、デトックスするようにしています。たまに忘れます。
UNIXに限らず、あらゆる場面で有効な(というか必須な)デザインパターンだと思います。
自分の経験に照らしても、一個一個が「だよね」連発です。
どうして時代も地域も対象領域も違うのに、こんなに共感できるの、ってぐらい。

日曜日にこれを読むと、自分がそう間違っていない気持ちになれます。
そして木曜日にはほぼ見失い、この逆の発想の信者になっています。
それが現実だからこそ、こういったものが尊ばれるわけですが。

2011年2月27日日曜日

[ant][dtd][macrodef] antstructureタスクを例としたantをforkするマクロ

Antのantstructureタスクは、ビルドファイルで使える要素と属性を定義する
DTDを生成してくれます。
ですが、ヒトクセあるこのタスクは、実行時に外部のjarが必要で、Ant実行時に
クラスパスに追加してやる必要があるのです。そこで、こんな試み。
  1. 必要なjarをダウンロードする。
  2. 配布元にはMavenのリポジトリを使う。
  3. ダウンロードしたjarをクラスパスに追加して、別のvmでAntを走らせる。
  4. そこでantstructureタスクを使う。
javaタスクのforkをantタスクでやる感じです。antでforkする感じ。antfork?みたいな?


---
<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="default" 
  xmlns:tomorrowscode="http://tomorrowscode.blogspot.com/">


  <target name="default" depends="init">
    <!--
    AntのDTDを生成します。
    antstructureタスクに必要なライブラリをMavenリポジトリからダウンロードします。
    ダウンロードしたライブラリを別のVMのクラスパスを加えて処理します。
    -->
    <tomorrowscode:antfork target="invoke-antstructure"
      classpath="${lib.dir}/commons-net-2.2-ftp.jar"/>
  </target>


  <macrodef name="antfork" uri="http://tomorrowscode.blogspot.com/">
    <!--
    このマクロは、ビルドファイルを別のVM上で実行するタスクを定義します。


    JavaからAntを起動する方法は、ここが参考になります。
    http://ant.apache.org/manual/running.html#viajava
    Antの組み込みプロパティの説明は、ここが参考になります。
    http://ant.apache.org/manual/properties.html
    -->
    <attribute name="basedir" default="${basedir}" description="Optional"/>
    <attribute name="target" default="NOT SET" description="Required"/>
    <attribute name="antfile" default="${ant.file}" description="Optional"/>
    <attribute name="classpath" description="Optional"/>
    <sequential>
      <java  classname="org.apache.tools.ant.launch.Launcher"
        fork="true" failonerror="true"
        classpath="${ant.core.lib}/../ant-launcher.jar;@{classpath}">
        <arg value="-f"/>
        <arg file="@{antfile}"/>
        <arg value="-Dbasedir=@{basedir}"/>
        <arg value="@{target}"/>
      </java>
    </sequential>
  </macrodef>


  <target name="init">
    <!--
    Mavenリポジトリから必要なjarファイルをダウンロードします。
    jarの場所は、http://mvnrepository.com/ から検索できます。
    -->
    <property name="lib.dir" location="lib"/>
    <mkdir dir="${lib.dir}"/>
    <get
      src="http://repo1.maven.org/maven2/commons-net/commons-net/2.2/commons-net-2.2-ftp.jar"
      dest="${lib.dir}" usetimestamp="true"/>
  </target>


  <target name="invoke-antstructure">
    <!--
    AntのDTDを生成します。クラスパスにcommons-netが必要です。
    -->
    <antstructure output="ant.dtd"/>
  </target>
</project>
---


リポジトリにもコミります。リポジトリからブラウズした方が読みやすいです。
ではでは。

---
追加 2011-3-25
依存するライブラリcommons-net を取得するのに、上ではgetタスクを使いましたけど、
Maven Ant Tasks を使えばもっとステキにできそうです。
http://maven.apache.org/ant-tasks/index.html

2011年2月6日日曜日

[postgresql] PostgreSQL 8.4.7 Windows Installer のダウンロード

PostgreSQL 8.4.7 Windows Installer のパッケージを
レジストレーションをすっとばして最速で落とすリンクはこちら。

http://get.enterprisedb.com/postgresql/postgresql-8.4.7-1-windows.exe

いきなりダウンロードが始まりますから、そのつもりで。
以下に説明するまっとうな手順できちんとレジストレーションすれば
期待通りのものが手に入ります。

正しい(そして長い長い)操作手順
----------------------------------------
本家ポスグレでここまではたどりつくと思います。

PostgreSQL 》Downloads 》Windows packages
http://www.postgresql.org/download/windows

ここで Download the one click installer をクリック。
すると後述する面倒なサイトに飛びます。

EnterpriseDB 》Download PostgreSQL
http://www.enterprisedb.com/products-services-training/pgdownload#windows

Installer version Version 8.4.7 の WINDOWS をクリック。
ちなみにこのページはサイトのトップからはたどれないらしい。
ちょっとした隠しページ。細かく調べていませんが、見つからなかった。

User Login/Registration に飛びます。
ここであなたの貴重な個人情報を入力して送信してください。
パスワードが発行されてメールが届きます。
すぐにログインしてパスワードを変更した方がいいですね。
マイページっぽいページに↓を見ることができたらラッキー。

You have successfully logged in, click here to access your requested page.

"click here"をクリックしてください。ページが遷移して
ダウンロードが始まります。"click here"が出てこない場合は、
ログインした状態でここからやり直してください。

EnterpriseDB 》Download PostgreSQL
http://www.enterprisedb.com/products-services-training/pgdownload#windows

想像ですけど、以前は本家ポスグレから自由にダウンロードさせていたが、
なんかレジストレーションさせたくなっちゃったと。
でも、本家にそんな仕組みがないので、EnterpriseDBにそこを頼んだ。
一方そこはそこで自分らの有償製品(及び評価版)をダウンロードする
画面遷移しかなかった。なので少々強引に流れを作った。のかな。

私の経験した謎の現象
----------------------------------------
以前ダウンロードした(あるいはしかけた)ファイルのダウンロードが、
全然関係のないタイミングで始まってしまう。
8.4.7が欲しいのに、しかもレジストレーションしていないのに8.3.14が
落ちてきたり、知らないもの(チュートリアル用のパッケージとか)が
落ちてきたりする。
こんなときは上のショートカットURLを使うか、堂々レジストレーション
してください。もちろん後者ですよね。はい。

ではでは。

2011年1月15日土曜日

[netbeans][maven] 恐る恐るのmaven体験

mavenを使えない現場で、Javaプロジェクトのディレクトリ構造を
mavenライクにしてやって来ましたが、リアルmavenを使って
ハッとしたことのメモ。

発端
--------------------------------------------------
Antの<script>タスクを調べていました。<script>タスクは、
AntでAnt以外のスクリプトを書けるようにするやつ。
JavaScript以外の言語を特に何も調達せずに使えるかなと。
beanshellってのが使えるとAntの中にJavaを書けていいなと。

BeanShell
http://www.beanshell.org/

<script>タスクはant-apache-bsf.jarが実体なので、それをAntのlibで探していたら、
ant-apache-bsf.jar の隣に ant-apache-bsf.pom があるじゃないですか。

Antがmavenで作られていた!?

類似
・タワーレコードの店員がAmazonで実は買っている。
・エコカーの開発者がガソリン車で通勤している。

mavenってWEB-INFとか出て来るWebアプリケーションの開発の
イメージ(勝手な)がありました。そうではないらしい。使ってみますかさっそく。

調達と設定
--------------------------------------------------
NetBeans 6.9.1
Apache Maven 3.0.2

NetBeans ≫ ツール ≫ オプション ≫ Maven
外部 Maven ホーム:J:\Program Files\apache-maven-3.0.2
ローカルリポジトリ:J:\java\repository

※Cドライブに空きがないので。

プロジェクトを作る
--------------------------------------------------
NetBeans ≫ ファイル ≫ 新規プロジェクト ≫ Maven ≫ Mavenプロジェクト

Maven原型:Mavenクイックスタート原型(1.0)

あとは適当に。。

デフォルトでいきなり困ったこと
--------------------------------------------------
・コンパイルのレベルが1.3だった。
プロジェクトプロパティ ≫ ソース
ソース/バイナリ形式:1.6

・JUnitが3系でできあがっちゃった。
pomを書き換え。
---
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.8.2</version>
    <scope>test</scope>
  </dependency>
---

いまさら知ったこと(ぽかーん)
--------------------------------------------------
・必要なライブラリが勝手にダウンロードされるのは知っていたけど、
mavenのプラグインも同じく。そこは意識できていないから
ネットからクローズした自社リポジトリを作るのは難易度高そう。

・今までプロパティファイルをデフォルトパッケージに置いていたけど違った。
×:src/main/java/log4j.properties
○:src/main/resources/log4j.properties
確かにプロパティファイルはJavaではないです。

・targetディレクトリがsvn無視だった。コミット対象外。

・targetディレクトリにclassesとtest-classesが出来ていた。
binじゃないのね。

・targetディレクトリにビルドしたjarが置かれていた。
distじゃないのね。

・ローカルリポジトリにjarやらpomやら一式がコピーされていた。
そっか。他のプロジェクトが参照するjarになり得るものね。
targetがsvn無視なのは、こういうことか。

・ビルドしたらテストケースが動いた。テストスィート書いてないのに。
これうれしい。

・ビルドするjarの名前はpomに記述した情報から自動的に付けられる。
プロジェクト名.jar ではない。これうれしい。今はリネームしている。

・pomにバージョンを書ける。これうれしい。
今はインストーラを作るAntに書いている。

・pomもリリース対象。これうれしい。
このjar何モノ?ってね。情報が欲しい。依存ライブラリとかバージョンとか。



※ファイル名・ディレクトリ名がグレーなヤツがsvn無視です。
※nb-configuration.xmlを無視にしたのは私。IDE依存な情報なので除外に。

1時間ぐらいだったけどすんごい勉強になりました。
ではまた。