<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="0.92">
<channel>
	<language>en-us</language>
	<lastBuildDate>Tue, 02 Feb 2010 10:10:51 EST</lastBuildDate>
	<title>nsftools.com blog</title>
	<description>Julian's latest blog about Lotus Notes, Domino, Java, and random things</description>
	<link>http://www.nsftools.com/blog</link>
	<image>
	    <title>nsftools.com blog</title>
	    <url>http://www.nsftools.com/nlogomed.gif</url>
	    <link>http://www.nsftools.com/blog</link>
	</image>
	<item>
		<pubDate>Tue, 02 Feb 2010 10:02:28 EST</pubDate>
		<title>About SnappFiles: Quickr On Your iPhone (Tuesday, Feb 2)</title>
		<description><![CDATA[<p><a href='http://snappfiles.snapps.com'><img src='http://www.nsftools.com/misc/sfScreenshotSmall.png' align='right' style='border: none;' height='300' width='320' alt='SnappFiles: Quickr On Your iPhone'></a>

Late last week, we got notice that my pet iPhone project (<a href='http://snappfiles.snapps.com'>SnappFiles</a>) got approved for download on the Apple App Store. Yay! We got hundreds of downloads in the first 48 hours and some great feedback so far.
<p>
What is this SnappFiles thing? It's a way of accessing your Lotus Quickr files from an iPhone or iPod Touch (or, in a few months, your new iPad). Works with Quickr 8.0 and higher, both the Domino and the Websphere versions. It uses the native iPhone viewers to display files, so <a href='http://www.apple.com/iphone/how-to/index.html#help.email-attachment-wont-open'>any file format the iPhone can natively view</a> can be used to open a Quickr file.
<p>
For a general description of what the app does, Rob Novak -- owner and intergalactic leader of SNAPPS, aka "my boss" -- did <a href='http://www.lotusrockstar.com/blog/robblog.nsf/d6plinks/RNOK-825LV5'>an excellent overview</a> on the day it was released, and <a href='http://www.pmooney.net/pmooney/pmooneynet.nsf/d6plinks/PMOY-825PAG'>Paul Mooney has a nice writeup</a> with lots of screenshots. I also put a short demo video up on YouTube, if you're a visual learner:
<p>
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/1cwZok9s8Pk&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/1cwZok9s8Pk&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object>
<p>
A few common questions we've received in the past several days:
<p><ul>
<li><b>How long did the app take to write?</b> About 6 months, start to finish, although I was also working on billable projects and Lotusphere sessions during development. (That being said, there was plenty of late-night coding too.) I had a working version of the app done in half the time, but there are <b>a lot</b> of details to attend to, from usability to graphics and colors to edge cases to memory leaks and error handling. Big difference between throwing something together and having it ready for production. I also tried to make the app as dead-simple to use as possible, and it's often hard to make something easy.<p></li>
<li><b>Will there be an Android version?</b> Possibly, although it'll be on a different code-base. <a href='http://viktr.com'>Viktor</a> is looking at some options right now.<p></li>
<li><b>Can I edit docs and re-upload them to Quickr?</b> Not right now, although we're looking at good ways to do that. Some of the new features of the iPad might help to move this functionality along too, both because of the new SDK and the larger form factor (no matter how you do it, editing docs on something as small as an iPhone is not ideal).<p></li>
<li><b>Will this app always be free?</b> The version that's on the App Store right now will remain free, yes. There's always the possibility of releasing a "premium" version with a lot more functionality that will cost money.<p></li>
<li><b>Can I hire you to write an iPhone app for my company?</b> Absolutely. SNAPPS would love to help you with that. Contact me directly at <a href='mailto:jrobichaux@snapps.com'>jrobichaux@snapps.com</a> and we can talk.<p></li>
</ul><p>
<p><hr>[ <a href='http://www.nsftools.com/blog/blog-02-2010.htm#02-02-10'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=About SnappFiles: Quickr On Your iPhone'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=020210&usersite=http://www.nsftools.com/blog/blog-02-2010.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-02-2010.htm#02-02-10</link>
	</item>

	<item>
		<pubDate>Sun, 31 Jan 2010 09:11:17 EST</pubDate>
		<title>Links To My Lotusphere Session Materials (Sunday, Jan 31)</title>
		<description><![CDATA[<p>Sorry it took so long for me to post my Lotusphere session files. Slides and other related materials for the sessions are available for download at the <a href='http://downloads.snapps.com'>SNAPPS download site</a>. Just click on the "Lotusphere 2010" link in the left-hand navigator and go from there. They are also linked to from the <a href='http://www.nsftools.com/presentations'>Presentations page</a> on this site.
<p>
One of the things that took a really long time was getting the <a href='http://vimeo.com/9047946'>11 minute video of how to create a native iPhone app</a> to an acceptably quality for viewing. The video I played during the session was over 3 GB in size (super high-def to get the best quality on the big screen in the session room). I obviously couldn't and didn't want to upload such a giant video to Vimeo, partially because it was too darn big, and partially because Vimeo was going to scale it down after it was uploaded anyway, so you automatically lose quality. Here are the settings I ended up using:
<p><center>
<img src='http://www.nsftools.com/misc/VideoOutputSettings.png' alt='Video output settings for upload to Vimeo'>
</center><p>
That produced a 231 MB file, and it looked good enough for me after upload and processing. I'm actually not crazy about the <i>audio</i> quality (too much sibilance, I also have several vocal tics that would have been good to edit out), but after messing with the video settings and waiting 2 hours for each new output file and many more hours for each upload, I finally just called it "done".<p><hr>[ <a href='http://www.nsftools.com/blog/blog-01-2010.htm#01-31-10'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Links To My Lotusphere Session Materials'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=013110&usersite=http://www.nsftools.com/blog/blog-01-2010.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-01-2010.htm#01-31-10</link>
	</item>

	<item>
		<pubDate>Wed, 20 Jan 2010 16:44:16 EST</pubDate>
		<title>Lotusphere Blur and About My Sessions (Wednesday, Jan 20)</title>
		<description><![CDATA[<p>As with every year, this seems like the busiest Lotusphere ever. I've barely slept and I haven't... stopped... moving... All good stuff, but a few side effects of that:
<p>
First, I'm going to do a writeup of the conference <b>after</b> it's over. There have been some interesting announcements this week -- I'm sure you've read about them on many of the other blogs on <a href='http://planetlotus.org'>PlanetLotus</a>, so it's not like you're missing the whole confence just 'cause I'm not blogging it. However, I was lucky enough to be in the blogger program again this year, which has given me some access to people and information that might make for a few interesting comments when I get to do my writeup.
<p>
Second, me and Bruce have recorded two <a href='http://www.takingnotespodcast.com'>Taking Notes Podcasts</a> already during the conference, and we'll be doing at least one more before we go home. Take a listen to those to hear some of my current thoughts on the conference.
<p>
Third, I presented my iPhone development session this morning and there are a couple things to mention as far as that goes:
<p><ul>
<li>I'll post an updated version of the slides to my <a href='http://www.nsftools.com/presentations'>Presentations</a> page later this week. We took out the browser app demo in favor of more slides with information about the types of things we were going to talk about in the demo. It makes it easier to look up and reference information that way after the session is over. We also clarified a few statements in a few places.</li>
<li>I mentioned that there are a few toolkits you can use to develop iPhone apps using web development techniques wrapped up in a native UIWebView (or something like that). The ones I mentioned were <a href='http://www.appcelerator.com'>Appcelerator</a> and <a href='http://phonegap.com'>PhoneGap</a>. I've never used either of these two tools, but they look very interesting.</li>
<li>I'll be publishing a copy of the "How to build a native app" screencam video from the session (probably on YouTube) early next week.</li>
<li>One person asked me for recommendations on how to learn the Objective C language. I'm probably not a great person to ask because I learned it pretty piecemeal, but the <a href='http://cocoadevcentral.com/d/learn_objectivec'>Cocoa Dev Central Tutorial</a> and the <a href='http://www.cocoalab.com/?q=becomeanxcoder'>Become An XCoder PDF</a> are great starts. There are some pretty good links in <a href='http://stackoverflow.com/questions/1939/howto-articles-for-iphone-development-objective-c'>these StackOverflow answers</a> too.</li>
</ul><p>
Finally, speaking of sessions, here are the two sessions I'm giving tomorrow (Thursday):
<p><ul>
<li>At <b>8:30 AM</b>, I will be delivering a repeat of the <b>BP213 iPhone Development</b> session at Dolphin S Hemisphere III. The first half of this session talks about developing browser apps, the second half talks about developing native apps, including a 10 minute live (well, previously-recorded-screencapture-live) demo of creating a native iPhone app from start to finish that accesses a Notes view.<p></li>
<li>At <b>10:00 AM</b>, I will be delivering the two hour <b>SHOW110 Import! Export! Write A Report!</b> show 'n tell session in the Swan Osprey room. This goes step by step through several scenarios where you need to import data from various external data sources into Lotus Notes, and export it into various other formats. If you've been to the charting and graphing sessions that Rob McDonagh and I have given over the last 2 years at Lotusphere, there will be some repeating of information from previous sessions (although in much greater detail, since it's a show 'n tell) as well as some new stuff like creating PDFs, using Google charts in Notes documents, and all of the "import" code in each scenario.</li>
</ul><p><p><hr>[ <a href='http://www.nsftools.com/blog/blog-01-2010.htm#01-20-10'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Lotusphere Blur and About My Sessions'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=012010&usersite=http://www.nsftools.com/blog/blog-01-2010.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-01-2010.htm#01-20-10</link>
	</item>

	<item>
		<pubDate>Mon, 11 Jan 2010 08:08:16 EST</pubDate>
		<title>Disney Boardwalk Map (Monday, Jan 11)</title>
		<description><![CDATA[<p>General Lotusphere reference: here's a nice map of the Disney Boardwalk, with relative positions of the Swan, the Dolphin, and the Yacht &amp; Beach Club (click on the drawing for a larger version).
<p><center>
<a href='http://www.nsftools.com/misc/DisneyBoardwalk.jpg'><img src='http://www.nsftools.com/misc/DisneyBoardwalkMedium.jpg' alt='Disney Boardwalk Map' height='340' width='750' style='padding: 6px;border: none;'></a>
</center><p>
I think there's a shortcut between Y&amp;B and Dolphin if you go over the parking lot and through the woods, but that's not clear on this picture. You can probably figure it out with <a href='http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=1500+Epcot+Resorts+Boulevard,+Lake+Buena+Vista,+FL%E2%80%8E&sll=28.45153,-81.483546&sspn=0.312722,0.521851&ie=UTF8&hq=&hnear=1500+Epcot+Resorts+Blvd,+Kissimmee,+Orange,+Florida+34747&ll=28.368991,-81.557908&spn=0.00978,0.016308&t=h&z=16'>a Google satellite map of the Dolphin</a> though.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-01-2010.htm#01-11-10'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Disney Boardwalk Map'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=011110&usersite=http://www.nsftools.com/blog/blog-01-2010.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-01-2010.htm#01-11-10</link>
	</item>

	<item>
		<pubDate>Wed, 23 Dec 2009 14:25:59 EST</pubDate>
		<title>Domino DXL and Agent Restrictions (Wednesday, Dec 23)</title>
		<description><![CDATA[<p>Consider the following snippet of Java code, which loads the DXL of a Lotus Notes document into an XML DOM parser for processing:
<p><blockquote><pre>
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Database db = agentContext.getCurrentDatabase();
lotus.domino.Document doc = db.getAllDocuments().getFirstDocument();

DxlExporter exporter = session.createDxlExporter();
exporter.setOutputDOCTYPE(false);    // avoid restricted access errors
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(false);
org.w3c.dom.Document domDoc = factory.newDocumentBuilder().parse(
    new ByteArrayInputStream( exporter.exportDxl(doc).getBytes() ));
doc.recycle();
</pre></blockquote><p>
When you run this on a Domino server in an agent, the "exporter.setOutputDOCTYPE(false);" line is important. If you do not include that line, your agent will need to have a runtime security level of "2. Allow restricted operations" to avoid getting <code>java.lang.SecurityException</code> and <code>lotus.notes.AgentSecurityManager</code> errors -- and the ID it runs under will need to have unrestricted access on the server. If you do include that line, the agent can run under the standard runtime security of "no restricted operations".
<p>
That's my experience on a Domino 8.5.1 server anyway. If this lesson has been covered already, I either didn't see it or had to learn it for myself.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-12-2009.htm#12-23-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Domino DXL and Agent Restrictions'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=122309&usersite=http://www.nsftools.com/blog/blog-12-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-12-2009.htm#12-23-09</link>
	</item>

	<item>
		<pubDate>Thu, 19 Nov 2009 09:40:23 EST</pubDate>
		<title>Misbehaving Dojo Dialog (Thursday, Nov 19)</title>
		<description><![CDATA[<p>I was adding some functionality to a web form the other day and ran across some unexpected Dojo behavior. For simplicity's sake, let's say that this is the form I was working with:
<p>
<img src='http://www.nsftools.com/misc/DojoDialogHtmlBefore.png' alt='Notes form and HTML, before Dojo dialog' height='466' width='625'>
<p>
That's the Notes form and the resulting HTML code. I decided to put one of the fields in a Dojo dialog, just to fancy it up a bit (there was actually a better reason than "fancy it up", but that's a good reason for my example here). To do this, I added a little HTML around the field like so:
<p>
<img src='http://www.nsftools.com/misc/DojoDialogHtmlAfter.png' alt='Notes form and HTML, after Dojo dialog' height='650' width='720'>
<p>
All was good, you could click a button to display a dialog and enter information into the field, and the world kept spinning 'round. The only problem was, when the web form was actually submitted, there was <b>no data</b> in the field that's in the dialog. If I didn't use a Dojo dialog the field got submitted fine; if the Dojo dialog div surrounds the field, the field data was empty. Weird.
<p>
Looking at the HTML above, it all looks good. There are a few extra tags on the page, but nothing that should clear out the field data or anything. I even wrote some JavaScript to make sure that the field data was there after the dialog closed (just in case Dojo misplaced it somehow). Still looked good. Then I looked a little closer with Firebug:
<p>
<img src='http://www.nsftools.com/misc/DojoDialogFirebug.png' alt='Notes form and HTML, seen using Firebug' height='350' width='725'>
<p>
Ah ha! Look at where the form is, and look at where Dojo <b>moved</b> the dialog div. The div is now <i>beneath</i> the form. So the field isn't inside the Form block at all now. So when you submit the form, the field doesn't get submitted because it's no longer a part of the form. If that doesn't make sense, consider the fact that there can be multiple forms on a page, each one submitting only its own fields.
<p>
My answer ended up being that I added code to copy the dialog field text to a hidden field that was still inside the form, so the field data still got submitted. There are probably other ways to work around this too. Ultimately, it just showed me that it's essentially impossible to debug web forms without Firebug these days.
<p>
Oh, and the same thing will happen if you do this on an XPage too. Dojo is an equal opportunity HTML rearranger.
<p>
<i>UPDATE: make sure to check <a href='http://www.nsftools.com/blog/comments.php?commentid=111909'>the comments</a> for some other good ways to work around this problem.</i><p><hr>[ <a href='http://www.nsftools.com/blog/blog-11-2009.htm#11-19-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Misbehaving Dojo Dialog'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=111909&usersite=http://www.nsftools.com/blog/blog-11-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-11-2009.htm#11-19-09</link>
	</item>

	<item>
		<pubDate>Wed, 11 Nov 2009 08:48:17 EST</pubDate>
		<title>Sign Up For The Teamstudio Spotlight Awards (Wednesday, Nov 11)</title>
		<description><![CDATA[<p>You have less than a month to sign up for the <a href='http://www.teamstudio.com/new/files/events/2010-Spotlight-Awards-Flyer.pdf'>2010 Teamstudio Spotlight Awards</a>.
<p><center>
<img src='http://www.nsftools.com/misc/TeamstudioSpotlight2010.jpg' alt='2010 Teamstudio Spotlight Awards' width='475' height='204'>
</center><p>
This is the third year they're doing the awards, and it's simple to enter. Here's the process:
<p><ul>
<li><b>Step 1:</b> choose a cool Lotus Notes/Domino application that you've developed (it must be a working application), that you're allowed to talk about and [potentially] demo.</li>
<li><b>Step 2:</b> write up a short description of the application, with screen shots, per <a href='http://www.teamstudio.com/new/files/events/2010-Spotlight-Awards-Flyer.pdf'>the contest rules</a>.</li>
<li><b>Step 3:</b> all of the submissions will be initially ranked based on the descriptions, with live demos of the top ranked applications for final judging.</li>
<li><b>Step 4:</b> the winner will receive the <i>full suite</i> of Teamstudio software tools and a $400 Amazon gift card. Second place also wins the full suite of Teamstudio tools (no gift card), and third place wins one Teamstudio tool of your choice.</li>
</ul><p>
If you'd like an example of a winning application, <a href='http://blog.xceed.be/Blog.nsf/dx/spotlight-award-2010-go-for-it-'>Theo Heselmans won last year</a> with a very polished Domino web survey app.
<p>
Also, even if you get to the demo stage, you will NOT be asked for source code or intellectual property related to the application, so don't worry about that. Teamstudio is just looking for companies that do interesting things with Notes/Domino because those are people who can really use their tools. And if your company is "shy" about being named in a contest like this, that's okay too (notice that the second place winner in <a href='http://www.teamstudio.com/new/news-events/press-coverage.html?display=detail&id=82'>last year's press release</a> requested anonymity).
<p>
<i>FULL DISCLOSURE: I am one of the judges for the contest.</i><p><hr>[ <a href='http://www.nsftools.com/blog/blog-11-2009.htm#11-11-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Sign Up For The Teamstudio Spotlight Awards'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=111109&usersite=http://www.nsftools.com/blog/blog-11-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-11-2009.htm#11-11-09</link>
	</item>

	<item>
		<pubDate>Mon, 26 Oct 2009 10:06:32 EST</pubDate>
		<title>Sample Database from IAMLUG/UKLUG (Monday, Oct 26)</title>
		<description><![CDATA[<p>At IamLUG and UKLUG, I did a session called "Free Your Data" that discussed various methods of importing and exporting data to/from Lotus Notes. Here is the sample database from that session:
<p>
<li><b><a href='http://www.nsftools.com/presentations/FreeYourData.zip'>FreeYourData.zip</a></b></li>
<p>
It's got Java and LotusScript agents with examples of using CSV, ODBC, XML, JSON, OLE, and Web Services to import and export data. There is also a page with an example of using the <a href='http://bluff.jcoglan.com'>Bluff JavaScript graphing library</a>.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-10-2009.htm#10-26-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Sample Database from IAMLUG/UKLUG'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=102609&usersite=http://www.nsftools.com/blog/blog-10-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-10-2009.htm#10-26-09</link>
	</item>

	<item>
		<pubDate>Fri, 23 Oct 2009 09:21:56 EST</pubDate>
		<title>LS2J Example Database Update (Friday, Oct 23)</title>
		<description><![CDATA[<p>Way back in 2004, I posted an <a href='http://www.nsftools.com/tips/NotesTips.htm#ls2jexamples'>LS2J example database</a> to demonstrate how to call Java from LotusScript using the LS2J technology that was new [at the time] in Lotus Notes 6.
<p>
I've recently had a few e-mail questions regarding that code, so after 5 years of letting that database gather dust I made some updates to the code to fix the following problems:
<p><ul>
<li>Made the ProgressBar and StatusBox classes explicitly public, to avoid java.lang.InternalError exceptions that occured in later versions of the Notes client when trying to access the public member variables.</li>
<li>Made a minor adjustment to the image thumbnail threading example in the JpgImage agent, to avoid exceptions that were thrown in Notes 7 and higher when you try to reuse a Java thread instead of recreating it.</li>
<li>Added the ImageResizer class and example, to use <a href='http://today.java.net/pub/a/today/2007/04/03/perils-of-image-getscaledinstance.html'>code from Chris Campbell</a> to provide MUCH better image resizing quality than I had in the old the JpgImage class. The new ImageResizer class also uses Java ImageIO classes for support of more image file types (see the "About This Database" doc for more information).</li>
</ul><p>
 If you're interested, <a href='http://www.nsftools.com/tips/LS2JExamples.zip'>download the database</a> and take a look.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-10-2009.htm#10-23-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=LS2J Example Database Update'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=102309&usersite=http://www.nsftools.com/blog/blog-10-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-10-2009.htm#10-23-09</link>
	</item>

	<item>
		<pubDate>Wed, 21 Oct 2009 21:23:24 EST</pubDate>
		<title>Fletcher Capstan Expanding Tables (Wednesday, Oct 21)</title>
		<description><![CDATA[<p>This is just incredibly cool:
<p><center>
<a href='http://www.dbfletcher.com/capstan-table'><img src='http://www.nsftools.com/misc/ExpandingTable.jpg' alt='Fletcher Capstan Expanding Table' height='404' width='400' style='padding: 6px;border: none;'></a>
</center><p>
It's a round table that expands in a crazy, geometric way when it's rotated around. Here's a video:
<p><center>
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Celw6jBGNqM&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Celw6jBGNqM&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</center><p>
It's called a <a href='http://www.dbfletcher.com/capstan-table'>Fletcher Capstan Table</a>, custom built to order by DB Fletcher Design. No prices. If you have to ask, you can't afford it.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-10-2009.htm#10-21-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Fletcher Capstan Expanding Tables'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=102109&usersite=http://www.nsftools.com/blog/blog-10-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-10-2009.htm#10-21-09</link>
	</item>

	<item>
		<pubDate>Mon, 12 Oct 2009 16:27:02 EST</pubDate>
		<title>UKLUG: The Conference That Never Sleeps (Monday, Oct 12)</title>
		<description><![CDATA[<p>Some part of me judges conferences based on how much sleep I get while I'm there. Less sleep == better conference, using the logic that I want to stay up late to spend time with the great people who are there but I also want to get up early to be at the conference itself. Based on that criteria, <a href='http://www.uklug.info'>UKLUG</a> is quite possibly the best conference I've ever been to.
<p>
And to be clear (just so that's not interpreted as some conniving back-handed compliment) even ignoring the Julian-sleep-scale, I think that UKLUG last week was an incredible show.
<p><center>
<img src='http://www.nsftools.com/misc/UKLUGMinifig.jpg' alt='UKLUG Minifig Mini-Me' width='700' height='390'>
</center><p>
<a href='http://www.elsmore.net'>Warren</a> and <a href='http://www.mrselsmore.com'>Kitty Elsmore</a> -- probably the most thoughtful people on the entire planet -- headed up the organization of this very well executed event, and I can't begin to imagine how much work it was. From the opening session with Lotus GM Bob Picciano and demo-man Ron Sebastian, to the technical sessions, to the welcome reception <a href='http://en.wikipedia.org/wiki/C%C3%A9ilidh'>Scottish ceilidh</a>, to the closing session where vendors gave away everything from iPods and iPhones and Blackberries to <b>a trip to Nice</b>, it all ran smoothly.
<p>
A few personal highlights and comments:
<p><ul>
<li><a href='http://blog.visitusinanguilla.com'>Francie</a> is a bearer of great gifts, including <a href='http://www.thinkgeek.com/caffeine/wacky-candy/b97f/'>Gummy Bacon</a>. Yum!</li>
<li>I will now and forever associate "potato famine" with ordering chips (french fries) from room service at 4:00 AM.</li>
<li><a href='http://www.billbuchan.com/web.nsf'>Bill Buchan's</a> dad was the very talented fiddle player in the Scottish ceilidh band on Thursday night. I laughed when he told me that someone asked "Which one is he?" (yes, it was obvious).</li>
<li>Very good to see IBM well represented at UKLUG, and I finally got to meet the mighty <a href='http://www.dadams.co.uk'>Darren Adams</a>.</li>
<li><a href='http://www.pmooney.net'>Paul Mooney</a> is the Irish superman.</li>
<li><a href='http://www.lotusrockstar.com'>Rob Novak</a> makes a good (albeit quite social) hotel roommate, especially since he ordered "the big room".</li>
<li>Do not attempt to stand between a group of women and a cafe called "Chocolate Soup".</li>
<li>I really need to find some way to get <a href='http://dominoyesmaybe.blogspot.com'>Steve McDonagh</a> to Lotusphere.</li>
<li>As always when I make these sorts of lists, I feel bad that I didn't mention every single one of the many, many people I got to meet and otherwise spend time with. But, oh well.</li>
</ul><p>
Okay, back to work.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-10-2009.htm#10-12-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=UKLUG: The Conference That Never Sleeps'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=101209&usersite=http://www.nsftools.com/blog/blog-10-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-10-2009.htm#10-12-09</link>
	</item>

	<item>
		<pubDate>Wed, 30 Sep 2009 21:02:40 EST</pubDate>
		<title>FWIW, Uploaded My Lotus Knows Video To YouTube (Wednesday, Sep 30)</title>
		<description><![CDATA[<p>Not that anyone cares, but I finally uploaded that <a href='http://www.lotusknows.com'>Lotus Knows</a> video I mentioned yesterday to YouTube, just so it's a little bigger and you can see a little more detail on what's going on:
<p><center>
<object width="640" height="505"><param name="movie" value="http://www.youtube.com/v/ZCciB9siOYc&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/ZCciB9siOYc&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="505"></embed></object>
</center><p>
For some reason the cheesy music part of the audio track didn't get converted and the video is still a little fuzzy, but whatever. I didn't even have a YouTube account until a couple hours ago. I'll figure it out someday if it becomes important.
<p>
Also, <a href='http://www.youtube.com/results?search_query=lotusknows&search_type=&aq=f'>a search for "LotusKnows" on YouTube</a> yields several more videos that might be fun to watch.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-09-2009.htm#09-30-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=FWIW, Uploaded My Lotus Knows Video To YouTube'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=093009&usersite=http://www.nsftools.com/blog/blog-09-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-09-2009.htm#09-30-09</link>
	</item>

	<item>
		<pubDate>Tue, 29 Sep 2009 10:47:34 EST</pubDate>
		<title>My Lotus Knows Video (Tuesday, Sep 29)</title>
		<description><![CDATA[<p>Oh cool, <a href='http://www.lotusrockstar.com'>Rob Novak</a> told me that my Lotus Knows video submission ended up on the main <a href='http://www.lotusknows.com'>Lotus Knows site</a>!
<p><center>
<a href='http://www.lotusknows.com'><img src='http://www.nsftools.com/misc/LotusKnowsTravelEntry.png' alt='Lotus Knows how you travel' height='330' width='700'></a>
</center><p>
It's a little client integration demo: taking a flight reservation, uploading to TripIt, viewing in the TripIt sidebar widget, viewing the ical feed in my Notes calendar, and using Live Text and the embedded browser to look up information and drag or copy it to a new calendar entry. The goal was to show how to do all these things using the out-of-the-box Lotus Notes client and mail template, no customizations required. I think the only extra thing I added was the <a href='http://www.tripit.com/lotus'>TripIt widget</a> itself just 'cause I think it looks nice.
<p>
I need to get a bigger version of the video on YouTube or somewhere so you can see a little more detail on what I'm doing. You can get the idea from the small version on the Lotus Knows site though.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-09-2009.htm#09-29-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=My Lotus Knows Video'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=092909&usersite=http://www.nsftools.com/blog/blog-09-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-09-2009.htm#09-29-09</link>
	</item>

	<item>
		<pubDate>Thu, 17 Sep 2009 07:42:54 EST</pubDate>
		<title>SnTT: Aligning Checkboxes on Domino Forms (Thursday, Sep 17)</title>
		<description><![CDATA[<p><p>
<img src='http://www.nsftools.com/misc/SNTTbtn.png' align='right' style='padding: 6px'>

So, you added a checkbox field to a Domino form and the choices are all jumbled together. How do you line them up so they look nice and neat?
<p>
That old chestnut of a problem has been discussed for many years (since there's still no built-in way to do it), and most of the solutions seem to be around using some amount of formula language to rewrite the checkbox choices before they're displayed. See <a href='http://www.codestore.net/store.nsf/unid/BLOG-20070510'>Jake Howlett's checkbox formatting article</a> and the comments below it for some good examples.
<p>
I wanted another method for lining up checkbox fields in Domino -- namely, a method that didn't require me to touch the checkbox choices at all. I wanted as unobtrusive an answer as I could find. Here's what I came up with:
<p><center>
<img src='http://www.nsftools.com/misc/CheckboxesBeforeAndAfter.png' alt='Domino checkbox fields before and after' width='700' height='400'>
</center><p>
The process is:
<p><ul>
<li>Surround the checkbox field with a &amp;lt;div&amp;gt; (but leave the field itself alone)</li>
<li>Add a JavaScript function to the page</li>
<li>Call the function at window.onload to dynamically reformat the field</li>
</ul><p>
Here's the JavaScript to format a div with ID of "checkboxFieldDiv1":
<p><blockquote style="white-space: pre;">

function lineUpCheckboxes (div) {
    if (typeof div === "string") { div = document.getElementById(div); }
    if (!div) { return; }
    var cbText = div.innerHTML;
   
    // this is for reformatting pre-8.5 checkbox fields to add &amp;lt;label&amp;gt; tags
    if (cbText &amp;&amp; cbText.toLowerCase().indexOf("&amp;lt;label&amp;gt;") &amp;lt; 0) {
        var arr = cbText.split(/&amp;lt;input/gi);
        cbText = arr[0];
        for (i = 1; i &amp;lt; arr.length; i++) {
            if ((arr[i].toLowerCase().indexOf('type="checkbox"') &amp;gt;= 0) ||
                (arr[i].toLowerCase().indexOf('type=checkbox') &amp;gt;= 0))
                cbText += "&amp;lt;label&amp;gt;&amp;lt;input" + arr[i] + "&amp;lt;/label&amp;gt;";
            else if ((arr[i].toLowerCase().indexOf('type="radio"') &amp;gt;= 0) ||
                (arr[i].toLowerCase().indexOf('type=radio') &amp;gt;= 0))
                cbText += "&amp;lt;label&amp;gt;&amp;lt;input" + arr[i] + "&amp;lt;/label&amp;gt;";
            else
                cbText += "&amp;lt;input" + arr[i];
        }
    }
  
    cbText = cbText.replace(/&amp;lt;label&amp;gt;/gi, "&amp;lt;td style='padding:0px'&amp;gt;&amp;lt;label&amp;gt;");
    cbText = cbText.replace(/&amp;lt;\/label&amp;gt;/gi, "&amp;lt;/label&amp;gt;&amp;lt;/td&amp;gt;");
    cbText = cbText.replace(/&amp;lt;p&amp;gt;/gi, "");
    cbText = cbText.replace(/&amp;lt;\/p&amp;gt;/gi, "");
    
    var pos = cbText.indexOf("&amp;lt;td");
    if (pos &amp;gt;= 0) {
        cbText = cbText.replace(/&amp;lt;br&amp;gt;/gi, "&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;");
        var tbStart = "&amp;lt;table width='98%'&amp;gt;&amp;lt;thead&amp;gt;&amp;lt;/thead&amp;gt;&amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;";
        var tbEnd = "&amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;";
        pos = cbText.indexOf("&amp;lt;td");
        cbText = cbText.substr(0, pos) + tbStart + cbText.substr(pos) + tbEnd;
    }
    div.innerHTML = cbText;
}

window.onload = function () {
	// this is a REALLY bad way to add a window.onload event, but I'm trying to keep
	// it short for the sake of example. Search Google for better ways to do this.
	lineUpCheckboxes("checkboxFieldDiv1");
};

</blockquote><p>

You can also download the file <a href='http://www.nsftools.com/tips/LineUpCheckboxes.js'>LineUpCheckboxes.js</a> if you don't feel like copying and pasting.
<p>
Over 1/3 of the function code deals with the fact that pre-8.5 Domino servers don't put a &amp;lt;label&amp;gt; tag around checkbox or radio button options, and the rest is some hard-coded string replacements based on how Domino outputs HTML. The really nice thing is, the font face and the number of columns you specify for the field in Domino Designer are still used so there's no extra coding involved there. Since the reformatted fields are in a &amp;lt;div&amp;gt; or your choosing, you can also use all the CSS you want to further refine the look.
<p>
I tested this on Domino 7, 8, and 8.5 using Firefox 3/3.5, IE7/8, and Safari. Seemed to work for me. Sadly this does not work with <a href='http://www-10.lotus.com/ldd/ddwiki.nsf/dx/02102008091536PHABPL.htm'>checkbox groups on XPages</a>, so if you're using XPages you're on your own.
<p>
I really do wonder, though, if there's not some way to simplify that function. It's only 35 lines of code but it still looks a little tedious to me. If you're a regular expression wizard or if you're really good with the JavaScript toolkits, you might want to try to boil that function down a bit to shorten it up.
<p>
Oh, and this works for radio button fields too.<p><hr>[ <a href='http://www.nsftools.com/blog/blog-09-2009.htm#09-17-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=SnTT: Aligning Checkboxes on Domino Forms'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=091709&usersite=http://www.nsftools.com/blog/blog-09-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-09-2009.htm#09-17-09</link>
	</item>

	<item>
		<pubDate>Mon, 31 Aug 2009 08:00:41 EST</pubDate>
		<title>Workspace-Type UI for Linux (Monday, Aug 31)</title>
		<description><![CDATA[<p><a href='http://mark.savingthefamilymoney.com/2009/08/31/695'>My buddy Mark</a> just installed the <a href='http://www.jolicloud.com/about'>Jolicloud</a> Linux OS on his netbook. I love the look-and-feel, but then again I'll always have a soft spot for Workspace-type UIs:
<p><center>
<a href='http://www.jolicloud.com'><img src='http://www.nsftools.com/misc/jolicloud.icons.jpg' height='351' width='600' alt='Jolicloud UI' style='padding: 6px;border: none;'></a>
</center><p><p><hr>[ <a href='http://www.nsftools.com/blog/blog-08-2009.htm#08-31-09'>permalink</a> ] [ <a href='mailto:blogs@nsftools.com?subject=Workspace-Type UI for Linux'>e-mail me</a> ] [ <a href='http://www.nsftools.com/blog/comments.php?&commentid=083109&usersite=http://www.nsftools.com/blog/blog-08-2009.htm' target='_blank'>read/add comments</a> ] <p>]]></description>
		<link>http://www.nsftools.com/blog/blog-08-2009.htm#08-31-09</link>
	</item>

</channel>
</rss>
