Table normalization verses long-term data storage

I'm currently working on an application that involves long-term storage of assessment data. Users submit records of their activities and assess their performance, and then reviewers look over those assessments and denote whether they agree or disagree with them. Each assessment database record is related to a reviewer through the unique reviewer id that is part of the assessment record, and I can use that relationship to retrieve the reviewer's name whenever I display the assessment record.

It's a standard example of table normalization. If the reviewer's name was stored within the assessment record itself, and the reviewer changed their name for some reason (marriage, divorce, mid-life crisis, etc.), the application would have to update the name in both the reviewer's record AND the assessment record. But by using the reviewer's id in the assessment record to establish a relationship between the assessment record and the reviewer record, the reviewer's name only needs to be recorded or updated once.

However, this project will entail keeping the assessment data for an undetermined number of years. With the data arrangement I just described, that means I would have to store the assessment records and all of the related reviewer records if I want to be able to keep showing the name of the reviewer when looking at older assessment records. That could result in keeping a lot of extra data about reviewers (addresses, e-mail addresses, logins, passwords, etc.) who are no longer associated with the program simply because we need to keep their name tied to the assessments.

I think this is one of those situations where it makes sense to repeat a little data. Recording the reviewer's name in the assessment records allows me to let the administrative users of the application delete reviewer user accounts without impacting historical data. It means a bit more work in keeping the reviewer's name the same in both records, but in the long run I think it's worth the effort.

Finish the sentence: "I know I'm in a coding zone/groove when..."

"...I correctly write a recursive algorithm involving nested arrays on the first try."

What about you? When do you know you're in a coding groove such that it feels like you're coding by feel/intuition?

ColdFusion Developers and Social Technologies

My manager is attending the BEA Participate conference in May (we run their portal product), and yesterday he and I sat down with a developer who was creating the portal for the conference itself. The conference portal was designed to promote social networking: attendees will be able to track the status of other attendees, see what their interests are, leave comments for them on their comment wall, and communicate with them via a Twitter channel.

Everyone attending the conference is getting an iPod Touch and there will be a mobile version of the portal so folks can simply use the iPod to keep abreast of what's going on.

My initial reaction was that it was a really cool idea...which is strange because I'm not really into social networking. I have a Twitter account and a Pownce account, but I never use them: who wants to hear what I'm currently doing, and when do I have the time to stop and tell them?

But I could see myself using these social technologies at a specific event like a conference, where part of the fun IS being social and participating in the discussion. The trick is that you have to have enough attendees to embrace the idea in order for it to be worthwhile. My manager isn't into social networking either, so I wonder if folks at his conference are really going to use these social networking features.

I can't help but wonder what would happen if we had a similar social networking portal at a big ColdFusion conference like cf.Objective() or CFUnited. Assuming the typical saturation of the wireless bandwidth wasn't a problem, would most CF developers interact with each other using these tools?

XML Is A Fickle Beast

I was curious as to why my two most recent blog posts had not shown up on the MXNA feed, so I just took a look at the RSS XML for my blog using FireFox.

Unfortunately, these days Firefox never exposes the raw XML: it formats it into a more "user-friendly" view. So I didn't see any error, but the essentially blank page was enough of a confirmation that there was a problem.

I wasn't sure if IE does the same thing with XML these days, so I fired up Opera. I've never used Opera to troubleshoot XML problems, and was presently surprised at how it output the XML as text and highlighted the first invalid character.

It turned out that I had two invalid characters in one of my posts, and it know why: I copied and pasted some of the text from a Word document and never cleaned it up. What I find really strange about it is that particular post was almost a month old, and I know I've had other posts processed by MXMA since then, so why did it become a problem today? Interesting.

But at least it's fixed.

Google Maps Street View Now Includes St. Paul (And The cf.Objective Hotel)

