Who’s On Phirst

Official blog of Phurnace Software.

Alexander Bibighaus's Blog
Description:
Alexander serves as Director of Development and is responsible for managing the software engineering team. He also serves as the chief architect for the expanding Phurnace product line. Alexander is a seasoned software developer and manager that has created, as well as extended, numerous software applications. He has twelve years of experience as a developer and architect, including roles at uControl, Motive, and Vignette. Of note is his role at uControl where he built a first of its kind application for the home security industry which communicated time-critical/sensitive information from millions of home devices using cellular technologies. His development experience includes Java and C. He was Sun Certified in Java 1.1 in 1998 and has spent the last 10 years focusing on enterprise products for the Java marketplace. Alexander has earned a B.A. in Computer Science from the University of Texas at Austin.

Posted by: Alexander Bibighaus on

Phurnace just released some new and powerful features for the management of IBM WebSphere and WebSphere Portals. In the Portal area, our product, Phurnace Deliver, can manage the auto-deployment and on-going configuration management for all of the pieces of a Portal instance (portlets, themes, skins, content, etc.) and the understandings of the interdependencies between them. This makes changing and managing Portals substantially easier than it is without Phurnace.

Brand new capabilities include a “roll-back in time” feature that allows Portal administrators to fully archive points in time and roll-back (on-demand) to a previous known state. It can fully archive all objects needed to deploy an IBM WebSphere Portal application including binaries (wars, skins, themes, etc.) and the associated configuration information.

This is a life saver for Portal administrators that have consistently complained to us that there is no concept of “state” for their portals. We hear again and again from prospects that xmlaccess alone simply doesn’t cut it to manage the constantly changing objects and configurations of their Portals.

Other cool new capabilities include more robust management and deployment of virtual Portals and a graphical representation of relationships between WebSphere objects (such as references and containment of those elements).

In WebSphere PortalWebSphere
Comment (0) Read More...


Posted by: Alexander Bibighaus on

I thought I would provide a step by step instruction on setting up IBM WebSphere Portal 6.0. This is how we do it here at Phurnace. I thought many of you could benefit from our example.

Create Linux Virtual Image

The first step is to create a virtual image to work with. For purposes of this example, we will create an image called "wp60source". This linux image will have a static ip.

Create the Image

cd /opt/Virtual\ Machines

  • Make a directory for your virtual machine. We call ours wp60source in this example

mkdir wp60source

  • For linux, copy the contents of the rhel4Base image to your VM's directory

