How to read a file from the JAR?

Someone just asked me this question today. And I thought might as well put it down for info.

  1.  public TestReadFileFromJar() throws FileNotFoundException, IOException {
  2.         InputStream is = getClass().getResource("txtData/states.properties");
  3.         read(is);
  4. }

In the case above txtData is placed in the jar on the root. Remmember to add the path with the /

Command

By using the command pattern you are seperating the operation from the invoking object. And just because of that it becomes easier to change the command without chagning the caller/s.
This means that you could use Command pattern when you might have the following situation

You want to parameterize objects to perform an action
You want to specify, execute and queue requests at different times.

Just to quickly start you need a command object, An interface will keep it easy going in this case, thus providing you with the option of extending other classes e.g. Swing MenuItem or Button.
Below the execute Method is the one invoked to do something when this command is called or asked to do its stuff.
Where as the getCommandName is assumed as a unique name how ever I am sure we can always come up with a better implementation for uniqueness.

  1. public interface Command {
  2.  
  3.     public void execute();
  4.     public String getCommandName();
  5.  
  6. }

And example implementation of the Command should look as follows
A Command Name, and and execute Method to tell what happens when this command is called.

  1. public class ForwardCmd implements Command {
  2.  
  3.    private String COMMAND_NAME = "Back";
  4.  
  5.    public BackCmd() {
  6.        super();
  7.    }
  8.  
  9.    public String getCommandName() {
  10.        return COMMAND_NAME;
  11.     }
  12.  
  13.     public void execute() {
  14.         System.out.println("Your wish, my command");
  15.     }
  16. }

The command manager is the controller in this case. It registers command objects. the “registerCommand” will simply take a command and store it in a list or something alike. This means you could load it out of a jar file, or an xml or path and just pass the object to the “registerCommand” AS a command offcourse.

the “execute” Command will simply execute the Command passed to it.

And the “getCommand” returns a command by looking up a COMMAND_NAME. So if you provide a name to it through you system it should give you an object of type Command and simple pass it to execute. Again this would be a controller logic and not the client one.

  1. public abstract class AbstractCommandManager {
  2.  
  3.     public abstract void registerCommand(Command command);
  4.     public abstract Collection getAllCommands();
  5.     public abstract void execute(Command command);
  6.     public abstract Command getCommand(String name);
  7. }

Implementing the adapter

Typically when implementing an interface you would have to implement all the methods that exist in that interface. A very good example is the MouseListener in the java Swing. When you need to implement more then one method where as typically you might be catching only one of them. Saying that you would also find a Mouse Adapter provided as well. Some of us use that often. And that is part of the Adapter pattern. It makes life easier for me sometimes.

Adapter a structural pattern will let you adapt to a different environment. The joining between different environment is called Adapter. Thus basically giving others the interface that they expect or vice versa when your program becomes the client.

For example the following class expects that the implementing class should be implementing all three methods.

  1. public interface RecordListener {
  2.  
  3. public void eventPrePerformed(RecordEvent recordEvent);
  4.  
  5. public void eventPerformed(RecordEvent recordEvent);}
  6.  
  7. public void eventPostPerformed(RecordEvent recordEvent);
  8.  
  9. }

So lets say our implementing class is a rude one and only wants to implement one method. What do you do as an API designer. hmmm

Thats where we step in with the Adapter.

  1. public abstract class RecordAdapter implements RecordListener {
  2.  
  3. public void eventPrePerformed(RecordEvent recordEvent) {}
  4. public void eventPerformed(RecordEvent recordEvent) {}
  5. public void eventPostPerformed(RecordEvent recordEvent) {}
  6.  
  7. }
  8.  
  9. public MyAdapterImpl extends RecordAdapter{
  10.  
  11. public void eventPerformed(RecordEvent recordEvent){}
  12.  
  13. }

