Friday, May 15, 2009

Next Flex Builder product renamed to Flash Builder? What do you think?

As an Adobe evangelist, I explain many of our products. One of the products is called "Flex Builder" which sort of insinuates that it builds "Flex". The truth is that Flex Builder actually builds Flash or Adobe AIR applications. For people building browser-based applications, they are, for all means, Shockwave Flash (swf) files. Given this confusion, there has been discussion about the next version of Flex Builder being named Flash Builder 4. It would be the same Eclipse-based IDE with a new name and lots of great new features. This theoretically would be a name change to the commercial product only, and does not affect the Flex framework or Flex SDK.

Some points to consider being sending me flames or applause ;-)

- It's still the Flex framework, and you are still a Flex developer.

- People searching for developers to build Flash would probably get connected with Flex developers much earlier in the development cycle.

- Flash Builder is the development tool for the Flash platform,
supporting the use of the Flex framework or pure ActionScript.

- Flex is the open source framework at the core of the Flash Platform,
including Flash Builder and Flash Catalyst.

- The name of the current product, Flex Builder 3, would remain the same, and would not be renamed Flash Builder 3.

It sort of just makes sense and would probably result in a lot of new revenue when people realize all these "Flex Developers" can actually build them Flash applications rather than smaller development shops having to educate the public about Flash vs. Flex.

These are ideas. What do you think? After all - it's your community.

Thursday, May 14, 2009

City of Vancouver to be "Open Source/Open Standards" based!