cp -rf rhel4Base/* wp60source

  • Login to phurnacedev03 with the VMWare Console
  • Add the virtual machine to the list
    • Go to File->Open.
    • Select Browse...
    • Double click "wp60source".
    • Select the .vmx file contained within that folder

Configure the Virtual Machine Settings

  • Edit Virtual Machine Settings
    • Bump Memory to 2G
    • Add 4 GB Virtual Disk
      • Click Add, Select virtual disk and accept defaults

Configure the Virtual Machine

  • Startup the Virtual Machine
  • When prompted about the Network Configuration, press any key
    • Remove Configuration
    • Add Configuration.
      These are my example settings , use your own IP address.
IP                   10.1.1.158
NetMask              255.255.255.0
Default Gateway      10.1.1.1
Nameserver           10.1.1.48
  • Set the Hostname
    • Applications -> System Settings -> Network
    • Click DNS
    • Change Hostname
    • Reboot
  • Extend the Logical Volume
    • Applications->System Settings->Logical Volume Management
    • Under "Unitialized Entities", Find the entity and initialize it. In this example, /dev/sdb1
    • Add this entity to the VolumeGroup00
    • Go to the Volume Group Properties and extend the slider.
  • Bump up the ulimit ceiling for the number of open files
    • vi /etc/security/limits.conf
    • add the following lines
*    soft    nofile   10240
*    hard    nofile   10240


Extract the Installer for WebSphere Portal 6.0

Consult Disk Image Page for help regarding Disk Images.

  • Find the installation images for Portal 6.0. First consult the
cd /mnt/install/WebSphere Portal/Portal_6.0
mkdir /opt/images
cp C93MXML.taz C93N3ML.taz C93LSML.zip C93M4ML.zip  C93LUML.zip  C12YDML.zip /opt/images
  • Extract each of these images in their own folder
cd /opt/images
mkdir C93MXML
cd C93MXML
unzip ../C93MXML.zip

mkdir C93MXML
cd C93MXML
tar zxvf ../C93MXML.taz
...
  • Rename each of the diretories to the names provided on the Disk Image Page.
    This also verifies you grabbed the correct zips.
mv C12YDML W-Setup
mv C93MXML IL-1
mv C93N3ML IL-2
mv C93LSML IL-3
mv C93M4ML IL-4
mv C93LUML IL-5


Install Portal

In the W-Setup directory, run the installer.

./install.sh.

Choose Typical.
Provide a name of the Cell, Node,
Provide a WAS user/pass
Provide a Portal Admin user/pass
Accept defaults.


Install Patches

  • You may need to free up space and delete the disc images from the base install
  • Copy over the patch installer and fix paks. These are contained on the install drive under WebSphere Portal in the 6.0.1.3 update directory.
cd /mnt/install/WebSphere\ Portal/
cp -rf 6.0.1.3\ update/ /opt/images
  • Extract the "WebSphere Update Installer" Installer
mkdir WasUpdateInstaller
cd WasUpdateInstaller
unzip ../6.1.0-WS-UPDI-LinuxIA32-FP0000017.zip
  • Run the "WebSphere Update Installer" Installer and install to /opt/IBM/WebSphere/AppServer
  • Copy the fixpacks into the maintenance directory
cd /opt/images/6.0.1.3 update
cp *.pak /opt/IBM/WebSphere/AppServer/updateinstaller/maintenance/
  • Now run the WebSphere Update Installer
cd /opt/IBM/WebSphere/AppServer/updateinstaller
./update
Relaunch for each of the .pak files
  • Unzip the "Portal Update Installer" Installer
  • Move the directory to /opt/IBM/WebSphere/PortalServer/updateinstaller
  • Unzip the fix pak.
  • Move the contained files to /opt/IBM/WebSphere/PortalServer/updateinstaller/fixpaks
  • Update the passwords in /opt/IBM/WebSphere/PortalServer/config/wpsconfig.properties
  • Run . ./setupCmdLine.sh from /opt/IBM/WebSphere/AppServer/bin
  • Run the Portal Update Install Wizard
  • Select the jar file in the fixpaks directory

In WebSphere Portal
Comment (2) Read More...


Posted by: Alexander Bibighaus on

A Portal represents a web site that provides a single point of access to applications and information. IBM WebSphere Portal is highly complicated software that enables companies or organizations to host their own portal.

WebSphere Portal offers two main tools to help manage WebSphere Portal configuration: XMLaccess and ReleaseBuilder. Besides automation, the major benefit of XMLAccess is its ability to update pages and portlets without losing user customization. If you perform your updates via XMLAccess, any user customization to a page or a portlet is retained because the object IDs are retained. Release Builder, helps you deploy new applications from staging to production. It captures the differences between two versions of the configuration and builds a delta XML configuration file that can be imported in the production environment to represent the new deployment.

However, neither of these tools solve the problem of updating the theme or skin artifacts or updating the portlet .war. WebSphere Portal does offer a means to update the wps.ear file with the new theme or skin as well as deploy new portlets. This common task requires the administrator to learn two additional tools such as wsadmin and wpconfig.

Most WebSphere Portal sites use the Personalization features offered. Again, WebSphere Portal offers yet another tool that allows the administrator to stage personalization rules from one server to another. This tool is called pznload.

At this point, you are probably getting the sense of what is required to manage WebSphere Portal.

We are not done. Almost every WebSphere Portal deployment relies on at least one enterprise application deployed to WebSphere. Therefore, upgrades to portlets sometimes require upgrades of the Enterprise application that supports the portlet. Now, the WebSphere Portal administrator needs knowledge about WebSphere administration too.

It is easy to draw a conclustion that because WebSphere Portal encompasses so many topics, the management of WebSphere Portal is extremely difficult, especially in a fault-tolerant, scalable solution.

We at Phurnace experienced these difficulties first-hand. From a developer's point of view, this pain was the driving force behind creating a new product, Phurnace WebSphere Portal Deliver. Phurnace WepShere Portal Deliver leverages each of these tools that IBM provides internally. Phurnace utilizes the same technology and tools that a WebSphere Portal administrator does today. However, it offers additional intelligence around working with these tools, handling errors, and even working around defects in ReleaseBuilder. Finally, with Phurnace, the processes can be fully automated and after deployments are complete the user is left with a report detailing what changed. Therefore it is faster, easier and there is an audit trail that is automatically produced. With Phurnace WebSphere Portal Deliver, the administrator only has to learn a single tool and that tool will make their jobs a whole lot easier.

In WebSphere Portal xmlaccessWebSphere Portal
Comment (0) Read More...


Posted by: Alexander Bibighaus on

All companies have different needs and reasons they pursue outsourcing. While Phurnace had success with our first outsourcing project, it was not without lessons learned. Having just kicked off our second outsourcing project, I'd like to share some of these lessons for those of you who might be considering an outsourced software development project.

Recognize the inevitable challenges
If you are going “offshore”, the language barrier is always a challenge. Even well spoken English can sometimes be hard to understand when you are accustomed to hearing the Texas drawl. The time difference is challenging primarily because it adds stress to the end of your day and in the same way your begins with stress. Finally, the lack of direct interaction is by far the biggest challenge. Nothing replaces direct communication. The recognition of these challenges is important so that you find creative ways to mitigate them.

Choose your project wisely
Selecting a project with a lot of unknowns leaves the door open for disaster. In addition, maintenance projects can be a bad idea. Maintenance is often perceived as easy which evolves to thinking that maintenance can be outsourced. While it is certainly possible, maintenance often involves very difficult problems and your most knowledgeable developers. Instead, find a project that your internal development staff could knock out of the park; but, is not the best use of their time, technically speaking.

For Phurnace, the best projects are usually those that have two qualities:

  • Direct knowledge of the problem domain and scope by our development staff
  • Well defined deliverables

Don’t underestimate the time required
View your outsource team as an addition to your current team. One common mistake is to fall for the sales pitch that they will manage it for you. If you just acquired an outsource team of five people, think about the impact of 2 or 3 new additions to your staff. Use that as a starting point for estimating your time required.

Daily Communication
Agile development practices encourages direct and often communication. This same approach works very well with an outsourced team. Setup daily calls to get your project going. It may require a little nudging, but be persistent. The outsource team will eventually give because they want the project to be successful, too. If you gain confidence, you can figure out what works best once you have an understanding of how your team interacts with the rest of your organization.

Do away with formal status reports
Formal status reports might as well be named TPS reports (from the movie Office Space). They are very overrated but extremely common in outsourcing processes. They usually involve a few tables with tasks and hours. This tells you nothing about the actual progress. Think about what you really want to know and tell them what you to know and when. Here are some examples: What issues are currently outstanding. What items is the outsourcing team waiting on you for. What are is the plan for next week by person. This is the information you need so problems can be resolved quickly, and you can hold each individual accountable as you would your own team.

Expect to be very technical
Know the code that they are working with, understand the technical challenges, and be capable of providing direct technical advice. Don’t delegate this on an as-needed basis. If this is not your expertise, my recommendation is to find someone who can be on this project from day 1 to provide this assistance. This is extremely important because otherwise you will never really know how well the project is going.

Don’t forget testing
Ask for tests as deliverables. More importantly, make sure these deliverables are something you can take in-house in the case you decide to no longer use the outsourcing team.

So those are a few of the lessons learned from my first time around at Phurnace. I am excited about my new team and look forward watching their project -- very closely!

In Agile Software Development
Comment (0) Read More...


Posted by: Alexander Bibighaus on

Ant, the de-facto standard build tool for Java, could be defined as a platform independent scripting tool similar to Make but with an XML syntax. Ant is mature, extensible, and relatively easy to use. These qualities paved the path for Ant to be applied to other problems besides "building software". For instance, Ant is commonly used as a scripting tool to move files around, and moreover as a test tool to launch tests and generate reports. Most Java developers already know everything I just said.

I would like to share with you another way Ant can add value to your organization, embedded Ant. It is often the case where your software needs to do tasks similar to those available in Ant. For a long while, this was a cool thought, but not a good solution in practice. It required either launching Ant in another process or studying the Ant source code so you can work through some significant issues.

However, improvements in 1.6 and 1.7 now allow Ant to be easily embedded. I first successfully embedded Ant about six months ago with version 1.6. I considered the following points before making the decision to give it a try.

  • Ant is very mature.
  • The wide usage of Ant implies a well tested infrastructure
  • Ant tasks are cross platform
  • High probability anyone who inherits this code will know Ant

My product requirements for this feature were that it:

  • Must be able to fork a Java JRE on multiple OS's and run a process to completion (Windows, AIX, Linux).
  • Must be able to kill or stop the process on-demand.
  • Must be able to capture the standard output and standard error in real time.

Sure, I could use the Java IO and Runtime; however, when weighing the cost to write, debug, and test this code versus taking the time to figure out how to embed Ant, the decision was easy.

Here is a quick tutorial that demonstrates the concept. In practice, I use more code to make this easier. However, this shows the concept.

  • Create your build.xml and package it in jar.
 

<project name="embedded-ant-example" default="_init">
 
     <target name="sayHello">
 
           <echo>Hello ${to}</echo>
 
     </target>
   </project>
       
     

  • Create an Ant Wrapper

Project project = new Project();

project.init();

project.setBasedir(workingDir);

DefaultLogger antLogger = new DefaultLogger();
antLogger.setErrorPrintStream(System.err);
antLogger.setOutputPrintStream(System.out);
antLogger.setMessageOutputLevel(Project.MSG_INFO);

project.addBuildListener(antLogger);

// Load the build file
InputStream is = MyClass.getResourceAsStream(“build.xml”);
File tempFile = File.createTempFile();
copy(is, tempFile);

ProjectHelper.getProjectHelper().
parse(project, buildFile);

// set properties
project.setProperty("to", "World");

project.executeTarget("sayHello");


A few caveats still remain:

  • The project.init() is expensive. If possible, you only want to do this once per build file.
  • The ProjectHelper.getProjectHelper() method does not yet take an InputStream as an argument. The source code appears to allow you to write a plugin that would support this, but I took a simple approach. I read the resource from the jar and copy it to a temp file.

In summary, Ant has proved useful as an embedded library. However, what I noticed most was that Ant not only provided a robust solution, but also enabled other features that would have otherwise not been considered.

In Embedded AntAnt
Comment (2) Read More...


Posted by: Alexander Bibighaus on

Recently, I was entertained by hearing complaints from a friend regarding their Agile practice and how impractical and inefficient it seemed. This conversation led me to think about our own agile practices at Phurnace and other companies for which I’ve worked. It is my experience, since the Agile boom, companies tend to adopt a hybrid approach that is typically a collection of agile practices mashed up with traditional practices from which people feel comfortable. I reviewed some of the basic principles of Agile software development and found several common pitfalls.

Individuals and interactions over processes and tools

Agile projects are geared to expect change. Agile practices expect that management, sales, and product leadership frequently change project requirements. Recognizing this as a reality rather than denying it leads to a more honest and accurate approach for your organization. Thus, agile projects must explicitly abandon traditional planning in favor of direct interaction with individuals. With a clear focus on high value features and releasing valuable software often, a software team can adapt to frequent changes yet consistently deliver additional product "value”.

Traditional team management use tools such as Microsoft Project to breakdown work items that look into the project's future. Resources are allocated, dependencies are tracked, and tasks are mapped to individuals. This plan is traditionally managed by identifying the "critical path" for final delivery. Any change or diversion from the plan forces the plan to be re-worked. If the project has little variance, this approach is effective. However, most software projects change often resulting in making the project plan irrelevant.

One pitfall is that most hybrid approaches continue to use traditional tools to chart out a project plan which only confuses the leadership. These estimates are put into a Microsoft Project chart to determine which stories are feasible for the next iteration. This piece of planning, even on a smaller scale, is often out of touch with reality. The reason lies behind the estimates. A spreadsheet or Gant chart of numbers fails to communicate many of the inferences and risks that would otherwise be learned by direct interaction with the team members or the lead. In essence, given a 3-4 week timeframe, relying on your team's depth of knowledge and experience thru personal interaction is a better measure for the feasibility of tasks.

The second pitfall with this theorem is around processes. Adding unnecessary processes under the name of “Agile” is, in my experience, the most abused part of the practice. For instance, daily or frequent standup meetings are very effective for encouraging frequent collaboration and communication between your team members. However, if the traditional “weekly development meeting” is simply expanded to a “daily development meeting”, it only achieves 5 times more wasted time.

Working software over comprehensive documentation

The most important thing in a software organization is consistently creating software that provides value. Frequent collaboration with your collegagues often replaces the need for short-lived documentation. Rarely, does an internal design document or test plan add value to a product suite; while actual development or test execution can produce another valuable release.

The pitfall often found in a hybrid approach is not usually around typical documentation such as test plans for design documents. Instead, organizations adopt traditional practices such as weekly status reports and require so-called-Agile “daily” status reports. Daily status reports are just another form of comprehensive documentation leaving less time for working on software!

I am sure many people experience issues with Agile development while also seeing huge improvements over the traditional practices. I am very interested in hearing any feedback or opinions. In a follow-up blog, I plan to address the other two theorems:

Customer collaboration over contract negotiation
Responding to change
over following the plan

In Agile Software Development
Comment (0) Read More...


Posted by: Alexander Bibighaus on

Switching IDE's has always been something I feel is important to keep an open mind about. I learned this early on when I was an emacs fanatic. I started software development in a Unix/C environment where emacs and vi were the two editors of choice (or debate). Despite all of the vi/emacs wars , my experience was that both came in handy, but at different times.

I recently feel this way about Netbeans vs Eclipse in the Java IDE world. Both IDE's contribute different tools to a Java developer that are extremely useful.

Let's take Eclipse for example. I like Eclipse's efficiency. Everything takes less clicks! In addition, the SWT toolkit still feels and performs better than any Java application out there. Netbeans continues to have small quirks about it that cause discomfort for the user because the application does not behave as a normal native application. Something as simple as managing the cursor in the code does not feel natural to me. So, the “Everyday IDE” still goes to Eclipse.

On the flip side, Netbeans has far more integrated tools and wizards than Eclipse. Netbeans has a rich set of wizards and tools for mobility, J2EE, Web development etc. Moreover, the Java Profiler is excellent! The best part about Netbeans is that it is one coherent tool from a single vendor. The “Most Complete IDE” goes to NetBeans.

Netbeans Visual Development tools are the first visual tools for Java I can say I enjoyed. The best part is the ability to integrate manually written code with the visual designer and vice-versa. In addition, the visual designer generates simple code. The generated code is straightforward Java that anyone unfamiliar with the visual tools would understand. The “Most Innovative IDE” goes to NetBeans for finally giving Java a set of useful visual tools.

Eclipse has a one big leg up on Netbeans. Eclipse RCP is a fantastic development framework. It is rich in features and has a unifying effect on product development. Anyone thinking about developing a desktop application should seriously consider Eclipse RCP. The “Best Application Development IDE” goes to Eclipse because you should be developing RCP applications in that case.

In conclusion, just as vi and emacs both brought different ideas as an editor, it is worth the effort to learn both. You will find that rather wasting your time arguing for one or the other, you just have more tools in you tool chest since you tried them both!

In NetbeansIDEEclipse
Comment (0) Read More...


Posted by: Alexander Bibighaus on

Solar Powered iPhone I recently read on ecogeek.org, that Apple filed for a patent for “solar cells on portable devices”. I'm a bit skeptical, but solar re-chargeability might be a nice feature for the iPod or iPhone. I still do not see sitting on the grassy bank of Barton Springs Pool with my solar powered Macbook Pro; I might exceed my own geek tolerance and be forever doomed as a “geeko freako” . However, I could put it to use at ACL Festival, for example. Given there is never a shortage of sunlight at ACL Fest, my iPhone should stay charged well into the night. Then, I might avoid wandering around aimlessly; tripping over chairs; looking for my friends because my phone died from the 100 text messages I sent during the day. It also might come in handy while traveling. Instead of worrying about whether I would actually need that tourist map I left on the steps of Gaudi’s La Sagrada Famila, I could concentrate more on the bus that is about to hit me as I attempt to cross Las Ramblas staring at my zoomed in map on my phone. I guess it might have a bad side, Austin, TX has a lot of sunny days and the ole “Honey, I didn’t get your call because my cell phone died” excuse might not work during the summer. Anyway, the more I think about this solar powered Apple gadget, the closer I get to a nerdnirvana!

In Untagged 
Comment (0) Read More...


Posted by: Alexander Bibighaus on

A long time ago, I was on a NOLS adventure in the middle of the Olympic mountains. My group was resting one day high above the tree-line in a snow covered area when we found a small, but steep bank of snow ... perfect for headfirst nosedives. It all seemed harmless at the time, until our guide angrily reminded us that whatever choices we make, the fact remains, we must weigh the risk versus the reward. Shocked at first by his reaction, we all suddenly had the realization that given our surroundings and circumstances, the risk we were taking was much greater than the reward.

This article about Twitter recently reiterated to me some real risks with Ruby on Rails. Whether or not Twitter is abandoning Ruby on Rails, the risk of a severely flawed framework remains.

Ruby on Rails is a language and platform that makes web application development quicker and more maintainable. One of its strength is that the Rails Framework enforces consistency in style and encourages code reuse. Past that, Ruby as a language is just another language. Rails is an innovative framework, but it is only a framework. Many arguments are made regarding the technicalities of Ruby and other languages.

I do not wish to rehash these arguments; but instead, I make an assertion that by choosing the Ruby on Rails platform in an "Enterprise" environment, your organization is taking unnecessary risks considering its surroundings.

For the last two years or so I noticed a new wave of energy surrounding Ruby on Rails. I encountered some very strong proponents of Ruby on Rails who wanted to use it in an Enterprise setting -- I always had one simple concern:

Ruby on Rails is a two tiered platform; thus, fundamentally flawed. A Ruby on Rails application is doomed to scalability issues. So while it may be fun implementing a web application using a new innovative platform, it will not be fun when your company is finally on the verge of success only to discover it has a severely under-performing application on a platform that provides few options to scale. Twitter anyone?

Now, consider the recent support that companies such as IBM have put behind a long time leading web application language, PHP. By leveraging PHP, a developer can now overcome many of the "ease-of-development" drawbacks of developing a traditional multi-tiered Java based web application, but still have the facilities of a highly scalable application server environment such as WebSphere XD.

Much like sledding down a hill, creating a simple web application using Ruby on Rails has its advantages. However, when you consider the surroundings of an Enterprise Environment, it is hard to consider any situation that Rails is worth the risk.

In TwitterRuby on RailsPHP
Comment (4) Read More...


Posted by: Alexander Bibighaus on

 Apple's iPhone represents a revolutionary mobile platform that has attracted people of all sorts to download the SDK and take a look.  Today, it seems I search the internet for "iPhone" related information only to find hundreds of rants.  Most rants are either about the lack of Flash and/or Java support for the iPhone. Perhaps this is because the world is full of developers who know Java or Flash, but not Objective C?

After I perused the SDK, frankly, I was impressed.  I believe the iPhone combined with the SDK is a highly versatile  device with a level of programmability that makes you wonder about the limits of what can be achieved.

The multitude of rants did inspire me to ask the question:  "Why does Apple not support Java since most all mobile phones support Java ME?"  Sifting through the diatribes of opinions, I found an interesting older blog that talks about how Apple could, if they wanted, ship a software upgrade to enable Java. Sounds to me that Apple is hedging their bet by choosing a chip processor that supports embedded Java acceleration engine called Jazelle.

Until then, it is an exciting new platform that requires a steep learning curve. Learning is what we developers enjoy doing, right? 

In java
Comment (0) Read More...