Now the only thing left to do is use the adapter. And override any method that you might need .

  1. public MyClientClass {
  2.  
  3. public MyClientClass(){
  4.  
  5. this.addRecordListener(new MyAdapterImpl());
  6.  
  7. }
  8.  
  9. }

Abstract Factory pattern

Factories have been a key pattern in building applications, its fascinatingly simple, effective and to the point. When starting to learn a design oriented approach to applications or API, I would always recommend a factory pattern as one of the key starting notes of highlight in your design.

So today I am talking about the Abstract Factory pattern. Its not an “abstract” class or object that you call a pattern. But its a Factory of facotries and that is what exactly makes it so much wordingly abstract. Having “abstract” classes is there but just some other side of the coin.

When should I use an Abstract Factory:

  • Independence of how products are created, composed or represented
  • Should be configurable with one of the multiple families or products
  • You need enforcable constraints for the products used as a group
  • You need to reveal only the interfaces of products and not thier implementation as part of a bigger picture.

So lets begin with the fun.

This is how I plan to implement it:
Has A:
Product has a Specification
Factory has a Product
FactoryManager has FactoryConstants
FactoryManager has ComputerFactory

Is A:
BFactory is a ComputerFactory
AFactory is a ComputerFactory

Not shown.
ProductA is a Product
ProductB is a Product

Diagram:

AbstractFactory
AbstractFactory

Creating a simple factory that returns products.

  1. public abstract class ComputerFactory {
  2.  
  3.  public abstract String getName();
  4.  
  5.  public abstract Product[] getProducts();
  6.  
  7.  public abstract Product getProduct(int ProductID);
  8.  
  9. }

Implementation of the ComputerFactory

  1. public class AFactory extends ComputerFactory {
  2.  
  3. public String getName(){
  4. return "A";
  5. }
  6.  
  7. public Product[] getProducts(){
  8. return null;
  9. }
  10.  
  11. public Product getProduct(int productID){
  12. switch(productID){
  13. case 1:
  14. return new ProductA();
  15.  
  16. case 2:
  17. return new ProductB();
  18.  
  19. default:
  20. throw new IllegalArgumentException("Sorry you hit the wrong factory, we closed down in 1600 BC");
  21. }
  22. }
  23. }

A register base for factories. Refer to the main method for use later in this post.

  1. public interface FactoryConstants {
  2.  
  3.  public int A = 1;
  4.  public int B = 2;
  5.  
  6. }

The main Entrant class. the Factory Manager that will give the ComputerFactory resultant. Its assumed to be a Singleton as it registers as a Creator in the system (assumption).

  1. public class FactoryManager{
  2.  
  3.  private static FactoryManager factoryManager = null;
  4.  
  5.  private FactoryManager(){
  6.  
  7.  }
  8.  
  9.  public static FactoryManager getInstance(){
  10.   if(factoryManager != null){
  11.    return factoryManager;
  12.   }
  13.   else return factoryManager = new FactoryManager();
  14.  }
  15.  
  16.  public ComputerFactory getFactory(int factory) throws IllegalArgumentException{
  17.  
  18.   switch(factory){
  19.    case FactoryConstants.A:
  20.    return new IBMFactory();
  21.  
  22.    case FactoryConstants.B:
  23.    return new SUNFactory();
  24.  
  25.    default:
  26.    throw new IllegalArgumentException("Sorry you hit the wrong factory, we closed down in 1600 BC");
  27.   } 
  28.  }
  29. }

A main method to test the AbstractFactory

  1.  public static void main(String args[]){
  2.  
  3.   System.out.println(FactoryManager.getInstance().getFactory(FactoryConstants.A).getName());
  4.   System.out.println(FactoryManager.getInstance().getFactory(FactoryConstants.B).getName());
  5.   System.out.println(FactoryManager.getInstance().getFactory(3).getName());
  6.  
  7.  }

You can find the complete code listing here:
AbstractFactory source

Crocus – CSV Reader

