ReDesign of software development life cycle with Redmine
There is a need to take measures against SI and support business expansion of my department. *1 *2
I Planned to redesign of software development life cycle with Redmine. *3
Context
- Software Architecture (3-Layered Model)
- Bender package
- Common programs for group companies
- Each Customer's custom programs
- Development Environment *4
- One software repository
- One BTS(Bug Tracking System)
- Management, Communication Tool
- Excel (WBS, QA List and so on)
- Mail (QA, request to somebody and so on)
- Each member's favorite ToDo system (Post-it, remember the milk *5 and so on)
Problems
- Many ToDo Lists!
- Non-identical Business workflow!
Concepts of New Software development life cycle
- No ticket, No work *6
- INPUT: ticket
- PROCESS: work
- OUTPUT: source code, document, and so on.
- Mieruka *7
- PAST: what was done? who did it? why? how?
- FUTURE: what to do?
- NOW: who is assigned? (visualize business workflow) who is too busy? who can help?
- Simple and Less is More *8
- Project Managers get progress information quickly & easily.
- Project Managers get more time, energy, ideas for driving projects.
Implementation with Redmine
- Ticket model
- Ticket workflow
- Project Tree Model
footnote
*1: 有難いことにお仕事(SIとその後の保守サービス)が増えています
*2: 限られたメンバーで切り盛りしていくためには、現行の業務プロセスとそれを支えるツールの見直しが急務です
*3: webベースのプロジェクト管理ソフトウェア http://redmine.jp/
*4: Trac + Subversion
*5: https://www.rememberthemilk.com/
*6: チケット駆動開発(ticket-driven development)の合言葉No ticket, No Commit. から。管理する意味がある作業指示は全てチケット化したいです。
*7: 見える化。 http://en.wiktionary.org/wiki/mieruka
*8: 情報収集は機械に任せ、PMさんがプロジェクト推進に注力できるようにしたいです
Tips and Tricks for Ant on Eclipse. Make JAR file for each subsystem. 2nd Version
前回のバージョンから、ちょくらちょいと修正しました。変更点は
build.properties
説明略。
# do not use eclipse helper GUI app.name=${ant.project.name} java_encoding=MS932 keeptimestamp=false verbose=false src.dir=./src lib.dir=./lib lib4batch.dir=./lib4batch external.dir=./external defaultroot.dir=./defaultroot etc.dir=./build bak.files=**/*~ build.rev=**** makejar.select=**/hoge-addons/* build.dir=./build.ant build.src.dir=${build.dir}/src build.classes.dir=${build.dir}/classes build.jar.dir=${build.dir}/jars target.vm.version=1.6 source.vm.version=1.6 javac.nowarn=off build.debug=on build.debuglevel=lines,vars,source build.memoryMaximumSize=512m imp.vendor.name=HOGE Corporation # Tomcat catalina.home=C:/proactive_devtool/tomcat6.0
build.xml
-
- Java VMのVersion指定してコンパイル
- javac のところで、source、targetを指定してください
- ループ処理
- contrib-XXX.jarをネットで探してきて、ANTのランタイム > クラスパスに追加して下さい
- そうすると、foreachが使えます!
- scriptdefでjavascriptを定義します。サブシステム毎のフォルダ階層から、jar名を切り出します。
- manifestフェイルをちょっと賢く
- tstamp使って、ビルド実行日時をmanifestに追記します
- 日時以外にも色々追記しようと色気出して落とし穴にはまりました。Oracle Application Serverのコンテナ上だと起動できるのに、Tomcatの開発クラスローダを使ってるとClass Not Foundとか・・・
- ↓のタイトル以外を使うとTomcatさんがすねます
- Java VMのVersion指定してコンパイル
Implementation-Title パッケージのタイトル
Implementation-Version バージョン番号
Implementation-Vendor ベンダー企業または組織
Specification-Title 仕様のタイトル
Specification-Version バージョン番号
Specification-Vendor ベンダー企業または組織
以下、できあがりバージョン。これてにANTの自習は終了!
<?xml version="1.0" encoding="Windows-31J"?> <project name="paradise" basedir="." default="all"> <property file="build.properties"/> <tstamp><format property="build.timestamp" pattern="yyyy-MM-dd 'T'HH:mm:ss"/></tstamp> <scriptdef name="substring" language="javascript"> <attribute name="text" /> <attribute name="start" /> <attribute name="end" /> <attribute name="property" /> <![CDATA[ var text = attributes.get("text"); var start = attributes.get("start"); var end = attributes.get("end") || text.length(); project.setProperty(attributes.get("property"), text.substring(start, end)); ]]> </scriptdef> <!-- Include ant-contrib-XXX.jar in Eclipse ANT Runtime classpath --> <taskdef name="foreach" classname="net.sf.antcontrib.logic.ForEach" /> <!-- Execute--> <target name="all" depends="make-jars"/> <!-- Common Util: Set CLASSPATH --> <target name="set-classpath"> <path id="compile.class.path"> <!-- PAE2 JAR (1) --> <path><fileset dir="${lib.dir}"><include name="*.jar"/></fileset></path> <!-- PAE2 JAR (2) --> <path><fileset dir="${lib4batch.dir}"><include name="*.jar"/></fileset></path> <!-- Container JAR --> <path><fileset dir="${catalina.home}/lib"><include name="*.jar"/></fileset></path> </path> </target> <!-- 1. Start Message --> <target name="begin-message" depends="set-classpath"> <echo>BuildName: ${ant.project.name}</echo> <echo>BuildHome: ${basedir}</echo> <echo>BuildJVM: ${ant.java.version}</echo> <echo>BuildFile: ${ant.file}</echo> </target> <!-- 2. Clean --> <target name="clean" depends="begin-message"> <delete dir="${build.dir}"/> <delete><fileset dir="." includes="${bak.files}" defaultexcludes="no"/></delete> <sleep seconds="1"/> </target> <!-- 3. Make directories, copye *.java --> <target name="setup" depends="clean"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.src.dir}"/> <mkdir dir="${build.classes.dir}"/> <mkdir dir="${build.jar.dir}"/> <copy todir="${build.src.dir}" includeemptydirs="true" preservelastmodified="${keeptimestamp}" verbose="${verbose}"> <fileset dir="${external.dir}" includes="**/*.java"/> </copy> </target> <!-- 4. ALL Compile --> <target name="compile" depends="setup"> <javac destdir="${build.classes.dir}" source="${source.vm.version}" target="${target.vm.version}" fork="false" includeantruntime="false"> <src path="${build.src.dir}"/> <classpath> <path refid="compile.class.path"/> </classpath> </javac> </target> <!-- 5. foreach make jar file --> <target name="make-jars" depends="compile"> <foreach param="dir" target="make-jar"> <path> <!-- Only child directories --> <dirset dir="${build.src.dir}"> <include name="${makejar.select}"/> </dirset> </path> </foreach> </target> <!-- Common Util: javac & jar --> <target name="make-jar" depends="set-classpath"> <echo>Directory: ${dir}</echo> <substring text="${dir}" start="42" end="49" property="jarfilename" /> <echo>jarfile name: ${jarfilename}.jar</echo> <javac destdir="${dir}" source="${source.vm.version}" target="${target.vm.version}" nowarn="${javac.nowarn}" debug="${build.debug}" debuglevel="${build.debuglevel}" fork="false" includeantruntime="false"> <src path="${dir}"/> <classpath> <path refid="compile.class.path"/> <pathelement path="${build.classes.dir}"/> </classpath> </javac> <jar jarfile="${build.jar.dir}/${jarfilename}.jar"> <fileset dir="${dir}"> <exclude name="**/*.properties" /> <exclude name="**/*.xml" /> </fileset> <manifest> <attribute name="Implementation-Title" value="${jarfilename}"/> <attribute name="Implementation-Vendor" value="${imp.vendor.name}"/> <attribute name="Implementation-Version" value="${build.timestamp} [${build.rev}]"/> </manifest> </jar> </target> </project>
Tips and Tricks for Ant on Eclipse. Make JAR file for each subsystem (PAE2アドオン開発・サブシステム毎にjar作成)
ProActiveE2はサブシステム(財務会計、債権、債務…等)毎にjarファイルが分割されています
それにならって、アドオン開発でもこの単位でjarファイルを用意しています
が、開発中(特にテストフェーズ!)は頻繁にjar化する必要があるので、ちょっと面倒です
この作業を ANTを使って一括実行するスクリプトについて勉強をしたときのメモです
build.properties
これいらないんじゃないの?ってものありますが、まぁそこはスルーしてください
# do not use eclipse helper GUI custom = true src.encoding=Windows-31J app.name=${ant.project.name} src.dir=./src lib.dir=./lib lib4batch.dir=./lib4batch external.dir=./external defaultroot.dir=./defaultroot etc.dir=./build bld.dir=./build.ant bld.src.dir=${bld.dir}/src bld.classes.dir=${bld.dir}/classes bld.jar.dir=${bld.dir}/jars bak.files=**/*~ # Tomcat catalina.home=C:/proactive_devtool/tomcat6.0
build.xml
ANTのメインです。僕の中での工夫ポイントは、
です。後は、(6)のところをサブシステムの数だけコピペして編集すればOK!
ソースの添付とか、実機での稼動確認とか残タスクもありますが、そこはおいおい。
<?xml version="1.0" encoding="Windows-31J"?> <project name="paradise" basedir="." default="all"> <property file="build.properties"/> <property name="keeptimestamp" value="false"/> <property name="verbose" value="false"/> <!-- 全てのターゲットを実行 --> <target name="all" depends="make-jar"/> <!-- 1. ビルド開始メッセージ --> <target name="begin-message"> <echo>BuildName: ${ant.project.name}</echo> <echo>BuildHome: ${basedir}</echo> <echo>BuildJVM: ${ant.java.version}</echo> <echo>BuildFile: ${ant.file}</echo> </target> <!-- 2. 初期化。クラスパスの設定(とにかく何でも詰め込む) --> <target name="init" depends="begin-message"> <path id="compile.class.path"> <!-- PAE2 JAR (1) --> <path><fileset dir="${lib.dir}"><include name="*.jar"/></fileset></path> <!-- PAE2 JAR (2) --> <path><fileset dir="${lib4batch.dir}"><include name="*.jar"/></fileset></path> <!-- コンテナJAR --> <path><fileset dir="${catalina.home}/lib"><include name="*.jar"/></fileset></path> </path> </target> <!-- 3. ディレクトリ・バックアップファイル削除 --> <target name="clean" depends="init"> <delete dir="${bld.dir}"/> <delete><fileset dir="." includes="${bak.files}" defaultexcludes="no"/></delete> <sleep seconds="1"/> </target> <!-- 4. ビルドディレクトリ作成・external ソースファイルコピー --> <target name="setup" depends="clean"> <mkdir dir="${bld.dir}"/> <mkdir dir="${bld.src.dir}"/> <mkdir dir="${bld.classes.dir}"/> <mkdir dir="${bld.jar.dir}"/> <copy todir="${bld.src.dir}" includeemptydirs="true" preservelastmodified="${keeptimestamp}" verbose="${verbose}"> <fileset dir="${external.dir}" includes="**/*"/> </copy> </target> <!-- 5. コンパイル ALL --> <target name="compile" depends="setup"> <javac destdir="${bld.classes.dir}" debug="on" memoryMaximumSize="512m" fork="true"> <src path="${bld.src.dir}"/> <classpath> <path refid="compile.class.path"/> </classpath> </javac> </target> <!-- 6. jarパッケージング --> <target name="make-jar" depends="init"> <property name="wkdir" value="${bld.dir}/classesWK"/> <delete dir="${wkdir}"/> <mkdir dir="${wkdir}"/> <javac destdir="${wkdir}" debug="on" memoryMaximumSize="512m" fork="true"> <src path="${bld.src.dir}/hoge-addons/src-hoge-agl"/> <classpath> <path refid="compile.class.path"/> <pathelement path="${bld.classes.dir}"/> </classpath> </javac> <jar jarfile="${bld.jar.dir}/hoge-agl.jar"/> </target> </project>
図解! ProActive E2インストール +α
1年ぶりにやってみたら、大分忘れてしまっていた。次やるときに備えての備忘録。
個々のサーバで1回ぽっきりの設定
-
- JDKのインストール
- Firewallの許可追加
- アプリケーションサーバでOracle Application Server インストール
- アプリケーションサーバでSVF Serviceのインストール
- データベースサーバでOracle Databaseのインストール
Tips and Tricks for Batch Program
「ぼくにとっては普通のことでも、どこかの誰かにとってはそうでもない」・・・かもしれないネタをひとつ
Basic Batch ProgramPattern (ex. Data Import)
基本的なバッチ(一括)処理(例えば、大量データのインポート処理)はこんな感じ
-
- プログラム本体があって
- 振る舞いを多少変更できる設定ファイルがあって
- 外からやってくる(大量の)データを取り込む
Tips & Tricks for Batch Program of Data Export
上記構成はそのままに、「外からやってくるデータ」の役割について発想を変えると、ちょっとだけ面白いことができます。つまり
-
- 「外からやってくるデータ」にプログラムの振る舞いを変えるパラメータを仕込み
- パラメータに従って、一括出力するデータの範囲や条件を変更します
- 設定ファイルではなく取込ファイルを使うことで、気軽にプログラムの振る舞いを変えられます
バッチスケジューラー(JP1とか)が何をやったか?というログを残しやすいので、トラブルシューティングが迅速になる!・・・と期待してます
Example: ProActive E2の自動取込機能
ProActive E2に自動取込機能というのがあって、上記のTipsを適用するとこんな感じに盛り上がります。
ついでに設定ファイルも工夫すると、ほんのりとフレームワークぽくになります。
僕がバナナを売って算数ドリルをつくるワケ
先日、等々力で試合があった時に感じたことはずばり1つ、観客動員が増えてる!
AWAYエリアは2年前に比べ減 & でも空きが結構あ・・・
Jリーグ界隈では川崎さんの企画力は有名ですが、本書はその仕掛けの中心にいる方の著書です。
いちサポーターのアクションのヒントはないかしら?、と思って読み始めました。
…で読み進めていると、ちょいちょいウルっと。
今回気になったとこメモは以下の通りです!
-
- 何事も一筋縄では行かない
- 簡単に観客動員が伸びる方法などない
- クラブは農業のように汗をかいて、泥にまみれて育てていく
- 関わる人に"他人事ではない"と思わせるかどうかが企画を成功に導くためには大事なこと コツ
銀の弾丸なんてないぜ!ってことで。
- 作者: 天野春果
- 出版社/メーカー: 小学館
- 発売日: 2011/06/17
- メディア: 単行本
- クリック: 28回
- この商品を含むブログ (5件) を見る