Wednesday, June 23, 2010

The Software as a Service (SaaS) Pattern Explained


(Reprinted courtesy of O'Reilly from the Book "Web 2.0 Architectures".
Purchase book here)

The Software as a Service (SaaS) acronym has confused many people as vendors have abused the term to hawk anything with a network capability. In order to understand it, it is useful to tease out the core aspects of it agnostic to any specific implementation or product. James Governor, Dion Hinchcliffe and I wrote about it in the book "Web 2.0 Architectures" along with other patterns. In this context, a pattern is the idea of capturing architectural design ideas as archetypal and reusable description. SaaS is in effect, a pattern specifically for the delivery of software functionality to the end consumer.

To describe it within the book, we used the MacKenzie-Nickull Architectural Patterns meta-model.

Pattern

Software as a Service (SaaS)

Also Known As

Terms often associated with the Software as a Service pattern include:

Utility Computing and Cloud Computing
Cloud Computing is not the same as SaaS; rather, it is a specialized pattern of virtualization. Utility and Cloud Computing refer to treating computing resources as virtualized, metered services, similar from a consumer’s perspective to how we consume other utilities (such as water, gas, electricity, and pay-per-view cable).

On-demand applications
On-demand applications provide access to computing resources on an ad hoc basis when the functionality is required. Using the http://createpdf.adobe.com service to create a single PDF document online rather than having to download and install a version of Acrobat is a good example.

Software Above the Level of a Single Device
This pattern relates to software that spans Internet-connected devices and builds on the growing pervasiveness of the online experience. It touches on various aspects of the SaaS pattern; in particular, the concepts of distributed computing of tasks via network connections.

Model-View-Controller (MVC)
Some people consider SaaS a specialization of the MVC pattern that distributes the Model, View, and Controller (or parts thereof) over multiple resources located on the Internet. It is strongly related to SaaS, and most SaaS providers follow the MVC pattern when implementing SaaS.

Business Problem (Story)

Consider a software vendor that wishes to develop spam removal software to keep spam from reaching its clients’ inboxes. This can be achieved by writing algorithms that analyze incoming local email messages, detect possible spam messages, and flag them in such a way that the mailbox owners can filter them out automatically without having to manually sort through all the messages.

The business problem arises from the fact that spam is constantly changing, which makes it difficult to detect and flag. Spam is typically sent from a variety of spoofed email addresses, and the specific text patterns are changed frequently. For example, if you wanted to detect any spam that had the word “Viagra” in it, you could simply use Perl’s regular expression matching syntax:

if ($emailString =~ m/viagra/;)
{
$SpamScore =+ 1;
}
However, all the spammer would have to do is alter the case of some of the letters to thwart this detection, as in the following:

"ViAGRA"
You could counter this in Perl by adding an i flag to ignore case, as follows:

if ($emailString =~ m/viagra/i;)
{
$SpamScore =+ 1;
}
However, the spammer could then substitute an exclamation point, the number 1, or the letter l for the letter I, capitalizing on the face that the human mind will perceive “Viagra” if it sees “V!AGRA,” “V1AGRA,” or “VlAGRA.” To a human these terms might semantically be the same, but changing the one byte from an I to another character will render useless the efforts of a computer trying to filter spam based on a string of characters. Each possible mutation would require the software vendor to write and distribute new patches to detect the latest variations to each client, possibly on a daily or even hourly basis. In this case, the Perl syntax could be changed to:

if ($emailString =~ m/v.*gra/i;) {
{
$SpamScore =+ 1;
}
The ballet between those who create and send spam and those who try to detect and delete it is a constantly morphing work in progress, with new steps being introduced every day. Each individual the company serves could attempt to create these rules by himself for his own mailbox, but this would be both ineffective and inefficient. Users would each sample only a small subset of all spam, would not be able to easily create heuristic filters to detect spam, and would likely spend an inordinately large amount of time on this activity.

Context

The SaaS pattern is useful any time a customer base has needs that could be addressed more efficiently or reliably by creating a service all of them can share across organizational boundaries.

This pattern occurs whenever a person or organization is building an application whose model, control, or view aspects must be refreshed based on dynamic circumstances or instances in which specialized functionality of the application must be delivered. The pattern could apply anywhere a static application does not easily lend itself to frequent specialization of the model, view, or control aspects required to make it function properly.

The pattern is useful in situations in which users need more computer resources than they can easily support on their local systems and in those situations where users need particular computing resources only occasionally.

Derived Requirements

Computing resources should be architected to be reachable (as discussed in the section on SOA) over whatever network or fabric the architect designs the application to work with. For example, most web-enabled SaaS applications use a common transport protocol, and most ham radio operators use a common frequency to broadcast information or pass it along in a chain.

Functional components of the core computing resources must be usable via a well-defined interface. Such an interface should not be bound to a single client or single model for delivery (such as installation of an application) and should support multiple options for building the user interface (e.g., web-based or client application interface).

Generalized Solution

SaaS is a model of software delivery in which the manufacturer is responsible for the daily technical operation of the software provided to the clients (including maintenance and support), while the clients enjoy the full benefits of the software from remote locations. SaaS is a model of “functionality delivery” rather than “software distribution.” Most of the functionality can be delivered over the Internet or made available in such a way that the end user can interact with the application to get that functionality without having to install the software on her machine. This approach can deliver functionality to any market segment, from home consumers to corporations, and hybrid solutions can deliver small pieces of client-side software that make certain tasks easier.

Static Structure

The basic deployment pattern for SaaS involves deploying different aspects of the model, view, and control components of an application to multiple physical locations. The deployment approach may vary greatly depending on the software and its complexity and dependence on other aspects. Figure 7.9, “Deployment patterns contrasted (SaaS versus conventional approach)” shows how the basic deployment pattern for SaaS differs from traditional software distribution.


Figure 7.9. Deployment patterns contrasted (SaaS versus conventional approach)



The service should also be able to learn from its users when appropriate. This concept of “software that gets better as more people use it,” a hallmark of Web 2.0, has many advantages. For example, in the business story shown in Figure 7.10, “Spam filter software as a service”, if enough email flows through a pattern detector, spam recognition becomes much more accurate based on the collective interactions of thousands of users. As more and more users flag the same messages as spam, the server will begin to recognize those messages as spam, and the global filter will then prevent them from being delivered to other end users. Many readers probably use this type of functionality already without really knowing it.

Google’s Gmail is a prime example of this pattern in action. Google Search is another dynamic example of Software as a Service that gets better the more that people use it. Google actually tracks the links users click on to determine how many people seek the same resource for the same search term. This system is much more sophisticated than a simple adaptive algorithm, yet the principle benefit of large-scale use is that the system learns and adapts based on users’ behaviors.

This functionality is a side benefit of SaaS rather than a core aspect of the pattern.



Figure 7.10. Spam filter software as a service



Dynamic Behavior

The dynamic behavior of the SaaS pattern can vary greatly depending on which protocols, standards, and architectural approaches are chosen. Figure 7.11, “A dynamic view of one way to visualize SaaS” shows a common depiction of the pattern.



Figure 7.11. A dynamic view of one way to visualize SaaS



First, a user identifies his requirements for consuming computing resources. This pattern can be implemented at many levels of complexity, from a secure web service to a simple user interface such as an HTML web page in a browser. The user will interact with the service (the service in this case is a proxy), which will then invoke the core functionality. The responses are appropriately directed back to the user, as required.

Note that this pattern becomes very interesting when multiple users employ the resources and implementers have capabilities that do not exist for their non-SaaS counterparts. First, the functionality provider can detect and act on patterns in runtime interactions. An example of this might be the detection of some error state that is occurring for multiple users of the system (e.g., the email clients are crashing because of a nefarious script contained within some emails). Rather than waiting for enough users to contact the software provider with enough information to enable it to fix the error, the provider can detect the condition itself at an early stage and has access to sufficient information to enable it to trace the source of the error. Ultimately, all users of the software will have a much better user experience if problems are mitigated sooner rather than later and before they feel compelled to complain about them.

Second, a provider may want to consider scaling the system in the backend to handle large numbers of requests. Sudden traffic spikes can adversely impact the user experience, making the system seem unresponsive. Service providers may want to investigate other services, notably those of Cloud Computing providers, if they need to support widely varying usage levels. Most Cloud Computing providers offer automatic scaling to support the amount of processing power and storage needed by an application.

Implementation

As shown in Figure 7.12, “Distinctions of the SaaS pattern”,[75] designers of software provided as a service rather than as a static, installed entity must consider several new nuances of the industry, as these changes in how users interact with software vendors are affecting the way we should design and architect SaaS.



Figure 7.12. Distinctions of the SaaS pattern



When implementing SaaS, you may need to ensure that no one can take advantage of your license model. For example, if you license only one user, what keeps that user from simply sharing her username and password and reselling your service? There are various types of license models for SaaS. Some are single-enterprise licenses, with the cost based on the size of the enterprise. Spam software and Microsoft Exchange Server are reported to use this model. By contrast, Adobe Systems uses a “per use” model for http://createpdf.acrobat.com, where users can either create PDFs one at a time or protect them with a persistent policy. Other software business models (e.g., for Google Search and other widgets) are built around advertising revenue models.

A software vendor implementing SaaS also can react swiftly to bugs in the system. The vendor can monitor all users concurrently to detect software glitches that may require immediate attention and may be able to fix them before most users even notice.

Business Problem (Story) Resolved

The spam detection software is housed in a federated server environment, and users’ incoming email can be automatically pre-passed through the filters to detect spam. Any spam that sneaks through can be recognized and trapped by secondary mechanisms (including human users) and reported back to the spam detection infrastructure, enabling the system to adapt to the latest spammer tactics. There is no discernable delay or lag in incoming email, and most spam email gets eliminated.

Sampling a very large cross section of all mail makes it easier to detect patterns indicating spam emails. This results in the entire system performing better, to the benefit of all users.

Specializations

SaaS may be specialized by using advanced computer algorithms to perform reasoning tasks such as inference. These ultra-advanced systems may one day be able to use cognitive skills to recognize and act on certain patterns of events. For example, these hybrid systems could use a combination of the Bayesian Theorem (conditional probability) and lexical heuristic filtering (finding evidence to support a hypothesis) to dynamically change their functionality. Such specializations will also benefit from adoption of the Collaborative Tagging (a.k.a. folksonomy) pattern, discussed later in this chapter, as it will help foster computational intelligence applications that can reason and infer hypotheses.

Known Uses


Postini, Inc. (which Google acquired in 2007[76]) figured out quite a while ago that centralization and offering its security, compliance, and productivity solutions as a service would result in better spam detection for end users. Recently, many other email companies have begun to use similar SaaS models. Apple’s iTunes music application is perhaps one of the most prominent examples of a hybrid approach to the Software as a Service pattern. The iTunes application has some predetermined functionality and user interfaces (the “V” and “C” components of “Model-View-Controller”); however, much of the information presented to the user is based on information (the “M” in “MVC”) the application receives from the iTunes servers during runtime. This hybrid approach can link user profiles to service calls to offer users better experiences.

Adobe Systems recently launched a service that allows people to manually create small numbers of PDF documents online and optionally link to them other functionality for things such as enabling rights management. Google continues to expand its SaaS offerings. Initially, its search service used algorithms to vary search result rankings based on user interaction patterns. Recently, Google has added multiple other SaaS offerings, including creation and manipulation of online documents, spreadsheets, and more. Note that most of Gmail has always been provided as a service rather than as an application.

Consequences


The negative consequences of using the SaaS pattern are minimal, but they need to be addressed from the outset. Offering software as a service may create additional complexity in supporting computing resources for large numbers of users. The ability to dynamically scale an offering based on surges in the number of users requesting the functionality is also an issue.

In addition, authentication—especially when used to force compliance with software licensing—can be difficult to implement and to police.

The most noteworthy consequence of implementing this pattern is that the software may have a dependency on an Internet connection. In many cases, if the connection does not work, neither will the software. When such a mechanism is possible and makes sense, the best way to avoid such issues is to employ client-side caching. The appropriateness of this strategy varies by application. Caching Google Search is difficult, and would be mostly useless in an environment where readers couldn’t go to the linked articles anyway. On the other hand, technologies like the Adobe Integrated Runtime (AIR) and Google Gears are steps in the right direction.

Denial-of-service attacks can also be a threat. A malicious user may be able to overpower the bandwidth or computational capabilities of software implemented as a service and effectively deny or greatly slow down other users’ experiences.

End users often prefer to keep their software in a controlled and secure environment. Because SaaS applications are not hosted or controlled by the user, the user might be subjected to occasional outages when service upgrades or other events take place on the provider side.

Also, personal security risks are inherent in passing information back and forth on the open Internet. Users should carefully assess what risks are acceptable for their purposes.

(c) Copyright - O'Reilly Media. See this and other patterns via the book at http://oreilly.com/web2/excerpts/9780596514433/specific-patterns-web20.html

Tuesday, June 22, 2010

Mingleverse 3D Telepresence running on Google Nexus One/Flash Player!

This video showcases an absolutely astounding capability of the new Google Nexus One smartphone running the Android operating system (Froyo 2.2) with Adobe Flash Player 10.1. Mingleverse.com is a 3D immersion technology that allows individuals to teleport their avatars into virtual universes.

Duane's World Episode 28 - Flexico!

OK - This episode of Duane's World took a lot of time to make but it had to be done right. I wanted to capture the real essence of the Mexican Flex developers and show the simplistic beauty of their devotion to Flex. I even tried to convince many of them that they should change the name of Mexico to Flexico. This episode features far too many people to name but it is a must watch. On top of the great interviews and humor, there is a tutorial on Spark graphic primitives in MXML and a great sound track courtesy of my favorite new metal band Entropia! Enjoy!

Friday, June 18, 2010

The Action Builder in LiveCycle Enterprise Suite 2

This video introduces my favorite feature in LiveCycle ES Designer. Before Action Builder, we had to code behavior into forms using formcalc or JavaScript. Now Action builder let's you add complex functionality to PDF forms with ease. This is yet another of the new series of LiveCycle tutorials.



The podcast version is available from:

http://itunes.apple.com/podcast/adobe-developer-connection/id299639895

Wednesday, June 09, 2010

Video - Acrobat Connect on Google Nexus One

This is just a short video I made this AM while watching the Adobe Open Source Media Framework (OSMF) launch on Acrobat Connect via my Google Nexus One. I haven't tested all the features but as for watching, it seemed to perform perfectly. Note there is no plug in to present from the N1 device. For the record, I am on Android 2.2 (FroYo) build with Adobe Flash Player 10.1 (10.1.61.68).

Some awesome webinars on building multi-screen content

For developers, we want to invite you to a series of webinars on authoring content and code for mobile screens. Yeah - there has been a lot of talk about how you can just "write once, run everywhere" but the devil is in the details. Developers who have been at the cutting edge are preparing to reveal some best practices and tips, tricks you should at least be aware of when authoring for multiple screens to take advantage of new features of Flash Player 10.1 and AIR 2. These webinars will run from June 22-24, 2010.

Best practices in optimizing web content for Flash Player 10.1
Tuesday, June 22, 9AM – 10AM Pacific Time - REGISTER

The quickest way to build cross-platform apps with AIR 2
Tuesday, June 22, 1PM – 2PM Pacific Time - REGISTER

Rich Internet App development with Flash Builder 4 for Flash Player 10.1 and AIR 2
Wednesday, June 23, 9AM – 10AM Pacific Time - REGISTER

Multi-screen web content development with Flash Pro CS5
Thursday, June 24 9AM – 10AM Pacific Time - REGISTER

Tuesday, June 08, 2010

Open Source Media Framework Webinar Wed June 10

An event not to be missed. In tomorrow's webinar, Lisa Larson-Kelley will dive into the fundamentals of Open Source Media Framework (OSMF), Adobe’s standard video player libraries for building playback experiences and monetizing video on the web. She’ll give you a high-level overview of why you’d want to use OSMF and what it can do, and then dive into its underlying structure and some simple sample code to get you started. This session is for beginner to intermediate programmers and web developers who want to gain a better understanding of OSMF, and how it can simplify media player development.

Lisa is a speaker not to be missed! On top of this, there is a chance to win a copy of CS5!

Register now (I have)
http://www.eventsadobe.com/osmflaunch/invite.html

Friday, June 04, 2010

Website and Blog Hosting - some questions.

Technoracle has been on Blogger now for over 4 years and feel I may be missing out on some of the new features of blog platforms. While investigating these, I also started thinking about just using another company's Website hosting and build my own blog and condense all my other websites on to one provider. The reasons are pretty obvious. No waiting on third party sites for widgets or auxiliary items to load, full control over look and feel, etc. On the downside, WordPress, Blogger and others give you a lot out of the box and the server hosting from various third party suppliers is actually pretty cheap.

I already have my web collateral pretty spread out too. Web2open.org (where I place a lot of tutorials) is hosted on a dedicated server hosting. www.duanesworldtv.org is on yet another provider and nickull.net and 22ndcenturyofficial.com are on two different providers. This is before we ever get into MySpace, Facebook etc. Here are some things running through my mind though:

1. Will condensing all of them into one IP address affect search engine results? While they are not interlinked much, there are some links. My gut tells me yes but I am looking for anyone with actual experience.

2. Staying on blogger seems to result in blog posts being indexed much quicker than using non-Google owned blog platforms. Anyone have some experience here?

3. I haven't migrated to the new templates. Has anyone experience with this old Technoracle Blogger template moving to a newer one? I heard it is lossy.

Any other advice on my contemplated consolidation would be appreciated.

Have a great weekend everyone!

New Video Tutorial - LiveCycle Services via SOAP.

This is the latest in a series of videos aimed at Adobe LiveCycle ES2 for Java (tm) developers. This tutorial covers using SOAP based web services to invoke remote ES2 services. The project is built in the Eclipse IDE and if you want it, email us here at technoracle.

Wednesday, June 02, 2010

Comparison - Full Screen H.264 video on Google Nexus 1 vs. MacBook pro

We were contacted by the lads over at lucid.it about video on mobile to gather some more information. I decided rather than give them the technical marketing belch, it might be better just to show them via video how well Flash Player 10.1, running on the Google Nexus One smartphone, can render full screen H.264. Unfortunately, the camera I used to film this does not do the video justice, nor does the YouTube conversion. If I get a better result on Vimeo, I will replace the video embedded. Nevertheless, this video shows a true comparison on how a full screen video experience runs roughly the same whether using the Gala Flash Player (Mac OS X hardware accelerated) on a MacBook Pro 15 inch laptop and the Google Nexus One Android smartphone using the latest Flash Player 10.1 (not Flash Lite - full Flash Player).

The video can be seen at http://www.lucid.it/mobile.

Friday, May 28, 2010

Open Source Media Framework now!

The first release of Adobe's Open Source Media Framework (OSMF 1.0) can be downloaded for free today from www.osmf.org. If this isn't enough, social media start-up KickApps now offers an online service (www.osmfappstudio.com) available starting today. That certainly makes my Friday!

OSMF was started over a year ago to simplify the development of media players by allowing developers to assemble components to create high-quality, full featured video playback experiences. Key service providers such as Omniture, Akamai, Conviva, Eyewonder and many others have completed plug-ins or submitted code to be included as part of OSMF. OSMF 1.0 also supports the latest Flash Platform initiatives such as Flash Player 10.1, Flash Access 2.0 and HTTP Dynamic Streaming.

In addition to this fully tested, production ready version of OSMF, the team also posted the first prerelease of Strobe Media Playback. Strobe Media Playback is a compiled swf that allows a web developer to get up and running quickly and easily with an OSMF based media player. It basically will look and render the same in every browser (One of the issues with HTML5 video I have worried about is the problems for web developers to ensure a consistent look and feel across all browser/platform combinations and maintain it over time). The out of the box player looks like this:



The team has created a interface that gives the customer a terrific “out of the box” experience. Every group at Adobe who is interested in an easy to use web video experience should talk to the Strobe Media Playback team. The team is working to make SMP even easier to use through a hosted version that can be integrated on a customer’s web page as easily as an HTML 5 video tag, but with much more power and flexibility.

Have a great weekend!

Thursday, May 27, 2010

Adobe LiveCycle ES2 Service Pack 1 (SP1) now available

Adobe has released LiveCycle ES2 Service Pack 1. Service Pack 1 updates LiveCycle ES2 server components, LiveCycle Workbench ES2, LiveCycle Designer ES2, and LiveCycle ES2 SDK (updating both LiveCycle ES2 server and LiveCycle Workbench ES2 is required). This Service Pack can only be deployed on LiveCycle ES2.

Please visit https://www.adobe.com/cfusion/entitlement/index.cfm?e=lces2_sp to download Service Pack 1. Additional details on the contents of the service pack, including the issues it addresses and installation instructions are included in the Read Me file available at the same URL. A file extraction utility such as WinZip/gnu tar/unzip will be required in order to extract the files prior to running the installation.

The direct link to the Service Pack download is http://www.adobe.com/cfusion/entitlement/index.cfm?e=lces2_sp.

You can also access the download from a few locations on LiveCycle DevNet pages:
1. Downloads tab: http://www.adobe.com/devnet/livecycle/index.html?view=downloads

2. Get It section on the Get Started page: http://www.adobe.com/devnet/livecycle/get_started.html


Be sure to review the Release Notes and Read Me PDF before installing.

Release notes: http://help.adobe.com/en_US/livecycle/9.0/releasenotes.html
Read Me: http://download.adobe.com/pub/adobe/magic/livecycle/lces2_sp1/designer/sp_download_readme.pdf

Bloodied but Unbowed: As real as it gets

During my time working with Adobe, I seem to keep getting drawn into the movie business crowds. Our creative tools seem to be a favorite amongst many film producers who in turn are always super enthusiastic about showing us the awesome new ways they have used them for special effects, turning movies into truly interactive experiences and more. Celebrities such as James Cameron (Avatar), Peter Beyak (Extreme), Colleen Nystedt (Exhuming Mr. Rice) and others seem to be genuinely stoked about our technology and what they can do with it. Once in a while, I am blessed with the opportunity to meet someone from the lucky group of people who are living their dreams. Translation: working on something you are truly passionate about = living your dreams. Yesterday was one of those days.

I had the immense pleasure of having lunch with Susanne Tabata. Susanne is an accomplished film producer (just Google her name for a plethora of credits). What I am most impressed by though is that she is so real for a person who has just released what is destined to be a one of a kind documentary film chronicling the pivotal years of early punk rock in North America. While the film "Bloodied but Unbowed"starts in Vancouver, BC, it weaves tentacles outwards, and the effect of the Vancouver punk movement from 1978-1981 is still influencing artists globally as told by people like Randy Rampage (DOA, Annihilator, Stress Factor 9) and Duff McKagan (Guns & Roses, Velvet Revolver, Jane's Addiction). According to Alternative Tentacles, the Vancouver sound pulled out a "Yeah, that's the shit!" from the likes of Jello Biafra, Henry Rollins, The Red Hot Chili Peppers, Sonic Youth, John Doe, Randy Bachman, Dave Grohl, Pete Seeger, and many many more! As someone who played bass for Stress Factor 9 with Randy in 2007, I can tell you the sound is still relevant. My own band still embraces this stylistic sound, which is ingrained into the song "Howie the skid" (not yet released).


Susanne Tabata (on the left, yeah that is as obvious as it gets)

Here is the bad part now. I haven't seen the film. Like me, there are thousands of people who would die to see this (all screenings were select and sold out in advance). Susanne did confide in me during lunch that there may be a flash screening (short notice, one time shot to see it). If you want to get the invite, you best be logging on to Bloodied but Unbowed's Facebook and Twitter pages and keep watching for the invite.

Tom Harrison, the Provinces rock critic and a tough cookie to impress ( he still won't review my last CD ), writes:
"The film is more like a memoir based on key figures and what they said then and now. I applaud that. Initially, I feared it would take a journalistic angle - the "us versus them" slant. That's a familiar battle and not only tiresome but narrow. This was a widespread cultural phenomenon, not merely a musical one. The story is told from a punk point of view with a brief explanation of what started it and hints of what ended it.
Ultimately, the punks won that battle, or reached a pact in an ongoing war. They didn't win with their music as so little of it was heard beyond the punk scene, but with their attitude, which changed the thinking of so many and which was taken up by the bands who danced down the trail the punks had blazed"

The Georgia Straight also heaped praise on Tabata by writing "Bloodied but Unbowed takes a loving—and long overdue—look at one of the most fertile scenes in North American music history, with Tabata mixing rare archival footage with modern-day interviews with those who were on the frontlines".

What also excites me is that this film seems to be taking on a life of its own. So many people like me never got a chance to see it as the screenings were sold out (I was performing in New York on the date anyways). The grassroots swell of interest only can be attracted by something that is truth. Punk rock, to me, has always been about the search for the truth and a fight against complacency, mixed with cynical humor of the mainstream life of being a herded sheep; an organic pain collector hurtling towards certain oblivion. Punk rock just embraces this fact first, then asks "so what are you gonna do now?"

I know what I am going to do. Go and see Bloodied by Unbowed the first chance I get.

I suspect Bloodied but Unbowed is destined for a long life as a cult classic. I cannot wait to get a chance to see it in a theater or even on DVD. Until then, I can only hope that cutting edge film producers keep using Adobe software so I can get in on the V.I.P. lists.

UPDATE AND DISCLOSURE: Technoracle's founders have entered into a financial relationship with the company that will distribute this movie in order to support it's migration to digital streaming and DVD. In the interest of transparency, this is hereby disclosed to readers.

Wednesday, May 26, 2010

LiveCycle ES for Java Developers (Video)

This is a simple video tutorial on how to programmatically invoke LiveCycle ES services via an EJB API. To complete this tutorial yourself, you will need to do the following:

1. Download and install the LiveCycle ES2 turnkey JBoss solution from http://www.adobe.com/devnet/livecycle/trial/. Note that this is 3GB and if you would rather, please contact me dnickull at adobe dot com with your name and mailing address and I will send you out a DVD of everything you need.

2. You also need to download the Eclipse IDE. This can be downloaded from http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/galileo/SR2/eclipse-jee-galileo-SR2-macosx-cocoa.tar.gz

3. The code project can be downloaded from here - http://www.web2open.org/adc/LiveCycleESProjects.zip

That is about all. Here is the video:

Tuesday, May 25, 2010

Video Tutorial - Adding video to PDF forms for LiveCycle ES

This is a short video demonstrating how to add a video object to a LiveCycle ES2 PDF form.


Monday, May 24, 2010

Video Tutorial on LiveCycle Data Services Model Driven Development

This is a video to accompany the written tutorial to show how to use the brand new features of LiveCycle Data Services 3.* and Flash Builder 4. The development methodology of using the data model to build an application is a very cool feature. Data is often bound to an enterprise process and being able to build an RIA demands that you have a well thought out data model. This allows the developer to reuse existing data rather than asking the user to enter information more than once.

Enjoy.

Friday, May 21, 2010

Flash Player 10.1 on Google TV

Adobe and Google are working closely together on a number of different efforts including support for Flash Player 10.1 and AIR across various platforms and devices. One of these new platforms is Google TV, Google's new Android based platform that brings the power of the web in to the living room. Google TV includes Flash Player 10.1 integrated directly into the Google Chrome browser delivering the full Web to consumers on their television sets. The digital home is a huge step for Flash and it represents an amazing new screen for developers and content creators to bring rich interactive content to the TV.

Read the rest here

Video:

Thursday, May 20, 2010

AIR 2 for Android Public Beta!

They AIR team did it!! While at Google I/O this week developers are getting blasted with awesome news and new technology, Google and Adobe have worked hard on this and IMO it is a top 5 event of the week. For those of you who don't know AIR, Adobe AIR for Android enables developers to build standalone applications that run on Android devices, like the Nexus One (my all time favorite smartphone). You can use any text editor and the free SDK to build applications and easily deliver applications that work across Linux, Mac, Android, and PC. When developing for Android, you must use the AIR for Android SDK.

By joining this Public Prerelease program, you will have access to a beta version of the AIR SDK with support for Android. Before signing up for this program, there are currently limitations that you should be aware of:

  • In this early stage of development, you should be comfortable with using command line tools.
  • Flash Professional CS5 now has a new extension that allows developers to publish directly to Android-powered devices. The extension adds a new AIR for Android publish setting that works in the shipping and 30-trial versions of Flash Professional CS5.
  • The Flex 4 framework has not yet been optimized for mobile devices; for this prerelease, we recommend building applications using ActionScript only. We're currently working on creating a highly productive, cross-platform solution for mobile development using Flash Builder and Flex, which we expect to be available in public preview by the end of this year.
  • You will be able to build and test AIR applications on Android devices, but you will not be able to deploy on the Android Market or share them with end users
  • You will be subject to terms of an NDA which allows you to display your application publicly, but you will not be permitted to disclose anything outside of Licensee’s own personal development experiences of a beta Android application(s) using this beta AIR SDK.


If you are interested in joining our Prerelease program, just go here:

http://labs.adobe.com/technologies/air2/android/

I'm going there now!


Wednesday, May 19, 2010

Some more Adobe HTML5 love!

Today at the Google I/O conference, Adobe CTO Kevin Lynch gave a strong speech pumping up our support and excitement around HTML5. The video is online here - http://www.youtube.com/GoogleDevelopers. This is an awesome conference and great announcements continue to pour out.

In parallel, Adobe is now offering a new Dreamweaver CS5 HTML5 Extension. This pack brings enhanced capabilities for HTML5 and CSS3 to web designers and developers using Dreamweaver CS5. The update and more information is now available on Adobe at http://bit.ly/DWHTML5.

HTML5 is going to be huge for everyone!

Saturday, May 15, 2010

Seaport Cafe, NYC - a place that really sucks

I have eaten in over 30 countries in multiple thousands of cities over the last 2 decades as a traveler but never have I been at a restaurant worse than the Seaport Cafe in southern NY. Note that this includes restaurants in developing nations or transitioning economies. This is the first restaurant I have eaten at that was so bad I felt obliged to blog about it to warn others.

This place has the worst food you can imagine and a fixed gratuity even though my wife and I waited over 30 minutes to be given menus and another 30 minutes to get our food. But hey - why hurry when the tip is already built into the bill? When the food arrived it was cold and stale. The tomatoes were white (unripe), lettuce wasn't washed and the buns old and frightful. I wish I had check out the Google reviews first as it seems everyone else agrees this is the worst restaurant ever - http://maps.google.com/maps?oe=utf-8&rls=org.mozilla:en-US:official&client=firefox-a&um=1&ie=UTF-8&q=seaport+cafe+new+york&fb=1&gl=us&hq=seaport+cafe&hnear=new+york&cid=0,0,12350209958079735554&ei=HuPuS4yhLormswP6gd28Dw&sa=X&oi=local_result&ct=image&resnum=1&ved=0CBMQnwIwAA

The worst part is the complete lack of understanding of the process of waste. Everything came in plastic containers. Here is a photo:


The plates = all plastic, all condiments individually wrapped or in more plastic
Cutlery = all plastic, wrapped in more plastic
Orange juice = served in plastic, plastic lid, straw and wrapper on the straw

The servers are indicative of a society where they are only the second generation in their bloodline to walk upright, some of them probably still have relative who live in caves and trees.

The list goes on an on. Shame on you Seaport Cafe!!!

YOU HAVE BEEN WARNED! STAY AWAY!

Monday, May 03, 2010

Technoracle’s Top-10 reasons for using Flash Builder 4 for Flex 3 Projects.

I write this after only being half way through my itinerary for speaking about Flash Builder 4 to Adobe Flex User Groups. Having a chance to hang with many developers made me realize that we (Adobe) understated a major benefit of Flash Builder 4. Specifically, it seems we could have done a better job of explaining some of the key benefits for using Flash Builder 4 for Flex 3 projects. Many Flex developers I have talked to seem to be holding off on upgrading to Flash Builder 4 based on a perception that they also have to also update all projects from Flex 3 to Flex 4. This is simply not true. One of the top requests for the next version of Flex Builder was the ability to use multiple Flex SDKs within one IDE. You can import your Flex 3.X projects into Flash Builder 4 today and they will simply work. Check out this cool feature on the new project creation wizard shown below:



The top ten reasons are presented in random order (I’m a pretty random guy). Also note that this article does not get in to the compelling reasons why someone would want to use Flex 4 instead of Flex 3. The reality is that many of the developers I have spoken to work on large scale, long term enterprise Flex projects and rewriting them in Flex 4 is not something up for negotiation. If you are one of those, this article caters to you. I could write another ten pages on the beauty of Flex 4 and the new Spark component architecture but I am a lazy Adobe employee and this is probably the only blog post I will write this week. Here is my list.


1. Enhancements to ASDoc integration. By far, my most favorite feature of Flash Builder 4 is the tighter integration with the ASDocs and the enhanced information available during the development process. Any time you hover the cursor over a reference to a component, ASDoc information is available as both a popup menu (can be disabled) or via the ASDocs tab.



This is so powerful for developers for a number of reasons. One is that you instantly have access to the information about that component/class without having to migrate to another screen or window. This includes full inheritance and a plain text description of what it does (brief version). The second is that there are embedded hyperlinks to the documentation of related classes so you can get a feel for whether or not you are using the right component or class. The new addition of information about which language version of the Flex SDK the functionality appeared in as well as which Flash Player and AIR runtimes is also very useful.

2. The ability to use multiple SDKs.
As mentioned above, Flash Builder 4 lets you start new projects in Flex 4 but also finish up existing projects in Flex 3 with the aide of all the enhanced developer tooling. Even if you’re just going to do Flex 3 for the short term future, this is the IDE you want to be on.

3. Pair code highlighting.
Whenever you hover over a component declaration or named object, Flash Builder highlights all instances of it. This even works across both MXML and AS as shown below.



This one feature alone has saved my sorry developer behind so many times when I’ve made typos.

4. The Network Monitor.
This is another one of my favorites and, if you will indulge me, a totally kickass addition to the IDE. As an SOA guy, I spend a lot of my coding time working on remote calls to services. The Flex Builder 3 IDE hid most of the details from the developer making it difficult to debug an application when something went wrong. The Network Monitor gives you the raw messages in both a logical and raw data view. You can easily spot malformed headers, get direct access to SOAP fault messages, and see HTTP, AMF, and raw text results in real time. Below is a typical HTTP request.



And here is the accompanying response.



This tool makes it so easy to debug both simple and complex message exchanges in a variety of protocols.

5. Enhanced Data Centric Development features. My record for setting up a new project, using the Web Service wizard to inspect a WSDL instance, generate the stub code, generate a form for the service call, optimize it, save it, compile and run it is 26 seconds! Do I need to say more? Not really but I will. The Flash Builder team also answered the biggest developer request which was access to the generated code to inspect and modify. For example, here is the generated code for the service call above. Note that the parameters for all the details of the call are clearly spelled out in plain ActionScript for you to inspect.



But wait! That is not all you get. This code is from the super-class. If you want to modify this, there is a sub-class stubbed out with the starter code, which allows you to override permissible operations or functions without messing up the generated code! IMO this is a very cool feature.


6. Fix Code Indentation. OK – this blows the SAP “pretty printer” away. If you are like me, code is art. I see beauty in well written and properly indented code. If you are fine with code that is indented like a drunken lemur had access to a random number generator that controlled lead in spaces on each character, you might not use this feature. If you want to create code that can be displayed in the Louvre, check this feature out. Here is the art-less heathen coding style that multiple quick fixes can create just before the “Correct Indentation” is used.



and here is the work of art that results:



Beauty is in the eye of the developer (since it all gets compiled into a SWF anyways).

7. Fiber Plugin. The Fiber (a code name for a data model driven methodology for development) is one of the coolest client and server-side technologies ever made. When you use the Data Model plugin with Flash Builder 4 and a supported application server like LiveCycle Data Services 3.1 running on JBoss, there is simply nothing better for developing a client with full CRUD capabilities with the Flash Builder 4 IDE. This one feature alone should be the holy grail for many J2EE developers looking to cap a great enterprise application with an awesome GUI written in Flex. Flash Builder 4 gives the developer a “view” into the servers’ data capabilities via HSQLDB running on port 9002 (default).



What is awesome is that these tables can be simply dragged directly into an existing project, which then creates service calls for all major CRUD operations. Generating a graphical user interface is as easy as dragging and dropping a service call onto a datagrid or right-clicking and selecting “Generate Form”. Rather than repeat everything in this blog post, I would direct you to the tutorial posted at http://www.adobe.com/devnet/livecycle/articles/lcdses2_mdd_quickstart.html.

8. Easier FlexPMD Integration. If you are a Flex Developer and have not tried FlexPMD yet, do yourself a huge favor and try it out. FlexPMD is an open source tool that helps to improve code quality by auditing any AS3/Flex source directory and detecting common bad practices, such as:

* Unused code (functions, variables, constants, etc.)
* Inefficient code (misuse of dynamic filters, heavy constructors, etc.)
* Over-complex code (nested loops, too many conditionals, etc.)
* Over-long code (classes, methods, etc.)
* Incorrect use of the Flex component lifecycle (commit Properties, etc.)

Flex PMD can be easily installed and run on any Flex project to find out how well ( or not ) your coding practices align with industry conventions. Of course my own code generates very few exceptions (if you believe the last sentence I have a bridge to sell you).



9. Automatic Event Handler Generation.
One of the top things I get errors with is catching an event and passing an event object to the event handler. Flash Builder 4 has a very cool feature whereby in the code complete, the IDE offers to create an event handler for you automatically.


This now makes me also want a new feature in the future. I would love to have the ability to have this generate the click handler as an ActionScript class inside of one of my packages in my project.

10. Automatic Getter/Setter code generation. This is a feature I haven’t personally used but am looking forward to trying on larger projects. When following enterprise Flex coding practices and conventions related to OO methodologies, developers often find themselves performing the same basic patterns over and over. By automating some of these patterns, developers can free their time from the more mundane programming tasks. When you create a variable in Flash Builder 4, you can right click and select “generate getter/setter” and Flash Builder will build the code for you. Below is the result from such an operation.


Even though I only listed ten, there are tons of other new features you can use within Flash Builder 4 for Flex 3 projects. So what are you sitting there reading this for? Download and try Flash Builder 4 trial already!

Thursday, April 29, 2010

Flash Player Gala preview release!

A new Flash Player, code-named “Gala”, is now live for preview. One of the newest features of this release is support for H.264 video hardware decoding on Mac OS X 10.6.3. Note that Flash Player has supported H.264, the codec behind HD, since 2007. This newest release, with support for video hardware decoding, should logically make for a much better video performance on supported versions of OS X.

From the release:

"Gala allows developers to preview Flash Player with hardware acceleration of H.264 video on supported Mac computers equipped with the following GPUs: NVIDIA GeForce 9400M, GeForce 320M or GeForce GT 330M. The hardware acceleration functionality in the Gala preview release of Flash Player is expected to be included in an update following the release of Flash Player 10.1."

Read more or sign up here.

Friday, April 23, 2010

Tutorial: Dynamically Changing PDF form labels

This tutorial shows how to change the caption for a PDF form element at runtime based on a user's interaction with another form component.

How to add a 2D bar code to your LiveCycle Forms

This video tutorial covers how to add a 2D bar code for capturing and retrieving data from a PDF form. The LiveCycle Designer process shows how to create the bar code and link it to a data set.

Thursday, April 22, 2010

Using LiveCycle ES2 on the Cloud

This video is a complete tutorial on how to get set up and start developing against LiveCycle ES2 running on the Amazon cloud. If you want to get set up, here are the physical links to reproduce this demo:

1. Download and install the LiveCycle ES2 trial. You will need the libraries in the SDK folder to complete this exercise - https://www.adobe.com/products/eula/livecycle/es/trial/

2. Get access to a cloud account via the Adobe Enterprise Developer Program - http://www.adobe.com/devnet/aedp/dev_exp/.

Here is the video tutorial:



LiveCycle Services Discovery Plug-in for Flash Builder 4 is another component you may wish to download. Tutorials on using this will be forthcoming shortly. With this plug-in you can quickly build Flex and AIR applications that invoke a LiveCycle service through remoting endpoints. You must have an installation of Flash Builder 4 before installing the Modeler.

Some great LiveCycle ES2 links

As forwarded to me by Shelley Paquette. If you use LiveCycle ES2, this list will be very helpful.

1- Adobe TV: Introduction to LCES2: http://tv.adobe.com/watch/getting-to-know-livecycle-es2/adobe-livecycle-es2-introduction-for-developers/

2- LCES Overview: http://help.adobe.com/en_US/livecycle/9.0/overview.pdf

3- Preparing to Install LCES2: http://help.adobe.com/en_US/livecycle/9.0/prepareinstallsingle.pdf

4- Tutorial on installing the LCES2 Turnkey Solution http://help.adobe.com/en_US/livecycle/9.0/tutorial_turnkey.pdf

5- Installing your LC development environment: http://help.adobe.com/en_US/livecycle/9.0/install_dev_enviro.pdf

6- Creating your first LC application: http://help.adobe.com/en_US/livecycle/9.0/createfirstapp.pdf

7- LCES2 full documentation set: http://help.adobe.com/en_US/livecycle/9.0/lc_doclist.html

Wednesday, April 21, 2010

Flash on Mobile: An exciting future!

Adobe has been working with engineers at many mobile companies including RIM, Nokia, Sony Ericsson, Google, Palm and more. This is part of the Open Screen Project, something that keeps looking better and better. There are some very cool business drivers behind the genesis of OSP; however the one that most developers will like is the ability to deploy applications to many screens using Flash and AIR.

The Adobe AIR team has already posted some pre-release snapshots of AIR running on Google Android devices here - http://www.adobe.com/devnet/devices/demos/

If you are interested in developing AIR and Flash Applications for the Android operating system, there is a pre-sign up you can access here:
As OSP moves forward, expect to see more news about Flash over multiple screens.

Flash and Standards:

Some people have asked in the past that the Flash file format specification be placed into the hands of a Standards Development Organization (SDO), similar to what has happened with PDF going to ISO. This is something I believe Adobe would do if they could, however in the unique case of SWF and the manner in which it became what it is today, it is unlikely to happen.

A further clarification is also worthy of noting. When people say "make Flash a(n open) standard", they really are speaking of the SWF file format. "Flash" is really an entire platform since it includes development tools, runtime plugins and environments, server side tools, side channel communications methodologies for dynamic bandwidth compensation, several servers (Flash Media Server, BlazeDS for example), binary encodings (AMF) and more. The SWF file format is a standard as it sits today. The SWF file format is published here. AMF is also published as an open specification as reported by Slashdot.

I would assert that the SWF file format is a de facto standard. Adobe cannot change it radically based on the fact they care about their community. Flash has to always be backwards compatible to play older versions. It is a pure illusion that Adobe controls Flash and can do with it what they want. The community would rebel.

I would see that the OSP project becomes a collective where more than just Adobe has input into the future of Flash. It will be good to see Google, RIM, Intel and others working directly with Adobe to build improvements into the SWF specification and beyond.

Mobile also brings some unique challenges for developers. Over the next few months I plan to bring some of these to light on this blog.

Tuesday, April 20, 2010

My Open Letter to Apple

I am outraged!! I came upon something that absolutely frightens me: Censorship, based on one group's beliefs of what is best for the rest of us. This comes in the form of a statement allegedly made by Apple's founder Steve Jobs. According to several sites, he stated "Folks who want porn can buy an android phone". (read here)

Before I comment on this, there are a few things I want to say. First, I have used Mac computers as my main machines for the last few years and find them generally good machines. I also own an iPhone but recently switched to the Android powered Nexus One. This was not to view porn but because I truly believe the Android devices are going to be the best. I am not one to nitpick and bitch that a new SDK agreement apparently bans Flash development tools for the iPhone. I won't dwell on the fact someone at Apple is also apparently using the company's strength to bully developers into following Apple's business plan blindly. I am focused on the future of our industry, society in general and what I personally believe is best.

So what is happening here????

In my opinion, a line has been crossed. On top of the porn statement above, a ban of a cartoon application based on what a small group of people believe is the moral direction YOU should follow. As reported by top10.com:

"Apple believes that allowing an app which contains images that mock celebrities and politicians to go on sale on the App Store would be in violation of the terms and conditions of the platform.

Fiore had proposed launching his NewToons app, but was rejected in December for the perceived vulgarity of his work."

UPDATE: An anonymous user below (in comments) suggest that Fiore's application has now been added back to the App Store. I have been unable to actually find it in the App Store however I did find a credible source which states that Apple is going to "Fix the Mistake". http://www.poynter.org/column.asp?id=134&aid=181700

I guess we have to wait and see.END_UPDATE

PEOPLE!!! This is textbook tyranny! A free and open society tolerates dissent. Canada even allowed Ann Coulter to speak, even though most Canadians I know think she is a moron. Is Apple going to tell you what you are and are not allowed to look at on your iPhone? Would you allow them to censor what music you are allowed to listen to? Would you allow the library to start burning books based on what might be too dangerous for you to read? Maybe not now but when tyrants have eliminated all that stands in their way, what is to stop them? It is time to take a stand. I think it is a civilian's duty to fight this. (It is my blog so personal opinions are allowed and you are free to post a comment to disagree with me as long as it is not spam to sell your products).

My own company, Adobe, does not tell me what to think and what to write or not write on this blog. They understand that my thoughts are my own and on blog posts like this I am clearly speaking for myself, not the company. This is why I am proud to work for Adobe.

I am drawing my line in the sand today. Why? Because, if you allow tyranny to breathe and prosper, there will be no one left to hear you when you scream for help. I don't know what their agenda is but these latest moves are completely unacceptable to me. Here is my public letter to Apple:

Dear Apple:

It has been fun, but you are no longer "cool". You have made some great gadgets and computers in the past, but others are open and you are not. While you have brought society some great things like the iPod and iPhone, this was in the past and your current antic of censorship is unacceptable to me. You see, in Canada, we have rights. We have the right to a free and open society. I will not subject myself to censorship. The result of your actions is that I will not develop for your mobile platform, nor support it. I will also be returning to a combination of Ubuntu Linux and Windows 7 for my main work machine. You see, I have the faith that people can decide for themselves what is appropriate for them and what is not. I do not believe that any one group has the right to make decisions on morality for the rest of us. I do not wish to live in such a society.

As far as applications go, you should allow developers to develop with any tools they want and judge all application submissions fairly based on the quality and performance of the applications. These should be done using clearly published rules and be consistently enforced. Would this not achieve the end result of a rich, robust app store filled with quality applications? At any rate, I do not see how it could be worse than having a plethora of fart noise generator applications, of which only 3 really work. Do you really think the quality of applications is based only on what development tools are used? I disagree.

Respect developers! I think it is not too late to change your mantra. I write this letter in an honest appeal that you hear how your actions are being taken. Developers are usually at the top of the technology adoption curve and several developers are beginning to have issues with you. What you really need to hear is that these same developers are the reason for your success. We are the ones who are asked "what computer should we buy" by our family and friends. When you piss off developers, there is a cascade effect that will eventually affect sales.

Respect individual rights! I have never looked at porn on my iPhone, but I don't want someone else deciding what is and what is not appropriate for me. I do not want Apple employees deciding whether or not a public figure can be questioned. Accordingly, my iPhone now rests harmlessly in it's box while my Google Nexus One is being used. I get tons of people asking me about this phone (read here) and I will keep promoting it while making sure my circle of friends understands the censorship and control issues.

It has been nice, but now it is time for me to move on. Ubuntu 10.4 is out and looks pretty damn nice. Microsoft seems to have learned from Vista and Windows 7 appeals. The Google Android phone is already better than the iPhone and I am excited to started developing Android apps. I can use Java, Flash, AJAX and any toolset I want.

I am committed to standards such as Flash, HTML5 and XML. Not gonna look back. PDF, Java, Silverlight, Android, Linux, Flash are all here to stay.

Please consider the reason I am writing this letter. I do believe you are capable of making some great stuff and doing some great things. I want to encourage you to reconsider your recent actions and hear what we, the developers and computer users of the world, are saying.

Respectfully,

Duane Nickull

Wednesday, April 14, 2010

Adobe MAX 2010

Adobe MAX 2010 takes place on Oct 23-27 at the LA Convention Center (same place as last year). The website is up and running at http://max.adobe.com/. MAX 2010 is the single, pivotal connection point in the universe for thousands of Adobe designers, developers, and business leaders. This is the one place where you get to meet the Adobe ones face to face.

There is a lot I would encourage you to do. If you are a speaker, you can submit to speak here:

Get on the mail list:

If you are a startup and want to let Adobe users see your product or offering, consider becoming a sponsor. There are tons of packages available and some companies like Konductor Software have found this a really great way to reach their core customers:

This is going to be a great party!

Wednesday, March 31, 2010

AR/Copter RC helicopter at Where 2.0

I want one of these toys! This is an RC controlled copter with sensors on board, controllable via a smart phone and equipped with cameras and other systems.

Monday, March 22, 2010

Duane's World - tutorial on LiveCycle cloud, SAP TechEd

This is my longest episode to date but it covers a lot of ground. This contains some great footage of the SAP TechEd 2009 including an exclusive interview with Craig Cmehil! There is also a complete tutorial to get you up and running on the LiveCycle ES2 cloud offering including working in Eclipse on a Mac OS X system to program against the ES2 SDK.

Sunday, March 21, 2010

Flash Builder 4 Released!

Perhaps the best (or worst) kept secret is the launch of Flash Builder 4. Well, damn - it is now out. At 12:01 EDT we have officially launched it.

So what is Flash Builder 4? Easy--it is the next product in the Flex Builder line. For those of you not familiar with Flex Builder, it is simply the best way to build enterprise Flash applications. I personally tried the Flash professional authoring tools and had a tough time. The first time I tried Flex Builder, it spoke to me. Events, objects, bindings and a host of other standard OO programming concepts.

Flash Builder 4 works with Flex 4, the successor to the Flex 3 SDK. Flex 4 has the new Spark skinning and component architecture. This offers substantial improvements over the previous component architecture and reflects the top asks from many developers who wanted Adobe to push the framework to a new level.

There are over 90 new features in this release. You can also use multiple SDKs so your Flex 3 projects will drop right in. Rather than repeat all the text, read about it here.

So what are you waiting for? Download the trial now!

http://www.adobe.com/go/try_flashbuilder

I also want to personally thank the entire Flash Builder team for this release. This sets the new standard for Flex.

Have a drink on me all!

Monday, March 15, 2010

Running BlazeDS on 32 bit Ubuntu Linux 9.04

This is a topic that will appeal to a very narrow minority (smart, not-frightened to try new stuff, developers). I have always loved Linux and lately found myself totally thrilled with Ubuntu. I've now run 9.04 on a Mac Pro in VMware and have a dual boot 64-bit install running Ubuntu 9.10. What can I tell you? If Adobe had an approved Exchange client for Ubuntu, I'd say bye-bye to OS X. Check out the screenshot:



There really isn't that much to get BlazeDS up and running on either of these systems, largely thanks to the ease of use built into Ubuntu. Here are the instructions to get it up and running.

1. Grab the Vancouver build of BlazeDS from here.

2. Unzip it to your desktop. Ubuntu 9.04 makes this simple as all you have to do is double click on the *.zip package, the same as OS X or Windows.

3. Check to see if you have a JDK configured and installed. To do this, grab a terminal and type in "javac" and see what comes back. If you have not installed a JDK before, you will get a message similar to this one:



4. This means you have to use a great feature of Ubuntu. The apt-get command is a powerful command-line tool used to work with Ubuntu's Advanced Packaging Tool (APT) performing such functions as installation of new software packages, upgrade of existing software packages and more. It can even update the O/S. apt-get has numerous advantages over other package management tools available in Ubuntu for server administrators. Some of these advantages include ease of use over simple terminal connections (SSH) and the ability to be used in system administration scripts, which can, in turn, be automated by the cron scheduling utility.

5. Run the command "sudo apt-get install sun-java6-jdk". This will install the Sun Java JDK. I chose this one over the others as I consider it the reference implementation for a JDK. Once you hit enter, you will be asked for your admin password and then the magic begins. I swear this was the easiest Java install I have ever done in my life. Thank you whoever created this tool at Ubuntu!!!




6. At some point during the install, you will be hit with the Sun license agreement. There will be a little (yes) prompt at the bottom of the grey area and none of the regular keys or mouse inputs seem to get you to be able to interact with it. You have to use the TAB key for this. Tab over until the (yes) is highlighted (shown below) and hit enter. Same for the next screen.


7. When this completes, you should be able to type "javac" into the command line and see the proper output (basically a prompt asking you for options).

8. Navigate to the folder where you saved the BlazeDS build from step 1. Using the terminal, chmod it to make it executable ( chmod -R 755 BlazeDS/ ). Chmod makes the file persist in a mode of "executable" if given the 755 argument. You may have to change to su to do this. This can be accomplished by typing in "sudo" in front of the command.

9. You're almost ready to start it up. The last step is to set $JAVA_HOME. To do this, you have to modify a small properties file that controls the environmental variables when in the terminal. This file is usually in your home directory. To switch back to this directory just type in "cd ~" and then type in "ls -la .bash*". This should provide a list of files that are hidden (from just running "ls") and you will see one such as .bashrc or .bash_profile. This is assuming you are running the BASH shell.

10. You will have to edit the .bashrc or similar file to add a line that sets the $JAVA_HOME environmental variable. First you have to know what this value should be. Within the terminal, type "whereis java". This should provide a list of locations where Java is installed.

My system returned the following:

administrator@ubuntu-904:~/Desktop$ whereis java
java: /usr/bin/java /usr/share/java /usr/share/man/man1/java.1.gz

11. Unfortunately, the process is not quite straightforward. Grab a File Browser and navigate to the first path you see (in this case /usr/bin/) and inspect "java". On my system and many others, this will turn out to be a symbolic link to another location. To find out where, right click on it and select "Properties". Mine showed the location as /etc/alternatives/java.



12. Navigating to /etc/alternatives/java also revealed that this too was a symbolic link. The real target was /usr/lib/jvm/java-6-sun/jre/bin/java. This means that the real value for $JAVA_HOME will be /usr/lib/jvm/java-6-sun/.

13. To set this, use a line editor of your choice. I am going to use pico as pico is one I am familiar with. To do this, type the following in your terminal:

- "cd ~"
- "pico .bashrc"

14. Pico should bring up a configuration file. If it is not already filled in with lots of values, check the name of the config file and try again. In this file, you can add comments so I usually append my custom entries to the bottom of the file. In this case, at the very bottom, I enter the following lines of code:

# JAVA_HOME added by Duane Nickull
export JAVA_HOME=/usr/lib/jvm/java-6-sun

15. To save your .bashrc profile use "Control X" and answer "Y". Quit the current instance of terminal and open a new one. Test that your JAVA_HOME environmental variable is okay by typing in "echo $JAVA_HOME". You should see output like below:


16. With your terminal, navigate to the BlazeDS root folder, then change directory to the "sampledb" folder. Type in the following: "sh startdb.sh". The sample database should start up.

17. Start another instance of terminal and navigate to the BlazeDS root folder, then navigate to subfolders "tomcat" and "bin". Type in the following: "sh catalina.sh run".

18. Fire up a web browser and navigate to http://localhost:8400 (the default port the BlazeDS will be running on). Voila! You are done.




Coming up next will be some tutorials on Flex and AIR development on Linux if anyone is interested.