Easy to use ready to go CSV File Reading utility. Read One or Multiple files into a RecordManager, quick access to the file with segmentation into Fields and Records. Merge Multiple CSV files in one. Listener to CSV Files.

Download Here

Organization:
A CSV file is broken up as follows
A CSVField has a group of characters
A CSVRecord has a group of CSVFields
A CSVFile has a group of record

How To Use:

Reading a Single CSVFile into a RecordManager

  1.  // Creating a single file interface
  2. CSVSingleFileInterface fileInterface = new CSVSingleFileInterface("/media/data/dev/workspace/crocus/testData/drupal-sample.csv",CSVConstants.COMMA);
  3. // Calling the read returns a CSVRecordManager i.e. in memory
  4. AbstractCSVRecordManager manager = fileInterface.read();

Reading multiple files into one RecordManager

  1. // Specify a FileSet
  2. AbstractCSVFileSet fileSet = new CSVFileSet();
  3.  
  4. // Add files to the set
  5. fileSet.addFile("testData/drupal-sample.csv");
  6. fileSet.addFile("testData/countries.csv");
  7.  
  8. // Add the fileSet to a Reading Interface
  9. CSVFileSetInterface fileSetInterface = new CSVFileSetInterface(fileSet);
  10.  
  11. //  Reading returns a manager same as in a Single file case.
  12. AbstractCSVRecordManager manager = fileSetInterface.read();

This functionality is not complete but a peak is available.
You can now specify a Listener to Pre, Post and On Add of a record.

Setting up a Listener.

To add you listener simply implement the RecordListener class

  1. // Get a Record Manager
  2. AbstractCSVRecordManager manager = fileInterface.getRecordManager();
  3.  
  4. // Add a listener to the Manager.
  5. manager.addRecordListener(this);
  1. // Implement an event listening method for listening to the RecordEvent.
  2. public void eventPerformed(RecordEvent recordEvent) {
  3. System.out.println(recordEvent.toString());
  4.  
  5. }

for further information refer to the docs.  http://www.shaafshah.com/crocus/

The Build System:

The build script supports the following targets

Build: init, clean, compile, jar, javadoc, tests

Including, Excluding files while creating compile, jar, tests

FILE DETAILS (Paths and description):

PRE RULES:

=========

CROCUS_DEV = the main directory i.e. examples from here onwards this will be the variable used for describing details.

You will need to set CROCUS_DEV env variable inorder to run the build process

Also you would need to set ANT_HOME for usage of ant. I have used Ant 1.6.5 for builds.

$CROCUS_DEV/src Holds the source code i.e. java files

$CROCUS_DEV/build Carries all the build related files

$CROCUS_DEV/build/build.xml Main build script

$CROCUS_DEV/build/include.xml patterns for inclusion of java files at the time of compilation

$CROCUS_DEV/build/exclude.xml patterns for exclusion of java files at the time of compilation

$CROCUS_DEV/build/tests_include.xml patterns for inclusion of test java files at the time of compilation

$CROCUS_DEV/build/tests_exclude.xml patterns for exclusion of test java files at the time of compilation

$CROCUS_DEV/build/tools tools used during build.

$CROCUS_DEV/build/jar_buildfiles you can simply specify a txt file with some wild card matches and name it as yourjar.jar for the build system to recognize that “yourjar.jar” will be the name for this jar that should have the packages in it as specified in this txt(yourjar.jar)

$CROCUS_DEV/build/bin Holds the uniz script and the bat file for developers to run the build script more or less as:

Windows:> %CROCUS_DEV%/build all

Linux:> $CROCUS_DEV/build.sh all

$CROCUS_DEV/build_results Holds all the results of the builds

$CROCUS_DEV/build_results/docs Created java docs

$CROCUS_DEV/build_results/classes Created classes

$CROCUS_DEV/build_results/tests Unit test results

$CROCUS_DEV/build_results/jars the jars created by the system

