Monday, October 23, 2006

The Music Of FZ Lives On!

When I started this site, I promised myself I wouldn't waste the reader's valuable time talking about my dog, what I ate for lunch, my thoughts on {insert current controversial social subject here}, etc. (If you want me to talk about that stuff, PLEASE, let me's a lot easier than coming up with good technical ideas! ;-) However, please indulge me for a minute and let me break my promise to say a few words about an experience that I had last night that utterly blew my mind.

Most of my friends, family and co-workers know I am a HUGE music fan. Among all else, it's really my one true passion. I could easily spend every penny I earn buying music and attending concerts. I tend to gravitate to music that can challenge me intellectually, hence my leaning toward progressive metal, all forms of jazz, etc. And, sometimes, eclipsing everything else, the music of Mr. Frank Zappa.

Now many people only know of Frank from the smattering of hits he had...mostly his funny songs. He did have an awesome sense of humor and was a compelling satirist, but for me, it's his complex works that define him as a musician. Frank was a composer in the true sense of the word, and developed some mind boggling works. He was known for working with some of the best musicians in the world and was a taskmaster when it came to them performing his music flawlessly.

Anyway...last night I finally got to see Zappa's work played live. Sadly, not by Frank himself, as he died of prostate cancer in 1993, but by his incredibly talented son, Dweezil. The tour, dubbed 'Zappa Plays Zappa' features a band of young, but unbelievable musicians, along with special guests Steve Vai, Napoleon Murphy Brock and Terry Bozzio (all of whom played with Frank at various points in his career).

(I've probably lost many of you already...thanks for listening. If you're a FZ fan, then please continue reading...)

I have attended many, many shows in the past and none of them come close to the level of energy that I experienced coming from the stage. I got chills from the way Dweezil seemed to effortless channel his dad's playing and it was quite an experience to hear Vai and Bozzio recapture past Zappa magic. Napolean Murphy Brock was the perfect frontman and sang with such a passion that it truly affected everyone in the venue. Occasionally I glanced around, looking at other members of the audience and the expressions of sheer joy on all the faces was something really special. I lost track of the number of standing ovations the band received...let's just say it was "a lot".

Highlights for me were:

"Call Any Vegetable"
"St. Alphonso's Pancake Breakfast" (for the insane xylophone parts)
"The Black Page"
"The Torture Never Stops" (extended groove made it that much better)
Dweezil soloing
Terry soloing
Steve soloing

The band played for 3 hours straight and never missed a beat. Dweezil had a bunch of new hand signals and watching him conduct the band was out of this world. I have never experienced a band as tight as they were. Obviously, Dweezil has taken this endeavor seriously and aspires to do it as Frank did. It would have been very easy to "sell out" and make this a show of mostly funny songs that might appeal to more people who have heard those on the radio, but I think the appeal of this show was that it highlighted Frank's musical genius.

In order to get the best possible tickets, I participated in the online auction, which included the chance to get in to the venue early and watch the band soundcheck. was pricy, but so very worth it. This was just the extra icing on top. Plus the chance to hear some of the setlist songs twice in one night...awesome! :-) Dweezil did mention during the show that he hopes to make this an annual event. I'm crossing my fingers for that.

In any event, it's past midnight now, and it's been a long day and I've probably bored everyone to tears. If, however, you are a fan of Frank's music, I hope I've inspired you to try and get to one of these shows. Musically, it was the best night of my life and a memory I hope never to forget!

Want to know more about Frank...then go here!

One Week 'Till Lotus Developer2006! a week's time some of us will be holed up at the Rio Hotel for three days of heads down technical goodness. That's's finally time for Lotus Developer2006, brought to you by the fine folks at The VIEW. It looks like there will be some great sessions to attend. The hard part will be choosing which ones to miss.

I'm honored to be the small fry among the heavyweight speakers of Lotus-themed events. Look at that list of presenters: Bob Balaban, Rocky Oliver, Rob Novak, Bill Buchan, et. al. These are the guys I've been seeing at conferences forever! It's humbling to be listed on the same page as them all.

If you're attending and you see me at the conference, please stop by and say hello. At a minimum, you can lie to me and tell me you're a frequent reader so I don't feel like I'm out here talking to myself. You get bonus points if you gush about how this blog fills the empty void you've had in your life for so long. ;-)

If you are coming to the show and feel like giving the new guy a chance, here's a list of my sessions. This is going to be fun!

Leveraging Interface First Design for Top-Notch UIs
Overcome the difficulties of balancing the requirements for functionality, usability, and look and feel with one solution – the interface first design technique. Start the design process with a user-centered focus and get great tips for building applications from the ‘inside out’. Discover the simplicity and high value of low-fidelity prototyping, find out how to incorporate user profiling into your design, and see how to leverage usability testing to identify design problems early on. Plus, bring theory to reality by viewing software products and Web sites that demonstrate this powerful design technique.

