Pathfinder Blog
Archive: April 2007

Mini Review - Google Web Toolkit Solutions: Cool & Useful Stuff

A mini book deserves a mini review, and so it is with the "Digital Shortcut" from January 2007 entitled Google™ Web Toolkit Solutions (Digital Short Cut): Cool & Useful Stuff. The 112 page PDF goes further than any of the free tutorials out there in that it develops two non-trivial applications using GWT: a Yahoo! Trips app that uses proxied Yahoo web services, and an Address Book, that makes use of Hibernate persistence.

The applications are non-trivial in that they tackle complex use cases, backend processing, web service, backend persistence and the integration of third party Javascript frameworks -- all aspects of GWT application development that are of great interest to serious developers. (Source code available for download.) In order, the chapters cover the following:

  1. Chapter 1 covers what must already be fairly familiar to most GWT developers -- making an RPC call to a backend servlet. This chapter, however, does an exceptionally good job of explaining the why and how of GWT RPC in exhaustive detail. The Yahoo Trips application is used to illustrate how to proxy an RSS feed.
  2. Chapter 2 shows how to integrate third party Javascript libraries with GWT. In this case Scriptaculous is used to provide an effect in the Yahoo Trips application to the panel containing the search results. The chapter focuses on two ways to incorporate scripts in the app -- simply including script tags in the application html file, and GWT script injection, i.e. through the GWT config file.
  3. Chapter 3 shows one way of how to implement drag and drop with GWT, using a fairly OO approach. The code seems pretty reusable and useful. Again, the Yahoo! Trips app is used.
  4. Chapter 4 shows how to bring GWT into the mix. Most of it is old hat for experienced Hibernate hands, but the example does work through implementing a sort of remote DAO using the GWT RPC. It's always good to see how that is done, even if it looks simple on paper. The Address Book app is used for this example.
  5. Chapter 5 shows how to use ant to deploy your apps to Tomcat. I assume most everyone is using Googlipse or some non-free alternative, but writing ant files for automated build environments is still a useful thing to know.
  6. Chapter 6 illustrates the use of popups and "deferred commands." Popups are obvious (modal and modeless dialogs); deferred commands are a way of giving focus to widgets that have not yet been displayed. I really haven't seen good treatment of this aspect of GWT programming elsewhere. Uses the Address Book app for this example.

Over all, the book doesn't skimp on explanations and code samples and is written in a clear style. It doesn't address unit testing with JUnit, but I suppose you can get that information elsewhere. For those of you who like to learn by doing, this is a decent tutorial (and worth the $10 price tag) that can tide you over until the bigger GWT tomes come out.



Technorati : , , , , , ,

How to Write ZK Components

A big selling point of the server side component Ajax frameworks like ZK and Echo2 is the ability to leverage a library of components so you can stick to the server side environment and not have to bother with Javascript, CSS, etc. Of course in order for this to work out, there has to be a healthy library of components, and for there to be such a healthy library, the writing of those components has to be easy or at least well documented. Over at Javaworld, they've got a three part series on how to write ZK Forge components (part 1, part 2, part 3).

The three parts show how to write a Hello World, a custom button, and a custom panel component, respectively. Note, since this is where the rubber meets the road, i.e. the Java framework meets the browser in all its Javascript/CSS/XHTML glory, you will need to have some of those skills to really benefit from these tutorials.



Technorati : , , ,

The Perfect Job

Evangelical - marked by ardent or zealous enthusiasm for a cause.

Evangelist - a person marked by evangelical enthusiasm for or support of any cause.

Passion - a strong or extravagant fondness, enthusiasm, or desire for anything:

I turned 40 last year and at the same time have been hiring quite a number of people for my company. I worry about whether the work is interesting enough for the developers I'm hiring and that they are getting a good and varied mix of projects. This has me thinking: if I could design the perfect job for myself, what would it be?

There was a time that I wanted to be a chess grandmaster or a nobel prize winning physicist. These days I love playing around with open source code, and I love playing around with Ajax, and I especially love playing around with open source Ajax code. Contributing to open source projects is also a gas. I like teaching, thinking and writing/blogging about open source and Ajax. I like building cool software, the kind that has people saying "I didn't know you could do that."

So ideally my perfect job would have me reading, writing, thinking, coding, designing, and speaking about Ajax and open source. Yep, that about does it, except occasionally I'd like to work with our user experience design folks and on actual client projects to impart my wisdom to other developers. I guess I'd be an Open Source and Ajax Evangelist.