$CROCUS_DEV/jars/ Is the directory for jars related information

$CROCUS_DEV/jars/manifests Holds the manifests for the $CROCUS_DEV/build/jar_buildfiles.

Conventionally should use: Manifest.jarName

$CROCUS_DEV/jars/original3rdparty Holds any 3rd party vendor jars that might be used for putting in the classpath for the build system

$CROCUS_DEV/testData logically should hold all testData no matter how that might be. currently I have placed a few csv files (tabbed,comma,semicolon).

SVN – some quick commands during merge.

Following are some of the frequently used svn commands during merging and branching. I used to work with tortoise for this but as soon as I learned these, it feels like a more easier space to be in. Although no points taken away from tortoise, it still works pretty good for the gui part, This article is more targeted towards dark screen lovers.

Create a new branch from trunk:
If you want to create a branch from a specific revision of Trunk following command is handy. It does a remote copy. which means the machine you are on does not need a copy of the whole tree.

$ svn copy -r REVISION TRUNK_URL NEW_BRANCH_URL --username USERNAME --password PASSWORD -m MESSAGE

An example

$ svn copy -r 1234 http://shaafshah.com/trunk http://shaafshah.com/branches/MY_BRANCH --username foo --password bar -m "Remote copy"

When was this branch created?
If you want to know the day branch was created.

$ svn log -v --stop-on-copy BRANCH_URL

The last record will show you the day the branch as created.

List all the branches:
If you want to take a listing of branches or a tree

$ svn ls BRANCHES_URL

e.g. http://shaafshah.com/branches

Merge from Branch to Trunk:

Browse to where you have checkedout trunk in the local directory.

$ cd shaafshah.com/trunk

Update trunk to HEAD.

$ svn update
At revision 1234.

Following will merge from branch to trunk but will not commit.

$ svn merge -r BRANCH_REVISION:TRUNK_REVISION BRANCH_URL

Branch_REVISION will be the revision branch was created if this is the first time you are doing the merge.

$ svn merge -r 1233:1234 http://shaafshah.com/branches/my_new_branch

After this you should do an

svn status

to check the status of the files. the files will be marked with following Characters.

‘A’ Added
‘C’ Conflicted
‘D’ Deleted
‘I’ Ignored
‘M’ Modified

If there is any ‘C’ in the status the files will not be committed if you try an svn commit to save the merge to the trunk.

Merge from Trunk to Branch:

To merge from Trunk to branch you would need to browse to the branch checked out in the local direcotry.

$ cd shaafshah.com/branches/mybranch
$ svn update
At revision 1234.

The following command will try merging trunk from revision 1233 i.e. the day branch was created to branch head.

$ svn merge -r 1233:HEAD TrunkURL BRANCH_URL

Hopefully this should help. However you should definitely refer to SVN Book for more detail.

svnbook at http://svnbook.red-bean.com/

Creating an SVN wrap for your build using Ant

Today after along break I would jump right on to one of the interesting topics in my den these days.

One of my friends was lately troubled with doing some SVN stuff like merging etc. And a lot of people will agree with me on their first experiences. 🙂 I think.

While Automated builds take a lot of our time I thought I could plug in with some automated merging and a few other tasks. Its hard to go over all of that in one post but I will try putting in some basic stuff to get us started.

I call it the SVN Wrap.

Step 1.
Create a simple script file for wrapping svn and our environment.

A simple bat script could look like the following

@echo off
svn %*

However some people might want to add some environment variables to it. And that is where the strength of the this file comes in. You can tailor the environment dynamically!
e.g.

set LC_ALL=C
set SVN_HOME=svn-win32-1.4.6
set PATH=%SVN_HOME%\bin;%PATH%;

FYI: By setting LC_ALL I am telling the system I disregard the default locale. Its just used as an example here. for more information refer to the svnbook at http://svnbook.red-bean.com/