My colleague Chris, a Java developer, was making arrangements to attend this year' JA-SIG conference. As he was finishing up, he found a link to Google Maps that ended up taking him the Google Maps Street View of St. Paul. He'd never seen the Street View feature of Google Maps, so he showed it to me.

It was only when I saw the view of the hotel from the street view and saw the name of the hotel did I realize that JA-SIG is being held at the same hotel as cf.Objective(), the Crowne Plaza. Even funnier, JA-SIG ends on April 30, and cf.Objective() starts on May 1st.

Obviously the Crowne Plaza is the hip place to be if your technically-inclined. They even have a virtual version of the hotel in Second Life. I wonder if they'll let us hold a couple of virtual developer parties there?

Internet Explorer 8's Webslices Feature: Widgetizing Pieces of Web Pages?

The first public beta of Internet Explorer 8 was released today. In addition to supposedly being fully web standards-compliant, IE 8 comes with two new...well, capabilites: Activities and Webslices.

Curious (and admittedly a bit bored with what I was currently doing), I did a Google search and came up with a page that does a pretty good job of explaining Activities and Webslices:

IE8 Beta Is Out And With It Some Slices & Activities

The Activities capability allows web developers to provide XML code that will add contextual menu options to certain page content when you right-click on that content, allowing you to send that content to another web page or service, like sending an address on the page to a mapping service like Google Maps.

The Webslices capability is even more interesting (if I understand it correctly): using CSS, web developers can tag a piece of the web page as being a slice. End-users can then save this slice in IE, and IE will periodically check that slice for any changes. If the content is changed, the end-user is notified and they can pull up just that part of that web page as a pop-up widget in the browser.

I don't quite know what to make of it...it's like they've made it possible to send a request to a webservice from the page (Activities) and to make part of the page a webservice (Webslices).

It's an interesting idea, but what will the other browsers do with this stuff?

If You Don't Follow RIA News, You Must Be a TWiT

I just finished listening to the latest "This Week in Tech" (TWiT) podcast on my way home from work tonight.

I'm a regular listener of TWiT. Even though I'm aware of most of their news items prior to hearing it from them, I like some of the personalities on the show and their discussions are generally interesting. But I have one big problem with TWiT: they never talk about RIA (Rich Internet Application) technology. Oh, they might say the word "Flash" or "Flex" in regard to some specific product or service, and maybe say a sentence or two about AJAX, but that's as far as it ever goes. Maybe they think their audience is mostly end-users who don't care, but that doesn't stop them from talking about stuff that only geeks would truly care about, so I don't think it's a valid excuse.

