Saturday, June 16, 2007

The Evangelist Dialog - Day 1 (Vancouver - Seoul)

A lot of people tell me I am lucky to be an evangelist for Adobe. Yes - I am but they often don't see the other side of the job. The tireless hours, long trips and endless interviews, press events, speaking engagements, conferences and more.

To illustrate what this job is like, I am going to publish a diary of the next 2 weeks during a trip. Today is Saturday. While most people have the day off, I am sitting at the Vancouver international Airport about to leave for Seoul, Korea. I am excited about riding on Singapore Airlines new 777 Dreamliner in first class. Heard a lot of good things.

I will hopefully arrive tomorrow at suppertime in Korea and get a chance to sleep before going to my first meetings.

TTYL

Tuesday, June 05, 2007

SEO - Search Engine Optimization Tricks

Consider this a gift if you are seeking to lead the search engine rankings with some newer tips and tricks. I used to do this for a living and have tried to stay current over the new technologies as they come out. SEO is generally much easier now that there are fewer search engines to target. Back in the good 'ole days we had to target multiple engines and change the code behind to be specific for each one.

I have a long history of working on search engine projects and feel nothing reveals tricks like building a search engine to see how it works. One project was the Initiative to evaluate XML Retrieval (which I was largely working with Universities on advance ontological and syntax mechanisms) while another one was the GoXML Contextual XML Search Engine launched in 1998, days after the recommendation was done. GoXML is still featured on PatentStorm.

SEO has little to do with indexing the content of a page nowadays. All that does is give you a starting reference point. The indexbot parses your page noting some particulars and provides you a weight with various terms.

The key metrics are:

1. Domain name matches search string (note – since hyphens and periods are removed during the webbots normalization process, things like www.ford.com are equal to www.f-or.d.com). Not many people know this since they do not write code to parse domain names. The hyphens are removed since not many people search on hyphens and the search engine index needs to be as efficient and lean as possible.

2. How many relevant sites that point at the site are very important. I showed some Adobe colleagues how to use this to our advantage to beat out Microsoft and Sun for the term “Enterprise Developer Resources”. All I did was ask that everyone make a signature to their email that said “Adobe Enterprise Developer resources – http://www.adobe.com/devnet/lifecycle” and then go about our normal business of posting to public threads. The index assumed that we must be relevant given the other top sites seemed to have links pointing at Adobes site. In reality, these were only archived email threads with the signature being treated as a link. All the Search Engine saw was “-links to -> Adobe.com. Within 6 weeks we beat out MSDN, BEA, Sun, IBM etc. and are still #1
http://www.google.com/search?source=ig&hl=en&q=enterprise+developer+resources&btnG=Google+Search

3. How people click on the top ten search results in Google. Google uses an adaptive algorithm which is a variation of the GoXML algorithm of which I co-wrote. We had 51 unique patent points in 1998 on this. When you click on one of the top ten results, Google simply tracks the result via a pass through. You can see this in action by doing any search on google, then right clicking the link and copying it. Where you see www.adobe.com/devnet/livecycle/ or get that URL if you copy/cut, when you right click and copy link, that actually translates to http://www.google.com/url?sa=t&ct=res&cd=1&url=http%3A%2F%2Fwww.adobe.com%2Fdevnet%2Flivecycle%2F&ei=JzZkRvzMEZqUgwPkmNmKBw&usg=AFQjCNGx7iKEUn38Kcfk8woBnWtcNueL9g&sig2=ope-x2wZBZhBXtNlk_fj0w

A case study is “Architectural patterns metamodel”. Matt Mackenzie and I wrote a variation of the gang of fours template for architectural patterns using UML 2.0 and linking known uses. It is now ranked #1 since it is the most used template by many software architects. See http://www.google.com/search?hl=en&q=architectural+Patterns+meta+model&btnG=Search

Note that this is referenced by the unique IP address bound form the incoming HTTPRequest header so you cannot spoof it without additional tricks. Since you have to first receive the call back code from google to build the new outgoing request in order for it to register, there is almost no way to spoof it ;-)

4. The meta tags are indexed and useful but only up to a certain point. Many people who have no clue how code works try in vain to do things like META Content=”mountain, bike, mountain bike, mountain bike clothing . Etc. The truth is that the meta keywords are parsed and normalized stripping out both the commas and spaces except for one space or other delimiter to separate the array. All the indexbot see from the above example is “mountain:bike:mountain:bike:mountain:bike:clothing” Any word repeated is generally disallowed completely and interpreted as spamdexing the bot.

5. Any keywords that do not appear in the body in plain text at least once are heavily discounted unless the core content of the page has no visible words, then the indexbot defaults to what it has to work with to establish the baseline weights.

6. Any keywords that appear more than approx. 7% of the total word count for the body are discounted as spam. (Note - this cannot be verified lately but it used to be true in the early part of the decade).