Rethinking Your Interface
This case-study based session explores various ways in which you can design innovative user interfaces in the Lotus Notes client. Unearth inventive workarounds for the problems inherent in the current state of Notes UI design. Learn how to apply industry usability and UI design best practices to your applications. Examine UI construction to guarantee faster database response times and learn to utilize UI tools, such as the color palette selector, that are built specifically for designers. Finally, witness firsthand the effects of various UI design techniques as you review real-world applications both before and after a user interface redesign.

Energizing Your UI With DHTML
This session supplies you with all the tools and techniques you need to design fast, eye-catching, and easy-to-use Domino UIs. Learn to utilize DHTML to enhance your views, forms, and other design elements. Leave prepared to create dynamic menus, provide in-view editing, launch view actions via right-click menus, and more. Tap into dynamic content generation concepts to breath new life into your Web UIs, and get great tips for enhancing essential elements such as positioning, layout, printing, and more. And, take home a Notes database containing a toolkit of DHTML elements that you can easily drop into any application.

JavaScript Best Practices
In this session you take your JavaScript skills to the next level by learning to create richly interactive applications, leveraging Domino’s strengths in the process. Discover new ways to tackle common problems, such as forms validation, using Prototype.js, the Yahoo! UI Library, and other cutting-edge JavaScript framework implementations. Pick up best practices for avoiding common user errors with variable scoping, object attachments, and more. Achieve highly extensible code using the Evaluate statement to make dynamic variables. You walk away with a reusable Notes database containing lots of examples that you can use to polish your own applications.

Creating Dynamic Domino Applications with Advanced CSS
Capitalize on Cascading Style Sheets (CSS) to control the style and layout of multiple Web pages all at once and present a professional, uniform look and feel throughout your Domino applications. Begin by gaining an understanding of the best methods to design, manage, and fine-tune visually appealing User Interfaces. Get expert recommendations for where to place CSS in Domino design elements based on different types of applications. Then find out how to use CSS to create a frame-like look and feel to Domino pages, as well as a cross-platform drop-down navigation system. Discover the advantages of building CSS style sheets as document objects, and pick up tips to develop dynamically sized Web pages without the use of tables. In addition, take home a fully functional database packed with reusable CSS solutions.

Hope to see you there!

Friday, October 20, 2006

Quick Tip: Simulating A "Frozen" Column

Disclaimer: This posting might be more academic in nature than anything else, since it might not be a very practical solution. However, depending on your needs, this might be a neat little hack you can implement in your own application.

I was asked by a user if I could basically "freeze" a column, similar to the function available in Excel. If you do this in Excel, you can scroll horizontally while your frozen columns stay fixed in place. This is a great feature when you have information in many columns, but want to keep the key value in view as you scroll. Unfortunately, Notes does not offer this option in views. I thought it might be possible to simulate this using column hide-when properties. What I came up with was good enough to satisfy the users, so I thought I'd share with the rest of the class. Here's the low down:

I created a couple of action buttons that control the "scrolling". The actions are used to set an environment variable to either "True" or "False" and this environment variable is checked in the hide-when formula for the columns I want to hide. In the case of my application, I basically wanted the four columns to the right of my first column to disappear if the user "scrolled" right. I would reverse the procedure to allow them to "scroll" the other direction. Since hide-when formulas for a view are evaluated only when the view is initially rendered in the Notes client, you have to either close and reopen the view or rebuild it. Just because I hate trying to close and open elements within frames, I chose to rebuild the view. The code for the action button then is very simply:

Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession

Call session.SetEnvironmentVar("ItemMasterScrollLeft", "True") 'set to false to reverse
Call workspace.ViewRebuild

This LotusScript was converted to HTML using the ls2html routine,
provided by Julian Robichaux at

And for each column that should be hidden when scrolled, the hide-when formula becomes:

@Environment("ItemMasterScrollLeft") = "True"

Simple as pie! :-)

The pic below shows the feature in action. The hide-when feature of columns can be pretty useful, so don't forget it when designing your UIs.

Have a great weekend everyone!

Monday, October 02, 2006

New Project At OpenNTF

Last night, I deployed a new project over at OpenNTF. I've wanted to contribute to the site for a long time, but never seemed to find the time or the right application. I finally decided to clean up an app I put together a couple of years ago, one that is pretty simple in its design but provides some neat functionality. The name of the project is Application Activity Tracking (for want of a more exciting name) and is basically a lightweight per-document tracking mechanism. If you add the design elements to an existing database, you can begin tracking the usage of each document within your application. Here's a brief description of the project:

The Application Activity Tracking functionality was designed to be a modular means to add a document-specific tracking mechanism to your application. By using this system, you can track how many times users have read, edited, created or deleted a particular document. This functionality is useful for those applications in which a business need exists to either audit the activity that takes place or for a database owner to see how particular documents are being utilized. Detail can be viewed for a single document or the powerful dashboard feature can be used to get detailed information on items such as the Top 10 users, Top 10 documents and other metrics of interest.