I thought this week might be different. With all of the press coverage over the release of AIR this week, and with all the subsequent articles hyping the RIA struggle between Microsoft and Adobe, Silverlight vs. AIR (even though it's not an accurate comparision)...surely the TWiT panel couldn't ignore the topic this week.

Sure they could.

What got me even more frustrated was the way it WASN'T mentioned. Just over 4 minutes into what was an 87-minute podcast, host Leo Laporte notes they have a large roundtable group and "absolutely nothing to talk about." Not usually a good sign for the rest of the podcast.

After discussing about two news stories and a discussion about having another option for listening to podcasts besides via iTunes, the discussion turned to a comparison between the Twitter and Pownce messaging systems. I got hopeful again: Pownce provides an AIR-powered desktop application, so maybe the discussion would cause the AIR release to come up. One panelist mentioned that the Pownce API had been updated last week, and I thought "Maybe they were waiting on the release of AIR to release that new API" (I have no idea if the events were related).

So I shouted (I kid you not) at my iPod, while driving in my car, at the pre-recorded voice of someone who could not possibly hear me: "Say maybe it was because of AIR! Mention AIR! SAY ITS NAME!"

Yeah, well, that didn't work.

I'm not a fanboy of AIR, or Flex, or any of the other RIA technologies (though I do use AJAX reasonably often). I like whatever gets the job done in the most reasonable way. I wouldn't be upset if they made fun of any of those technologies, or questioned their usefulness, or whatever: I listen to them for their opinions, whether I agree with them or not.

But to not say anything: that's pathetic. RIAs are out there and gaining a presence, whether good or bad. I can't see how you can ignore them by mistake.

Near the end of the podcast, regular panelist John Dvorak mocked the use of Twitter because at the end of the day, it didn't put $5 in his pocket, and a few minutes later someone on Twitter apparently offered to send him $5.

Hey, John, I'll send you $5 if you can get the TWiT panel to discuss RIA technology. It would be worth it at 10x the price.

Adobe Open Source Website

This may get missed in the news about the release of AIR and Flex, but apparently Adobe released a new website dedicated to the open source projects they're involved with (Flex, BlazeDS, Tamarin, etc.):

Adobe Open Source

...Fortunately it didn't escape Nick Tong's attention (I read about it on his blog). Good catch, Nick.

Thoughts on Future Trends in Computing

At our staff meeting today, my manager told us our director was looking for input on emerging "21st century" technologies and technology trends, and to send him our thoughts so he could pass them along. Here's what I sent:

  • The introduction of applications that have both a web and and desktop front-end to access server-side data, with the desktop application provide offline functionality and data storage that can then be synchronized with the back-end data. Examples of this upcoming movement are Adobe AIR, Google Gears, and the Mozilla Prism project.
  • Increased portability of programming languages to other platforms. It's now possible to code .NET or Java application in dynamic languages such as Python or Ruby.
  • Increasing development of RIAs (Rich Internet Applications) based on AJAX, Adobe Flex, Microsoft Silverlight, and JavaFX. RIAs allow for more engaging and more powerful user interfaces and (in the case of the latter 3 technologies) make it easier to integrate audio-visual material into applications.
  • The continued growth of "cloud computing," where organizations store their non-critical data on external servers maintained by a third party but controlled and accessed by the organization over the Internet. The chief example of this is Amazon's S3 data service.
  • The continued trend of exposing the social (people-based) connections between data started by the social networking sites. The social networks themselves may stop growing, but the idea of using a person as a focal point for otherwise unrelated data is going to stick around.

...Hardly earth-shattering predictions, but other than within my particular unit, my organization isn't that hip to web trends.

Some Design Considerations When Building A Web App for iPhone/iPod Use

I recently finished a small project that involved optimizing some simple web applications for use on an iPhone/iPod Touch.

I won't bore you with the specifics of the project (unless someone asks) but here are some things I learned during the experience:

  • There is no touch analog for click-and-drag (probably because dragging is an action reserved for moving around the page), so drag-and-drops will not work and you cannot select text for copying, cutting or pasting. This means the dragging tools/effects implemented in the various JavaScript libraries (jQuery, Yahoo YUI, etc.) won't work.

  • There's really no way to "hover" over an element with your finger, so any CSS style initiated by hovering will not come into play.

  • Because fingers are less precise than a mouse cursor, you have to make sure there is enough space between different clickable elements (links, checkboxes, etc.) so that the user can easily click only on what they want to click on. So if you have a vertical list of hyperlinks, you may want to put at least one line of space between them.

  • When you click on a text field, textarea, or select box, the page zooms in and either a keyboard or a list of drop-down choices appears at the bottom of the screen. Once you make your choice/enter your text and tap the "Done" button, the zoom doesn't reverse, so you end up still focused on the input element. That means if you have a submit button off to the left or right, you have to tap and scroll the page to it in order to tap it. If your application is designed to be viewable in the iPhone/iPod without the need for zooming, you might be able to negate this effect by disallowing all zooming (haven't tried this yet).

  • Selecting a choice from a drop-down box does not fire off the onChange JavaScript event for that box, probably because the action is intercepted in order to allow the iPhone/iPod to do the actions described in the previous bullet. The onChange event for text boxes might be similarly affected.

More Entries

BlogCFC was created by Raymond Camden. This blog is running version 5.1.004.