7. Words in large fonts near the top of the page and in the page title weight very heavily. People used to trick the SE’s by making this text the same color as the background. The human would not see anything but the indexbot would. The SE’s caught this trick early on and made a cross reference of colors to nab perpetrators. What many people do not know is that you can beat this by using javascript which the indexbots do not see. A browser’s parser hands this off at a later stage to the rendering engine so they might catch this later. I suspect that Google should catch this trick in the near future.

8. Google overlays the search matrix with an ontology classified by a first order of logic that separates all results into a modal array. The ontological nodes are also ranked at the meta level based on the preceding and mix into the pages dynamically but within the constraints defined by their librarians. That is why a term like “washington” will have results for the president, the state, the university, the actor etc all in the top ten. One way to trick this is to find the least common context then build a site to get #1. Once you have done that, replace the words for the context of your choice and you will usually stay in the top ten since the visibility draws

I have other tricks but have never failed to get any site less than 3rd for the terms including “mountain bike”, aromatherapy, whistler rentals, enterprise developer resources and many others...

Oh yeah - these are the tricks I am willing to share. I am still keeping some others as closely guarded secrets. It's not hard to figure out since it is all based on simple logic. Enjoy and good optimizing. Post your success back here if you find this helped.

Tuesday, May 29, 2007

Gas Prices are not high - stop whining already!

Okay - gas at the pumps is now about $3.50 USD per gallon. Seems steep right. Well, it's not really out of line. Sure in 1980, gas cost only $1.13 per gallon. That was 1980 people!!! You could also buy a house for under $100,000 and a car for under $8,000. In inflation adjusted figures for 2005, the real price was $2.86 (based on US Census figures for inflation adjusted prices). In 1955 gas was only $0.27 per gallon. In a time where a brand new house AND car could be bought for under $10,000, this would be the same multiplying the whole equation by ten. Hence Gas goes from $0.27/gallon to $2.70 per gallon and the car AND house goes from $10,000 to $100,000 USD. If you think gas is to high at $2.70 per gallon, consider your range of options for buying a new house and car in the US for under $100,000. Can't really to it. the US national median house price is actually about $220,000 as of August 2005.
If you raise the price of gas to be in alignment with housing and new automobiles, it should be around 2.2 times the $2.70 in terms of 1955 inflation adjusted dollars or approximately $6.00 US per gallon. Coincidentally, that seems to be what many other countries pay.

On top of that, the US has one of the lower prices for gas at the pumps world wide. See this graph to see how really upset people would be if placed in a country like Norway where gas is over $6.00 USD per gallon. Us Canadians have been paying $1.35 per litre at the pump (approximately $5.00 USD perUS gallon). The Dutch pay $6.48 per US Gallon!

The price of gas has largely remained stable over the last 40 years and in terms of inflation adjusted dollars, has not become a luxury. Yes - in the last few months we have witnessed US prices that appear to almost approach the median price the rest of the world pays but we have not yet even seen the USA get into the expensive half of the chart. In short, the US still has some of the cheapest gas in the free world.

Also - consider that higher prices might have positive effects. Perhaps even less people on the roads in their own cars, more people car pooling or sharing. If higher prices make people think, let's think about how we got into a position where the gas and oil companies have the power to unilaterally raise prices over us and screw us in the pocketbook. We got ourselves into this position by becoming Dependant upon it in the same manner drug addicts feel the financial wrath of their dealer.

What I would really like to see? I would like to see a real Energy policy in the USA. The US an dCanada could lead the world in alternative energy innovation and use if the right people take control. Get rid of the brats who still falsely consider Hydrogen as a viable terrestrial energy storage device and start real research into the net energy capabilities of new systems. My great Uncle Stig runs the world's largest and cleanest bio-mass energy conversion plant in Finland. We shoudl be doig the same here. The California wind energy policy is a good move. Solar works.

And I would like to see more people stop and think before winging on about how costly gas is. it really isn't.

Wednesday, May 23, 2007

SOA : the real goods

This series on Youtube called "Greg the Architect" is brilliant. it left me ROTFL..

Monday, May 21, 2007

Adobe MAX 2007 info

The amount of work going into MAX 2007 is unbelievable. Preparing our annual event for North America, Europe and APAC regions is a monumental task to take on. To date, I have about 500 emails from various parties (each taking a minimum of 5-10 minutes to read and respond to or about 50-100 hours) plus almost a full GB of materials to go over. It takes a serious commitment, not just from the track leaders but from all involved. Rom Portwood and Sarah Eaton are putting their hearts minds and souls into MAX 2007 and we have tons of community involvement planned this year.

Some of the other evangelists on our team have done the same and from what I have seen so far, MAX 2007 will not be something you want to miss. Ted Patrick, Ben Forta and I have asked for a received permission to do a full blown code camp style event. Anyone reading this that would like to be involved int eh code camp, please contact one of us and we'll figure out a way to fit you in.

The MAX 2007 website will be going live soon with registration and the content.

Sunday, May 20, 2007

A must read entry to music lovers

