Who’s On Phirst

Official blog of Phurnace Software.

Archive >> October 2008

Posted by: Carey Benge on

Sell the benefit, not the feature!
Some general well accepted observations about selling in general.

  • People don’t buy a newspaper. They buy the news! - Unknown
  • Last year, Americans bought twenty million ¼ inch drill bits. Not one of them wanted a drill bit. What they really wanted were ¼ inch holes! - Unknown
  • Don’t talk machines, talk the prospect’s business - John Henry Patterson, founder, NCR
  • In the factory we make cosmetics, but in my store we sell hope! - Charles Revson, founder, Revlon Cosmetics

When Michael Faraday invented the first electric motor, he wanted the interest and backing of the British Prime Minister William Gladstone. So Faraday took the crude model—a little wire revolving around a magnet—and showed it to the statesman. Gladstone, obviously not interested, asked: “What good is it?”

Faraday said, “Someday, you will be able to tax it.”
  • Don’t lose a sale by talking too much! We call this premature elaboration!
  • People buy for their reasons, not ours!
  • A key to selling is to overcome objections.

Joe McGuire knew how to sell. When he was selling Remington Rand electric typewriters in a market dominated by IBM and others, Joe had convinced himself that the Remington electric was the best typewriter on the market. Whenever a prospect made a comment about his typewriter, he would assume they were praising it! He didn’t pretend they were praising it, he believed they were praising it because he believed it was the best typewriter on the market. He had brainwashed himself to believe that because he knew that every salesperson had to learn to sell himself first.

When a prospect would ask how much it cost, Joe would answer, ”That’s the best part about it—only $635.” Some prospects were surprised and would respond, “$635?!” At that time, a manual typewriter cost about half that. But Joe would answer, “I knew you’d be surprised. Most people would expect it to cost a good deal more than that.”

In Untagged 
Comment (0) Read More...


Posted by: Wesley Willard on

Scala is yet another modern programming language which has received a lot of attention in the last few years. It compiles down to Java bytecode, therefore can take full advantage of existing Java libraries.

I'd like to take a few moments to share a couple of examples of one area that I think Scala shows great strength, processing of XML data. For my examples, I will be using XML data that has been aquired through using the WebSphere Portal tool, xmlaccess. This tool accesses a portal instance's configuration data and returns an XML file that can in turn be used to modify the portal's configuration.

So, assuming we have an XML file that has been created via xmlaccess, we can then use Scala to process it. To load the file, we define a Scala object, import some library packages, and then call :