Step 2.
Create the build.xml
It doesnt get simpler then this.

I have created a project with the name CI-Test

<project name="CI-Test" default="status" basedir=".">
	<description>
		This is a POC for SVN Wrap.
	</description>
</project>

Importantly I am setting a property local.branch so that I can tell svn where my code has been checked out locally.

And finally the target that will take a status of the branch. for more details on the status command you could go here.

In general this target will give a general overview of the files and thier state at the moment.

	<target name="status">
		<echo message="Following is the status for this tree."/>
		<echo message="output is logged here: status.out" />
	          <exec dir="${local.branch}" executable="ci-svn.bat" output="status.out">
            		<arg line="status"/>
          	</exec>
	</target>

With in the target there are a few echo commands but the key construct is the exec.
The exec is going to do the following

dir=”${local.branch}” – would meant execute the command in this directory
executable=”ci-svn.bat” – Identifies the executable
and finally the output attribute to show where the output of this activity goes.
The following line will pass the parameters to the executable
< arg line=”status” />
And in this case its sending a status command to svn.

For more details on exec goto. http://ant.apache.org/manual/

Now I would presume both these files in saved in one direcotry as

1. ci-svn.bat
2. build.xml

To run this simply goto your command console and once in the same directory execute by running
ant

It is assumed that all paths to java,ant and svn are set on your console or system.

As an output you should be able to see a status.out in the same directory from where you executed ant.

Hopefully this should get you started with doing some bit of svn commands from ant. And that just opens a lot of more possibilities in your build environment.

The complete code listing of the build file is as follows.

<project name="CI-Test" default="status" basedir=".">
	<description>
		This is a POC for SVN Wrap.
	</description>
 
	<property name="local.branch" value="C:\branches\my-branch"/>
 
	<target name="status">
		<echo message="Following is the status for this tree."/>
		<echo message="output is logged here: status.out" />
	          <exec dir="${local.branch}" executable="ci-svn.bat" output="status.out">
            		<arg line="status"/>
          	</exec>
	</target>
 
</project>

Creating the MQQueues with wsadmin scripting – JACL Part 2

Yesterday I wrote an article about creating and configuring the MQQueueConnectionFactory with the JACL on the wsadmin console. The other half of the article that was left out was to create the queues also.

The world looks pretty much the same today and my /etc/profile doesnt seemed to have been sourced again. Good we dont need a restart.

You would find some of the steps to be similar and that is because we are running on the same configs.

Step 1.
Identify the Provider for your Queue. By default this is the name for it. If you have created a new provider with a different name then specify it here.

set tmp1 "WebSphere MQ JMS Provider"

Step 2.
Now you would need to find the CELL NAME and the NODE NAME of your server
A typical location to my websphere profile’s Node configuration file is as follows
C:\Programs\IBM\Rational\SDP\6.0\runtimes\base_v6\profiles\test_wsp\config\cells\BNode05Cell\nodes\BNode05
The cell name in this location is after \cells\ i.e. BNode05Cell
And the node name is at the end after \nodes\ i.e. BNode05

set newjmsp [$AdminConfig getid /Cell:CELLNAMECell/Node:NODENAME/JMSProvider:$tmp1/]

Step 3.
You would now need to set the attributes that go into the queue.

To see all the attributes you can simply run the following command

$AdminConfig [required|attributes] MQQueue

i.e. required or attributes

The attributes that I will be setting in the following commands are
name, jndiName, baseQueueName, targetClient

set name [list name NAME]
set jndi [list jndiName jms/jndiName]
set baseQN [list baseQueueName BASEQUEUENAME]
set targetclient [list targetClient MQ]

You can see in the above example the target client is set to MQ it can be JMS based on your configuration.

Step 4.
Now set all parameters in one string so that they can be passed to the command as one.

set mqqAttrs [list $name $jndi $baseQN $targetclient]

Step 5.
Now to create the MQQueue use the following command. This will add the Queue to the node and cell mentioned earlier in step 2.

