<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5534069055846677990</id><updated>2011-07-30T09:57:14.437-07:00</updated><category term='rants'/><category term='hardy heron'/><category term='selectedindex'/><category term='eclipse'/><category term='dual monitors'/><category term='ubuntu'/><category term='menubar'/><category term='64-bit'/><category term='CRIT'/><category term='32-bit'/><category term='nvidia'/><category term='flex'/><title type='text'>Nerd Alert</title><subtitle type='html'>Code and tech stuff from Quinn Madson</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-2523098507469348022</id><published>2011-04-29T09:49:00.000-07:00</published><updated>2011-04-29T09:53:31.160-07:00</updated><title type='text'>ColdFusion RegEx White List Example</title><content type='html'>I needed to build a function that would strip out characters in event information because, otherwise it would break a JSON feed. Here is what I used:&lt;div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;cffunction name="jsonSafe" access="private"&amp;gt;&lt;br /&gt;  &amp;lt;cfargument name="str" type="string" required="true"&amp;gt;&lt;br /&gt;  &amp;lt;cfset newStr = reReplace(arguments.str, '[^[:alnum:][:space:]$=;.?!\\/&amp;amp;"''`():,\[\]{}_\-]', '_','all')&amp;gt;&lt;br /&gt;  &amp;lt;cfreturn newStr&amp;gt;&lt;br /&gt;&amp;lt;/cffunction&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-2523098507469348022?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/2523098507469348022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=2523098507469348022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/2523098507469348022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/2523098507469348022'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2011/04/coldfusion-regex-white-list-example.html' title='ColdFusion RegEx White List Example'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/17707974593169671381</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-4086502432521306152</id><published>2011-04-07T14:14:00.000-07:00</published><updated>2011-04-07T14:27:49.198-07:00</updated><title type='text'>Preserve epoch dates in Zimbra JSON via ColdFusion DeserializeJSON function</title><content type='html'>&lt;p&gt;&lt;span class="Apple-style-span" &gt;The DeserializeJSON() function in ColdFusion converts an epoch date/time in JSON from something like: &lt;span class="Apple-style-span"&gt;1281364965000&lt;/span&gt; to: &lt;span class="Apple-style-span"&gt;1.281364965E+012.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" &gt;To prevent this from happening, you can use something like this:&lt;/span&gt;&lt;/p&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;cfset jsonData = reReplace(jsonData, '([0-9]{13})', '"\1"', 'ALL')&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span" &gt;Alternatively, to convert any number, 10 digits or more into a string to preserve the proper formatting, use something like this:&lt;/span&gt;&lt;/p&gt; &lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;cfset jsonData = reReplace(jsonData, '([0-9]{10,})', '"\1"', 'ALL')&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-4086502432521306152?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/4086502432521306152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=4086502432521306152' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/4086502432521306152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/4086502432521306152'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2011/04/preserve-epoch-dates-in-zimbra-json-via.html' title='Preserve epoch dates in Zimbra JSON via ColdFusion DeserializeJSON function'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-8930367348025173496</id><published>2010-09-17T21:03:00.000-07:00</published><updated>2010-09-17T21:10:35.826-07:00</updated><title type='text'>Fixing bootloaders when dual booting OS X and Ubuntu</title><content type='html'>I ran into a problem the last time Ubuntu upgraded either the kernel or grub (not sure which); Either way, it blew away my Chameleon bootloader and replaced it with Grub. Here's how to fix it:&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Reboot from the iATKOS v7 CD&lt;/li&gt;&lt;li&gt;Deselect all checkboxes except the one for Install Chameleon&lt;/li&gt;&lt;li&gt;Install&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Now you should be able to boot into OS X but, Ubuntu will be unavailable.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Boot from the Ubuntu Live CD&lt;/li&gt;&lt;li&gt;Open the Terminal from Applications &gt;&gt; Accessories&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;sudo -s&lt;br /&gt;mkdir /mnt/r&lt;br /&gt;mount /dev/sda4 /mnt/r&lt;br /&gt;mount --bind /dev /mnt/r/dev&lt;br /&gt;mount --bind /proc /mnt/r/proc&lt;br /&gt;chroot /mnt/r&lt;br /&gt;update-grub&lt;br /&gt;grub-install --force /dev/sda4&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-8930367348025173496?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/8930367348025173496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=8930367348025173496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/8930367348025173496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/8930367348025173496'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2010/09/fixing-bootloaders-when-dual-booting-os.html' title='Fixing bootloaders when dual booting OS X and Ubuntu'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-1849912304615552195</id><published>2010-09-15T13:43:00.001-07:00</published><updated>2011-04-21T09:00:42.748-07:00</updated><title type='text'>Adding CFWheels Applications as "Custom Script" elements in the CommonSpot CMS</title><content type='html'>It appears that CommonSpot (version 5, at least) ignores Application.cfc files when using a custom script in the same directory. In CF Wheels, Application.cfc is used to setup the entire framework.&lt;br /&gt;&lt;br /&gt;Here is what I did to get it working:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Put your CF Wheels application in the &lt;span style="font-weight: bold;"&gt;customcf/&lt;/span&gt; subdirectory&lt;/li&gt;&lt;li&gt;Rename Application.cfc to application.cfc (This is done to prevent the application from being initialized twice if accessed outside the CMS.)&lt;/li&gt;&lt;li&gt;Edit the &lt;span style="font-weight: bold;"&gt;index.cfm&lt;/span&gt; at the root of the application directory:&lt;/li&gt;&lt;/ul&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&amp;lt;!--- Manually instantiate the application.cfc ---&amp;gt;&lt;br /&gt;&amp;lt;cfset server.railo = structNew()&amp;gt;&lt;br /&gt;&amp;lt;cfset server.railo.version = "fake version"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--- If this is the first time the application has run, call the onApplicationStart method ---&amp;gt;&lt;br /&gt;&amp;lt;cfset app = CreateObject("component","application")&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--- Call the onRequestStart method and pass the current page as a parameter ---&amp;gt;&lt;br /&gt;&amp;lt;cfif not structKeyExists(application, "wheels")&amp;gt;&lt;br /&gt;&amp;lt;cfset app.onApplicationStart()&amp;gt;&lt;br /&gt;&amp;lt;/cfif&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--- Call the onRequestStart method and pass the current page as a parameter ---&amp;gt;&lt;br /&gt;&amp;lt;cfset app.onRequestStart(cgi.script_name)&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--- This is the only original line in the file ---&amp;gt;&lt;br /&gt;&amp;lt;cfinclude template="wheels/index.cfm"&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-1849912304615552195?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/1849912304615552195/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=1849912304615552195' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/1849912304615552195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/1849912304615552195'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2010/09/adding-cfwheels-applications-as-custom.html' title='Adding CFWheels Applications as &quot;Custom Script&quot; elements in the CommonSpot CMS'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-4334309714378261267</id><published>2010-07-07T12:43:00.000-07:00</published><updated>2010-07-07T13:10:08.639-07:00</updated><title type='text'>Gnome Screensaver Missing Lock Screen Prompt in Ubuntu Lucid 10.04</title><content type='html'>For some reason, the unlock dialog box for Gnome Screensaver suddenly stopped appearing. Screensaver works fine but, move the mouse and no unlock prompt, just back to the screen saver. The only work-around was to press Ctrl-Alt-F1, login, and type the command:&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;killall gnome-screensaver&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;Although, after a while this gets annoying so, I looked for a better long term solution. Here it is:&lt;/div&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;sudo chmod a+r /etc/pam.d/*&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;That's it. I assume that the permissions may have been messed up during an update. Posted here for posterity.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-4334309714378261267?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/4334309714378261267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=4334309714378261267' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/4334309714378261267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/4334309714378261267'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2010/07/gnome-screensaver-missing-lock-screen.html' title='Gnome Screensaver Missing Lock Screen Prompt in Ubuntu Lucid 10.04'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-2086493057218644620</id><published>2010-01-06T21:56:00.000-08:00</published><updated>2010-01-06T22:17:36.121-08:00</updated><title type='text'>CFEclipse Dictionary for CF on Wheels</title><content type='html'>As far as I could tell, there was no CFEclipse dictionary available for CF on Wheels so I created one.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To get it, download the XML at: &lt;a href="http://su.pr/6s1VUi"&gt;http://su.pr/6s1VUi&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To use it:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Open your Eclipse plugins/ directory&lt;/li&gt;&lt;li&gt;Open the directory: org.cfeclipse.cfml_X/ (where X is your CFEclipse version number)&lt;/li&gt;&lt;li&gt;Open the directory: dictionary&lt;/li&gt;&lt;li&gt;Copy cfwheels.xml to this location&lt;/li&gt;&lt;li&gt;Close Eclipse if it is running&lt;/li&gt;&lt;li&gt;Open up: dictionaryconfig.xml&lt;/li&gt;&lt;/ul&gt;Change:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;version key="cf8" label="Coldfusion 8"&amp;gt;&lt;br /&gt; &amp;lt;grammar location="cf8.xml" /&amp;gt;&lt;br /&gt; &amp;lt;grammar location="user.xml" /&amp;gt;&lt;br /&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;To:&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;version key="cf8" label="Coldfusion 8"&amp;gt;&lt;br /&gt; &amp;lt;grammar location="cf8.xml" /&amp;gt;&lt;br /&gt; &amp;lt;grammar location="user.xml" /&amp;gt;&lt;br /&gt; &amp;lt;grammar location="cfwheels.xml" /&amp;gt;&lt;br /&gt;&amp;lt;/version&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;I am not sure if it is an Ubuntu bug but, any thing that is not in the first grammar file is not loaded in Eclipse. If you run into problems, just copy and paste the functions listed in cfwheels.xml to cf8.xml or whatever dialect you use. The other option is to create a separate CFWheels dictionary entry but, it doesn't work very well switching back and forth between dictionary sets.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the likely event that I am struck by a bus, a very confused sperm whale, or bowl of petunias, I created a script that scrapes the CF on Wheels documentation and creates the dictionary XML. If more functions are added and the structure of the docs pages don't change immensely, rerun the script to refresh the dictionary XML. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the code:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;cfparam name="url.page" default="0"&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="url.start" default="0"&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="url.end" default="0"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!---&lt;br /&gt; Strips all table and table content tags and extra whitespace from a string.&lt;br /&gt;&lt;br /&gt; @param string      String to format. (Required)&lt;br /&gt; @return Returns a string.&lt;br /&gt; @author Jared Rypka-Hauer (jared@web-relevant.com)&lt;br /&gt; @version 1, August 25, 2005&lt;br /&gt;---&amp;gt;&lt;br /&gt;&amp;lt;cffunction name="detableize"&amp;gt;&lt;br /&gt; &amp;lt;cfargument name="string" type="string" required="true" /&amp;gt;&lt;br /&gt; &amp;lt;cfset var outputString = arguments["string"]&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "&amp;lt;/*table&amp;gt;", "", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "&amp;lt;/*td&amp;gt;", "ø", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "&amp;lt;/*t[rhd](\s*\w*=*""*\w*""*)*&amp;gt;", "", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "(?m)^\s*", "", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "\n{2,}", "#chr(10)#", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfreturn outputString /&amp;gt;&lt;br /&gt;&amp;lt;/cffunction&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--- based on function above; removes garbage from api page ---&amp;gt;&lt;br /&gt;&amp;lt;cffunction name="detagify"&amp;gt;&lt;br /&gt; &amp;lt;cfargument name="string" type="string" required="true" /&amp;gt;&lt;br /&gt; &amp;lt;cfset var outputString = arguments["string"]&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "&amp;lt;/*li&amp;gt;", "", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "&amp;lt;code&amp;gt;[a-z\(\)]*&amp;lt;/code&amp;gt;", "", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "&amp;lt;a href=""", "", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , """&amp;gt;&amp;lt;/a&amp;gt;", ",", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "(?m)^\s*", "", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfset outputString = reReplaceNoCase(outputString , "\n{2,}", "#chr(10)#", "all")&amp;gt;&lt;br /&gt; &amp;lt;cfreturn outputString /&amp;gt;&lt;br /&gt;&amp;lt;/cffunction&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfscript&amp;gt;&lt;br /&gt;     /**&lt;br /&gt;     * Returns the content enclosed in a tag pair.&lt;br /&gt;     *&lt;br /&gt;     * @param tag      The tag to look for. Should be passed without &amp;lt; or &amp;gt; and without attributes. (Required)&lt;br /&gt;     * @param string      The string to search. (Required)&lt;br /&gt;     * @return Returns a string.&lt;br /&gt;     * @author Johan Steenkamp (johan@orbital.co.nz)&lt;br /&gt;     * @version 1, September 16, 2002&lt;br /&gt;     */&lt;br /&gt;     function getTagContent(tag,str) {&lt;br /&gt;         var matchStruct = structNew();&lt;br /&gt;         var startTag = "&amp;lt;#tag#[^&amp;gt;]*&amp;gt;";&lt;br /&gt;         var endTag = "&amp;lt;/#tag#&amp;gt;";&lt;br /&gt;         var endTagStart = 0;&lt;br /&gt;         matchStruct = REFindNoCase(startTag,str,1,"true");&lt;br /&gt;         if(matchStruct.len[1] eq 0 ) return "";&lt;br /&gt;         endTagStart = REFindNoCase(endTag,str,matchStruct.pos[1],"false");&lt;br /&gt;         return Mid(str,matchStruct.pos[1]+matchStruct.len[1],endTagStart-matchStruct.pos[1]-matchStruct.len[1]);&lt;br /&gt;     }&lt;br /&gt; &amp;lt;/cfscript&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--- get urls ---&amp;gt;&lt;br /&gt; &amp;lt;cfhttp url="http://cfwheels.org/docs/function/"&amp;gt;&amp;lt;/cfhttp&amp;gt;&lt;br /&gt; &amp;lt;cfscript&amp;gt;&lt;br /&gt;     urlsFilecontent = cfhttp.filecontent;&lt;br /&gt;     urlsStartPoint = find("&amp;lt;h1&amp;gt;Wheels &amp;lt;abbr title=""Application Programming Interface""&amp;gt;API&amp;lt;/abbr&amp;gt;&amp;lt;/h1&amp;gt;", urlsFilecontent);&lt;br /&gt;     urlsEndPoint = len(urlsFilecontent) - urlsStartPoint;&lt;br /&gt;     urlsChopped = mid(urlsFilecontent, urlsStartPoint, urlsEndPoint);&lt;br /&gt;     urlsChopped = getTagContent("ul", urlsChopped);&lt;br /&gt;     urlsChopped = detagify(urlsChopped);&lt;br /&gt;     urlsChopped = listToArray(urlsChopped);&lt;br /&gt;     dictionary = "";&lt;br /&gt;     itemsPerPage = 25;&lt;br /&gt;     urlsPages = ceiling(arrayLen(urlsChopped) / itemsPerPage);&lt;br /&gt; &amp;lt;/cfscript&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfoutput&amp;gt;&lt;br /&gt;     &amp;lt;h1&amp;gt;CFWheels API to CFEclipse Dictionary Conversion&amp;lt;/h1&amp;gt;&lt;br /&gt;     &amp;lt;p&amp;gt;#arrayLen(urlsChopped)# functions listed in documentation. Function conversions are broken up into batches to prevent timeouts.&lt;br /&gt;     Click below to convert a batch.&amp;lt;/p&amp;gt;&lt;br /&gt;     &amp;lt;ul&amp;gt;&lt;br /&gt;     &amp;lt;cfloop from="1" to="#urlsPages#" index="i"&amp;gt;&lt;br /&gt;         &amp;lt;cfscript&amp;gt;&lt;br /&gt;             if (i neq 1) {&lt;br /&gt;                 start = (i - 1) * itemsPerPage;&lt;br /&gt;                 end = start + itemsPerPage - 1;&lt;br /&gt;             } else {&lt;br /&gt;                 start = 1;&lt;br /&gt;                 end = itemsPerPage - 1;&lt;br /&gt;             }&lt;br /&gt;          &lt;br /&gt;             if (end gt arrayLen(urlsChopped)) {&lt;br /&gt;                 end = arrayLen(urlsChopped);&lt;br /&gt;             }&lt;br /&gt;         &amp;lt;/cfscript&amp;gt;&lt;br /&gt;         &amp;lt;li&amp;gt;&amp;lt;a href="?page=#i#&amp;amp;start=#start#&amp;amp;end=#end#"&amp;gt;#i#: #start# - #end#&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;     &amp;lt;/cfloop&amp;gt;&lt;br /&gt;     &amp;lt;/ul&amp;gt;&lt;br /&gt; &amp;lt;/cfoutput&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfif url.page&amp;gt;&lt;br /&gt;&amp;lt;cfloop from="#url.start#" to="#url.end#" index="i"&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!--- convert html to cfeclipse dictionary xml ---&amp;gt;&lt;br /&gt; &amp;lt;cfhttp url="http://cfwheels.org#urlsChopped[i]#"&amp;gt;&amp;lt;/cfhttp&amp;gt;&lt;br /&gt; &amp;lt;cfset functionFilecontent = cfhttp.filecontent&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfscript&amp;gt;&lt;br /&gt;     functionStartPoint = findnocase("contentWrapper", functionFilecontent);&lt;br /&gt;     functionEndPoint = len(functionFilecontent) - functionStartPoint;&lt;br /&gt;     functionChopped = mid(functionFilecontent, functionStartPoint, functionEndPoint);&lt;br /&gt;     functionName = getTagContent("code", functionChopped);&lt;br /&gt;     functionChopped = replacenocase(functionChopped, "&amp;lt;code&amp;gt;", "", "all");&lt;br /&gt;     functionChopped = replacenocase(functionChopped, "&amp;lt;/code&amp;gt;", "", "all");&lt;br /&gt;     functionDescription = getTagContent("p", functionChopped);&lt;br /&gt;     functionParameters = getTagContent("tbody", functionChopped);&lt;br /&gt;     functionParameters = detableize(functionParameters);&lt;br /&gt;     functionParameters = listToArray(functionParameters, "ø", true);&lt;br /&gt; &amp;lt;/cfscript&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfoutput&amp;gt;&lt;br /&gt;&amp;lt;cfsavecontent variable="functionOutput"&amp;gt;&lt;br /&gt; &amp;lt;function xmlns="http://www.cfeclipse.org/version1/dictionary" name="#xmlFormat(functionName)#" returns=""&amp;gt;&lt;br /&gt;&lt;br /&gt;     &amp;lt;help&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;         #xmlFormat(trim(functionDescription))#&lt;br /&gt;     ]]&amp;gt;&amp;lt;/help&amp;gt;&lt;br /&gt;     &amp;lt;cfloop from="1" to="#arrayLen(functionParameters)-1#" index="i" step="5"&amp;gt;&amp;lt;cfif functionParameters[i+2] eq "No"&amp;gt;&amp;lt;cfset required="false"&amp;gt;&amp;lt;cfelse&amp;gt;&amp;lt;cfset required="true"&amp;gt;&amp;lt;/cfif&amp;gt;&lt;br /&gt;     &amp;lt;parameter name="#xmlFormat(trim(functionParameters[i]))#" type="#xmlFormat(trim(functionParameters[i+1]))#" required="#xmlFormat(trim(required))#"&amp;gt;&lt;br /&gt;         &amp;lt;help&amp;gt;&amp;lt;![CDATA[&lt;br /&gt;             #xmlFormat(trim(functionParameters[i+4]))#&lt;br /&gt;         ]]&amp;gt;&amp;lt;/help&amp;gt;&lt;br /&gt;     &amp;lt;/parameter&amp;gt;&lt;br /&gt;     &amp;lt;/cfloop&amp;gt;&lt;br /&gt; &amp;lt;/function&amp;gt;&lt;br /&gt;&amp;lt;/cfsavecontent&amp;gt;&lt;br /&gt; &amp;lt;/cfoutput&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfset dictionary = dictionary &amp;amp; functionOutput&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/cfloop&amp;gt;&lt;br /&gt;&amp;lt;cfoutput&amp;gt;&lt;br /&gt;&amp;lt;textarea cols="150" rows="50"&amp;gt;&lt;br /&gt;#dictionary#&lt;br /&gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;&amp;lt;/cfoutput&amp;gt;&lt;br /&gt;&amp;lt;/cfif&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Hopes this helps some other CFEclipse &amp;amp; CF on Wheels developers out there.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-2086493057218644620?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/2086493057218644620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=2086493057218644620' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/2086493057218644620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/2086493057218644620'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2010/01/cfeclipse-dictionary-for-cf-on-wheels.html' title='CFEclipse Dictionary for CF on Wheels'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-987559948729642397</id><published>2009-07-28T13:45:00.000-07:00</published><updated>2009-07-28T13:55:49.486-07:00</updated><title type='text'>Zimbra ZmAppt Object Properties</title><content type='html'>As of this writing in July of 2009, the only documentation of the Zimbra ZmAppt object is a preliminary draft of a white paper released by Zimbra in 2006. The documentation is out of date so, I am putting up an example of a current ZmAppt object (as of release 5.0.18) here, in case anyone is googling for updated documentation like I was.&lt;br /&gt;&lt;br /&gt;&lt;table class="cfdump_struct"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ALARM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ALLDAYEVENT&lt;/td&gt;      &lt;td&gt;      false       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ATTENDEES&lt;/td&gt;      &lt;td&gt;      [empty string]       &lt;/td&gt;      &lt;/tr&gt;                        &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ENDDATE&lt;/td&gt;      &lt;td&gt;      Tue Jul 28 2009 16:00:00 GMT-0500 (CST)       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;EXCEPTION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ID&lt;/td&gt;      &lt;td&gt;      f6ec6325-5dd9-452c-aec5-c60561900b79:560       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISRECURRING&lt;/td&gt;      &lt;td&gt;      false       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;LOCATION&lt;/td&gt;      &lt;td&gt;      Test Location 254       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;NOTES&lt;/td&gt;      &lt;td&gt;            Test Notes 254&lt;br /&gt;&lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;OTHERATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RESOURCES&lt;/td&gt;      &lt;td&gt;      [empty string]       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SRCOBJ&lt;/td&gt;      &lt;td&gt;      ZmAppt       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;STARTDATE&lt;/td&gt;      &lt;td&gt;      Tue Jul 28 2009 11:00:00 GMT-0500 (CST)       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SUBJECT&lt;/td&gt;      &lt;td&gt;      Test Event 254       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TIMEZONE&lt;/td&gt;      &lt;td&gt;      (GMT-06.00) Central Time (US &amp;amp; Canada)       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TYPE&lt;/td&gt;      &lt;td&gt;      ZmAppt       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;UID&lt;/td&gt;      &lt;td&gt;      02b205bf-72cc-48c7-a0ec-0862ae321124       &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Here is an example of the srcObj above:&lt;br /&gt;&lt;table class="cfdump_struct"&gt;&lt;tbody&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ADDCHANGELISTENER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ADJUSTMS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ALARM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ALARMDATA&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ALLDAYEVENT&lt;/td&gt;      &lt;td&gt;      false       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ATTACHMENTS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;                        &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;CACHE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;CANCEL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;CLEAR&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;COMPNUM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;CONSTRUCTOR&lt;/td&gt;      &lt;td&gt;      function Object() {     [native code] }       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;CREATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;DELETELOCAL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ENDDATE&lt;/td&gt;      &lt;td&gt;      Tue Jul 28 2009 16:00:00 GMT-0500 (CST)       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ENDSINUTC&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;FBA&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;FLAGLOCAL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;FOLDERID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;FRAGMENT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;FREEBUSY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETATTACHLISTHTML&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETATTACHMENTS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETATTENDEESTEXT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETATTENDEETOOLTIPDATA&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETATTENDEETOOLTIPSTRING&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETBYID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETCOMPNUM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETDATERANGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETDEFAULTDNDACTION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETDETAILS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETDURATION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETDURATIONTEXT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETENDTIME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETFOLDER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETFOLDERID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETHTMLSUMMARY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETLOCALFOLDERID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETLOCATION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETMAILNOTIFICATIONOPTION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETNAME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETNOTESPART&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETORGANIZER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETORIGSTARTDATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETORIGSTARTTIME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETORIGTIMEZONE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETPARTICIPANTSTATUSSTR&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETPRINTHTML&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETRECURBLURB&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETRECURTYPE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETREMINDERLOCATION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETREMINDERNAME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETREMOTEFOLDEROWNER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETRESTURL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETSENTBY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETSHORTSTARTHOUR&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETSTARTTIME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETSUMMARY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETTAGIMAGEINFO&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETTEXTSUMMARY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETTIMEZONE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETTOOLTIP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETUNIQUEENDDATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETUNIQUEID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETUNIQUESTARTDATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;GETURL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;HASALARMDATA&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;HASATTACHMENTS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;HASATTENDEEFORTYPE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;HASATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;HASPERSONATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;HASTAG&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ID&lt;/td&gt;      &lt;td&gt;      f6ec6325-5dd9-452c-aec5-c60561900b79:560       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;INVID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISALARMINRANGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISALARMINSTANCE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISALLDAYEVENT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISCUSTOMRECURRENCE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISENDINRANGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISEXCEPTION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISINRANGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISMULTIDAY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISORG&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISORGANIZER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISOVERLAPPING&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISPRIVATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISREADONLY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISRECURRING&lt;/td&gt;      &lt;td&gt;      false       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISSHARED&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ISSTARTINRANGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;LIST&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;LOCATION&lt;/td&gt;      &lt;td&gt;      location 254       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;MESSAGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;MODIFY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;MOVE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;MOVELOCAL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;NAME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;NOTESTOPPART&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;NOTIFYDELETE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;NOTIFYMODIFY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ORGANIZER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ORIGATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ORIGEQUIPMENT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;ORIGLOCATIONS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;OTHERATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;PARSEALARM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;PARSEALARMDATA&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;PRIORITY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;PRIVACY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;PTST&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RECURRING&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;REMOVEALLCHANGELISTENERS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;REMOVEALLTAGSLOCAL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;REMOVEATTACHMENT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;REMOVECHANGELISTENER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RESETREPEATCUSTOMDAYOFWEEK&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RESETREPEATMONTHLYDAYLIST&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RESETREPEATWEEKLYDAYS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RESETREPEATYEARLYMONTHSLIST&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RIDZ&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;RSVP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SAVE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SENTBY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SERIESINVID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETALLDAYEVENT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETATTACHMENTS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETATTENDEETOOLTIPDATA&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETDATERANGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETENDDATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETFOLDERID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETFROMMAILMESSAGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETFROMMESSAGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETINCLUDEEDITREPLY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETMAILNOTIFICATIONOPTION&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETNAME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETNOBUSYOVERLAY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETORGANIZER&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETRECURTYPE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETREMINDERMINUTES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETRSVP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETSTARTDATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETTEXTNOTES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETTIMEZONE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETTYPE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SETVIEWMODE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SHOULDRSVP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;SHOWBLOBMISSINGDLG&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;STARTDATE&lt;/td&gt;      &lt;td&gt;      Tue Jul 28 2009 11:00:00 GMT-0500 (CST)       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;STARTSINUTC&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;STATUS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TAGHASH&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TAGLOCAL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TAGS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TIMEZONE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TOOLTIP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TOSTRING&lt;/td&gt;      &lt;td&gt;      function toString() {     [native code] }       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TRANSPARENCY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TYPE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;TZO&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;UID&lt;/td&gt;      &lt;td&gt;      02b205bf-72cc-48c7-a0ec-0862ae321124       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;UNIQSTARTTIME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;VIEWMODE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDATTENDEESTOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDATTENDEETOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDDATETIMETOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDEXTRASTOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDINVITEANDCOMPNUM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDLOCATIONTOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDNOTESTOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDXPARAMTOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDXPROPSTOALARM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ADDXPROPSTOSOAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ATTENDEES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_CURRENTLYLOADED&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_DOCANCEL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_EVT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_EVTMGR&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_FANOUTFIRST&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_FANOUTLAST&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_FANOUTNUM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETATTR&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETCLEANHTML2TEXT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETDEFAULTBLURB&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETDEFAULTFOLDERID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETFLAGS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETINVITEFROMERROR&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETSOAPFORMODE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETTEXTSUMMARYTIME&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_GETTTDAY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_HANDLECANCELERROR&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_HANDLEERRORGETDETAILS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_HANDLEERRORGETDETAILS2&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_HANDLERESPONSEGETDETAILS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_HANDLERESPONSESEND&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_LAYOUT&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_LOADFROMDOM&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_NOBUSYOVERLAY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_NOTIFY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ORIG&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ORIGSTARTDATE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_ORIGTIMEZONE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_PARSEFLAGS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_PARSETAGS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_PTSTLOCATIONMAP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_RECURRENCE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_REMINDERMINUTES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_REPLIES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_RESETCACHED&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SENDNOTIFICATIONMAIL&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SENDREQUEST&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETALARMDATA&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETALARMFROMMESSAGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETALARMXPROPS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETEXTRASFROMMESSAGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETNOTES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETRECURRENCE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETSIMPLESOAPATTRIBUTES&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_SETTIMEFROMMESSAGE&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_STARTTIMEUNIQID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_TOOLTIP&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_TRIMNOTESSUMMARY&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_UNIQID&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_UPDATEPARTICIPANTSTATUS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;      &lt;/tr&gt;            &lt;tr&gt;      &lt;td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse"&gt;_VALIDATTACHMENTS&lt;/td&gt;      &lt;td&gt;      undefined       &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-987559948729642397?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/987559948729642397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=987559948729642397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/987559948729642397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/987559948729642397'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2009/07/zimbra-zmappt-object-properties.html' title='Zimbra ZmAppt Object Properties'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-3998196905918871701</id><published>2009-02-11T20:19:00.000-08:00</published><updated>2009-07-23T13:02:26.540-07:00</updated><title type='text'>Upgrading MySQL 3.23.58 to 5 [WIP]</title><content type='html'>Had to upgrade mass amounts of data from outdated MySQL 3.23 to 5. Couldn't find any good guides so I am attempting to make one. This is currently a work in progress. I will add more as I get farther.&lt;br /&gt;&lt;br /&gt;Backup existing data:&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;mysqldump --all-databases&lt;/span&gt;&lt;b style="font-weight: bold; font-family: courier new;"&gt; &lt;/b&gt;&lt;b style="font-weight: bold; font-family: courier new;"&gt;--quote-names&lt;/b&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt; -u root -p &gt; backup.sql&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I built a virtual Redhat Enterprise Linux server using VirtualBox to test out the upgrade path before I did it on the production server. This process is pretty easy and well documented. Install the RPM for MySQL server and client.&lt;br /&gt;&lt;br /&gt;While trying to re-import the SQL, it failed several times. As I was migrating a little more than 100 databases, I found it handy to have a script that removes all the databases when the import failed. Here's what i did:&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;grep 'CREATE DATABASE' backup.sql &gt; bobby_droptables.sql&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;vi bobby_droptables.sql&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;:% s/CREATE/DROP/g&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;** Remove the line: DROP DATABASE mysql; **&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If the import fails, you can run:&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;cat bobby_droptables.sql | mysql -u root -p&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Found out there is a bug in "--quote-names". It does not quote database names, only tables. This is fixed in version 4 which does me no good. I need to escape all my database names in quotes because Ensim created database names as SITENAME_-_PROJECTNAME.&lt;br /&gt;&lt;br /&gt;Did this instead:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-weight: bold;"&gt;vi backup.sql&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;:% s/CREATE\sDATABASE\s\/\*\!32312\sIF\sNOT\sEXISTS\*\/\s\([a-zA-z0-9\_\-]*\);/CREATE DATABASE `\1\`;/g&lt;/span&gt;&lt;br /&gt;The above RegEx puts back ticks around all database names.&lt;br /&gt;&lt;br /&gt;My backup.sql had create statements such as this:&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;CREATE DATABASE /*!32312 IF NOT EXISTS*/ some_database_name_here;&lt;/span&gt;&lt;br /&gt;If your statement is different you may need to tweak the RegEx above.&lt;br /&gt;&lt;br /&gt;Also, I added:&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;DROP DATABASE mysql;&lt;/span&gt;&lt;br /&gt;... immediately before the CREATE DATABASE mysql; statement. &lt;del&gt;As of now, I don't know if this will work or not. I hope that removing the mysql database momentarily will not cause any catastrophes. I'm hoping that replacing the database will restore all the existing usernames and passwords for the databases.&lt;/del&gt; It worked!&lt;br /&gt;&lt;br /&gt;Now after all this, I was finally able to import the sql:&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;cat backup.sql | mysql -u root -p --verbose&lt;/span&gt;&lt;br /&gt;--verbose is nice because while importing about 300mb of SQL, I kept thinking that the thing was gonna stall out and then would manually run:&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;mysql -u root -p&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;show databases;&lt;/span&gt;&lt;br /&gt;but with --verbose you get to see all the SQL whiz past your screen.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-3998196905918871701?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/3998196905918871701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=3998196905918871701' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/3998196905918871701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/3998196905918871701'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2009/02/upgrading-mysql-32358-to-5-wip.html' title='Upgrading MySQL 3.23.58 to 5 [WIP]'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-6693079892584618688</id><published>2008-12-23T12:22:00.000-08:00</published><updated>2008-12-23T12:24:26.051-08:00</updated><title type='text'>SQL Developer + tnsnames.ora for UWM</title><content type='html'>After completing the steps below for your platform, TNS  aliases will be available in Oracle SQL Developer in the "New/Select  Database Connection" dialog by selecting "TNS" for the "Connection Type"  combo box. These steps are only necessary if you can't or don't want to install the Oracle Client for your platform.&lt;br /&gt;&lt;br /&gt;For Linux machines:&lt;br /&gt;  -get tnsnames.ora from:  &lt;a class="moz-txt-link-freetext" href="https://mumbles.imt.uwm.edu/dbdoc/tnsnames-noworld.php"&gt;https://mumbles.imt.uwm.edu/dbdoc/tnsnames-noworld.php&lt;/a&gt;&lt;br /&gt;  -copy the file to: /etc&lt;br /&gt;&lt;br /&gt;For Windows XP machines:&lt;br /&gt;  -get tnsnames.ora from:  &lt;a class="moz-txt-link-freetext" href="https://mumbles.imt.uwm.edu/dbdoc/tnsnames-world.php"&gt;https://mumbles.imt.uwm.edu/dbdoc/tnsnames-world.php&lt;/a&gt;&lt;br /&gt;  -copy to c:\tnsnames\ (or some other directory where it will never be  moved)&lt;br /&gt;  -right-click "My Computer" and select "Properties"&lt;br /&gt;  -click "Advanced" tab&lt;br /&gt;  -click "Environment Variables"&lt;br /&gt;  -under "System variables" click "New"&lt;br /&gt;  -"Variable name:" TNS_ADMIN  (must be caps)&lt;br /&gt;  -"Variable value:" c:\tnsnames\  (or whatever directory you used above)&lt;br /&gt;  -Click "OK"&lt;br /&gt;  -Click "OK"&lt;br /&gt;  -Click "OK"&lt;br /&gt;&lt;br /&gt;Ref:&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://wiki.oracle.com/page/SQL+Developer+FAQ?t=anon"&gt;http://wiki.oracle.com/page/SQL+Developer+FAQ?t=anon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;    * How does SQL Developer find my TNSNames file?&lt;br /&gt;          o SQL Developer checks the following:&lt;br /&gt;            1) $HOME/tnsnames.ora&lt;br /&gt;            2) $TNS_ADMIN/tnsnames.ora&lt;br /&gt;            3) /etc/tnsnames.ora ( non-windows )&lt;br /&gt;            4) $ORACLE_HOME/network/admin/tnsnames.ora&lt;br /&gt;            5) Registry Key&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-6693079892584618688?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/6693079892584618688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=6693079892584618688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6693079892584618688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6693079892584618688'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/12/sql-developer-tnsnamesora-for-uwm.html' title='SQL Developer + tnsnames.ora for UWM'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-6759984950141651074</id><published>2008-11-02T23:05:00.001-08:00</published><updated>2008-11-02T23:09:02.900-08:00</updated><title type='text'>Wicked Juju</title><content type='html'>Spent a few hours migrating from an old media server to a new one. For the most part everything went great except the MediaMVP running MVPMC would not load the dongle.bin.config. I assumed my TFTP server was mis-configured, the mvpmc commandline switches were wrong, etc.&lt;br /&gt;&lt;br /&gt;No dice!&lt;br /&gt;&lt;br /&gt;Found this wicked juju from: http://mlblog.osdir.com/multimedia.mvpmc.user/2006-05/msg00020.shtml&lt;br /&gt;Reposting it here for posterity:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;Guys,&lt;br /&gt;&lt;br /&gt;See my post in the user group. I've posted an incantation that allows the MVP to boot. The problem with this H1 appears identical to the same problem I have with my H2. I'm posting an update later on more findings I've had with long vs short power cycles and using MVP relay. Here's the reader's digest procedure to get a successful boot (from an H2):&lt;br /&gt;&lt;br /&gt;After trying several experiments, the following sequence got me back to reliable time and time again booting (until you boot from flash again):&lt;br /&gt;&lt;br /&gt;  * Unplug the MVP for (I got it to work with a 90 second to 120 second cycle).&lt;br /&gt;  * After the 120 seconds have elapsed, unplug the ethernet cable (I think leaving it plugged in may help bleed off any capacitors)&lt;br /&gt;  * Apply the power again and wait for the MVP to get to the point where it complains about not finding a server and asks you to press OK to re-scan. You'll also notice that your "favorite server" has disappeared from the list.&lt;br /&gt;  * Power it down&lt;br /&gt;  * Plug in the ethernet cable&lt;br /&gt;  * Power it up (no waiting)&lt;br /&gt;  * You should get past the hanging last square&lt;br /&gt;  * When you get to the screen that states to press OK within 3 seconds to configure press OK&lt;br /&gt;  * You should notice that the MVP is re-scanning and your available server should appear on the list.&lt;br /&gt;  * Press OK to save the configuration (this takes a while and I suspect clears out any "bad" data that may be causing the problem)&lt;br /&gt;  * The MVP restarts&lt;br /&gt;  * You get to the screen with the 10 squares and dongle.bin.ver is requested and served at about the 3rd square. Then dongle.bin gets requested and served and now the text LOADING APPLICATION appears above the 10 squares and they all fill completely and stop once all full (NOTE: only one cycle and the LOADING APPLICATION seem to indicate that its working)&lt;br /&gt;  * There is a delay as the mvpmc application loads and screen flashes as it boots up perfectly.&lt;br /&gt;&lt;br /&gt;Please let me know if this works for you as well...&lt;br /&gt;&lt;br /&gt;Cheers...&lt;br /&gt;&lt;br /&gt;Sergio&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;It works ... as goofy as it seems ... it works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-6759984950141651074?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/6759984950141651074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=6759984950141651074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6759984950141651074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6759984950141651074'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/11/wicked-juju.html' title='Wicked Juju'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-4513720523251485336</id><published>2008-10-31T09:24:00.000-07:00</published><updated>2008-10-31T09:34:30.987-07:00</updated><title type='text'>CAS + ColdFusion</title><content type='html'>The example available from JA-SIG is some of the ugliest code I've seen lately. This is what I came up with (based on their example code):&lt;br /&gt;Application.cfm&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;cfapplication name="my_awesome_app_name_here"&lt;br /&gt;clientmanagement="yes" sessionmanagement="yes"&lt;br /&gt;setclientcookies="yes" setdomaincookies="no"&lt;br /&gt;loginstorage="session"&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;index.cfm&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;!--- globals ---&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="url.ticket" default=""&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="username" default=""&amp;gt;&lt;br /&gt;&amp;lt;cfparam name="url.action" default=""&amp;gt;&lt;br /&gt;&amp;lt;cfscript&amp;gt;&lt;br /&gt; cas_path = "https://cas-server.example.edu/cas/";&lt;br /&gt; app_path = "https://coldfusion-server.example.edu/path/to/this/app/";&lt;br /&gt; cas_url = cas_path &amp;amp; "login?" &amp;amp; "service=" &amp;amp; app_path;&lt;br /&gt;&amp;lt;/cfscript&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--- session init ---&amp;gt;&lt;br /&gt;&amp;lt;cflock timeout="10" scope="session" type="readonly"&amp;gt;&lt;br /&gt; &amp;lt;cfparam name="session.username" default=""&amp;gt;&lt;br /&gt; &amp;lt;cfparam name="session.authorized" default="0"&amp;gt;&lt;br /&gt;&amp;lt;/cflock&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!--- logout action ---&amp;gt;&lt;br /&gt;&amp;lt;cfif url.action eq "logout"&amp;gt;&lt;br /&gt; &amp;lt;!--- session reset ---&amp;gt;&lt;br /&gt; &amp;lt;cflock scope="session" timeout="30" type="exclusive"&amp;gt;&lt;br /&gt;     &amp;lt;cfset session.username = ""&amp;gt;&lt;br /&gt;     &amp;lt;cfset session.authorized = "0"&amp;gt;&lt;br /&gt; &amp;lt;/cflock&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfset cas_url = cas_path &amp;amp; "logout"&amp;gt;&lt;br /&gt; &amp;lt;cflocation url="#cas_url#" addtoken="false"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;cfelse&amp;gt;&lt;br /&gt; &amp;lt;!--- auth check ---&amp;gt;&lt;br /&gt; &amp;lt;cfif not len(trim(session.username))&amp;gt;&lt;br /&gt;     &amp;lt;cfif not len(trim(ticket))&amp;gt;&lt;br /&gt;        &amp;lt;cflocation url="#cas_url#" addtoken="no"&amp;gt;&lt;br /&gt;     &amp;lt;cfelse&amp;gt;&lt;br /&gt;         &amp;lt;cfset cas_url = #cas_path# &amp;amp; "serviceValidate?ticket=" &amp;amp; url.ticket &amp;amp; "&amp;amp;" &amp;amp; "service=" &amp;amp; app_path &amp;amp; "/"&amp;gt;&lt;br /&gt;         &amp;lt;cfhttp url="#cas_url#" method="get"/&amp;gt;&lt;br /&gt;         &amp;lt;cfset objXML = xmlParse(cfhttp.filecontent)&amp;gt;&lt;br /&gt;         &amp;lt;cfset SearchResults = XmlSearch(objXML,"cas:serviceResponse/cas:authenticationSuccess/cas:user")&amp;gt;&lt;br /&gt;      &lt;br /&gt;         &amp;lt;cfif arraylen(SearchResults)&amp;gt;&lt;br /&gt;             Raw XML:&amp;lt;cfdump var="#cfhttp.filecontent#"&amp;gt;&lt;br /&gt;             &amp;lt;cfdump var="#objXML#" label="CAS Results"&amp;gt;&lt;br /&gt;             &amp;lt;cfdump var="#SearchResults#" label="Parsed CAS Results"&amp;gt;&lt;br /&gt;             &amp;lt;cfset username = SearchResults[1].XmlText&amp;gt;&lt;br /&gt;             &amp;lt;cflock scope="session" timeout="30" type="exclusive"&amp;gt;&lt;br /&gt;                 &amp;lt;cfset session.username = username&amp;gt;&lt;br /&gt;                 &amp;lt;cfset session.authorized = "1"&amp;gt;&lt;br /&gt;             &amp;lt;/cflock&amp;gt;&lt;br /&gt;         &amp;lt;cfelse&amp;gt;&lt;br /&gt;                &amp;lt;cflocation url="#cas_url#" addtoken="no"&amp;gt;&lt;br /&gt;         &amp;lt;/cfif&amp;gt;&lt;br /&gt;     &amp;lt;/cfif&amp;gt;&lt;br /&gt; &amp;lt;/cfif&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;cfif structKeyExists(url, "accessdenied")&amp;gt;&lt;br /&gt;     Access Error&lt;br /&gt; &amp;lt;cfelse&amp;gt;&lt;br /&gt;     Authenticated.&amp;lt;br/&amp;gt;&lt;br /&gt;     &amp;lt;cfdump var="#session#" label="ColdFusion Session Object"&amp;gt;&lt;br /&gt;     &amp;lt;a href="?action=logout"&amp;gt;Logout&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt; &amp;lt;/cfif&amp;gt;&lt;br /&gt;&amp;lt;/cfif&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Honestly, it's a pretty simple process:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Check for a ColdFusion session&lt;/li&gt;&lt;li&gt;If one doesn't exist, redirect to CAS and provide a call back URL&lt;/li&gt;&lt;li&gt;When CAS redirects back to your application you grab the ticket and verify it server to server via cfhttp.&lt;/li&gt;&lt;li&gt;If the ticket checks out, you create a ColdFusion session and use it within your application.&lt;/li&gt;&lt;/ul&gt;The point of this example is to keep it simple. The code is commented to clue you into where the different components would plug into the framework of your choice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-4513720523251485336?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/4513720523251485336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=4513720523251485336' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/4513720523251485336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/4513720523251485336'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/10/cas-coldfusion.html' title='CAS + ColdFusion'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-2137612467232750901</id><published>2008-10-20T07:08:00.000-07:00</published><updated>2008-10-20T07:11:52.917-07:00</updated><title type='text'>Zimbra URLs</title><content type='html'>Zimbra has a bunch of built in functionality for rendering HTML versions of calendars as well as feeds such as RSS. This keeps coming up with Zimbra users inside and outside of our organization. I'm posting it here for future reference.&lt;br /&gt;&lt;br /&gt;For an HTML representation of a public calendar we use a URL like this:&lt;br /&gt;&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.html?view=week"&gt;https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.html?view=week&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The view=week is optional; I just wanted to show an example. The view  defaults to a month view and can be changed by the user. If the calendar  is not set to public, you'll get a permission error. If you want to show  a private calendar, you can use something like:&lt;br /&gt;&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="https://pantherlink.uwm.edu/home/bmaas/?fmt=freebusy&amp;amp;view=week"&gt;https://pantherlink.uwm.edu/home/bmaas/?fmt=freebusy&amp;amp;view=week&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This will show the free and busy information but, no meeting details.  For your purposes, you will need to change "pantherlink.uwm.edu" to your  Zimbra server and change "qkmadson" or "bmaas" to one of your usernames.  You may want to take a look at this blog entry:&lt;br /&gt;&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="http://www.zimbrablog.com/blog/archives/2006/01/rest-update.html"&gt;http://www.zimbrablog.com/blog/archives/2006/01/rest-update.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The show examples of how to use various feed options in Zimbra. For  example, if you wanted to use RSS:&lt;br /&gt;&lt;br /&gt;&lt;a class="moz-txt-link-freetext" href="https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.rss"&gt;https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.rss&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-2137612467232750901?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/2137612467232750901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=2137612467232750901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/2137612467232750901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/2137612467232750901'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/10/zimbra-urls.html' title='Zimbra URLs'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-6659591716106517653</id><published>2008-10-13T09:01:00.000-07:00</published><updated>2008-10-13T09:15:00.054-07:00</updated><title type='text'>RapidSVN currently broken in Ubuntu Repository</title><content type='html'>The current package for RapidSVN segfaults constantly with the current version (as of today's date) in the Hardy Heron repos. To fix this:&lt;ul&gt;&lt;li&gt;Grab the Intrepid Ibex package by editing: /etc/apt/sources.list&lt;/li&gt;&lt;li&gt;Do a search and replace: "hardy" for "intrepid".&lt;/li&gt;&lt;li&gt;Update your packages and reinstall RapidSVN.&lt;/li&gt;&lt;/ul&gt;You can do this from the GUI side with gedit and synaptic. From the command line:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo -s&lt;br /&gt;vim /etc/apt/sources.list&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;in vi:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;:%s/hardy/intrepid/gi&lt;br /&gt;:wq!&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;command line:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;apt-get update&lt;br /&gt;apt-get install rapidsvn&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;At this point, you should switch back to the hardy repos by editing sources.list and re-replacing intrepid for hardy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-6659591716106517653?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/6659591716106517653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=6659591716106517653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6659591716106517653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6659591716106517653'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/10/rapidsvn-currently-broken-in-ubuntu.html' title='RapidSVN currently broken in Ubuntu Repository'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-6941566692881014945</id><published>2008-10-06T18:12:00.000-07:00</published><updated>2008-10-06T19:09:12.889-07:00</updated><title type='text'>Network Debugging w/ MVPMC</title><content type='html'>While running the MVPMC software on MVC devices, sometimes I will receive an error that the streaming server cannot be found.&lt;br /&gt;&lt;br /&gt;Check /var/log/messages for:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt; dhcpd: DHCPACK on 192.168.0.51 to 00:0d:fe:39:21:06 via eth0&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;if that's the last message, make sure you run:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;/usr/sbin/in.tftpd -l -a :16869 -s /tftpboot -v&lt;br /&gt;/usr/bin/mvprelay 16881 5906 6337 192.168.0.1 &amp;amp;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-6941566692881014945?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/6941566692881014945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=6941566692881014945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6941566692881014945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6941566692881014945'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/10/network-debugging-w-mvpmc.html' title='Network Debugging w/ MVPMC'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-1745857171517574692</id><published>2008-08-04T11:17:00.000-07:00</published><updated>2008-08-04T11:48:45.954-07:00</updated><title type='text'>Extending the Zimbra Canvas</title><content type='html'>The Zimbra Canvas is pretty cool but, somewhat limited from the Zimlet XML definition file. For example, you cannot modify the buttons of the container if it's called from the XML. You can get around it by using the Zimbra JavaScript implementation.&lt;br /&gt;&lt;br /&gt;It's pretty easy to get a canvas going from the JS side but, I was having issues getting the iframe style &amp;lt;actionUrl&amp;gt; functionality from the XML side. I had to reverse engineer this based on the source of ZmZimletBase();.&lt;br /&gt;&lt;br /&gt;Here is the XML:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;zimlet name="edu_myschool_myzimlet" version="1.0" description="Some Zimlet"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;include&amp;gt;http://www.myschool.edu/LOCATION/TO/ZIMLET/zimlet.js&amp;lt;/include&amp;gt;&lt;br /&gt;&amp;lt;includeCSS&amp;gt;http://www.myschool.edu/LOCATION/TO/ZIMLET/zimlet.css&amp;lt;/includeCSS&amp;gt;&lt;br /&gt;&amp;lt;handlerObject&amp;gt;Edu_myschool_myzimlet&amp;lt;/handlerObject&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;zimletPanelItem label="Some Zimlet" icon="My-panelIcon"&amp;gt;&lt;br /&gt;   &amp;lt;toolTipText&amp;gt;This is a super awesome zimlet that does something.&amp;lt;/toolTipText&amp;gt;&lt;br /&gt;   &amp;lt;contextMenu&amp;gt;&lt;br /&gt;       &amp;lt;menuItem label="Do something" id="doSomething" icon="My-panelIcon"&amp;gt;&lt;br /&gt;           &amp;lt;canvas type="dialog" width="700" height="500" /&amp;gt;&lt;br /&gt;           &amp;lt;actionUrl target="http://www.myschool.edu/LOCATION/TO/MASHUP/AWESOMENESS/" /&amp;gt;&lt;br /&gt;       &amp;lt;/menuItem&amp;gt;&lt;br /&gt;   &amp;lt;/contextMenu&amp;gt;&lt;br /&gt; &amp;lt;/zimletPanelItem&amp;gt;&lt;br /&gt;&amp;lt;/zimlet&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;This sets a right-click menu using the &amp;lt;zimletPanelItem&amp;gt; directive. More importantly, (for us, right now) is that it calls out to our JavaScript. Here is what the JavaScript should look like:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;function Edu_myschool_myzimlet() {&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Edu_myschool_myzimlet.prototype = new ZmZimletBase();&lt;br /&gt;Edu_myschool_myzimlet.prototype.constructor = Edu_myschool_myzimlet;&lt;br /&gt;&lt;br /&gt;Edu_myschool_myzimlet.prototype.init =&lt;br /&gt;function() {&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Called by the Zimbra framework when the panel item was double clicked&lt;br /&gt;Edu_myschool_myzimlet.prototype.doubleClicked = function() {&lt;br /&gt; this.singleClicked();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Called by the Zimbra framework when the panel item was clicked&lt;br /&gt;Edu_myschool_myzimlet.prototype.singleClicked = function() {&lt;br /&gt;&lt;br /&gt; var view = new DwtComposite(this.getShell());&lt;br /&gt; view.setSize("500px", "500px");&lt;br /&gt; var el = view.getHtmlElement();&lt;br /&gt; var myBox = document.createElement("div");&lt;br /&gt; el.appendChild(myBox);&lt;br /&gt;&lt;br /&gt; var html = new Array();&lt;br /&gt; var i = 0;&lt;br /&gt; html[i++] = "First line of HTML &amp;lt;br/&amp;gt;";&lt;br /&gt; html[i++] = "More lines of HTML";&lt;br /&gt;&lt;br /&gt; // package up html and display it&lt;br /&gt; myBox.innerHTML = html.join('');&lt;br /&gt; this._dialog = this._createDialog({title:"My Dialog Title", view:view});&lt;br /&gt; this._dialog.setButtonListener(DwtDialog.OK_BUTTON, new AjxListener(this, this.myHandler));&lt;br /&gt; this._dialog.setButtonTitle(DwtDialog.OK_BUTTON, "Go go gadget Zimlet!");&lt;br /&gt; this._dialog.popup();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Edu_myschool_myzimlet.prototype.myHandler =&lt;br /&gt;function(ev) {&lt;br /&gt; //do come more stuff: web services, api calls, etc&lt;br /&gt; this._dialog.popdown();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;This will show some HTML within the Zimbra Canvas. You can create a form and allow it to call web services, the Zimbra API, etc based on what the user did. This is pretty handy. Also, if you look at the code, you can add handler functions to the buttons, change the button text, etc.&lt;br /&gt;&lt;br /&gt;In some cases, you may just want to call out to some other code: PHP, JSP, ASP, (or in my case) ColdFusion, etc. To do an iframe the exact same way that &amp;lt;actionUrl&amp;gt; does, change the click action functions:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;Edu_myschool_myzimlet.prototype.singleClicked =&lt;br /&gt;function() {&lt;br /&gt;   var view = new DwtComposite(this.getShell());&lt;br /&gt;   view.setSize("700px", "500px");&lt;br /&gt;   var el = document.createElement("iframe");&lt;br /&gt;   el.src = "http://www.myschool.edu/PATH/TO/MY/CODE/mashup.cfm";&lt;br /&gt;   var sz = view.getSize();&lt;br /&gt;   if (!AjxEnv.isIE) {&lt;br /&gt;       // substract default frame borders&lt;br /&gt;       sz.x -= 4;&lt;br /&gt;       sz.y -= 4;&lt;br /&gt;   }&lt;br /&gt;   el.style.width = sz.x + "px";&lt;br /&gt;   el.style.height = sz.y + "px";&lt;br /&gt;   view.getHtmlElement().appendChild(el);&lt;br /&gt;&lt;br /&gt;   //TITLE OF THE DIALOG BOX&lt;br /&gt;   var dialog_args = {&lt;br /&gt;       title : "Example",&lt;br /&gt;       view  : view&lt;br /&gt;   };&lt;br /&gt;   var dlg = this._createDialog(dialog_args);&lt;br /&gt;   dlg.popup();&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;From here you could add code to modify the buttons, pass a query string from JavaScript via the URL, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-1745857171517574692?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/1745857171517574692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=1745857171517574692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/1745857171517574692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/1745857171517574692'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/08/extending-zimbra-canvas.html' title='Extending the Zimbra Canvas'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-5962590866243060966</id><published>2008-07-30T19:27:00.000-07:00</published><updated>2008-12-10T03:46:13.914-08:00</updated><title type='text'>Dual Network Booting (Mythbuntu, MediaMVP, and random crappy laptops)</title><content type='html'>&lt;span style="font-weight: bold;font-size:130%;" &gt;Background&lt;/span&gt;&lt;br /&gt;I built a &lt;a href="http://mythbuntu.org/"&gt;Mythbuntu&lt;/a&gt; machine out of a Dell PowerEdge 1600SC dual Xeon box with a Hauppauge PVR-500 dual TV tuner. Because I'm cheap *and* wanted to run a gigabit network, this machine also serves as the router for a gigabit switch (which was 1/3 the cost of a gigabit router).&lt;br /&gt;&lt;br /&gt;I ended up getting 2 &lt;a href="http://www.hauppauge.com/site/products/data_mediamvp.html"&gt;Hauppauge MediaMVPs&lt;/a&gt;. It's basically a small (1.5 x 6.5 x 5.5-inches), cheap 300MHz PowerPC that boots off the network and plays music, video, and pictures off your network. A group of developers released their own software available at: &lt;a href="http://mvpmc.org/"&gt;http://mvpmc.org&lt;/a&gt; that runs a small linux distro and can connect to: &lt;span&gt;MythTV, ReplayTV, Hauppauge, VLC, SqueezeCenter (aka SlimServer) with various other bells and/or whistles.&lt;br /&gt;&lt;br /&gt;I also have a few busted up laptops with no hard drives. I wanted to be able to netboot the MediaMVPs and use Mythbuntu's diskless server for the laptops. (I let the kids use one for flash based games and I use one in our home theater.)&lt;br /&gt;&lt;br /&gt;There wasn't great documentation on how to do this so, hopefully this helps people out somewhat in the future. There are some decent guides to get MVPMC working with Mythbuntu but, they use the &lt;a href="http://freshmeat.net/projects/atftp/"&gt;aTFTP&lt;/a&gt; server which conflicts with Mythbuntu's diskless server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;HOW-TO:&lt;br /&gt;&lt;span style="font-size:100%;"&gt;DHCP:&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;On the Mythbuntu media server, go to:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Applications &gt;&gt; System &gt;&gt; Mythbuntu Control Centre &gt;&gt; System Roles.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Check "Diskless Server" and "Add DHCP server"&lt;/li&gt;&lt;li&gt;Click "Apply"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ffNeNtWGC6g/SJEscjl4raI/AAAAAAAAAAM/1PX6qpAbZOw/s1600-h/01-roles.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_ffNeNtWGC6g/SJEscjl4raI/AAAAAAAAAAM/1PX6qpAbZOw/s400/01-roles.jpg" alt="" id="BLOGGER_PHOTO_ID_5229009511455960482" border="0" /&gt;&lt;/a&gt;A progress bar will whir away and eventually the "&lt;span&gt;Mythbuntu Control Centre" dialog will come back. The "Diskless Server" option on the left side menu should now be available. When you go to it, there is a drop-down menu for "CPU architecture of your clients". Select "i386". Click "Build Image" and "Apply". This process can take a long time and sometimes fails.&lt;br /&gt;&lt;br /&gt;To check, go to: Applications &gt;&gt; Accessories &gt;&gt; Terminal.&lt;br /&gt;&lt;br /&gt;At the prompt type:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;ls /opt/ltsp&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;If you see:&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;i386 images&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;... you should be all set. If the "images" directory is missing, the build failed. If the build failed, at the command prompt type:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo rm -rf i386&lt;br /&gt;sudo ltsp-build-client --mythbuntu --mythbuntu-copy-user-credentials&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;If the first command fails, you can try going back to the Myth Control Centre. Diskless Server &gt;&gt; CPU architecture of your clients: &gt;&gt; i386 &gt;&gt; Delete Image &gt;&gt; Apply. &lt;span style="font-weight: bold;"&gt;DO NOT&lt;/span&gt; run the second command from a root shell (only run it through sudo) or it will take a long time and eventually fail.&lt;br /&gt;&lt;br /&gt;Moving along, commandline:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo -s&lt;br /&gt;vim /etc/dhcp3/dhcpd.conf&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;[or if you don't like the vi editor (wha?) use something else]&lt;br /&gt;make the file look like this:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;authoritative;&lt;br /&gt;&lt;br /&gt;log-facility local7;&lt;br /&gt;&lt;br /&gt;option domain-name              "madsonclan.net";&lt;br /&gt;option subnet-mask              255.255.255.0;&lt;br /&gt;option domain-name-servers 65.24.7.10, 65.24.7.11;&lt;br /&gt;&lt;br /&gt;allow bootp;&lt;br /&gt;allow booting;&lt;br /&gt;&lt;br /&gt;#option ip-forwarding    false;  # No IP forwarding&lt;br /&gt;#option mask-supplier    false;  # Don't respond to ICMP Mask req&lt;br /&gt;&lt;br /&gt;subnet 192.168.0.0 netmask 255.255.255.0 {&lt;br /&gt;option routers        192.168.0.1;&lt;br /&gt;range 192.168.0.100 192.168.0.250;&lt;br /&gt;option broadcast-address 192.168.0.255;&lt;br /&gt;option subnet-mask 255.255.255.0;&lt;br /&gt;option root-path "/opt/ltsp/i386";&lt;br /&gt;if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {&lt;br /&gt;filename "/ltsp/i386/pxelinux.0";&lt;br /&gt;} else {&lt;br /&gt;filename "/ltsp/i386/nbi.img";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;group {&lt;br /&gt;next-server 192.168.0.1;          # IP address of your TFTP server&lt;br /&gt;&lt;br /&gt;host mvp { # NOTE: Change the hardware ethernet to the MAC address of your actual MVP&lt;br /&gt;hardware ethernet 00:0d:fe:39:21:04;&lt;br /&gt;fixed-address 192.168.0.50;&lt;br /&gt;filename "dongle.bin.mvpmc";&lt;br /&gt;option root-path "/home/mvp,rsize=4096,wsize=4096,nolock";&lt;br /&gt;}&lt;br /&gt;host mvp2 {&lt;br /&gt;hardware ethernet 00:0d:fe:39:21:06;&lt;br /&gt;fixed-address 192.168.0.51;&lt;br /&gt;filename "dongle.bin.mvpmc";&lt;br /&gt;option root-path "/home/mvp,rsize=4096,wsize=4096,nolock";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;[substitutions]&lt;br /&gt;madsonclan.net = yourdomain.com or make something up&lt;br /&gt;65.24.7.10, 65.24.7.11 =  your ISP dns servers&lt;br /&gt;192.168.0.XXX = your internal IP addresses&lt;br /&gt;00:0d:fe:39:21:04/06 = the MAC address of you MediaMVP (sticker on the bottom)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MVPMC:&lt;/span&gt;&lt;br /&gt;Go get the latest dongle.bin from: &lt;a href="http://www.mvpmc.org/index.php?pg=downloads"&gt;mvpmc.org&lt;/a&gt;&lt;br /&gt;and then:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;mkdir /tftpboot&lt;br /&gt;cp [DOWNLOADED_FILE] /tftpboot/dongle.bin&lt;br /&gt;dd if=/tftpboot/dongle.bin of=/tftpboot/dongle.bin.ver bs=1 count=40 skip=52&lt;br /&gt;vim /tftpboot/dongle.bin.config&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;file should like:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;# set up host environment variable&lt;br /&gt;HNAME='mvp_uno'&lt;br /&gt;export HNAME&lt;br /&gt;&lt;br /&gt;# time stuff&lt;br /&gt;TZ='US, Central: CST+6CDT,M3.2.0/2,M11.1.0/2'&lt;br /&gt;export TZ&lt;br /&gt;echo "TZ='US, Central: CST+6CDT,M3.2.0/2,M11.1.0/2'" &gt;; /etc/shell.config&lt;br /&gt;echo "export TZ" &amp;gt;&amp;gt; /etc/shell.config&lt;br /&gt;NTP=time-a.nist.gov&lt;br /&gt;&lt;br /&gt;# create an /etc/hosts file&lt;br /&gt;&lt;/code&gt;&lt;code&gt;echo "&lt;/code&gt;&lt;code&gt;127.0.0.1 localhost localhost&lt;/code&gt;&lt;code&gt;" &gt;&gt; /etc/hosts&lt;br /&gt;&lt;/code&gt;&lt;code&gt;echo "&lt;/code&gt;&lt;code&gt;192.168.0.1 media-server media-server&lt;/code&gt;&lt;code&gt;" &gt;&gt; /etc/hosts&lt;/code&gt;&lt;br /&gt;&lt;code&gt;echo "192.168.0.1 eteo eteo" &gt;&gt; /etc/hosts #important! or mythtv won't play. replace eteo w/ myth server hostname&lt;br /&gt;&lt;br /&gt;# load settings&lt;br /&gt;. /etc/udhcpc.config&lt;br /&gt;SETTINGSDIR=/tmp/settings&lt;br /&gt;mkdir -p ${SETTINGSDIR}&lt;br /&gt;SETTINGS=${SETTINGSDIR}/settings&lt;br /&gt;RSETTINGS=settings.${HNAME:-$IP}&lt;br /&gt;LASTSAVED=${SETTINGSDIR}/.lastsaved&lt;br /&gt;touch $LASTSAVED&lt;br /&gt;tftp -g -r $RSETTINGS -l $SETTINGS $SERVER;&lt;br /&gt;&lt;br /&gt;# mounts (change for your network)&lt;br /&gt;# i use nfs for linux and cifs for xp&lt;br /&gt;mkdir /media&lt;br /&gt;mkdir /media/sde1&lt;br /&gt;mkdir /media/sda1&lt;br /&gt;mkdir /media/sdb1&lt;br /&gt;mkdir /media/quinn&lt;br /&gt;mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/sde1 /media/sde1&lt;br /&gt;mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/sda1 /media/sda1&lt;br /&gt;mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/sdb1 /media/sdb1&lt;br /&gt;#mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/quinn /media/quinn&lt;br /&gt;mount.cifs //192.168.0.23/quinn /media/quinn/ -o user=someuser,pass=somepass,rsize=34000&lt;br /&gt;&lt;br /&gt;# save settings&lt;br /&gt;(&lt;br /&gt;while true; do&lt;br /&gt;if [ $SETTINGS -nt $LASTSAVED ] ; then&lt;br /&gt;  tftp -p -l $SETTINGS -r $RSETTINGS $SERVER;&lt;br /&gt;  touch $LASTSAVED;&lt;br /&gt;fi;&lt;br /&gt;sleep 300;&lt;br /&gt;done&lt;br /&gt;)&amp;amp;&lt;br /&gt;&lt;br /&gt;# mvpmc settings&lt;br /&gt;&lt;br /&gt;#known working&lt;br /&gt;#mvpmc -f /etc/helvB14.pcf -o composite -S 0 -D 192.168.0.1:0 -R 192.168.0.1 -s 192.168.0.1 --vlc 192.168.0.1 --vlc-vopts svcd -y 192.168.0.1 -T mythconverg -u mythtv -p 8DelSgNw -b /eteo/livetv --weather-location USWI0164 &amp;amp;&lt;br /&gt;&lt;br /&gt;#real-world&lt;br /&gt;mvpmc -f /etc/helvB14.pcf -o svideo -a 16:9 -S 0 -R 192.168.0.1 -s 192.168.0.1 -y 192.168.0.1 -T mythconverg -u mythtv -p myMythTvPassowrd-b /eteo/livetv --weather-location USWI0164 --vlc 192.168.0.1 --vlc-vopts svcd &amp;amp;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Change IPs, hostnames, drive mappings, weather code, etc for your needs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TFTP/NBD:&lt;/span&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;vim /etc/inetd.conf&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;tftp  dgram  udp  wait  root  /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot&lt;br /&gt;9571           stream  tcp     nowait  nobody /usr/sbin/tcpd /usr/sbin/ldminfod&lt;br /&gt;9572                    stream  tcp     nowait  nobody /usr/sbin/tcpd /usr/sbin/nbdswapd&lt;br /&gt;2000               stream  tcp            nowait  nobody /usr/sbin/tcpd /usr/sbin/nbdrootd /opt/ltsp/images/i386.img&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;vim /etc/nbd-server/config&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;[generic]&lt;br /&gt;# If you want to run everything as root rather than the nbd user, you&lt;br /&gt;# may either say "root" in the two following lines, or remove them&lt;br /&gt;# altogether. Do not remove the [generic] section, however.&lt;br /&gt;   user = nbd&lt;br /&gt;   group = nbd&lt;br /&gt;&lt;br /&gt;# What follows are export definitions. You may create as much of them as&lt;br /&gt;# you want, but the section header has to be unique.&lt;br /&gt;[export]&lt;br /&gt;   exportname = /opt/ltsp/images/i386.img&lt;br /&gt;   port = 2000&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;If you are running a firewall, poke holes in it for tftp(:69), nbd(:2000), mythtv, etc. I recommend you make all ports open for the internal network.&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;/etc/init.d/dhcdbd restart&lt;br /&gt;/etc/init.d/dhcp3-server restart&lt;br /&gt;/etc/init.d/nbd-server restart&lt;br /&gt;/etc/init.d/xinetd restart&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;If you are running a firewall, you need to disable when the MediaMVP first boots. I can't explain why but, I'm pretty sure it's an issue at the hardware level. When you power off the system via the remote and turn it back on, you don't need to mess with the firewall. However, if you lose power and you see the big blue MediaMVP initial boot screen, you need to disable the firewall until you see "Application Loading". If you don't the MediaMVP will not be able to get an IP address or find the Mythbuntu server.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Oh yea:&lt;br /&gt;&lt;/span&gt;I may be missing a few things in this HOW-TO. If you are running the H3 wireless or have some other goofy setups, you may want to refer to this HOW-TO: &lt;a href="https://help.ubuntu.com/community/MythTV/MediaMVP_Frontend"&gt;https://help.ubuntu.com/community/MythTV/MediaMVP_Frontend&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Otherwise, you should be pretty much good to go at this point. Any laptop or other i386 arch machine you plug-in and netboot off of should get Mythbuntu via squashfs read-only. The cool thing is that the server assigns a AUFS share via NFS based on the MAC address of the machine. If you save anything to the desktop, make settings changes, install software, etc and reboot, those changes will remain intact.  If any methyl-ethel-bad-stuff happens, take a look in: /var/cache/mythbuntu-diskless/overlay and nuke the directory that corresponds to MAC address and it will rebuild itself on the next boot.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Still have problems:&lt;/span&gt;&lt;br /&gt;This forum thread is pretty invaluable and if all else fails, ask them: &lt;a href="http://ubuntuforums.org/showthread.php?t=711079"&gt;http://ubuntuforums.org/showthread.php?t=711079&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-5962590866243060966?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/5962590866243060966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=5962590866243060966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/5962590866243060966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/5962590866243060966'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/07/dual-network-booting-mythbuntu-mediamvp.html' title='Dual Network Booting (Mythbuntu, MediaMVP, and random crappy laptops)'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_ffNeNtWGC6g/SJEscjl4raI/AAAAAAAAAAM/1PX6qpAbZOw/s72-c/01-roles.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-8224562500710221305</id><published>2008-06-19T09:36:00.000-07:00</published><updated>2008-06-19T09:41:10.802-07:00</updated><title type='text'>HOW-TO: HTC 6800/Mogul/Titan as USB Modem in Ubuntu</title><content type='html'>&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo -s&lt;br /&gt;apt-get install subversion&lt;br /&gt;svn co http://synce.svn.sourceforge.net/svnroo … rndis-lite&lt;br /&gt;cd usb-rndis-lite/&lt;br /&gt;make&lt;br /&gt;./clean.sh&lt;br /&gt;make install&lt;br /&gt;vim /etc/network/interfaces&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;add:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;auto rndis0&lt;br /&gt;iface rndis0 inet dhcp&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;reboot&lt;br /&gt;&lt;br /&gt;Plug in the phone via USB. On the phone go to programs/applications and select "Internet Sharing"&lt;br /&gt;&lt;br /&gt;PC Connection:USB&lt;br /&gt;Network Connection: Phone as Modem&lt;br /&gt;&lt;br /&gt;Click "Connect"&lt;br /&gt;&lt;br /&gt;Fire up a web browser, should be all set.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-8224562500710221305?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/8224562500710221305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=8224562500710221305' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/8224562500710221305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/8224562500710221305'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/06/how-to-htc-6800mogultitan-as-usb-modem.html' title='HOW-TO: HTC 6800/Mogul/Titan as USB Modem in Ubuntu'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-5664960687365330449</id><published>2008-05-20T08:31:00.000-07:00</published><updated>2008-05-20T08:42:03.451-07:00</updated><title type='text'>PHP4 &amp; XML Generation</title><content type='html'>&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;?php&lt;br /&gt;// generate xml mime type&lt;br /&gt;header ("content-type: text/xml");&lt;br /&gt;&lt;br /&gt;// create xml document&lt;br /&gt;$doc = domxml_new_doc('1.0');&lt;br /&gt;&lt;br /&gt;// create xml root&lt;br /&gt;$root = $doc-&amp;gt;create_element("xml_root");&lt;br /&gt;$root = $doc-&amp;gt;append_child($root);&lt;br /&gt;&lt;br /&gt;// create xml node&lt;br /&gt;$item = $doc-&amp;gt;create_element("xml_item");&lt;br /&gt;$item = $root-&amp;gt;append_child($item);&lt;br /&gt;&lt;br /&gt;// add some text to the node&lt;br /&gt;$item_text = $doc-&amp;gt;create_text_node("yo yo");&lt;br /&gt;$item = $item-&amp;gt;append_child($item_text);&lt;br /&gt;&lt;br /&gt;// generate xml output&lt;br /&gt;$xml_string = $doc-&amp;gt;dump_mem(true);&lt;br /&gt;echo $xml_string;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;would generate:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt; &amp;lt;xml_root&amp;gt;&lt;br /&gt;   &amp;lt;xml_item&amp;gt;yo yo&amp;lt;/xml_item&amp;gt;&lt;br /&gt; &amp;lt;/xml_root&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-5664960687365330449?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/5664960687365330449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=5664960687365330449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/5664960687365330449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/5664960687365330449'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/05/php4-xml-generation.html' title='PHP4 &amp; XML Generation'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-8989413604739748089</id><published>2008-05-20T08:24:00.000-07:00</published><updated>2008-05-20T08:40:36.191-07:00</updated><title type='text'>PHP &amp; LDAP</title><content type='html'>&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;// get username and password via form scope&lt;br /&gt;$user = $_POST["username"];&lt;br /&gt;$pass = $_POST["password"];&lt;br /&gt;&lt;br /&gt;// format username for uwm ldap auth&lt;br /&gt;$basedn = "ou=people,o=somewhere.edu";&lt;br /&gt;$ldap_user = "uid=" . $user . "," . $basedn;&lt;br /&gt;&lt;br /&gt;// connect to uwm ldap server&lt;br /&gt;$ds=ldap_connect("ldap://ldap.uwm.edu");&lt;br /&gt;&lt;br /&gt;if ($ds) {&lt;br /&gt;// bind to uwm ldap server&lt;br /&gt;$r=ldap_bind($ds, $ldap_user, $pass);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// close out ldap connection&lt;br /&gt;ldap_close($ds);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Your basedn may vary. Also, the protocol, ldaps://. supposedly works but so far, I have had no luck. I have a sneaking suspicion that it has something to do with self-signed certificates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-8989413604739748089?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/8989413604739748089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=8989413604739748089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/8989413604739748089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/8989413604739748089'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/05/php-ldap.html' title='PHP &amp; LDAP'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-1845416244579868681</id><published>2008-05-15T12:56:00.001-07:00</published><updated>2008-05-15T13:05:51.481-07:00</updated><title type='text'>HOW TO: Install Flex Builder 3 Alpha on Hardy Heron 64-bit</title><content type='html'>32-bit Java Runtime Environment needs to be installed (which can be done through synpatic/apt-get).&lt;br /&gt;&lt;br /&gt;Run the following at the command line:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;export PATH=/usr/lib/jvm/ia32-java-6-sun/bin/:$PATH&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Install the firefox-2 package from synaptic/apt-get.&lt;br /&gt;&lt;br /&gt;Start the Flex installer:&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;chmod a+x flexbuilder_linux_install_a3_033108.bin&lt;br /&gt;./flexbuilder_linux_install_a3_033108.bin&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;At the end of the install process, it may explain that you need to manually copy a file to the Firefox 2 plugins directory:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo cp Adobe_Flex_Builder_Linux/Player/linux/install_flash_player_9_linux/libflashplayer.so /usr/lib/firefox/plugins/&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Start Eclipse and the Flex Builder 3 Plugin should be available.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-1845416244579868681?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/1845416244579868681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=1845416244579868681' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/1845416244579868681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/1845416244579868681'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/05/how-to-install-flex-builder-3-alpha-on.html' title='HOW TO: Install Flex Builder 3 Alpha on Hardy Heron 64-bit'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-6978608399418473405</id><published>2008-05-15T12:28:00.000-07:00</published><updated>2008-05-15T12:42:03.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardy heron'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='64-bit'/><category scheme='http://www.blogger.com/atom/ns#' term='32-bit'/><title type='text'>HOW TO: Run 32-bit Eclipse on a 64-bit Hardy Heron platform</title><content type='html'>At a command prompt run:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;sudo apt-get install ia32-sun-java6-bin&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;... or get it from Synaptic.&lt;br /&gt;&lt;br /&gt;Download a 32-bit version of Eclipse from: &lt;a href="http://download.eclipse.org/eclipse/downloads/"&gt;eclipse.org&lt;/a&gt;. Extract the package to your home directory.&lt;br /&gt;&lt;br /&gt;Right click on the Gnome panel and select "Add to Panel..."&lt;br /&gt;&lt;br /&gt;Select "Custom Application Launcher" and click "Add"&lt;br /&gt;   Name: Eclipse IDE&lt;br /&gt;   Command: /home/qk/eclipse/eclipse -vm /usr/lib/jvm/ia32-java-6-sun/bin/java&lt;br /&gt;   Comment:qk is the coolest :)&lt;br /&gt;   (You can also set the icon by clicking on the default icon and navigating to your eclipse install directory. Replace qk with your username and/or eclipse with where you put eclipse.)&lt;br /&gt;Click "OK"&lt;br /&gt;&lt;br /&gt;Click the Eclipse launcher and you should be all set.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-6978608399418473405?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/6978608399418473405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=6978608399418473405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6978608399418473405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6978608399418473405'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/05/how-to-run-32-bit-eclipse-on-64-bit.html' title='HOW TO: Run 32-bit Eclipse on a 64-bit Hardy Heron platform'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-774519638898677961</id><published>2008-05-15T10:28:00.000-07:00</published><updated>2008-05-15T10:56:05.627-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hardy heron'/><category scheme='http://www.blogger.com/atom/ns#' term='dual monitors'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>HOW TO: Dual Monitors Hardy Heron 64-bit nVidia  NV44  [Quadro NVS 285]</title><content type='html'>System&gt;&gt;Administration&gt;&gt;Hardware Drivers&lt;br /&gt;&lt;br /&gt;Check "Enabled" for: NVIDIA accelerated graphics driver&lt;br /&gt;&lt;br /&gt;After you hit "OK" a bunch of times a few drivers will be installed and you will be told to reboot.&lt;br /&gt;&lt;br /&gt;After reboot, I still only had one screen come up. Edit /etc/X11/xorg.conf (back it up first) to look like this:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;# If you have edited this file but would like it to be automatically updated&lt;br /&gt;# again, run the following command:&lt;br /&gt;#   sudo dpkg-reconfigure -phigh xserver-xorg&lt;br /&gt;&lt;br /&gt;Section "ServerLayout"&lt;br /&gt;  Identifier     "Default Layout"&lt;br /&gt;  Screen         "Default Screen" 0 0&lt;br /&gt;  InputDevice    "Generic Keyboard" "CoreKeyboard"&lt;br /&gt;  InputDevice    "Configured Mouse"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Module"&lt;br /&gt;  Load           "glx"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "InputDevice"&lt;br /&gt;  Identifier     "Generic Keyboard"&lt;br /&gt;  Driver         "kbd"&lt;br /&gt;  Option         "XkbRules" "xorg"&lt;br /&gt;  Option         "XkbModel" "pc105"&lt;br /&gt;  Option         "XkbLayout" "us"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "InputDevice"&lt;br /&gt;  Identifier     "Configured Mouse"&lt;br /&gt;  Driver         "mouse"&lt;br /&gt;  Option         "CorePointer"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;  Identifier     "Configured Monitor"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;  Identifier     "Configured Video Device"&lt;br /&gt;  Driver         "nvidia"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;  Identifier     "Default Screen"&lt;br /&gt;  Device         "Configured Video Device"&lt;br /&gt;  Monitor        "Configured Monitor"&lt;br /&gt;  DefaultDepth    24&lt;br /&gt;  Option         "NoLogo" "False"&lt;br /&gt;  Option         "RenderAccel" "True"&lt;br /&gt;  Option         "TwinView"&lt;br /&gt;  Option         "MetaModes" "1280x1024 1280x1024"&lt;br /&gt;  SubSection     "Display"&lt;br /&gt;      Depth       24&lt;br /&gt;      Modes      "nvidia-auto-select"&lt;br /&gt;  EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-774519638898677961?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/774519638898677961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=774519638898677961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/774519638898677961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/774519638898677961'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/05/how-to-dual-monitors-hardy-heron-64-bit.html' title='HOW TO: Dual Monitors Hardy Heron 64-bit nVidia  NV44  [Quadro NVS 285]'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-3508495853029926640</id><published>2008-05-14T19:28:00.000-07:00</published><updated>2010-01-06T22:51:07.171-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CRIT'/><category scheme='http://www.blogger.com/atom/ns#' term='rants'/><title type='text'>new machine; new os; new architecture;</title><content type='html'>I've been looking forward to getting the latest Ubuntu release 8.04 - Hardy Heron and at first glance, I'm a little disappointed.&lt;br /&gt;&lt;br /&gt;Right out the gate, I wanted to connect to a secure webdav server (UWM PantherFile/Xythos) to get some back-up files. In Ubuntu 7.10 this was pretty easy: Places&gt;&gt;Connect to Server&gt;&gt;Secure WebDAV (HTTPS). This option was removed in 8.04 for some reason. It looks like I need to get some third party software like:  &lt;a href="http://www.webdav.org/cadaver/"&gt;cadaver&lt;/a&gt;  to get it to work or wait for an update. Oddly enough, I heard that Mac's Leopard OS is also having network mounting issues.&lt;br /&gt;&lt;br /&gt;The other thing I do on a fresh install at work is to bind the machine to my &lt;a href="http://synergy2.sourceforge.net/"&gt;Synergy&lt;/a&gt; environment. Synergy client/server software allows me to use both Windows and Linux machines and use a single keyboard and mouse to use all the machines like a giant virtual desktop. According to the Ubuntu Forums and from my own experience, Synergy client pauses and dies 3 - 10 seconds into switching to the Ubuntu 8.04 machine unless the Synergy client is run as root. When it's run as root, everything works fine but, running an app like this as root does not seem like a good idea. Synergy is inherently insecure because all traffic is transmitted plain-text. For this reason, I run everything through SSH tunnels but even still running an app like this as root makes me feel a little exposed.&lt;br /&gt;&lt;br /&gt;In all, it's worth the trouble as this machine is ridiculously over powered:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://pantherfile.uwm.edu/qkmadson/public/images/vroom.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="https://pantherfile.uwm.edu/qkmadson/public/images/vroom.jpg" alt="" border="0" /&gt;&lt;/a&gt;That's right -- the machine has 8 processors (dual quad-core Xeons) and 6 gigabytes of memory.&lt;br /&gt;&lt;br /&gt;...which is where the next problem comes in. The machine has 64-bit architecture which I've never used before. I installed the Eclipse IDE 3.3.2, the CFEclipse plugin, and Sun Java 6.0 JDK with no issues. When I tried to install the Adobe Flex Builder 3 Alpha plugin, I got an error explaining that Flex 3 requires 32-bit architecture and Java JRE compiled for 32-bit. The error also states that this is possible but, I remain skeptical -- yet I will give it a shot tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-3508495853029926640?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/3508495853029926640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=3508495853029926640' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/3508495853029926640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/3508495853029926640'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/05/new-machine-new-os-new-architecture.html' title='new machine; new os; new architecture;'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5534069055846677990.post-6459227873229275954</id><published>2008-05-14T07:34:00.000-07:00</published><updated>2008-05-15T10:55:12.664-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='menubar'/><category scheme='http://www.blogger.com/atom/ns#' term='selectedindex'/><title type='text'>HOW TO: Set Flex MenuBar Currently Selected Item Text Color</title><content type='html'>Seems like it should be fairly easy to let a user visually know which top level option they are currently under. ...like should be an option or options in Flex CSS.&lt;br /&gt;&lt;br /&gt;Here's the best way I found to do it:&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt; &amp;lt;mx:Script&amp;gt;&lt;br /&gt;&amp;lt;![CDATA[&lt;br /&gt;   private function menuHandler(event:MenuEvent):void  {&lt;br /&gt;&lt;br /&gt;         var mb:MenuBar=event.target as MenuBar;&lt;br /&gt;         var selectedIndex:int=mb.selectedIndex;&lt;br /&gt;&lt;br /&gt;         for (var i:int=0;i&amp;lt;mb.menuBarItems.length;i++){&lt;br /&gt;           if(i==selectedIndex){&lt;br /&gt;               (mb.menuBarItems[i] as MenuBarItem).setStyle("color", "0xff7009");&lt;br /&gt;           }&lt;br /&gt;           else{&lt;br /&gt;               (mb.menuBarItems[i] as MenuBarItem).setStyle("color", "0xffffff");&lt;br /&gt;           }&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       if (event.item.@data != "top") {&lt;br /&gt;            logicHandler(event.item.@label, event.item.@data);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;]]&amp;gt;&lt;br /&gt;&amp;lt;/mx:Script&amp;gt;&lt;br /&gt;&amp;lt;mx:MenuBar id="appMenu"&lt;br /&gt;x="0" y="114" width="100%" height="31"&lt;br /&gt;labelField="@label"&lt;br /&gt;dataProvider="{menuBarCollection}"&lt;br /&gt;itemClick="menuHandler(event);" /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;On the currently selected item, the text is set to orange. Everything else is reset to white. &lt;a href="http://www4dev.uwm.edu/webdev/projects/imt/getting_connected_cd/web/bin/main.html"&gt;Example application.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5534069055846677990-6459227873229275954?l=quinnmadson.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://quinnmadson.blogspot.com/feeds/6459227873229275954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5534069055846677990&amp;postID=6459227873229275954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6459227873229275954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5534069055846677990/posts/default/6459227873229275954'/><link rel='alternate' type='text/html' href='http://quinnmadson.blogspot.com/2008/05/how-to-set-flex-menubar-currently.html' title='HOW TO: Set Flex MenuBar Currently Selected Item Text Color'/><author><name>Quinn Madson</name><uri>http://www.blogger.com/profile/11116935753626676975</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