So if you want to know how many times a particular document has been accessed, you can do that easily. If you want to view which documents John Smith has been looking at, it's a piece of cake. A lot of information can be obtained from the application dashboard, which is very simple and easy to use. Here are some screenshots that show off the functionality better than I can explain it.

1. DASHBOARD WITH SUMMARY OF ALL DATABASE ACTIVITY - Totals are summarized here. More detail can be obtained by clicking the links on the left. This will open the 'Views' section (found at the bottom of the screen) automatically and navigate the user to the applicable view.

2. DASHBOARD WITH FILTERING - Totals can be displayed for a single user, server or month and year. In this example, I can see that I read 51 documents. The view at the bottom shows me which documents I read and when I accessed them. Unlike log reporting, these will be true indicators if a person physically opened or edited a doc.

3. DASHBOARD SHOWING TOP 10 USERS - It may be interesting to know who the most prolific users of a database are. Clicking on the 'Top 10 Users' tab presents this information. For the purposes of this first version, I just captured their name, but we could include the related numbers as well.

4. DASHBOARD SHOWING TOP 10 DOCUMENTS - Another interesting statistic is which documents in the application are the most frequently accessed. The 'Top 10 Documents' tab neatly summarizes this data.

5. USER ACTIVITY DIALOG FROM A DOCUMENT - All code for doing the user tracking is self-contained within a single subform. This subform includes an action button titled 'Activity Log'. Clicking this action button brings up the following dialog box. The user can view activity for this particular document by user, server or date. Some additional summary information is included at the bottom.

6. DOCUMENT TRACKING OPTIONS - For each document that is being tracked, it is possible to define how the title is captured by the database. For example, the owner can enter a specific title. This might be different than anything actually contained on the doc that the users interact with. Another option is using the field defined on the configuration form. The application owner can use this to define a certain field that will be grabbed from the document for the title. The final option is to allow the author to choose a specific field from the underlying document. This whole section is still under development, but gives you an idea of some options we have.

Without going into a lot of detail, this works simply by creating a small document in the backend whenever a user does a read, edit, delete, etc. The code really is quite simple and I'm sure there is room for improvement. I've already got one request to add an option to make the collection data anonymous, which is great for countries like Germany (where many of my colleagues sit).

If you have the need for simple and unobtrusive document tracking, then please head over to OpenNTF and download the Application Activity Tracking tool. I hope you find it useful. Please feel free to leave me any feedback right on the project page.


On Being A "Real Programmer"

Funny story...

I used to work for a large Fortune 500 company that had Notes throughout the enterprise. Everyone (for the most part), had a mail client and there were thousands of applications deployed. I was part of the IT group that worked at corporate headquarters and was the senior architect on the team. You'd think with all of the really cool applications that we had deployed that we would have some measure of respect. If you thought that, you'd be wrong. To the rest of the IT world, our little Notes team was the red-headed stepchild. Never mind that we deployed more applications that solved business problems than the other teams. Never mind that our embracing of the RAD methodology let us build business solutions cheaper and faster than everyone else. IT, if you were involved in Lotus Notes, you were not a "real programmer".

While it would have been easy to, we never really took offense to this. We were getting a lot of great stuff done and our customers were really happy. In fact, we were constantly rated highly by our end users, not only for our solutions, but because they thought we were so easy to work with. Not being "real programmers" was a good thing in their eyes...unlike a lot of IT folks, we had real people skills! Over time, we came to embrace our position within IT and even came up with a tongue-in-cheek banner and slogan that we used among our group. Here it is...maybe you could identify and use it within your organization as well! And since they are out there listening, I have to say "Hi" to Sally, Joanne and old "real people" colleagues. :-)

This story came back to me today as I was writing what I thought was some pretty cool code via Formula language. In one of the sessions I am doing for the upcoming Lotus Developer2006 conference, I am including a toolkit of DHTML items and one such component allows you to create a tabbed table in a document with a single button click. Of course, this is a DHTML tabbed table (from the friendly folks at WebFX) and not the poor web implementation we get with the standard Notes stuff. All of the complexity of the WebFX code is hidden and you don't need to know anything about the API. When you click the action button, you are prompted for the number of tabs and the code is immediately pasted into your field. Because it's so well suited for dealing with text, I implemented this in Formula language and had it whipped out in a matter of minutes. Using @For looping is just so simple and cool! However, I find that there are still people within the Notes community that look down on the Formula language, thinking that it's just a toy and not "real programming". I certainly don't profess to be a great programmer, but what's important in my business is the end result. If my customers are happy and the application works, I don't care if it's written in Sanskrit. Anyway, I guess there's no real point to this story. Just remember that even if your IT colleagues don't give you a lot of respect since you work with Lotus products, if you are building Notes apps that add value to your organization, then you most certainly are a real programmer.