Now why don't I have that job? I own my own business, after all, a growing appdev and uxd consulting company. I'm the boss, so why can't I redefine my own job? Why can I devote only a small fraction of my time to those things? Well, because I have a business to run, clients to satisfy, developers to hire. Face it, it may be my dream job, but it will stay that -- only a dream.

The best I can do is offer that job to someone else. So, that is what I am going to do. I'll have a more formal (and obtuse) job posting up that will satisfy our HR dept. and that the world can parse for exact meaning, but in the meantime let me describe my ideal candidate for this job:

  1. You have to be passionate about Ajax and Open Source. Passion is a word that gets thrown around the corporate world a lot. I don't mean it in that cheap and devalued sense.
  2. You have to be a stud (in a gender neutral sense) Javascript/OO/CSS/XHTML developer. You have to be able to make those DOM elements sing and dance. You should be on a first name basis with JSON, XSL and XHR.
  3. You must know your way around most if not all of the major frameworks and have tinkered with the guts of them, because you just couldn't help yourself.
  4. You have to know some server side stuff too -- Java/J2EE, SQL, Spring, Hibernate, that sort of thing. (C#, .NET knowledge a plus).
  5. You can't be allergic to commercial software. Business is business, and not all clients have an appetite for Open Source.
  6. You must write well.
  7. You can't be afraid to speak in front of groups and conferences (just pretend they're all naked).