object ScalaXML extends Application {
import scala.xml._
import scala.collection.mutable.HashMap
import scala.collection.jcl.ArrayList
import java.util.Set
import java.util.HashSet
import java.util.Map
import java.util.TreeMap

//
// Load the XML file
//
val xml = XML.loadFile("test.xml")


In Scala, the '_' symbol serves the same purpose as the '*' in Java in an import statement. The XML.loadFile takes a file path, and creates a val variable, which is immutable. The value in the variable 'xml' is now the parsed XML data. This statement displays the simplicity of coding that is also makes Scala very powerful. Java would require several lines of code to do the same thing.

Next, we do a simple XML pattern match to find the version of the XML data that is in the xmlaccess file.

//
// Search for an XML element with an attribute named
// 'version', and print out the value of that attribute
//
println("Version " + ( xml \\ "@version").text)


The text method is a method on the Node class, and is used to access the 'version' attribute's value. The method println is a method on the Scala class scala.Console, which is implicitly imported.

Here is an example of creating a Scala Map of the elements from the file:

//
// Create a Scala Map by pattern matching 'Skin' elements
// The map's value object is the map of attributes
//
var oidMap = new HashMap[String, MetaData]
for (val entry <- xml \\ "skin") {
val objectid = (entry \\ "@objectid").text
val attributes = entry.attributes
oidMap += (objectid -> attributes)
}


The Scala Map functions the same as a Java Map, but uses some different syntax for adding objects. The '+=' symbol is actually a method defined on the class HashMap. In this example, the variable 'objectid' is the map's key, and 'attributes' is the map's value for each entry. We have a for loop here, in which the values of an XML pattern match are assigned to the val variable 'entry'.

To illustrate usage of a Java class in Scala, here is the same for loop, but now we are creating a Java TreeMap:

//
// Create a Java Map of the same elements
// The Set's value object is again the attributes
//
var oidJavaMap = new TreeMap[String,MetaData];
for (val entry <- xml \\ "skin") {
val objectid = (entry \\ "@objectid").text
val attributes = entry.attributes
oidJavaMap.put(objectid, attributes)
}

Now, let's process the Scala Map:

//
// Now iterate through the Scala Map to create
// a new List of Node which contains new Element
// objects replicating the original XML for the Skin
//
println("Iterating through Scala Map");
var nodes = new ArrayList[Elem]()
oidMap.foreach{ (nvPair) =>
val objectid = nvPair._1
val attributes = nvPair._2
var elem =
var newElem = elem.%(attributes)
nodes += newElem
}

This loop will create a new Scala ArrayList. The foreach construct allows you to iterate through the Scala Map, executing the body of code enclosed in the braces (a closure) with the argument 'nvPair'. Closures are common in functional languages like Scala, where functions can be passed around as arguments. The elements of our new list are of type Elem, even though we do not explicitly declare a variable of this type. Scala is able to infer the type of the variable from the text on the right side of the '=', which is a well-formed XML tag. The '%' operator is a method on Elem, an returns a new Element that contain the updated attributes in the variable 'attributes'. Because we are operating on a Map, the variable 'nvPair' is a key-value pair, which can be access with the _1 and _2 syntax for key and value, respectively.

We can output our new list as XML by doing the following:



//
// Create a new XML snippet with the Node objects from above
//
def xmlString =

xsi:noNamespaceSchemaLocation="PortalConfig_6.0.1_1.xsd">
{nodes}

//
// Output a prettied-up version of the new XML
//
println( new PrettyPrinter(80 /*width*/,4 /*indent*/).format(xmlString) )




This code shows us again how you create an XML object by simply in-lining the XML data. You can also embed the values of variables in this XML, as we do with the variable 'nodes'. Scala provides a built-in "pretty print" class, PrettyPrinter, which is used to make the output more readable.

The last bit of example code shows how you can use what looks like plain old Java to iterate through our previously created Java Map.

//
// Iterate through the Java Map and print out some attributes
//
cnt = 0;
println("Iterating through Java Map");
var iterMap = oidJavaMap.keySet().iterator();
while (iterMap.hasNext()) {
var key = iterMap.next();
var attributes = oidJavaMap.get(key)
var objectid = attributes.get("objectid")
println("Objectid " + cnt + " is " + objectid.get)
var resourceroot = attributes.get("resourceroot")
println("Resourceroot " + cnt + " is " + resourceroot.get)
var uniquename = attributes.get("uniquename")
println("Unique name " + cnt + " is " + uniquename.get)
cnt += 1
}


This is pretty straight-forward code, and look almost identical to Java code. You might notice how we access indvidual attribute values with two different get methods. This first is a method on the class MetaData, which is the abstract base class for the element's attributes. This returns an Option object, which also has a get method. This second invocation returns the value of the attribute.

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


Posted by: Shawn Spiars on