Ajit's entry on Open Garden's really spoke to me. Not just because the idea fits in with the model of Mix2r.fm for the next generation of music. He nails the ideas that the record industry has to understand and how fans are attracted to music for more than just the bits and bytes that make up the files we transfer.

Technoracle (a.k.a. "Duane's World"): Buying a hot water heater? Read this first. Don't buy Rheem

Rippoff Report!!! Buying a hot water heater? Read this first. Don't buy Rheem: "http://www.ripoffreport.com/reports/ripoff17495.htm"

Technoracle (a.k.a. "Duane's World"): Buying a hot water heater? Read this first. Don't buy Rheem

Technoracle (a.k.a. "Duane's World"): Buying a hot water heater? Read this first. Don't buy Rheem

Friday, May 18, 2007

Buying a hot water heater? Read this first. Don't buy Rheem

I want to share a personal experience with anyone considering buying a hot water heater in North America. When my wife and I moved into our house in Vancouver, we soon found we needed a new hot water heater. After much choice, we went with a Rheem brand since it was sold to us as a high quality, North American brand with a 8 year warranty. Were we ever taken for a ride though. The warranty turned out not to be worth the paper it was printed on. While the warranty did state it was "limited", we were lead to believe by Hillcrest Plumbing that if anything happened to our hot water heater, it would be replaced within the warranty period. After all, what does warranty mean? According to Rheem, even today you are protected on parts but don't be fooled. They are unscrupulous and are lying to you.

Our water heater let go and we had to call Hillcrest during off hours. They told us that Rheem and Hillcrest are no longer honoring their written warranties and due to a change in design and rules , would not be able to honor their warranty on parts. WFT??? This is a clear case of a large multi national company imposing a unilateral change on a contract due to their own lack of foresight. We, the people are being ripped off.

My advice:

1. Do not believe anything Rheem promises in terms of warranty. They lied to us and did not honor their own written warranty. This website could just as easily be lying.

2. I will also never do business with Hillcrest Plumbing again. I urge you to consider this when looking for a plumber. Get references from any plumber. By contrast, there are lots of reputable firms like Roto Rooter and others who have never ripped us off.

3. Rheem Canada also seems to handle the Ruud brand. Be wary.

4. If you are a contractor looking for a line of water heaters/holding tanks
to carry and install, consider how your customers will feel about you if this happens to them. It will cost you money if too many people experience lies like this.

If you are one of the 10,000 people who read this blog every month, please pass this on to others in North America.

Friday, May 11, 2007

Stupidity knows no bounds!


I am speechless. I am not even sure where to begin addressing this. Someone at Vancouver International Airport actually convinced others to get a budget for a project to tell people how to bring food on an airplane. They developed a small logo for their project. Do they really think we need signs to help us? Did they envision that people are too clueless to figure the three steps out for themselves (1. buy food; 2. ask for it "to go", 3. bring it on plane)??? WTF??? These signs are everywhere.

This is one project I am glad I was not in any meetings for. I would have strangled someone.

Duane's World 2007 Java One "Coolest in Show" award

Every year I blog after Java One and recognize one company, demo, entry, exhibit that is better than all others. In 2006, this award went to a robotic Lego and Java demonstration. This is never an easy task since there are so many cool things at Java One. This year is no easier. After much internal debate and watching the "wow" factor from peopel seeing things for the first time, I bestow the 2007 Duane's World "Best in Show" award to the Java powered helicopter. Das ist ein sehr gute Hubschrauber!