So, if you (or a friend) are interested and think you can hack it as a full-time Ajax Evangelist (and you don't mind living in Chicago and working out of a cool loft office), then send me your resume, your salary requirements, and, more importantly, samples of your writing, your blogging, and any cool Ajax stuff that you've worked on. Send to careers@pathf.com and use reference number 47213 in the subject line of your email (that way you'll stay clear of the PHP pile ;-).


Technorati : , ,

Topics:

This is a test

The fundamental rationale that underlies the direct and observational techniques of user research is that a user’s actions speak louder than their words. As a matter of fact, as usability specialists we are trained to go beyond the surface of a comment and probe for the motivation that spurred the verbal reaction: if, for example, a user encounters an obstacle during a usability test, is the cause a design flaw or a unique characteristic of that individual? In my experience, many participants have an almost palpable desire to please the facilitator and avoid making “mistakes” during the assessment.

Continue reading »

VegUI - Window Manager and Widget Collection

With complete and mature browser-side Ajax frameworks out there like Dojo, why should you even consider something small and comparatively new like VegUI? The reason is that thos frameworks aren't as complete and mature as you think they are. At this stage of the Ajax technology lifecycle, variety is the spice of life. If we had all settled on Prototype, we would have never gotten JQuery.

Also, sometimes a general purpose framework isn't as well suited to a particular task. VegUI was originally developed as a solution for an online game.

vegUI was originally developed to serve as a foundation for the online browser-based mmorpg Lands of Kazram. So it was developed with 4 core features in mind:

  1. Speed
  2. Compact Design
  3. Total control over appearance, flexibility
  4. Modular Design

...vegUI uses a template system, that allows you to define any vegUI element/widget as a template. Templates can then be used to clone as many duplicates as you want. This saves time and space while writing the code and also speeds up the loading process of the scripts.

It's Tetris demo is a little nicer and zippier than the YUI one (though not the hot SVG version). Now "tetris is more responsive" is admittedly not a good reason to pick a browser-side Ajax framework, but its is small, standards compliant, supports most browsers. Worth a look for those times that you need a little more than JQuery, but don't want to go all the way to Dojo.

vegUI.PNG


Technorati : , , ,

Will JBoss Rules 3.1 Do for BRE’s What mySQL Did for RDBMS’?

While JBoss Rules 3.0.x has been a great step from its predecessor (the unfortunately named Drools) -- providing a rule editing environment, universal and existential quantifiers (the "not" A is the same as "for all" ~A), and Domain Specific Languages (DSL's) -- there were still a few things missing. I've watched the progress on 3.1 with barely contained excitement and impatience, but the result has been worth the wait. The 3.1 M1 drop contains operations on collections:

rule "Find interesting crash events, with 10 or more port scans within a 1 day window"
when
$crash : OutageEvent( eventType == OutageEvent.SERVER_CRASH)
ArrayList( size > 9) from collect ( HackEvent(hackType == HackEvent.PORT_SCAN, $date : eventDate -> (DateHelper.withinDayWindow($crash.getEventDate(), $date, 1))))
then
suspicious.add($crash);
end

There is also the accumulate operator, which is even more powerful than the collect operator. The documentation has lagged a little behind (it isn't a full on release, after all), but you can see some examples of it's use here. I find that I use these sorts of collection operations quite a bit. That being said, the above rule isn't terribly efficient. If you have about 50 of those rules and lots of events of both categories, you will run into some cross-product hell (sort of like a poorly thought out database join). I'll show some ways of making this sort of rule more efficient in an upcoming entry.

Finally, the system now in theory allows better debugging of rulesets. The various views into the working memory have been around for a while. See below for some of my issues.

agendaview.PNG

A few nits that I'm sure the JBoss Rules team will work out:

  • The system desperately needs better syntax error handling in rule files. Right now the stack traces you get out of the parser/builder are pretty cryptic.
  • While you can now set breakpoints in the rule files, it doesn't seem that they are recognized by the debugging environment. As of now, you can only set breakpoints on a WorkingMemory fireAllRules call. Not that useful for debugging rule issues. I'm not sure if this mod is supposed to address that problem, but regardless, it would be handy to have a fireSingleRule call so one can control the execution of the rule engine more closely.
  • A real-time audit view to inspect engine events would be handy.
  • The graphical RETE display would be more useful if the nodes were labeled. A display showing the facts in each node during execution would be too much to hope for, but one can dream.

The best thing about this latest version of JBoss Rules is, of course, that I can now start developing non-trivial examples and publishing them without having to constantly caveat that "this feature is present in Blaze and ILog, but not here." An even more interesting question is this: since JBoss Rules is getting close on being a reasonable alternative to some of the commercial products, will what happened in the database arena with mySQL also happen in the BRE arena? Will costs come down, interoperability increase? Will the commercial vendors concentrate on service, support and high end features? Will these same vendors become more open and share more information with the public? I don't think BRE's will ever be as widespread as RDBMS's, but I think the same dynamics might apply.

Some things to look forward to that I hope the JBoss Rules team is thinking about: rule management, specifically rule repositories and deployment management, e.g. revision control for rule sets and deployment of rule modifications to distributed, live production engines; Rule analytics, e.g. analysis of a rule set to see if it contains likely problems (infinite loops, possibly bad logic, etc.), and stats on actual rule execution, performance, etc.



Technorati : , , ,

The Evolving Web

Semantic Web. Web 3.0. The Intelligent Web. Whichever terminology you want to use, it's a vision for the Web in which information is given explicit meaning, making it easier for machines to automatically process and integrate said information.

Currently, the Web is based mainly on documents written in XHTML, a markup convention that is used for coding a body of text, interspersed with objects such as images and interactive forms. These documents are designed to be read by people, not machines.

With the semantic web, content will be able to be expressed in a form that can be understood, interpreted and used by software agents, thus permitting them to find, share and integrate information more easily. It involves publishing the data in a language specifically for data (Resource Description Framework (RDF)), so that it can be manipulated and combined and presented to the end user.

Continue reading »

Is It Time To Stop Pushing the Browser Around?

In my first ever real grownup consulting engagement, back in 1990, I was called in to improve the data cleaning operations of a small testing company. This was back in the days when even companies heavily dependent on computer technology relied on a single "computer guy." This particular guy had rigged up a data cleaning system on a set of state-of-the-art 80386 machines. He had set up a folding table in one corner of the office ("Machine room? What's a machine room?") and taped "Do not touch!!!" signs to the monitors. The guy would take the tapes containing maybe 20-30MB of data and run then for 6 days through his cleaning environment. If something blew up or a new defect was identified in the source data, boom! another 6 days.

When I probed a little bit about what he was using to perform this magic, I found out, to my horror, that he had implemented the whole data cleaning shebang as a set of WordPerfect macros! Ouch! Talk about the wrong tool. I recommended they buy a little Sparcstation (sorry, x86 unix was kind of expensive and unreliable back then) and solved their problem with a modest amount of Perl4.'

So what does WordPerfect have to do with Javascript in the Browser? As people have been testing the limits of Ajax, we see more sophisticated SOA and messaging concepts and abstractions making their way into the picture. Coach Wei, a clever and insightful man, has an article up now on the Nexaweb's IMB (Internet Messaging Bus).

It's a clever concept of how to introduce MOM/ESB into a browser environment (Nexaweb also supports Java and Desktop clients, as you can see in the article above). I've implemented a number of distributed apps using JMS as well as a few using ESB's such as WebMethods, Tibco and Mule. It's an eleagant way to design apps, but requires a somewhat different approach and outlook than OOP (not that you can't include OO software in the mix as a component). See Enterprise SOA: Service-Oriented Architecture Best Practices for a pretty good read on what's involved in building SOA systems.

I checked out a few of the applications mentioned in his article, and they we slick, responsive, elegant. Nice work by the Nexaweb folks.

So again, what does this have to do with WordPerfect macros? Using a technology in an inappropriate way will come to bite you. All that infrastructure and encapsulation and tunneling comes at a price, espectially in a still somewhat wobbly execution environment like Javascript on the browser. Sure enough, those Nexaweb apps start out nice, but over time start to peg my CPU at 100% on both IE and Firefox. Don't even think of running more than one of these apps on your machine at one time. Maybe you can put a "Do Not Touch!!!" graphic over all of the other application icons on your desktop. ;-) I don't think this is Nexaweb's fault. Javascript in the browser still has a long way to come before you can write truly reliable, complex and layered systems.

Further, lots of these boundary pushing technologies make use of characteristics of the browser that are more side-effects than features. Look at Comet, for example. Common Comet techniques such as keeping the response from the server to the browser open (in an Iframe, etc.) or streaming a multipart HTTP message via XHR don't work the same in all browsers, are not part of any browser requirements, and could change with the next release. This is no way to implement serious applications.

Now I'm not saying that Comet is a bad idea, or that Nexaweb is peddling SOA/MOM junkware. Quite the contrary. I like what I see and hope to see more. What I object to is that all of this is being done via the back door. If we are going to implement fancy communication layers in the browser, let's do it by the front door, by requesting a more robust Javascript execution environment perhaps with threading and better networking control built into the browser.

Today's browsers are not that far removed from the Netscape Navigator with Livescript (later renamed to Javascript) that I used in 1995 to toggle a few heirarchical checkboxes. We are asking them to do things they were not designed to do. As we push the envelope of what a web app is and can do, we should do so in a smart way. Otherwise we are just like that guy who took WordPerfect macros -- a tool designed to perform simple textual and menu operations -- and wrote an ETL system. Yes, it can be done, but why would you?



Technorati : , , , , , ,

Don’t Confuse the User

You’re the team lead for developing the next killer app, and word is passed along that the marketing campaign is being built around the user-centric design of your new app. Unfortunately, no budget has been allocated to hire someone with the desired skill set to achieve this lofty goal. Your developers are heads down into the code and have neither the time nor interest to become user experience gurus. What to do?

Establish a set of guidelines for your developers to follow. It won’t cover every scenario but it will encompass the basic rule of usable interfaces, to wit: don’t confuse the user. Such things as deciding on and applying a consistent terminology (e.g., section names matching up with navigation names), using expected widgets (checkboxes v. radio buttons), and applying consistent behavior (too numerous to mention) are the backbone to creating usable software. If there’s time, add in messaging for the user -- success messages and waiting messages (such as ‘retrieving data,  please hold’) are vital to assuring your user they didn’t make a mistake and a good way to prevent double clicks on submit buttons.

Listen, the reality is that most projects are not fortunate enough to have a separate user interface design team. Anything that can help your developers to at least start thinking about issues regarding user interaction is a good thing. Creating a set of user guidelines is a good way to begin.

Recommendation Search Engines: Liveplasma.com

Similar to Amazon’s suggestive selling, e.g., “people who bought X also bought Y,” these sites group recommendations around a target book, band, or film. Liveplasma.com bills itself as a “discovery engine,” providing searches in multiple languages (English, French and German) as well as multiple English-speaking cultures (US, Canada, UK). The three English-language searches yield identical results; the distinction lies in the localized Amazon site that presents products associated with the search results.

After entering search criteria, consisting of keyword(s), category (artist/band, movie, director or actor), and country, liveplasma presents a detailed and visually compelling graphical “galaxy” of related products. The music search displays linked spheres, whose size indicate the relative popularity of the band or artist. Colors of the spheres link related bands. Movie maps display miniature images of the movies along with the titles.

Although liveplasma maintains that “data is grouped according to interest, style, epoch and other criteria that suggest somebody will like it,” I found the movie search disappointing: I selected a favorite film of a specific genre, and was presented with a tightly-related cluster whose commonality was that these highly disparate films had the same director. Peripheral links were akin to a six-degrees of separation connection, with the outer rings of the galaxy presenting some truly farfetched choices. I was hoping for a more three-dimensional group of recommendations that would also take genre into account. Clearly, the database is not nearly as extensive as that of the interactive movie database (imdb.com). The music search, as well, grouped bands and artists in self-evident and obvious relationships. I would find it difficult to discover new things I would like using liveplasma.

Usability of the site is compromised by the existence of a fixed search box/menu/product display that obscures part of the left side of the display. Although the user can zoom in and out, reducing the entire map to bypass the left panel leaves the data too small to be readable.

Next, the family of gnod: "A search engine to find things you don't know about."

ZeroKode 0.8 Released

zerokode2.PNG

I've already blogged about ZeroKode, the drag-and-drop visual GUI design tool for ZK. Well, version 0.8 has been released. It's a little slicker, more responsive, but it still has the same issue of requiring a knowledge of the ZK component heirarchy. A lack of popups over the components is also an issue, since the icons are not exactly self explanatory.

This brings up an issue with these new web-based RIA's. I say "new" because they are not new to the desktop, but new to the developers of web applications. These are concept such as the "explorable interface," where the cost in time and effort of trying out things is minimal. ZeroKode fails in this regard in several ways. For one, finding out that a component doesn't belong as a child in the component heirarchy by trying to drag it onto that heirarchy and having to deal with a timeconsuming popup. Further, the properties form for each component is accessed through another popup -- another time waster.

chess.jpg

This is also a reason why an "undo," probably linked up to the back button, is so important in RIA webapps; without an undo, the cost of exploring is high. As anyone who has played chess knows, humans are very good at searching forward, but lousy at backtracking. That's why so few of us are Grandmasters.


Technorati : , , ,

Echo2Sudoku Fixed, Finished and Prettied Up

echo2sudoku2.PNG

I had a few bugs in the Sudoku library that was causing the app to produce puzzles with non-unique solutions. I've also moved to using disabled TextField's and simply changing the CSS styles on squares to avoid having the browser re-render the application. Now, at long last, I'm ready to finish the tutorial.



Technorati : , , ,

Topics:

Alternative Search Engines, Part 1

Two days ago, Hitwise released statistics showing that Google accounted for 64% of all searches in March 2007. I would have assumed the percentage was higher, given the sheer ubiquity—and utility—of Google, whose name, like Xerox, has become synonymous with its function. The competition lagged far behind, with Yahoo search claiming 22%, MSN trailing with 9%, and Ask.com bringing up the rear with 3%. That’s 98% of all searches conducted during the period, and the significant factor is that all four of these search engines operate in essentially the same way, producing flat, one-dimensional lists of results.

Charles Knight, of Read/Write Web, writes a monthly article on the other 2%, offering his admittedly subjective lists of the Top 100 Alternative Search Engines. He’s careful to explain that these search engines are not to be considered head-to-head competitors to the multifunctional Google, but they make his list because they do perhaps a single aspect of search better than the behemoth. I decided to take a look at some of his picks.

Continue reading »

#*&)#*$)# Software.

Nothing is more frustrating than having your software beep at you when you’re trying to do something you *know* it can do, and you’re flummoxed as to why it’s resisting your every effort to continue on with your work. All attempts are met with the same impersonal beep, whereupon you conclude that (a) the software hates you and (b) your only recourse is to begin swearing with enough proficiency and creativity to make a sailor blush. You just might be the victim of a mode error.

Continue reading »

The new market research is the old user research

The objectives of user and market research (should ideally) differ dramatically, the data combining to create a multifaceted profile of the audience as both customer and end-user of a website or application. User research traditionally begins with a discovery phase, in which existing market research is evaluated in order to determine high-level user groupings. This market research is traditionally quantitative, based on large-scale surveys and supplemented in some cases by focus group data, which is a richer source of information by virtue of providing actual verbatim, which is, in some cases, indirectly relevant to the usability specialist. However, user research is far less concerned with what a person says about a product than what they actually do with it. Thus, behavioral analysis—actual observation of the user, ideally in the authentic environment of use—is the most powerful research tool in designing an optimal user experience. A well-designed study, facilitated by a skilled usability specialist, yields layers of information that would be unavailable from a survey or group conversation.

Continue reading »

About Pathfinder

  • We design and build extraordinary applications for companies looking to make the next great idea a reality.
  • learn more

Topics

WordPress

Comments about this site: info@pathf.com