I got a great email today from David Eaves. Vancouver City Council has put forth a motion on "Open Data, Open Standards and Open Source" as written by Councillor Andrea Reimer (I met her at some functions during current mayor Gregor Robertson's campaign). According to the motion, the City of Vancouver endorses the principles of:

• Open and Accessible Data - the City of Vancouver will freely share with
citizens, businesses and other jurisdictions the greatest amount of data
possible while respecting privacy and security concerns;

• Open Standards - the City of Vancouver will move as quickly as possible to
adopt prevailing open standards for data, documents, maps, and other formats
of media;

• Open Source Software - the City of Vancouver, when replacing existing
software or considering new applications, will place open source software on
an equal footing with commercial systems during procurement cycles;

Read the rest here! Vancouver council: Welcome to the future!!! Thank you!!

Wednesday, May 13, 2009

New Video Tutorial - Full Screen AIR Video

This is just a quick tutorial for AIR developers to build an application that plays video in the full screen interactive mode. You can substitute the video for images or other digital assets. There are a couple of other tricks to this you can find in the AIR API docs such as how to remove the bars at the bottom.

Enjoy!

Friday, May 08, 2009

Video: How to build chromeless AIR apps in 5 minutes (update)

I had previously posted a technical article on this topic however it is out of date due to changes to the Adobe AIR application descriptor file. This video is an updated tutorial on this topic. You can download the complete project files from http://www.web2open.org/codesamples/AIR-ApplePear.zip.

Tuesday, May 05, 2009

Software as a Service: A pattern for modern computing

Mihai Corlan, Jack Wilber and I have put together a short white paper on Software as a Service (SaaS). Software as a Service (SaaS) has become a popular term within software industry circles since its introduction in early 1999. While many in the press have predicted that SaaS may eventually replace the incumbent model for software delivery, more likely an approach will evolve that combines the best of both worlds.

The white paper examines the core pattern of SaaS in pragmatic terms. It also outlines some of the strategic advantages SaaS can provide over distributed and shrink-wrapped software. The paper is not intended to be a singular authoritative source for defining SaaS so please do not interpret it as such.

Read it here:

http://www.adobe.com/devnet/articles/saas.html

Friday, May 01, 2009

Book - Web 2.0 Architectures

Is finally done. This book was the result of exhausting research into various aspects of what Web 2.0 really is. In short, this book is about Web 2.0 for those who do not merely acquiesce to it being explained as a series of buzzwords. We examine it from a pragmatic architectural standpoint.



Here is the copy review description:

This fascinating book puts substance behind Web 2.0. Using several high-profile Web 2.0 companies as examples, authors Duane Nickull, Dion Hinchcliffe, and James Governor have distilled the core patterns of Web 2.0 coupled with an abstract model and reference architecture. The result is a base of knowledge that developers, business people, futurists, and entrepreneurs can understand and use as a source of ideas and inspiration.
Full Description

Web 2.0 is more pervasive than ever, with business analysts and technologists struggling to comprehend the opportunity it represents. But what exactly is Web 2.0 -- a marketing term or technical reality? This fascinating book finally puts substance behind the phenomenon by identifying the core patterns of Web 2.0, and by introducing an abstract model and reference architecture to help you take advantage of them.

In Web 2.0 Architectures, authors Duane Nickull, Dion Hinchcliffe, and James Governor -- who have 40 years of combined experience with technical specifications and industry trends -- examine what makes successful Web 2.0 services such as Google AdSense, Flickr, BitTorrent, MySpace, Facebook, and Wikipedia tick. The result is a base of knowledge that developers, business people, futurists, and entrepreneurs can understand and use as a source of ideas and inspiration. This book reveals:

  • A Model for Web 2.0 -- An in-depth look at how the classic Client-Server model has evolved into a more detailed Web 2.0 model.


  • Web 2.0 Reference Architecture -- A generic component view that helps decision-makers recognize basic patterns in existing Web 2.0 applications-patterns that can be repurposed for other commercial ventures.


  • Specific Patterns of Web 2.0 -- How Service Oriented Architecture (SOA), Software as a Service pattern (SaaS), Participation-Collaboration Pattern, AJAX, Mashups, Rich User Experience (a.k.a. RIA), Collaborative Tagging Systems (Folksonomy), and more can be used in your technology business.
  • We also present the reference architecture and patterns on their companion website so that people in the industry can augment it and continue the discussion.

    Links:

    http://oreilly.com/catalog/9780596514433/#top

    Wednesday, April 29, 2009

    Duane's World Episode 19

    After a brief pause, Duane's World 19 is now online.

    Getting Familiar with Flex Builder

    If you are new to Flex Builder, this video will help you understand the basics.

    Tuesday, April 28, 2009

    LiveCycle ES Hosted Beta is now Live!

    I got a great internal email today from Matt MacKenzie. In preparation for the next release of LiveCycle ES, Adobe is running a pre-release program and we invite you (see qualifier) to participate. We are providing our strategic customers and partners with early access to a hosted LiveCycle ES system on LiveCycle Developer Express to ensure an exciting and high quality release.

    What’s new?

    A vast number of improvements have been made to LiveCycle ES. A sample of some of the new features includes:

    · Improved development and authoring tools, including the introduction of Action Wizard in LiveCycle Designer and changes to Process Designer to make team development possible and process design more intuitive

    · Improved end-user experience development including LiveCycle ES Service Discovery for Flex Builder and a re-engineered Form Guide Builder

    · Improved support for document assembly of XDP-based documents as well as PDF Portfolios including a new Document Builder interface to generate DDX commands

    · Improved administration and platform maturity with improved backup and recovery support (hot backup), Health Monitor, expanded platform, database, and full 64 bit JVM support

    · Improved out of the box solutions for Review and Commenting workflows which include Content Services

    How do I get involved?

    The goal of this early preview of the next version of LiveCycle ES is to provide our preferred customers and partners with the opportunity to preview the next release of LiveCycle ES. By participating, you will have access to:

    · “What’s new” presentation

    · Feature Spotlights (short recording of LiveCycle ES engineers presenting the new features)

    · Access to your own hosted system with LiveCycle ES Server and Workbench pre-configured

    · Test cases that will guide you through the new product areas accompanied with a survey to collect your feedback

    While we always strive to drive quality releases, the goal of this early preview is to collect your valuable feedback on the usability enhancements that we have added to this new release. We will also be running a public beta in early summer to solicit testing and quality feedback.

    TO DO: Immediately register yourself in the pre-release program here <http://www.adobe.com/cfusion/mmform/index.cfm?name=prerelease_interest> to ensure you get access to this early preview of the next release of LiveCycle ES. Please note that it may take up to 24 hours to activate your account.

    How to get started?

    Once you have registered, you will receive an email confirmation with information on how to access the prerelease.adobe.com site. Adobe is taking another big step in cloud computing by offering you a completely hosted environment to test our early version of our next release. We have our prerelease.adobe.com site ready to go which will provide you with access to a hosted system, support forums, bug & enhancement logging and tracking, documentation, etc.

    Access to the hosted server on the LiveCycle Express system is very easy. Log on to the prerelease.adobe.com site where you will find a short welcome note. Here you will find a link to our Getting Started page that contains all of the information you need to get started with your very own hosted system.

    Some guidance:

    The prerelease site supports online forums. Please use the forums when you have a general question or suggestion that you feel other testers can benefit from. We would also encourage you to look at the forum posts prior to submitting a question, as someone may have already found an answer.

    If you have questions or need help, please contact me at dnickull at adobe dot com.

    We look forward to your feedback and appreciate the time and energy that is invested to help improve the quality and usability of our product

    Sunday, April 26, 2009

    Search Engine Optimization Tricks and Tips condensed.

    I have written quite a bit on the subject of search engine optimization a.k.a. SEO. Not everyone agrees, nor do they all understand the depth of what is going on (including me) but there are many more points that the experts do seem to agree on. Since my posts on the subject are sort of all over the place, I have condensed them here. Of course, you can always go to google.com and search for "search engine optimization tricks" and the articles should come up within the top ten or so. By the way, that particular term ("search engine optimization tricks") is one of the hardest to get in the top ten for since everyone who is really knowledgeable about SEO and does it professionally knows that their prospective clients search for that term. Me? I just give the advice away for free.

    Before anyone uses these to "trick" Google, know that doing so will often result in helping nobody. After all, what is the use of having a website selling some medication come up in the top ten results for someone seeking to read about golfing or fishing? Yes, you might be able to do this, but it will not benefit you and it will not benefit the readers so don't bother. I have said this before and will say it again, Google's ranking system is very fair and if you want your sites to do better, use proper enhancements, not black magic tricks. I have never had to resort to anything underhanded to gain #1 spots and keep them. Some examples? Search for these terms in Google and click to either the sites that points at this blog or back to Adobe.com: SOA White Paper, Enterprise Developer Resources, Sombrio (goes to my friend's site), Search Engine Optimization Tricks, Adobe cloud computing, understanding REST, Adobe MAX 2009. Note that some of these will change over time (as they should) as new works become available. In the past, I have helped clients get #1 for bicycle, mountain bike, aromatherapy, yoga, skiing, mac and more.

    Here is a list of some relevant posts on the subject made in the past.

    http://technoracle.blogspot.com/2008/07/searchable-flash-some-early-tips.html
    Some tips related to Flash SEO.

    http://technoracle.blogspot.com/2007/06/seo-search-engine-optimization-tricks.html

    8 quick tips anyone can implement.

    http://technoracle.blogspot.com/2008/10/flash-search-engine-optimization-tricks.html

    A recap of a talk I did on Flash SEO at the Web 2.0 conference in Berlin. Slides included.

    http://technoracle.blogspot.com/2009/04/more-seo-tips-to-save-you-tons-of-work.html
    Some general tips to save you work by really understanding some of what Google ignores.

    http://technoracle.blogspot.com/2009/01/flash-search-engine-optimization.html
    A video of how Ichabod indexes SWF content in different states. Note that as Beussery noted in the comments, this is now old and there are still major questions about how Google actually uses content it grabs.

    http://technoracle.blogspot.com/2008/10/flash-seo-research-google-does-use.html
    A report on Google's use of Ichabod (code name) for indexing SWF content.

    http://technoracle.blogspot.com/2008/06/duanes-world-tv-episode-3-live.html
    A pointer to a video tutorial of how Google tracks searching and click-through traffic.

    If this still is not enough, try Google's site. They pretty much tell you exactly what you will need to do to help elevate your rankings.

    http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=35291

    There are also some other people who I consider of guru status (we don't always see eye-to-eye but generally they are very knowledgeable):

    Danny Sullivan

    Beu Blog

    Anyways, this is enough information to get you higher than you are now in the rankings.

    My next work is some trial studies to determine how well SWF content ranks against HTML content given the same context. This study is ongoing and has to be totally uncontaminated by people searching for or linking to it so I cannot divulge any secrets, but I will share all when ready.

    I am also working on cracking the codes within the Google page results. If you search google.com for a term, you will find some cryptic strings within the source of the results page like this:

    http://www.google.com/url?sa=t&source=web&ct=res&cd=2&url=http%3A%2F%2Fen.wikipedia.org%2Fwiki%2FArchitectural_pattern_(computer_science)&ei=Lv2lSYXeL8TMnQePtZWjBQ&usg=AFQjCNHZFyB7San73Hj6Lb0zkcUbGq_N0g&sig2=nNH5vIakDgirDg8dMpz7RQ

    Now note that this is often different on most geographical, temporal, and browser/OS combinations, but you can generally find these strings:

    ei=AOKlSaLSBMTMnQfhs5GjBQ
    usg=AFQjCNHtxRnR1RWVZrM6TD0uYFmK8GWFTA
    sig2=eFYPDz8WzdtLw9OB_y00qA

    The middle one, starting with AFQjCN will be in most search results however the 7th letter often changes. If I search in Vancouver, I nearly always get an "H" but others have experienced differences.

    I highly suspect that this is anti-spamdexing technology engineered by Google and returns a hash value based on an IP address and timestamp, making it impossible to gain click through success. It is probably impossible to get around or spoof but nevertheless presents an intriguing puzzle.

    I recently posted a challenge to a few people such as Danny Sullivan, Tim O'Reilly, Dick Hardt, Matt MacKenzie, and others to see what they got as the 7th character. The results varied.

    Google can track what you click on. This means that over time, search engine results can be tracked and dynamically adapted based on who clicks on what. The actual mechanism is far more complex than such a simple algorithm, however, as ontology classifications are mixed in along with other ways to determine how each result should be treated in future searches.

    Using a different machine and browser combination from a different IP address, I also found this little snippet of code in the source:

    a href="/url?q=http://www.answers.com/architecture&r=67&ei=EAGmSY7pO5DZnQfsxb3jDw&sa=X&oi=dict&ct=D&cd=1&usg=AFQjCNGEcgqgfjDs8O9JnDVraTEt07mqQQ"
    in particular, compare the value of usg=AFQjCNHZFyB7San73Hj6Lb0zkcUbGq_N0g to this value

    usg=AFQjCNHZFyB7San73Hj6Lb0zkcUbGq_N0g
    usg=AFQjCNGEcgqgfjDs8O9JnDVraTEt07mqQQ"

    Can it be a coincidence that the first 7 characters are the same? The odds against this are 52 to the power of 6 or better than 1 in one quadrillion +. This is based on only observing upper and lower case letters. If you include numeric values the number is much higher.

    When I clear my cache and cookies, the value changes yet the first 6 characters remain the same:

    usg=AFQjCNF6pTl1_OknMH4NN88IVnlugECBBQ

    If these values do not change, it is possible that the first 6 characters are based on some unmutable part. At first I thought perhaps it was the search itself so I changed the search term yet got this response:

    usg=AFQjCNF_5AxdU_kbNpKl21c1VcXmXRLnGA

    This is an interesting and probably ultimately pointless exercise, but I am the type who does crosswords and picks up Rubik's Cubes when I see them (best time to solve ever was 5'30" flat).
    Mental Masturbation? Perhaps. There is probably a document somewhere outlining exactly what it is but I prefer to figure it out on my own.

    Thursday, April 23, 2009

    Understanding REST

    There are a lot of people talking about REST (1) yet very few actually have taken the time to read Roy Fielding's thesis about it. This blog post will attempt to explain REST in a simplified manner to convey the basics. Please do not consider this authoritative however. REST means different things to different people at this time and this blog post is based on REST as per Fielding's work.

    First and foremost, REST does not equate to HTTP and XML. REST is an architectural style. Encapsulated within the REST style are several key principles governing network architecture. While the HTTP/XML confusion reigns in most articles, it is in fact possible to write an HTTP and XML interface to a resource that does not comply with the principles of REST.

    REST can be simplified down to the following:

    1. REST begins with the notion of a null architectural style (imagine that there is only a "thing" with no discernible detail). From this emptiness, the first constraints of REST emerge. A client-server architecture is the first emergent principle; a separation of all into two concern groups. This allows each group to evolve separately and scale across multiple domains (similar to SOA).

    2. REST then adds the principle of stateless binary relationships. In section 5.1.3 of his dissertation, Fielding writes "each request from client to server must contain all of the information necessary to understand the request, and cannot take advantage of any stored context on the server". These types of requests are also termed "idempotent". Inference? Any site using cookies or stored contexts is not compliant with REST.

    3. REST does make the possibility of caching available to improve efficiency. While not violating the principles of stateless invocations, client side caches can be used to allow reuse of information.

    4. Uniform interfaces and uniquely identified resources are pivotal to being RESTful. Having a uniform interface between components (such as the use of certain methods like GET, POST, PUT and DELETE in protocols like HTTP), enables implementations to be decoupled from the service interfaces. This principle is also embodied in Service Oriented Architecture, which perplexes me why so many people compare SOA to REST.

    Fielding writes more about the subject in section 5.1.5 "In order to obtain a uniform interface, multiple architectural constraints are needed to guide the behavior of components. REST is defined by four interface constraints: identification of resources; manipulation of resources through representations; self-descriptive messages; and, hypermedia as the engine of application state."

    5. A resource is explicitly defined as "the intended conceptual target of a hypertext reference" and later in section 5.2.1.1 as "any information that can be named...". The first of these definitions seems to concretely link HTTP to REST yet there are arguments that hypertext is used here in a generic manner. In fact, later in section 5.2, it quite explicitly states "REST ignores the details of component implementation and protocol syntax in order to focus on the roles of components". Nevertheless, the way to interact with resources is via representations of the resources, as per 5.1.5. Note that Resource is defined in W3C terms as "any thing that can have an identifier".

    6. Resources are identified with a URL or URN. Note that in this case, the URL should be constrained to be free of non-uniform interfaces (such as http://www.domain.com/someOperation?operation=manipulationByURL&moreOperations=notAllowed). This style of manipulation of data elements through invocation of non-standard operations is the anti-pattern or REST. REST therefore can be contrasted to Remote Procedure Calls (RPC) which generally encapsulate the notion of invoking a procedure on a remote server.

    REST is an abstraction of all these architectural elements plus a few more within a distributed hypermedia system such as the Internet. Now here is the one sentence summary:

    REST-based architectures communicate primarily through the exchange of representations of the state of resources through uniformly defined interfaces.

    Try saying that 5 times fast.

    So is it possible to define RESTful services for SOA? Absolutely. Do you have to use XML in REST? No.

    There is a lot more about REST that you should look at in detail but I think this captures the gist.

    Don't believe me though - read about it here yourself. http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

    References:

    (1) Fielding, Roy Thomas. Architectural Styles and the Design of Network-based Software Architectures. Doctoral dissertation, University of California, Irvine, 2000

    Wednesday, April 22, 2009

    Ontology advice needed for SEO playground.

    OK - I am a geek. A nerdling. Social misfits do stuff like this just to prove it can be done. Here is my current question du jour.

    I am right now placing First Order Logic (FOL) binary and n-ary relationships into the associations binding for labeled relations in a test metadata facility (Registry-Repository). I am doing this because I got sick of Computational Intelligence researchers just talking about this and not actually coding and doing something to solve the problem so the Canadian cowboy instinct to code first and see where problems arise has taken over. Search technologies on the web have kind of plateaued. With no real competition, are Google and Yahoo going to keep innovating search to the point where a 3-word search term can find a needle in a haystack? I do not think so but it is not outside the realm of possibility. While researching some advanced SEO topics, I started realizing that fuzzy logic and quantum computing patterns have not yet been optimized for NL programming heuristics.

    I have run into a problem that I would appreciate input on. My goal is to bind something like this (From SUMO - thanks to Adam et al for doing the hard work).

    (=>
    (instance ?OBJ Object)
    (exists
    (?TIME1 ?TIME2)
    (and
    (instance ?TIME1 TimePoint)
    (instance ?TIME2 TimePoint)
    (before ?TIME1 ?TIME2)
    (forall
    (?TIME)
    (=>
    (and
    (beforeOrEqual ?TIME1 ?TIME)
    (beforeOrEqual ?TIME ?TIME2))
    (time ?OBJ ?TIME))))))

    ..to a registry-repository node instance to allow folksonomy tags to reference the upper level ontology classes that the folksonomy tag owners believe they belong to. Additionally, each instance of a folksonomy tag may have * relationships to other ontology classes or even other folksonomy tags. The latter relationships can be defined in terms of constrained relationship tags like “synonym, disjoint, etc.”.

    I want to represent all upper ontologies; however some of them contain subtle nuances between their terms. Dolce, SUMO and others have defined binary relationships like transitive, intransitive, reflexive, irreflexive, symmetrical as well as some partial ontologies. The problem is that there are no namespace qualifications for these so I want to introduce that into my work. I was planning on just using the root URLs for each work however there are versions possible in some of the work.

    I would like this to be in the form of (upper_ontology_identifier)+(version_or_instance)+(uuid) as a classifier followed by the term label such as “transitive”. I will probably use URIs for the UUID.

    Question:

    Has anyone ever come across a similar problem and if so, how did they solve it?

    Thoughts and comments welcome too.

    Wednesday, April 15, 2009

    More SEO tips to save you tons of work

    I have noticed that some of my previous tips on SEO have generated huge amounts of comments. This one for example has generated over 100 comments although I have deleted most since they were blatant advertising.

    http://technoracle.blogspot.com/2007/06/seo-search-engine-optimization-tricks.html

    I want to share a little secret to those who are still adding comments with links in hopes of building up link equity.

    "Google does not follow links in blogger comments!"

    Surprised? Don't believe me. Check it out for yourself. The first comment on the page above is from a company called Wavestech. They claim to be an SEO company but obviously do not understand the statement above. You can check out who links to you in Google buy going to http://www.google.com and doing a search in this format (note no space between 'link:' and domain name):

    link:www.domainname.com/

    Of course, replace "domainname.com" with the actual domain name. To verify whether or not wavestech has anyone linking to it, check out their results:



    http://www.google.com/search?hl=en&safe=off&q=link%3Awww.wavestech.net%2F&btnG=Search

    Dang!! One result. I wonder how much time they spent replying to comments in the last year and wondering why they are not elevated. Another company called 123seoservices.com tried it too but they have no results and no link equity.

    http://www.google.com/search?hl=en&safe=off&q=link%3Awww.123seoservices.com%2F&btnG=Search

    The rule of thumb here is simple. There are no easy and quick ways to get to #1 for any search term. You have to pay your dues. Let the natural path take you up there. If you make a good site, with good information, it will find its way to the top of the pile eventually. Take "SOA" as an example. Try a search for "SOA White Paper" on Google.

    http://www.google.com/search?source=ig&hl=en&rlz=&=&q=soa+white+paper&btnG=Google+Search

    The number one result for this is a white paper I co-wrote for Adobe.

    www.adobe.com/enterprise/pdfs/Services_Oriented_Architecture_from_Adobe.pdf

    We did not get #1 by spending hours making comments on others blogs. We spent the time writing a well researched paper that tries very hard to explain message exchange patterns in SOA without pitching products. This time was much better spent making a good paper and letting people search for it, find it and get it to #1 in Google by its reputation.

    People linked to it because they liked it and thought it served a purpose. There are 137 links to that paper:

    http://www.google.com/search?hl=en&safe=off&q=link%3Awww.adobe.com%2Fenterprise%2Fpdfs%2FServices_Oriented_Architecture_from_Adobe.pdf+&btnG=Search


    Google engineers also monitor networks for patterns. It is easy for them to spot a pattern to catch cheaters. Even if you crack the hashcode algorithm (I think I am very close now) for the cryptic string you get back in search results to track what you click on, your spike in traffic would be caught if you used it. Better to spend the energy creating good work that people want to use.

    Advice:

    Spend time making quality sites; do not try to cheat your way up to the top. Cream rises naturally to the top. Put the energy into creating good content.

    Tuesday, April 14, 2009

    FLARToolKit - 3D Flash augmented Reality

    During the recent Web 2.0 conference in San Francisco, I was lucky enough to get to attend and work the booth for Adobe in the Expo area. A lot of people hate booth duty but I personally love it. It's really where we get the best, most honest responses from members of the public, and it gives us a chance to poll how our corporate image is fairing.

    At the booth, I demoed FLARToolKit. FLARToolKit (source code) is an AS3 version of ARToolKit. ARToolKit was a C library that enabled augmented reality; however the Adobe Flash/Flex/AIR compatible version, FLARToolKit, is not merely a port of the original C version. FLARToolKit is ported from a Java, version which is called NyARToolKit. (NyARToolKit seems to execute much faster than the original C version after the great effort of nyatla.)

    FLARToolkit will detect the marker from an input image and calculate the camera position in three-dimension space. Something like Helper library are planned, but further processing (like synthesizing the 3D Graphics) needs to implemented by yourself. You can try a demo of it here at General Electric.

    While at the booth, we got awarded the "Best in Show" award from Web Professional Minute, sponsored by Peachpit Press. This image links to the video.




    My colleague Lee Brimelow took the concept one step further and has now produced an excellent tutorial on how to use the FLARTookKit for AS3 (Flash/Flex/AIR) developers.



    If you haven't seen Lee Brimelow's GoToAndLearn website, it is a must see.

    Thursday, April 09, 2009

    New LiveCycle Video Tutorial

    This video show how to remotely invoke services using the APIs and SOAP endpoints. This contains step by step instructions for setting up the project, writing the code, and compiling and running the application.

    UPDATE: If you cannot see the video, I have now posted it to Google video here:

    http://video.google.ca/videoplay?docid=2601122249633361252


    Watch Adobe LiveCycle ES Java Service Invocation in Tech & Gaming | View More Free Videos Online at Veoh.com

    Invoking the LiveCycle ES 8.2.1 Distiller API from Java

    Scott MacDonald and I created a tutorial to help LiveCycle ES developers better understand the process around using the Quick Start guides available from the LiveCycle area of the Adobe Developer Connection. In this tutorial, you will learn how to download and configure the code samples, configure the right JAR files, set user permissions, and invoke a LiveCycle ES SOAP endpoint to convert a PostScript file into a PDF file.

    Before you start:

    You will need to ensure you have the following on your local drive. I used a MacBook Pro laptop to conduct this lab.

    • Java JDK 1.5 – ensure your environment variables are set as per the instructions from the LiveCycle ES documentation
    • Eclipse 3.4 (Ganymede)
    • The LiveCycle ES Client SDK JAR files. You will need the following JAR files to make this lab work:


    /*
    * This Java Quick Start uses the EJB mode and contains the following JAR files
    * in the class path:
    * 1. adobe-encryption-client.jar
    * 2. adobe-livecycle-client.jar
    * 3. adobe-usermanager-client.jar
    * 4. adobe-utilities.jar
    * 5. jbossall-client.jar (use a different JAR file if LiveCycle ES is not
    * deployed on JBoss)
    *
    * These JAR files are located in the following path:
    * {install directory}/Adobe/LiveCycle9.0/LiveCycle_ES_SDK/client-libs/common
    *
    * The adobe-utilities.jar file is located in the following path:
    * {install directory}/Adobe/LiveCycle9.0/LiveCycle_ES_SDK/client-libs/jboss
    *
    * The jbossall-client.jar file is located in the following path:
    * {install directory}/Adobe/LiveCycle9.0/jboss/client
    */
     


    You will also need the third-party JAR files to use the SOAP stack rather than EJB endpoints. If you want to invoke a remote LiveCycle ES instance and there is a firewall between the client application and LiveCycle ES, then it is recommended that you use the SOAP mode. When using the SOAP mode, you have to include additional JAR files located in the following path:


    /*
    {install directory}/Adobe/LiveCycle9.0/LiveCycle_ES_SDK/client-
    * libs/thirdparty
    */
     


    For information about the SOAP and EJB mode, see "Setting connection properties" in Programming with LiveCycle ES.

    For complete details about the location of the LiveCycle ES JAR files, see "Including LiveCycle ES library files" in Programming with LiveCycle ES.

    1. Open up Eclipse and set up a new Java project by choosing File > New > Project.

    2. Select Java Project.



    3. Type a name for the project and click Finish.



    4. When the new project opens in your workspace navigator, right-click (Windows) or Control-click (Mac) on the src folder under the project.

    5. Choose New > Package.



    6. Type a name for your package (I used “org.duanesworldtv.samples”) and click Finish. This step is important because it keeps your class files distinct from other class files with the same names under your workspace by namespace qualifying them.

    7. Right-click on the package name you just created (under your project) and choose New > Class to create a new class file.



    8. In the New Java Class dialog box, type the name for your class (I used “CreatePDF”) and click Finish.




    9. You should see some skeleton code under your new project. Highlight all code below the package name and delete it.

    10. Replace the deleted skeleton code with this source code:

    package org.duanesworldtv.samples;

    /*
    * This Java Quick Start uses the following JAR files
    * 1. adobe-distiller-client.jar
    * 2. adobe-livecycle-client.jar
    * 3. adobe-usermanager-client.jar
    * 4. adobe-utilities.jar
    * 5. jbossall-client.jar (use a different JAR file if LiveCycle ES is not deployed
    * on JBoss)

    *
    * These JAR files are located in the following path:
    * /Adobe/LiveCycle8/LiveCycle_ES_SDK/client-libs
    *
    * For complete details about the location of these JAR files,
    * see "Including LiveCycle ES library files" in Programming
    * with LiveCycle ES
    */
    import java.io.File;
    import java.io.FileInputStream;
    import java.util.Properties;
    import com.adobe.livecycle.generatepdf.client.CreatePDFResult;
    import com.adobe.idp.Document;
    import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
    import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;
    import com.adobe.livecycle.distiller.client.DistillerServiceClient;

    public class CreatePDF {

    public static void main(String[] args)
    {
    try
    {
    //Set connection properties required to invoke LiveCycle ES
    Properties ConnectionProps = new Properties();
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "http://{your_server_IP}:{HTTP_PORT}");
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL);
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "{username_of_privileged_user}");
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "{password}");

    // Create a ServiceClientFactory instance
    ServiceClientFactory factory = ServiceClientFactory.createInstance(ConnectionProps);

    DistillerServiceClient disClient = new DistillerServiceClient(factory );

    // Get a PS file document to convert to a PDF document and populate a com.adobe.idp.Document object
    String inputFileName = "/Users/duane/Desktop/eclipse/workspace/JavaOne2009-docs/test.ps";
    FileInputStream fileInputStream = new FileInputStream(inputFileName);
    Document inDoc = new Document(fileInputStream);

    //Set run-time options
    String adobePDFSettings = "Standard";
    String securitySettings = "No Security";

    //Convert a PS file into a PDF file
    CreatePDFResult result = new CreatePDFResult();
    result = disClient.createPDF(
    inDoc,
    inputFileName,
    adobePDFSettings,
    securitySettings,
    null,
    null
    );

    //Get the newly created document
    Document createdDocument = result.getCreatedDocument();

    //Save the PDF file
    createdDocument.copyToFile(new File("/Users/duane/Desktop/eclipse/workspace/JavaOne2009-docs/DuanesWorldTest.pdf"));
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

     


    11. When you paste this code into your project, you will notice several red Xs beside various lines. This is because you have not yet imported any of the LiveCycle ES JAR files.

    There are a couple of gotchas you need to know about with respect to these JARs.

    First, the JARs must be from the same release of LiveCycle as the instance you are going to connect to. JARs from 8.0, for example, might not always work with an 8.2.1 instance.

    Second, the JARs are in various locations and not always easy to grab. (See above for the exact locations.)

    We put our jars into a parallel directory that we created under our Eclipse workspace called “JavaOne2009_libs”. This allows us to easily use these JAR files for multiple projects.



    12. To add the JARs to your project, highlight the project name in the navigator tab, then right-click and open the project Properties dialog box.



    13. Select Java Build Path and then the Libraries tab. Click Add External Jars. Select all the JARs under the “thirdparty” folder (for SOAP only – these are not required for EJB endpoints invocation). You will also need to import the Adobe LiveCycle Client JARs. (Note: In the image below we have highlighted some extra jars because we plan to add more class files to this project later.)



    14. Once your JAR files are added, your build path should look similar to this:



    15. Click OK, check any warnings in Eclipse, and correct as needed.

    16. Now locate the lines of code that set the connection properties. They are at around line 14 and look like this:


    //Set connection properties required to invoke LiveCycle ES
    Properties ConnectionProps = new Properties();
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "http://{your_server_ip}:{http_port}");
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL);
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss");
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "{username_of_privileged_user}");
    ConnectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "{password}");
     



    17. You will have to change three values. The first is the server IP address and port. If the server is on the same machine, http://localhost:8080 should suffice. Change it as required to match your server's location.

    18. Next, you will be required to supply a username and password of a user with the right privileges. We used the username "kvarsen" because it is installed by default when you install the LiveCycle ES samples. The matching password for kvarsen is “password”, all lowercase.

    To run the code in this tutorial, however, you will need to update the roles assigned to kvarsen. To do this, you must have administrator access to the LiveCycle Server you wish to connect to. Log in to the adminui at http://{your_server_ip}:{http_port}/adminui. For example, ours was http://duanesworldtv.org:8080/adminui. Once inside, navigate to Home > Settings > User Management > Users and Groups.



    19. Type the user's name in the Find text box (for Kel Varsen, type “varsen”) and click Find. The user's name will come up in the list with a hyperlink. Click on the name to show what permissions the user has.



    20. Click the Role Assignments tab.




    21. This will bring up a screen that shows all the roles and permissions that this particular user has. For this tutorial, you want to ensure that Kel Varsen is privileged with the PDFG (PDF Generation) service. (In the screenshot below the user is already assigned the PDFG User role; your setup will likely not show this yet.)



    22. To find the appropriate roles, click Find Roles, which will bring up a list.




    23. Locate and select the PDFG User role, and then click OK. You can then log out of the adminui console.




    24. You are almost ready to run the code. Back in Eclipse, you will notice two lines of code that contain path references. One is a reference to a PostScript document. You need to change this to correspond to an absolute path to a PostScript document on your hard drive. The path we used is:

    // Get a PS file document to convert to a PDF document and populate a com.adobe.idp.Document object
    String inputFileName = "/Users/duane/Desktop/eclipse/workspace/JavaOne2009-docs/test.ps";
     


    25. Replace this path with a path to a valid Postscript file.

    26. You also need to specify the path used to save the file when it comes back from LiveCycle ES. This is around line 72 and looks something like the code below. Change the path to a location on your system for which you have access.

    //Save the PDF file
    createdDocument.copyToFile(new File("/Users/duane/Desktop/eclipse/workspace/JavaOne2009-docs/DuanesWorldTest.pdf"));
     


    27. Now run the application. You should see the console output working with no errors. Go to the location you referenced in the previous step and you should find a file there titled “DuanesWorldTest.pdf” or whatever you named your file.

    Congratulations – you have just invoked your first remote SOAP endpoint using LiveCycle ES!

    Tuesday, April 07, 2009

    Adobe Stimulus Plan - free product, learn Flex in one Week!

    During the last year there has been a worsening financial crisis. While some may look at this as a bad thing, I look at it as opportunity. Have you ever thought about upgrading your skills? Wanted to work in high tech? If you recently lost your job, now might be the time - and Adobe (and the evangelism team) is here to help!

    Fact: Flex and AIR developers are in short supply! Don't believe me, look at the search result below. Over 1.7 million results for "Flex Developer Wanted".

    http://www.google.com/search?source=ig&hl=en&rlz=&=&q=flex+developers+wanted&btnG=Google+Search&aq=f&oq=


    Inference: there is more demand than there is supply for skilled IT workers.

    Rationale: Think about why. As the economy got worse, big firms failed and got acquired by others. What is the first thing they want done? Integration of computer systems and re-branding, both of which require programmers and architects. The demand is out there.

    Solution: We are giving away FREE Flex Builder licenses to anyone who has recently been laid off. You can simply go to this location and apply:

    https://freeriatools.adobe.com/

    Of course, free tools don't just build stuff themselves so we need to help out even more and train you. I have taken it upon myself to do this and I have made a full day of training available here.

    http://www.web2open.org/courses.html

    On top of that, I have started some full day, hands-on intensive courses for those who want to learn how to use Flex Builder. There are two events scheduled.

    Vancouver - May 28 - Full day 100% free Flex, AIR camp (details)

    Berlin - June 14 - Full day 100% free Flex, AIR camp (details TBA)

    and

    Possibly a third at Hamburg. If you are interested in Hamburg training in the time frame of June 15-25, please drop me a comment here. Ja - ich kann auch Deutsche sphreche und ich liebe gut Deutches Bier!

    I will also entertain coming to other cities around the world to help train those who are interested in changing their lives and joining us. We are all part of a global community and it is only an illusion that we are separate. What harms you harms me. What helps you helps me. Pay it forward and good karma shall be yours.

    On top of that, Adobe has made one full week of video training available to take online. See here for details:

    http://technoracle.blogspot.com/2009/03/learn-flex-in-one-week.html

    Oh yeah - did I mention this is all free!

    WOOT!

    Monday, April 06, 2009

    Registration open for free Flex/AIR training in Vancouver

    Last month I blogged about a free developers day of training for Adobe Flex and AIR. The date has been set at May 28 and the registration is open:

    http://flash.meetup.com/110/calendar/10129317/


    This course will be largely hands-on and everyone there will build several applications and complete labs to get trained in RIA web development.

    There are limited slots available and in the first hour almost 1/7 of the seats has gone. Register now!

    Become an Adobe affiliate

    Fan of Adobe? Want to make some extra cash? You may not be aware of this but there is an Adobe affiliate program in place to allow anyone to make money by referring customers to Adobe technologies.

    Anyone (except Adobe employees!) can signup and direct folks to the online store -- any purchases made after referral receive a 6% commission. That's over $40 for a single copy of Flex Builder Pro.

    Here are details on the program:

    http://www.adobe.com/buy/affiliates/

    Wednesday, April 01, 2009

    I can finally talk about my Apple Microwave

    I have been part of a group of people who were selected to test Apple's move into the consumer appliances market. While being under NDA has been difficult, it officially ended Mar 31, 2009 and I can now share the results (and where you can order one - below). It makes sense for Apple to move in this direction, after all - they have dominated the phone and TV market places. Moving to Microwaves, Fridges and Stoves is a logical next move for the consumer electronics giant, joining companies like Sony, General Electric, Siemens and others. If Apple's past reputation is anything of an indicator, I think they will be a serious threat in this marketplace. My experience was very good.

    I was selected to preview the new Apple Microwave. Let me tell you - this is no ordinary appliance. Apple has integrated components from their computer platform such as Bluetooth, network access, pinhole cameras and a range of other sensors. The Apple Microwave is so easily integrated with their other products, you can actually use it with your iPhone (as long as you're within Bluetooth range).



    How it works:

    The Apple microwave has a small pinhole camera which transmits images on Bluetooth. These can be picked up with a standard iPhone or iPod as well as any Mac laptop that is Bluetooth enabled. The Microwave also has sensors that probe the surface temperature of the dish you are cooking and even track it as the food turns on the turnstyle. The images are overlayered with temperature readings.

    Nits:

    - In Canada (and most of the rest of the world) we use Celsius. The current model I tested only had Fahrenheit. I am sure this will be fixed in the next release. See image below. The number in the top left-hand corner is the timer showing 33 seconds left.



    - There is a delay in transmitting images to the iPhone (I haven't tested any other BT device). Note that in the photo below, the rotation of the food shown on the iPhone is about 2.5 seconds behind the rotation of the food on the turnstyle. The rotation in this case is going clockwise.



    - I would also like to see network connectivity to monitor thawing food from other rooms in my house.

    Summary:

    I love it. I haven't been asked to give it back yet and I would not want to. Apple is supposed to open up their beta program later this week. Keep your eye on the following URL where you will be able to apply. I am not sure how much the final consumer pricing will be.

    http://www.apple.com/microwave/