 We use the Eclipse Rich Client Platform (RCP) extensively here at Phurnace Software. Because of that and my years of experience, I was recently invited to do a presentation on the Eclipse RCP at a technical user’s group in Silicon Valley.

Preparing my talk got me thinking a lot about how Eclipse has evolved over the years and how misunderstood it often is. I think the most common misunderstanding is that Eclipse is simply a popular open source Java IDE (Integrated Development Environment). It’s true that Eclipse is a very popular open source Java IDE, but that’s just the tip of the iceberg. Eclipse is also an extensible platform for Developing IDE’s, tools, and applications.

Eclipse is built upon a mechanism for discovering, integrating, and running modules called plug-ins. A plug-in is an encapsulation of behavior and/or data that interacts with other plug-ins to form a running program. This plug-in extensibility makes it easy for third-party software tool vendors to integrate with Eclipse and/or contribute to the Eclipse Platform.

One of the coolest things about Eclipse to me, as a commercial application developer, is the extensible framework for building applications. Removing Eclipse’s IDE elements, Java support, and a few other components leaves you with a fairly comprehensive framework for building your own application. Using the Eclipse RCP gives you a huge head start when developing your own application and allows developers to focus on the core application rather than the plumbing. Another big advantage to using Eclipse RCP for your application framework is that when you need to add functionality there are so many available Plug-ins to leverage rather than writing everything yourself. For example, when Phurnace needed an XML Editor in our Phurnace Deliver product, we simply bundled the XML Editor from the Web Tools Platform (WTP) and we had an awesome, free, XML Editor as part of our offering.

For more information on the Eclipse Rich Client Platform check out these links.
Eclipse Rich Client Platform FAQ
Eclipse Rich Client Platform Wiki

In Eclipse
Comment (0) Read More...


Posted by: Ann Nguyen on

"Mommy, you have to think GREEN"!, my five year old uttered this sentence one day when I picked him up from preschool. At first, I did not comprehend what he had told me and dismissed it as his babbling. Later that evening, while reviewing his take home folder, it dawned on me that preschoolers are now taught the concept of recycling and conservation.

Everyone is recycling these days, the City of Austin has already started the "single stream" recycling program, allowing residents to recycle more items with less hassle. I have a big 90-gallon cart that I can put all my recyclable items in and every day more components are being accepted as recyclable.

The City of Austin/Capital Metro transportation system slogan is "Turn Drive Time Into My Time". I have found that this is no longer a dream. The commute time from Northwest to Downtown Austin is stressful for my daily routine but the city bus transit system is so good now that I have began to use it to get me to and from work. It is wonderful! While sitting on the bus, it is my time. The express bus comes with Wifi and bike racks as well. For the route that I have chosen, using the bus system only costs me 10 to 15 minutes more than if I would have driven myself. They really have made it so convenient that it is hard not to take advantage of it. I also get more exercise in my daily routine while walking to and from the bus route and my office.

If you have glanced at the news lately you cannot help but notice that the Dow Jones Industrial Average has endured its worst weekly loss in its 112 year history. Riding the bus also saves my pocket book - gas is not exactly cheap!

Conserve the environment by riding the bus and save some money! This is a combination that I have to say yes to. I do want to reduce my carbon footprint and want to minimize the cost of cleaning up the environment for the younger generation. The next generation already has to take care of social security for all of us (I honestly do not see how they could do it, there are too many of us and too few of them), much less bear the cost of cleaning up the earth.

(A carbon footprint is the measure of the amount of carbon dioxide -- the major man-made global warming greenhouse gas -- that goes into the atmosphere as you go about your daily life.)

In Untagged 
Comment (0) Read More...


Posted by: Jessica Gass on

Are You Tired of Having to Troubleshoot One Server at a Time?
Are you making necessary updates in a serial fashion? Phurnace Deliver™ can perform multiple Snapshots and Updates at once. So, you can Snapshot and Update all of your Application Servers at the same time. Let’s hear it for multi-threaded applications!

Need to Troubleshoot Application Server Configuration Problems?
How can Phurnace Deliver™ help troubleshoot my application server configuration problems?

Use Deliver to take baseline Snapshots of your “trouble free” application server configurations. Then when problems occur use Phurnace Deliver's™ “Compare Configurations” feature to quickly view all changes between the baseline Snapshot and the current configuration.

For example, your problem configuration might show parameter values that have been changed or a new application that has been deployed on the server. Once you have determined the problem Phurnace Deliver's™ “Install” feature can quickly apply the necessary changes to your application server.

Enhancing your Virtualization Initiative
The Virtualization trend is being driven by hardware cost savings and the reduction of time spent on setting up and managing applications. With Phurnace Deliver™, we help you take your virtualization to the next level.

With Virtualization today you are required to have a library of server images that you bring up and down depending on the changing demands in your organization. Perhaps during peak times you have more of the transaction processing servers online, but at night it is better to have more servers working on batch jobs. With virtualization you are able to have much higher utilization of your infrastructure, therefore saving you money on the management and time spent on server provisioning.

Phurnace Deliver™ takes those same value propositions and brings them to the application layer. With Phurnace Deliver™ you can dynamically allocate applications to the up and running app servers as well as automate the set up of cluster size, memory allocation, or hundreds of other parameters. Now with Phurnace Deliver™, you can dynamically take applications off of a cluster to free up resources for more important applications and then bring them back online after the peak load time has passed.

A common use case example:
Imagine that Denise is responsible for a medium sized server environment of 100 application server JVMs. On those JVMs are 30 applications, running in a variety of topologies. At peak load times there are 5 applications that are critically important. Denise would like a way to dynamically add server capacity to those applications. Right now Denise could manually add and delete applications from the various clusters, but doing that is very time consuming and error-prone. The environment most likely is complex, with a series of virtual server images with the applications deployed with an array of different configurations -- but with that number of applications and servers, it is too resource intensive to build a server image of every permutation. Denise can’t feasibly take full advantage of the virtualization.

With Phurnace Deliver™ the story is fundamentally different. With Phurnace Deliver™, Denise can decide to add or delete an application from a cluster on the fly and have all of the changes take place in real-time; no server down time and executed in an entirely automated process. This allows her to scale the capacity of her applications up and down depending on the resource demand: making better use of her servers and delivering improved overall performance. Now, that is the true promise of virtualization. Don’t go only half way, extend the benefits of virtualization all the way to the application layer – with Phurnace Deliver™.

Secure Your Phurnace Deliver™ Artifacts
How can I use my source control system to secure my Phurnace Deliver™ artifacts?

 

  • Within the “Deliver Navigator” view right-mouse click on your project and select “Team” and then “Share Project…” from the popup menus.

  • From the “Share Project” wizard select either “SVN” or “CVS” to specify your source control system. Press the NEXT button.