$AdminConfig create MQQueue $newjmsp $mqqAttrs

Once it is created it is not saved and only stays in the current session. So to save it run the following command. And you should be all set.

$AdminConfig save

You can alternatively also save this script in a file on your local system. And run it by passing it to the wasadmin. Follwing is a sample command.

wsadmin -profileName test_wsp -f $SCRIPT_FILENAME_LOCATION$

‘Complete code listing is as follows.

set tmp1 "WebSphere MQ JMS Provider"
 
set newjmsp [$AdminConfig getid /Cell:HOSTNAMENode04Cell/Node:HOSTNAMENode04/JMSProvider:$tmp1/]
 
set name [list name Q.REPLY]
set jndi [list jndiName jms/Q.REPLY]
set baseQN [list baseQueueName Q.SYSTEM]
set targetclient [list targetClient MQ]
set mqqAttrs [list $name $jndi $baseQN $targetclient]
 
$AdminConfig create MQQueue $newjmsp $mqqAttrs
 
$AdminConfig save

Creating the MQQueueConnectionFactory with wsadmin scripting – JACL Part 1.

While working my way in some piece of long java code I came across this huge pile of sand that just shattered me off every bit of patience I was left with. The dilemma all of us face every second day. CONFIGURATIONS!!

While my sarcastic mind was just saying Congratulations to me instead. And just how the – would you expect me to start configuring now.

So what exactly is my problem? I have a list of MQs, Factories, datasource, providers etc.. that I need to configure. And every time I create a new profile on my RAD (Rational Application Developer) I have to manually goto the Admin console and configure them.

With the very useless bit of linux I am acquainted too I cant live with clicks at least while programming.

As I am working with websphere and its a biggy in all those names I thought the guys would be smart and would at least have something in the box for *people like me. Well guess what I was right.

IBM has provided two languages for scripting.

1. JACL
2. Jython

If I am not wrong JACL will be deprecated out in future releases and Jython would be the tool for our scripting bit. [ Link here ]

In this article I will just go briefly with JACL and move to Jython in the next version where we will be able to configure the data sources in the websphere.

So what exactly is JACL. or pronounced as “JACKAL”

Jacl, Java Command Language, is much like/version of the Tcl scripting language for the Java. It runs on the JVM much like we hear about JRuby and the interpreter is written completely in Java.

For more details on the language itself you could go [ here ]

Lets get down to business: How to create a Webspehere MQ Connection Factory with wsamdin using JACL.
You would already have some of the details of the queues but some you will need to extract.

Step 1.
Identify the Provider for your Factory. By default this is the name for it. If you have created a new provider with a different name then specify it here.

set tmp1 "WebSphere MQ JMS Provider"

Step 2.
Now you would need to find the CELL NAME and the NODE NAME of your server
A typical location to my websphere profile’s Node configuration file is as follows
C:\Programs\IBM\Rational\SDP\6.0\runtimes\base_v6\profiles\test_wsp\config\cells\BNode05Cell\nodes\BNode05
The cell name in this location is after \cells\ i.e. BNode05Cell
And the node name is at the end after \nodes\ i.e. BNode05

set newjmsp [$AdminConfig getid /Cell:CELLNAMECell/Node:NODENAME/JMSProvider:$tmp1/]

Step 3.
Now you need to specify the Factories properties.

The properties I plan to setup are as follows.
Name, jndiName,QueueManager, sname, port, channel, ttype, xaenabled

To check what are the required parameters for the Factory you can run the following command on the wsadmin console.

$AdminConfig required WASQueueConnectionFactory

Example output:

wsadmin $AdminConfig required WASQueueConnectionFactory
Attribute                       Type
name                            String
jndiName                        String

Where will I find the wsadmin?
It is typically placed in the bin directory of your server.
In my case its lying in my RAD installation directory as
../Rational/SDP/6.0/runtimes/base_v6/bin