Runners up were the Sun SPOT (Small Programmable Object Technology) and the Quebec University students Java submarine. the latter failed to make tops given they have not yet included an adaptive algorithm to learn and re-program thrust bursts based on Causality Event Programming models (The thrusters usually over-compensated in attempts to level the device). While it is not "kinderspiele" (Child's play), it could be done with minimal effort. Quebec has a long history of great technology and good hockey goalies so I look forward to seeing what they bring next year.

Disclaimer: I excluded the Flex, Apollo and Java PDF code from Adobe.

Thursday, May 10, 2007

Java One 2007 source code and slides

Java One 2007 is full on! My favorite was the helicopter but I also can't wait to start developing with the SunSpot devices. I think I am going to build a solar tracking device.

Anyways - thanks to all of you who came to my talk. I was overwhelmed with the great reception and applause and felt really humble to be appreciated by such an esteemed and knowledgable peer group. I don't use Java every day so I was happy to see all the code I wrote for you compile the first time. Felt like I dodged a bullet.

Here is the first class (DuanePDFClass2.java). You will need to download the XPAAJ.jar file to make this work. The other class is directly below. You should also know that we are moving towards the XML friendly version of PDF ("Mars") which will allow any developer to work with PDF XML formats using the XML parser in their native language. For the long term, this is a much better solution than us developing libraries for each and every programming language.

import java.io.*;
import java.util.*;
import java.awt.image.DataBuffer;
import com.adobe.pdf.*;

public class DuanePDFClass2 {
public static void main(String[] args)
throws FileNotFoundException, IOException

/* Make sure we have the correct args.length() and call PDFExtract() */

{
String inPdfName;
if(args.length != 1 )
{
System.out.println("\nCommand line format: java classname pdf-file");
return;
}
else
{
inPdfName = new String(args[0]);
PDFExtract(inPdfName);
}
}

public static void PDFExtract(String inPdfName)
throws FileNotFoundException, IOException
{
System.out.println("\nOpening PDF with DuanePDFClass2...");
PDFDocument doc = null;
boolean b = false;
FileInputStream inPdfFile = new FileInputStream(inPdfName);
try {
doc = PDFFactory.openDocument(inPdfFile);
} catch (IOException e) {
System.out.println("Error opening PDF file :" + inPdfName);
System.out.println(e);
}
if(doc == null)
System.out.println("Cannot open PDF file : " + inPdfName);
else
System.out.println( inPdfName + " was successfully opened.");

System.out.println ("Document Version = " + doc.getVersion());

System.out.println ("PDF is " + doc.getNumberOfPages() + " pages long.");

/*Save PDF to file*/
System.out.println ("\nSaving document ... ");
int j = inPdfName.lastIndexOf(".");
String outPdfName = inPdfName.substring(0, j) + "_saved_by_Duane_at_JavaOne2007" + ".pdf";

InputStream inputStream;
inputStream = doc.save();
b = false;
try {
b = saveFile(inputStream, outPdfName);
} catch (Exception e) {
System.out.println("Error saving PDF file.");
System.out.println(e);
}
if(b == true)
System.out.println ("Document was saved to file : " + outPdfName);
else
System.out.println("Document was not saved to file.");

System.out.println("\nExecution of DuanePDFClass1 has finished.");
}
/**
method to save InputStream to a file.
*/
public static boolean saveFile(InputStream is, String filePath)
throws Exception
{
boolean retVal=false;
byte[] buffer = new byte[10240];
FileOutputStream outStream = null;
try
{
outStream = new FileOutputStream(filePath);
int len=0;
while (true)
{
len = is.read(buffer);
if (len == -1)
break;
outStream.write(buffer, 0, len);
}
outStream.close();
retVal = true;
}
catch (IOException io)
{
System.out.println("Writing the array of bytes into the file "
+ filePath + " failed.");
throw new Exception(
"Writing the array of bytes into the file "+ filePath +
" failed in saveFile");
}
return retVal;
}
}


Here is the second class which casts the input stream handed off by the Document factory class into a buffered stream reader and strips out the XMP metadata.

import java.io.*;
import java.util.*;
import java.awt.image.DataBuffer;
import com.adobe.pdf.*;

/* XMPExtractSample
* by Duane Nickull, Adobe Systems Inc. dnickull@adobe.com
* Copyright (c) October 25, 2006 - all rights reserved
*
* Use this at your own risk and don't whine/winge on to me if it doesn't work.
* You will need to have XPAAJ.jar from Adobe labs.
* Written and tested with JDK 1.5 on a mac w/osx 10.4.7

*/

public class XMPExtractSample {
public static void main(String[] args)
throws FileNotFoundException, IOException

/* Make sure we have the correct args.length() and call PDFExtract() */
{
String inPdfName;
if(args.length != 1 )
{
System.out.println("\nCommand line format: java DuanePDFClass1 pdf-file");
return;
}
else
{
inPdfName = new String(args[0]);
PDFExtract(inPdfName);
}
}

public static void PDFExtract(String inPdfName)
throws FileNotFoundException, IOException
{
System.out.println("\nOpening PDF with DuanePDFClass1...");
PDFDocument doc = null;
boolean b = false;
FileInputStream inPdfFile = new FileInputStream(inPdfName);
try {
doc = PDFFactory.openDocument(inPdfFile);
} catch (IOException e) {
System.out.println("Error opening PDF file :" + inPdfName);
System.out.println(e);
}
if(doc == null)
System.out.println("Cannot open PDF file : " + inPdfName);
else
System.out.println( "\n" + inPdfName + " was successfully opened.");

// Export the xmp metadata from the document
try {

//Call the PDFDocument object's exportXMP method.
InputStream myXMPStream = doc.exportXMP();

//Get the byte size of the InputStream object.
int numBytes = myXMPStream.available();
System.out.println("\nNumber of XMP Bytes found is " + numBytes + "\n");

// Read into a Buffered Reader Stream.
BufferedReader d = new BufferedReader(new InputStreamReader(myXMPStream));

// Iterate through the XMP object and print each line
String xmpLine;
while((xmpLine = d.readLine()) != null)
{
System.out.println(xmpLine);
}
// Find the Physical Memory Reference of the object
System.out.println("\nXMP InputStream is in physical memory at -> " + d);

//Create an array of bytes. Allocate numBytes of memory.
byte [] MDBytes = new byte[numBytes];

//Read the XMP metadata by calling the InputStream object’s read method.
myXMPStream.read(MDBytes);
} catch (IOException e){
System.out.println("it went really bad" + e );
}
System.out.println("\nXMP Extraction has finished.");
}
}



Friday, May 04, 2007

Web 2.0 Definition? What is the Web 2.0?

I have been writing a lot lately for an upcoming book on the topic of Web 2.0 with James Governor and Dion Hinchliffe for O'Reilly. During the process, we have done an amazing amount of research in an effort to quantify some of the patterns surrounding the concept. The work was actually quite intense and started with examining a single table put forth by Tim O'Reilly. The table illustrated examples of what was web 1.0 vs. web 2.0. Many people have struggled to define and understand "Web 2.0" At this point, defining it probably won't happen due to the fact that there are so many differences in what people think it is, however, anyone can mine it for knowledge. I personally don't see this as a problem since there seems to be a lot of consensus surrounding what is and is not web 2.0. While definition has possibly slipped away, the ability to share the collective knowledge on the subject has not. The knowledge of web 2.0 can be caught and expressed in architectural patterns and models. This blog post is a teaser of the upcoming book on that exact subject.

So what are "Patterns"? A pattern is a repeatable solution to a frequently occurring problem. The value of patterns is that it captures the solution knowledge independent of the implementation which then allows the pattern to be re-applied to other instances of problems in different contexts. An example of a pattern is to note the collaborative tagging (A.K.A. "Folksonomy") and commenting patterns on Flickr, then realize that the same mechanism can be used for video, audio, scientific research, news articles etc. Entrepreneurs in general should be very interested in this book. New start up ideas will be plenty abound.

We started with this diagram:



From each of these examples, patterns were distilled from the instance. The methodology left us with a huge collection of patterns that are documented and can be used to compare the old way to the new way. From these patterns, we were able to create a model based on further abstracting the main concepts required to fulfill the patterns. The model itself is abstract but from the model we were able to create a reference architecture for developers and architects. The idea is that the reference architecture is abstract of all technologies, implementation detail yet presents a great technology component view that can be used to help guide architects and developers as they build their applications.




The value of this methodology is that anyone can take the reference architecture and build their own specialized architecture from it. The model is simple and reflects abstract concepts that are present in most of the patterns. So what does the model look like and what is different? The model is shown below:



The model is definitely different than the old internet in a number of ways. In order to reflect the capabilities necessary to fulfill the patterns mined form Tim's examples, developers need to extend the basic client server model. Instead of a simple "server", the Services Tier of the model reflect the core tenets of Service Oriented Architecture, itself a a core pattern of Web 2.0. SOA is a pattern that can be used to match needs and capabilities under disparate domains of ownership. In this context, SOA is independent of any specific implementation or technology family such as web services and aligned with the abstract definition in the OASIS Reference Model for SOA. SOA allows "capabilities" to be offered for consumption to potential consumers on a common fabric. The common fabric is defined in terms of "Reachability and Connectivity", often implemented by using common standards and protocols. The concept of web 2.0 as an open platform relies on these open standards and technologies to function. Work such as the Service Component Architecture will rely on this type of infrastructure to exist in order to work.

The services tier offering these services is necessary to fulfill many patterns. To deliver a Rich User Experience (RUE), the capabilities must be leveraged to add more depth to interactions between users. To enable people to build mashups or offer Software as a Service (SaaS), the services tier must beliver the capabilities whilst abstracting the client from how the capabilities are being fulfilled.

The the middle tier of Capabilities and Reachability, we have seen huge changes since the first iteration of the internet. The development of Web Services standards and new data serialization forms such as XML to supplement the simplistic HTTP and HTML model form the first internet are necessary to fulfill the promise of the first iteration of the web. Guys like Bob Sutor, David Orchard, Marc Goodner and Eric Newcomer have all been working on these new standards and protocols for a long time. Why? They are absolutely necessary for Web 2.0. The Web must be open and mashable (new word??) to enable the patterns.

Additional patterns beyond simple "Request-Response" are necessary to fulfill core patterns like the "Synchronized Web". This latter pattern being used a lot for online gaming, collaborative applications and other synchronous architectures of participation. We have seen the rise of AJAX as an asynchronous model and various other mutations to make the patterns reality. Models for interaction include Probe and Match, Request-Response, Subscribe-Push, Synchronized, Asynchronous and more.

On the top side of the model, the old notion of "client" has been widened to become a "Client Applications/Runtimes". The purpose of this is to perform client duties and prepare the ultimate user to connect to the web. We noted that there is a new entity above the client. This entity is the User. The user is now a core part of the model for the internet and vice verse. Users are involved is so many patterns it would be difficult to ever devise an inclusive list. The Collaborative Tagging pattern ("Folksonomy), Collaboration-Participation Pattern, Rich User Experience Pattern, Semantic Web Patterns, Synchronized Web Patterns, Declarative Living and many others all include the notion of the user. Note that 'users' are not limited merely to humans but may include applications or other agents.

Some more about the model? This model can be used as a pattern between any two entities on the web. It is not about simply making one model for a platform of all interconnected devices. The model can be used in Peer to Peer patterns (one peer has a capability that gets consumed by another peer using protocols like BitTorrent via services for the ultimate benefit of a human actor) or other patterns like the Web Services * architecture, reflected in a great book by Chris Kurt.

Note that we do not consider the model to be the one single model that forever defines Web 2.0. It is simply "a" model which people can use, even if they disagree with it. If you disagree, you still have a model to use as a point of reference to describe your disagreements.

The reference architecture was presented during a recent session at Web 2.0 in San Francisco but I am not going to repost it here just yet. It will be the subject of another entry. In true Web 2.0 style, the book will have a sister website that allows anyone to collaborate and contribute to the set of patterns. This will be announced when the book is published.

The list of patterns identified to date is as follows:

Adaptive Software (software that gets better the more it gets used)
Asynchronous Particle Exchange
Collaboration Participation
Collaborative Tagging
Declarative Living
Mashup
Persistent Rights Management
Rich User Experience
Semantic Web
SOA
Software as a Service
Synchronized Web
Tag Gardening
...

Expect this list to grow as the work continues and others start contributing patterns. Note that Rich Internet Applications (RIA's) use a combination of patterns (RUE, Mashup, etc). Patterns themselves may be combined and used together.

Ahh - back to work..TGIF!!!

Wednesday, May 02, 2007

David Linthicum gets SOA - a good read.

I have just read an article by David Linthicum on SOA Reference Models and Reference Architectures. David has explained how the two relate to each other very well and I consider it a good read. There are a couple of points he makes that I am also wanting to expand upon.

In David's blog post, he writes:

"Again, abstraction, one is an instance(s) of the other, if I understand this correctly."

This infers that the SOA Reference Architecture work at OASIS is an instance of the SOA Reference Model. While close, this is not quite accurate. The OASIS Reference Model for SOA is in fact abstract. By definition, an abstract entity cannot have instances, the same definition shared by UML 2.0 and programming languages like Java. The relationship is best described as the Reference Architecture "is based" upon the Reference Model. The OASIS SOA RM TC always knew that there would be multiple SOA works (architectures) based on the Reference Model. Such is the purpose of a model, to allow various architectures to be based upon it which maintaining a common language and understanding of the core concepts, axioms and relationships.

David also writes:

"I urge you to download and read this 31-page document to get some additional details. Also, get involved, if you like. I always love the comeback from standards bodies that deal with criticism and debate around the concepts they put forward: "If you don't like it, join us and change it." Can't argue with that."

and

"You have to give them an A for effort, but you can see where the debates are going to pop up. It's really a matter of understanding, a marketing issue really. I understand different levels of architectural abstractions, but what is really needed is a reference framework or model, and a set of steps to figure out how to build something that's proper for your problem domain."

David correctly notes the true purposes of a reference model here. Even if you disagree with it, it is a point of reference a person can use to explain their variances in definition. For example, if someone claimed that SOA was not what the reference model stated, they have a point of reference for their definition. As such, there will likely never be newer editions of the RM work unless some great inconsistencies are uncovered during he RA works going on in various bodies, companies and vendors.

FWIW - I give David an "A" for his continued clarification of SOA. I'm adding him to my blogroll.

Saturday, April 14, 2007

Major Upset - Team Best Yet beats Team Indecent Exposure

In round three of the winners bracket, Vancouver, Canada based video game team Best Yet upset Indecent Exposure, one the top ranked teams on the MLG pro circuit. In a close match, Conker, BlakOut, Toxic and Nutraways shut the door on their pro competition, advancing themselves to the next round later tonight.

Below - Toxic Euphoria and Nutra take time to chat with a fan between rounds.

MLG Pro tournament - Halo 2 Free For All

From Charlotte, NC

For most of society, video gaming conjures up images of lonely 30-ish geeks or pimply teenagers staring at violent screens in dark rooms instead of participating in real life. For a the growing ranks of amateur and elite competitive players, taking it to the next level means playing in front of millions of fans in live auditoriums with stage lighting resembling a rock concert. Prize money for a single season now tops well over 7 digits. Parents, take note – this is just as legitimate a career as any other.

This weekend, I am attending my first event of the Major League Gaming 2007 campaign kicks off in Concorde, NC as a gopher for team Best Yet (BY). Our team has traveled from Vancouver, Canada and Utah to compete against the world’s finest in the Halo 2 bracket, a game from Microsoft played by millions of players every day. I decided to travel to the event myself to experience what it has to offer. I had preconceived notions that the video game crowd are shy, anti-social types. This is the farthest from the truth I could have suspected. The event itself was like a constant raging nightclub (minus the alcohol, fights, drugs etc.) where friends met, played, conversed and just had a great time. This report is about exposing this world of gaming as it starts to explode from a fringe activity to a mainstream test of intelligence, agility, coordination and strategy.

Before continuing, I have a personal confession to make. I used to be in a chess club. I used to follow Karpov and Kasparov as they met new challengers including IBM’s Big Blue, a super computer that was claimed impossible to beat by humans given it could calculate far beyond the capabilities of the mere human brain. If anyone knows geeks, it is me. The chess matches used to draw out for hours and the boredom could be best described as a mass communal sedative.

The team:

Coming from Argyle High School in North Vancouver, BC, Christopher Nickull (a.k.a. “Conker”) and I set out with two of his team mates at 06:00 Thursday to catch a flight to the event. Players often use pseudonyms representing their alternate personalities. Conker, is well known amongst many in the Halo 2 competitive landscape. Adam, aka "Nutraways", is also a student an North Vancouver’s Argyle School however the twosome met their third and fourth team mates online. Halo 2 is played via the internet so players from multiple countries can compete and even talk to each other during their games. Niko, aka “Blakout” hails from Whiterock, British Columbia while their fourth team member from Utah is somewhat of an international halo 2 rock star. His handle, “Toxic Euphoria” or often just “toxic”, scares competitors and intrigues spectators alike. He has the elitist distinction of finding an “exploit”, a loophole in the Halo 2 code base that allows a player to manipulate the game to their advantage. He also has a very unique style of playing. Together, the foursome is known as the team Best Yet or BY for short. In Halo 2, when a player is shot, the screen says “you have been shot by ” so when they make the kill, the statement is “you have been shot by by “ (as in “bye-bye”). Yes there is a lot of humor in the video gaming world but you have to be quick to catch most of it as the players have developed a language to themselves with terms such as “noobs” meaning “newbies” or those who are new to the game.

I’ve forgot what it is like to be on a road trip with a group of teeneagers but the fun starts with the hotel room which resembles a war zone within minutes. Shown below is the AM shot with Toxic and Blakout ready to get some breakfast while Nutraways can’t be coaxed out of the sofa bed, despite the danger imposed by a potential avalanche of hotel room furniture poised just above his head, ready to fall at the slightest tremor.



While some consider video games antisocial, the competition aspect is anything but. It is a very social event and has hints of all aspects of society. Some teams appear like tough street gangs out of some cheesy Hollywood movie, the only difference is that they are engaged in a high-stress competition and test of strategy and intelligence rather than fighting each other on the streets with chains and knives. Gender, race, religion, age, social status, career and nationality are completely meaningless here. Everyone is equal and has no advantage. I watch Friday night as a twelve year old kid destroys his opponents in one heat which include a twenty something girl wearing a party dress, some motley teenagers, a 30 year old computer nerd type and some guy who looks like an African American football linebacker, weighing in at al least 280 pounds of muscle. It turns out he actually was a football player. There are also a lot of female players who seem to hold their own against the guys. The girl poised below is one of many who ruined the evening for the young men in the crowd by outscoring them.



The weekend unfolds in three separate days for each of the MLG events. This is the first of the year so there are a few bugs in the system but generally everything flows on schedule with plenty of referees and officials on hand to keep the crowds and players in hand (yes – there are actually many who come just to watch). MLG is a top notch event provider and has left nothing to chance.

Early Friday night, players huddle in small groups, often representing their own teams plus a few friends. Each team for the MLG Halo 2 tournament is comprised of four members. Tonight’s action is a free for all though where team members may actually face each other during the contests. The team aspects of Halo 2 is an important component of the competition. The names taken by some of the players are noteworthy. Players take on names such as “Toxic”, “Bag of Sand”, “deathstar” and any other variation you can conjure up in your mind. It is truly funny to meet a player with a name like “Steel Robot Killer” to find a meek mannered 16 year with a 89 pound frame. Nevertheless, for his sake and societies in general, all of these kids are taking part in a kick-ass and very cool competition. Given the alternatives, this is a very cool scene. Imagination plays a big part too. Some of the players names on the brackets are noteworthy.




As I write this article, I’m sitting beside Joel Brill (aka PBJB), a contestant in the Halo 2 competition. He traveled from Boynton Beach, Florida with teammate Dark 99 to meet Chipmonk and Unger, completing the foursome of the team. PBJB and Dark99 met at school while the other members of their team were met online. Rather than being an antisocial aspect of video gaming, this competition is actually forming new friendships that would never have existed had it not been for the Major League Gaming. The members of the team are not overweight, chess club types. In fact, both PBJB and Dark 99 are more your typical skateboarder, snowboarder teenagers who take part in competition partially for the comradery but also for the challenge and social bonding. This story is far from typical with team members traveling from Europe and Asia to compete in what has become the Olympics of video gaming.

Friday night arrives and the first portion is the free for all (FFA). There are no teams in the FFA section and players gather in stations of 8 for 15-20 minute heats with the top four advancing to the next bracket until there are only 16 left. The final 16 play for the pro money on Sunday.

Prior to the start, the euphoria in the hall is unbelievable and approaches the energy apex of a rock concert just before an encore. This is the absolute opposite of anti-social. Friends who have met on line are meeting in person for the first time. New friendships are being formed and teams are working towards a common goal – a major portion of the $1,000,000 in prize money put up by a multitude of sponsors.



Vancouver based Team BY has mixed results in the FFA event. Only Conker gets into the top 64 seed (out of 1,200 contestants). Along the way he has to face countless others and keep reaching top four in each heat of 8. The concentration is astounding and unrelenting. A moment’s lapse in concentration can result in a loss of points and slipping several positions down. Conker has a medium following and each time he plays a group of fans compete for the best view behind him to watch his technique and strategy. Below, a younger player in a white t-Shirt leans on the back of Conker’s (in black t-Shirt) chair while he narrates to his friend what he witnesses. Sharing of techniques is part of the social aspect of the game. Noteworthy is the fact that the 12 year old with huge spectacles is still in the top 16 that will face off on Sunday for the pro money.



Below, North Vancouver’s Adam (aka “Nutraways”) takes a breather to smile for the camera on his way to first round victory in the FFA portion on Friday night.



Another rather unique aspect I find of this environment is the knowledge of health and vitamins possessed by many of the players. Most of them know about the effects of vitamin B complexes, with A and D to help absorption. I would wager that most of the kids here know more about taking the right combination of vitamins to heighten mental alertness than the average college major. Of course, Adam's is sponsored by Nutraway's, a Vancouver vitamin company that has a lot of influence in this area.

Friday was good, but tomorrow is their main event - the Halo 2 4X4 compeition.

Monday, April 02, 2007

Web 2.0 Architectural Patterns and Model Presentation

The slides from O'Reilly eTech are now available here. Feel free to poach and use at your leisure.

Synopsis:

There is no definition of Web 2.0 nor will there ever be a formal architecture. From Tim O'Reilly's example however, we can distill out patterns. If we take the list and compare Ofoto to Flickr, Akamai to BitTorrent, etc., the abstract patterns tell us what is going on for each example. These patterns can then be studied to build an abstract model for the Web 2.0. The abstract model in the presentations extends the basic client server model of the first internet generation to be able to facilitate the patterns of interaction people are building now. The new model extends the client to include "users" to enable patterns such as Participation-Collaboration and Collaborative Tagging. The lower part of the server sees SOA replacing the concept of a server given it encompasses an entire paradigm for software architecture and extends the concept into the enterprise (Capabilities) to fulfill other patterns like delivering a Rich User Experience or Software as a Service. The middle also encompasses some concepts that are important for developers and architects alike to consider such as consistent event and object models (necessary to build Mashups and the synchronized web patterns.

The first set of draft architectural and design patterns distilled from Tim's examples are listed below. Some of these are explained in the slide deck. The rest will be refined in a book I am working on with other authors.

Service Oriented Architecture
Software as a Service pattern (SaaS)
Participation-Collaboration Pattern
Asynchronous particle update (AJAX)
The Mashup Pattern
Rich User Experience
The Synchronized Web
Collaborative Tagging Systems (Folksonomy)
Declarative Living and Tag Gardening
Semantic Web Grounding Pattern
Persistent Rights Management
Adaptive Software
Fine grained content accessibility

Slides, Code Samples from 3 hour intro to Flex and Apollo

I had promised to upload the slides from Massive 2007 as well as the code examples used during the presentation. The presentation is 3 hours long and goes from Hello World to building an Apollo Browser in 5 lines of code. The slides are here and the Flex and Apollo Code Samples are on this PDF.

Please feel free to use the slide deck to help spread the good word. Please make sure to attribute where possible if you change the template.

Monday, March 26, 2007

Wait list for Flex, Apollo at Massive 2007

I just heard from Lindsay Smith today that the 3 hour course I am teaching on Wed. March 28 at Massive has not only sold out with 140 registered attendees, but there are over 350 on the wait list. 360Flex also sold out as have other events where Apollo and Flex are happening.

This trend is worth noting. At the recent Vancouver Flash Users Group meeting I realized there aren't really any unemployed Flash gurus in the area. There are tons of jobs being posted on various sites for Flex and I am sure Apollo is going to be the same.

The course outline is as follows:

  • Module 1: Introduction to Flex and Flex Builder
    • Simple application using online compiler (Build Flex Application)
  • Module 2: Installing Flex Builder
    • Hands on Walk through
  • Module 3: First Hands on Experience
    • HelloWorld (Build hands on application)
  • Module 4: Flex in more depth
    • Flash Chart from Data binding (S51: Build hands on application)
    • Flex Slider Control data capture (S53: Build hands on application)
    • Data binding (S55: Build hands on application)
    • Using the tag to code Actionscript behaviors (S57: Build hands on application)
  • Module 5: Working with XML using Flex Builder
  • Module 6: Flex and AJAX
  • Module 7: Apollo
    • Hands on (Build Stand alone Browser)
I'll post the modules here is there is interest.

/d