  • Enter the URL and credentials required to connect to your source control system. Press the FINISH button and your project along with all your snapshots and server profiles will be saved and versioned within your source control system.


WebSphere Process Server headaches?
Phurnace Deliver™ can help you manage your WebSphere Process Server too. Just use the Template="defaultProcessServer" attribute for your Server's elements when creating them.  Phurnace Deliver™ can help you manage any application based on WebSphere, including WebSphere Process Server and WebSphere Portal Server.  Check the "About" section in the Admin Console to determine which version of WebSphere you are targeting.

WebLogic Application Versioning
Tired of having to guess what versions of what applications you have installed on WebLogic? Try attaching version numbers and a pointer to the person who made the changes to the "Description" attribute on each object as you deploy them to make sure that you keep you environments in sync.

In WebSphereWebLogicVirtualizationtroubleshootConfiguration
Comment (0) Read More...


Posted by: Jessica Gass on

Date: Thursday, October 30, 2008
Time: 11:00CST
Presenters: Daniel Nelson, Vice President of Products, Phurnace Software

Please join us for an informative webinar that will introduce Phurnace Deliver™ for IBM WebSphere Portal®
Phurnace Deliver will automate your Portal deployments and effectively manage the changes you must constantly make to portlets, apps, themes, skins and content.

During the webinar we will discuss and demonstrate how:

  • Phurnace WebSphere Portal Deliver auto-discovers dependencies, making sure that incomplete deployments are a thing of the past.
  • To move Portal components seamlessly throughout your environment without scripting or manual intervention.
  • To snapshot your Portal environments and discover exactly how they are configured.
  • To compare environments quickly, discovering the root cause of configuration and deployment errors in minutes.
  • Phurnace Deliver’s unique architecture makes migrations across Portal versions faster and easier.
Please click here to register.

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


Posted by: Robert Reeves on

[SCM]? We ain't got no [SCM]. We don't need no [SCM]. I don't have to show you any stinking [SCM]!"

--Your Development Manager (The Treasure of the Sierra Madre)


Software Configuration Management (SCM) is probably the most misunderstood and misapplied concept in development today. Let's take some time to clear up a few misconceptions.

Misconception: SCM is source control

Simply having a Subversion respository does not mean you now how an SCM process. The source is not the final product of your project; and that's what SCM is all about: getting the right product to the right customer. It's the artifacts that result from building the source.

Of course, having a repository for source code is a necessity, but it certainly is not the end point.


Misconception: SCM is builds

Your customer doesn't want source (usually.) What they want is a final product that they can consume, install, test, use. But, a build isn't the final product. You see, just because you have, say, a series of dist directories littered with *-ejb.jar files or even a final EAR file, it's not a final product. Those artifacts have to be in a usable format for the customer. For desktop software, that's an installer. But, for Java Enterprise software, your best bet is Phurnace Deliver.

Your build should produce not only compiled binaries and a README.txt but also a mechanism that allows your customer to consume the build outputs. Simply because the code was checked out and compiled in by Build Forge, does not mean you have SCM. It means you didn't break the build. You must provide a mechanism for reliable and repeatable deployments for your customers.

Misconception: SCM is release management

So, you have your code checked into a VCS, builds are creating something usable for the customer. Now, if you just put it on the FTP server, you're done! Nope. Even if you have a series of directories versioned with codenames (failed engineering projects are my favorite: Edsel, Hindenburg, Titantic, TiVo), you have no method for tracking back to your VCS for bug fixes.

Consider this: Customer A gets a release on Monday. On Wednesday, they find some bugs they need fixed. No problem. Johnny fixed them on Tuesday and you have a build already on the FTP server. But, what Johnny neglected to mention was the uber-buggy experimental code he checked in along with the bug fix. Customer A can't even verify that they bugs where fixed because the new release won't even start. Bummer.

 An SCM process that was able to tie code chnages to bugs would have prevented this problem. At the very least, a change log must come from your build system and be manually reconillied with the bug list. This will prevent suprises at release time.

 

 

In TipsConfiguration
Comment (0) Read More...


Posted by: Nate Dillard on

If you're like me and like to keep up with that latest mobile phone buzz, then you've probably heard the Sept. 23 announcement of the first Android phone called the G1 to be released on T-Mobile on October 22nd. If not, Android is Google's mobile phone operating system, based on the Linux kernel which will run on a phone by HTC called the Dream. What makes Android special is that its software platform is open source! Granted there are some criticisms that it is not, currently, completely open source, but Google announced that part of the OS will be released under the Apache and GPL license.

I've been able to emulate Android on my current device, an AT&T Tilt (aka HTC Kaiser), thanks to developers on the xda-developers forums in order to get a taste of what will soon come to be. I recently installed the Android 1.0 SDK and eagerly look forward to coding some applications. I have high hopes for Android as I'm a fan of both Linux and open source software, but only time will tell.

In Open Source
Comment (0) Read More...