To invoke the wasadmin, just open your terminal and move to the bin dir where you can simply call it by typing wsadmin.  By doing so you would be invoking the default profile. if you want to specify the profile then use the switch -profileName YOURPROFILENAME

To see the all parameters required and optional write the following command on the console.

$AdminConfig attributes WASQueueConnectionFactory

Example output:

wsadmin $AdminConfig attributes WASQueueConnectionFactory
"XAEnabled boolean"
"authDataAlias String"
"authMechanismPreference ENUM(BASIC_PASSWORD, KERBEROS)"
"category String"
"connectionPool ConnectionPool"
"description String"
"jndiName String"
"logMissingTransactionContext boolean"
"manageCachedHandles boolean"
"mapping MappingModule"
"name String"
"node String"
"preTestConfig ConnectionTest"
"propertySet J2EEResourcePropertySet"
"provider J2EEResourceProvider@"
"providerType String"
"serverName String"
"sessionPool ConnectionPool"
"xaRecoveryAuthAlias String"

I have added some extra optional parameters for those of us who are using extra options.

set name [list name NAME]
 
set jndi [list jndiName jms/JNDINAME]
 
set qManager [list queueManager QMANAGER]
 
set sname [list host HOSTNAME]
 
set port [list port 1414]
 
set channel [list channel CHANNEL]
 
set ttype [list transportType CLIENT]
 
set xa [list XAEnabled True|false]

Step 4.
Now set all parameters in one string so that they can be passed to the command as one.

set mqcfAttrs [list $name $jndi $qManager $sname $port $channel $ttype $xa]

Step 5.
Now to create the Factory use the following command. This will add the factory to the node and cell mentioned earlier in step 2.

$AdminConfig create MQQueueConnectionFactory $newjmsp $mqcfAttrs

Once it is created it is not saved and only stays in the current session. So to save it run the following command. And you should be all set.

$AdminConfig save

You can alternatively also save this script in a file on your local system. And run it by passing it to the wasadmin. Follwing is a sample command.

wsadmin -profileName test_wsp -f $SCRIPT_FILENAME_LOCATION$

Complete code listing is as follows.

set tmp1 "WebSphere MQ JMS Provider"
 
set newjmsp [$AdminConfig getid /Cell:CELLNAMECell/Node:NODENAME/JMSProvider:$tmp1/]
 
set name [list name NAME]
 
set jndi [list jndiName jms/JNDINAME]
 
set qManager [list queueManager QMANAGER]
 
set sname [list host HOSTNAME]
 
set port [list port 1414]
 
set channel [list channel CHANNEL]
 
set ttype [list transportType CLIENT]
 
set xa [list XAEnabled false]
 
set mqcfAttrs [list $name $jndi $qManager $sname $port $channel $ttype $xa]
 
$AdminConfig create MQQueueConnectionFactory $newjmsp $mqcfAttrs
 
$AdminConfig save

More Resources:

[http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rmig_deprecationlist.html]

[http://publib.boulder.ibm.com/infocenter/imshelp1/v3r0/index.jsp?topic=/com.ibm.sif.doc/jaclabout.html]

 

Imaging and filters

Image processing has always been one of the my favourite and talked about subjects and un doubtly it is one of the most interesting bits of computer science that exist. For some it is a challenge to talk about, a few would term it as virtually impossible and a few would be developing applications from secure government projects to a simplistic robots. Image processing by far remains one of the most sophisticated technologies in the world today. The use of it can be seen in laboratories, industrial applications and also a few personal computing applications. Either we are using Document processing or scanning images; watching an assembly line guided by robots or using satellites is all that relates to image processing. Today image processing is part of our lives and for some a success story. Image processing is one field that is always taking its mark towards new ideas and innovations. My interest grows more every time I read something about Image processing and I write about it today. I had done a small project back in school with some hefty amounts of research, Ironically my career did not start off in a research lab just as I would have liked it to be but thats the “bit” we all try to understand *Try*, everyday. 🙂 At that time my ultimate aim had been to choose an application that brings knowledge not only to me but also to my fellow colleagues, students of Asia Pacific Institute of Information Technology, friends and to give me a solid position in order to research further and probably in a laboratory fulfilling realities of science fiction.

Attached is a PDF [Imaging and Filters] of the extract. This piece of murky english that stays in my backup CD drives should be atleast out here in the virtual space. Maybe some one might benefit from my very little understanding of the matter.

Following are some really nice reosurces to start your day with Image procesing  😉

Rerources:

1. [HIPR2] 2002 http://www.dai.ed.ac.uk/HIPR2/hipr_top.htm
2. [Andy Salter] MSc Computing Science degree at Imperial College, Spline Curves
and Surfaces http://www.doc.ic.ac.uk/%7Edfg/AndysSplineTutorial/index.html.
3. [NEC] site ceer, http://citeseer.nj.nec.com
4. [Dr. Douglas A Lyon] 1999, Image Processing in java
5. [Dr. Douglas A Lyon] 1999, Morphological Filtering.
6. [Dr. Douglas A Lyon] 1999, Transformation and chromaticity.
7. R.-L. Hsu, M. Abdel-Mottaleb, and A. K. Jain, “Face detection in color images,”
IEEE Trans. Pattern Analysis and Machine Intelligence, vol. 24, no. 5, pp. 696-
706, May 2002. [PDF, TPAMI Journal paper]
<http://www.cse.msu.edu/~hsureinl/facloc/tpami113783_.pdf> [Hsu et Al.]
8. [JAI] 1997 Sun Microsystems. http://www.java.sun.com
9. [Java 2d] 1996 Sun Microsystems. http://www.java.sun.com
10. Object Detection Using the Statistics of Parts
H. Schneiderman and T. Kanade
International Journal of Computer Vision, 2002. [Abstract]
11. A histogram-based method for detection of faces and cars
H. Schneiderman and T. Kanade
Proceedings of the 2000 International Conference on Image Processing (ICIP ’00),
Vol. 3, September, 2000, pp. 504 – 507. [Abstract]
12. A Statistical Model for 3D Object Detection Applied to Faces and Cars
H. Schneiderman and T. Kanade
IEEE Conference on Computer Vision and Pattern Recognition, IEEE, June,
2000. [Abstract]
Bsc (Hons) Final Year Computing Appendix
Asia Pacific Institute of Information Technology 129
13. A Statistical Approach to 3D Object Detection Applied to Faces and Cars
H. Schneiderman
doctoral dissertation, tech. report 00-06, Robotics Institute, Carnegie Mellon
University, May, 2000. [Abstract]
14. Probabilistic Modeling of Local Appearance and Spatial Relationships for Object
Recognition
H. Schneiderman and T. Kanade
Proceedings of the IEEE Conference on Computer Vision and Pattern
Recognition (CVPR ’98), July, 1998, pp. 45-51. [Abstract]
15. Object Recognition by Computer: The Role of Geometric Constraints. Cambridge,
MA: MIT Press.Grimson, W. E. L. (1990).
16. Comparing images using the Hausdorff distance. IEEE Transactions on Pattern
Analysis and Machine Intelligence 15(9):850-863. Huttenlocher, D. P., G. A.
Klanderman, and W. J. Rucklidge. (1993).
17. On recognizing and positioning curved 3-D objects from image contours. IEEE
Transactions on Pattern Analysis and Machine Intelligence 12:1127-1137.
Kriegman, D. J., and J. Ponce. (1990).
18. [Gregory A Baxus] 1994, Shape Measurements, Digital Image Processing
19. [Gregory A Baxus] 1994, Image Operation Studies
20. [Donald Hearn] and [M Pauline Baker] 1994, Computer Graphics