tag:blogger.com,1999:blog-55340690558466779902024-03-13T12:34:33.860-07:00Nerd AlertUltra-specific nerdery.Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.comBlogger33125tag:blogger.com,1999:blog-5534069055846677990.post-77183168975163808522018-05-16T15:07:00.002-07:002018-05-16T15:07:56.518-07:00Using Azure App Service Certificate for Apache on an Ubuntu VM<br />
The process of getting my Azure cert to work on an Azure VM seems needlessly complicated and took forever to figure out so, I'm documenting it here. The Powershell script provided by Microsoft produces a console screen full of red errors. I debugged some of them but, never could get the thing to work.<br />
<h2>
Azure Key Prep</h2>
<ul>
<li>Login to portal.azure.com</li>
<li>Search for the KeyVault that contains your App Service Certificate and open it.</li>
<ul>
<li>Under <b>Settings</b>, go to <b>Secrets</b></li>
<li>Open the certificate</li>
<li>Open the Current Version</li>
<li>Click 'Download as a certificate' to download your PFX file.</li>
</ul>
<li>Download and install Win32 OpenSSL Light: https://slproweb.com/products/Win32OpenSSL.html</li>
<li>To extract the private key from a .pfx file, run the following OpenSSL command: </li>
<ul>
<li><b>openssl.exe pkcs12 -in myAzureKeyVault.pfx -nocerts -out privateKey.pem</b></li>
</ul>
<li>The private key that you have extracted is encrypted. To decrypt: </li>
<ul>
<li><b>openssl.exe rsa -in privateKey.pem -out server.key</b></li>
</ul>
<li></li>
<li>To get the corresponding Server Certificate: </li>
<ul>
<li><b>openssl.exe pkcs12 -in myAzureKeyVault.pfx -clcerts -nokeys -out server.pem</b></li>
</ul>
</ul>
<h2>
<b>Apache Setup</b></h2>
<div>
<ul>
<li>SCP your certs to your VM:</li>
<ul>
<li>/etc/ssl/certs/server.pem</li>
<li>/etc/ssl/private/server.key</li>
</ul>
<li>SSH into your VM:</li>
<ul>
<li>sudo a2enmod ssl</li>
<li>cd /etc/apache2/sites-available</li>
<li>sudo cp default-ssl.conf 000-default-ssl.conf</li>
<li>sudo vi 000-default-ssl.conf</li>
<ul>
<li></li>
<li> SSLCertificateFile /etc/ssl/certs/server.pem</li>
<li> SSLCertificateKeyFile /etc/ssl/private/server.key</li>
<li>(Configure ServerAdmin, Document Root and any other Apache directives you need.)</li>
</ul>
<li>sudo a2ensite 000-default-ssl</li>
<li>sudo /etc/init.d/apache2 restart</li>
</ul>
<li>In the Azure Portal, open your VM and go to: Settings >> Networking >> Inbound Port Rules >> Add Inbound Port Rule</li>
<ul>
<li>Source: Any</li>
<li>Source port ranges: *</li>
<li>Destination: Any</li>
<li>Destination port ranges: 443</li>
</ul>
</ul>
<div>
That should be all you need to get it up and running.</div>
</div>
Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-64053839745863958922016-10-27T18:02:00.001-07:002016-10-27T18:14:05.495-07:00Raspberry PI File Sharing with a Mac<br />
<div>
From the Raspberry Pi terminal or SSH into the Pi:</div>
<ol>
<li>sudo apt-get update</li>
<li>sudo apt-get install netatalk</li>
<li>sudo /etc/init.d/netatalk stop</li>
<li>sudo vi /etc/netatalk/AppleVolumes.default</li>
<ol>
<li>Change this line: <b>:DEFAULT: options:upriv,usedots</b></li>
<li>To this line: <b>:DEFAULT: options:upriv,usedots,rw</b></li>
</ol>
<li>sudo /etc/init.d/netatalk start</li>
</ol>
<div>
<br /></div>
<div>
On a mac connected to the same network: Finder >> Go >> Connect to Server >> Browse. Double-click on the hostname of your Raspberry Pi and click the "Connect as" button. Enter your username and password for the Raspberry Pi and you should see the share contents.<br />
<br />
If you cannot browse to the Raspberry Pi: Finder >> Go >> Connect to Server. For server address, put in: afp://[IP ADDRESS OF PI] so, for example: afp://192.168.10.129 and click the "Connect" button.</div>
<div>
<br /></div>
<div>
Add more shares:</div>
<div>
<ol>
<li>sudo vi /etc/netatalk/AppleVolumes.default</li>
<li>Go to the bottom of the file (hit G in vi) and add new paths under: </li>
<ol>
<li><b>~/ "Home Directory" </b></li>
</ol>
<li>Example:</li>
<ol>
<li><b>/media<b> </b>"Media"</b></li>
<li><b>/mnt "Mount"</b></li>
</ol>
</ol>
<ul>
</ul>
</div>
<div>
<br /></div>
Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-6675662387524457832015-11-25T10:59:00.003-08:002015-11-25T10:59:42.829-08:00Mac Optimizations<div>
<strong style="background-color: white; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px; margin: 0px; padding: 0px;">Reduce transparency effects</strong><span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;"> </span></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">System Preferences >> Accessibility >> Display >> Reduce transparency (On)</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><span style="line-height: 19.5px;"><br /></span></span><strong style="background-color: white; border: 0px; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px; margin: 0px; padding: 0px;">Switch off automatic graphic switching</strong><span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;"> </span></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">System Preferences >> Energy Saver >> Automatic graphics switching (Off)</span></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">(Turn this back on if using battery power for long periods.)</span></div>
<div>
<span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><span style="line-height: 19.5px;"><br /></span></span><b style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">Tune Mission Control</b></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">System Preferences</span><span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;"> >> Mission Control >> </span> </div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">Automatically rearrange Spaces based on most recent use (Off)</span></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">Displays have separate</span><span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;"> Spaces (Off)</span></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;">Dashboard (Off)</span></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 19.5px;"><br /></span><strong style="background-color: white; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border: 0px; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; margin: 0px; padding: 0px;">Fix disk permissions, reset System Management Controller, reset PRAM</strong></div>
<div>
<span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">(Luis Mercado explained this well at </span><a href="https://discussions.apple.com/thread/6623697"><span style="border-color: initial; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border-style: initial; cursor: pointer;">https://discussions.apple.com/thread/662369</span><span style="font-family: Helvetica Neue, Arial, Helvetica, sans-serif;"><span style="background-color: white; border-color: initial; border-image-outset: initial; border-image-repeat: initial; border-image-slice: initial; border-image-source: initial; border-image-width: initial; border-style: initial; cursor: pointer;">7</span></span></a><span style="background-color: white; font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;">)</span><br /><span style="font-family: Helvetica Neue, Verdana, Helvetica, Tahoma, Arial, sans-serif;"><span style="font-size: 14.72px; line-height: 23.552px;"><br /></span></span><span style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 23.552px;">Sources:</span><br /><a href="http://osxdaily.com/2015/04/06/windowserver-high-cpu-usage-mac-os-x/" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 23.552px;">http://osxdaily.com/2015/04/06/windowserver-high-cpu-usage-mac-os-x/</a><br /><a href="http://apple.stackexchange.com/questions/153397/windowserver-high-cpu-on-yosemite" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif; line-height: 23.552px;">http://apple.stackexchange.com/questions/153397/windowserver-high-cpu-on-yosemite</a></div>
Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-9063232944864741572015-01-02T16:20:00.000-08:002016-02-15T12:26:04.083-08:00Setting Raspberry Pi for a Static IP<div class="tr_bq">
sudo -s</div>
<br />
<div class="p1">
<span class="s1">cd /etc/network</span></div>
<div class="p1">
<span class="s1">
</span></div>
<div class="p1">
<span class="s1">cp interfaces interfaces.bak</span></div>
<div class="p1">
<span class="s1">nano interfaces</span></div>
<div class="p1">
<br /></div>
<blockquote>
auto lo<br />
iface lo inet loopback<br />
iface eth0 inet dhcp<br />
allow-hotplug wlan0<br />
iface wlan0 inet static<br />
address 192.168.1.10<br />
netmask 255.255.255.0<br />
gateway 192.168.1.1<br />
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf<br />
iface default inet dhcp</blockquote>
<br />
reboot<br />
<div class="p1">
<span class="s1"></span></div>
<div class="p1">
<span class="s1">
</span></div>
Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-30776801223577290112015-01-02T15:50:00.002-08:002015-01-02T15:51:27.507-08:00Mounting Raspberry Pi SD Card on a Mac (with Write Access)Download and install: <a href="http://osxfuse.github.io/">Fuse for OS X</a> (Make sure to check: <span style="background-color: white; color: #333333; font-family: monospace; font-size: 14px; line-height: 19.6000003814697px; text-align: justify;"><b>MacFUSE Compatibility Layer</b></span>)<br />
Download and install: <a href="http://sourceforge.net/projects/fuse-ext2/">fuse-ext2</a><br />
Open Terminal<br />
Type: sudo nano -c /System/Library/Filesystems/fuse-ext2.fs/fuse-ext2.util<br />
Press: [CONTROL W]<br />
Type in: function mount [ENTER]<br />
Arrow down to:<br />
<blockquote class="tr_bq">
<div class="p1">
<span class="s1">OPTIONS="auto_xattr,defer_permissions"</span></div>
</blockquote>
Change it to:<br />
<blockquote class="tr_bq">
OPTIONS="auto_xattr,defer_permissions,rw+" </blockquote>
Press [CONTROL X]<br />
Press [Y]<br />
Press [ENTER]<br />
Plug in the SD Card!Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-51476920092689646172012-11-24T17:56:00.001-08:002012-11-24T17:56:51.686-08:00Using SQLite with Railo CFML ServerI've been building a web app that analyzes data from an application called <a href="http://www.uracerweb.org/">Ultimate Racer</a> used to control the race track circuit for slot car racing. Ultimate Racer conveniently keeps all of it's data in a SQLite database.<br />
<br />
However, getting the SQLite database to work with Railo was a little problematic so, I'm documenting the process here in the event that I need to do it again or someone else is googling how to make it happen.<br />
<br />
First, you need the SQLite JDBC driver for Railo. I ran into a bunch of dead links so, I dropbox'd the file here: <a href="http://dl.dropbox.com/u/472577/sqlite-jdbc-3.7.2.jar">http://dl.dropbox.com/u/472577/sqlite-jdbc-3.7.2.jar</a><br />
<br />
Place the JAR in your Railo installation under: /PATH/TO/RAILO/lib/ext/sqlite-jdbc-3.7.2.jar<br />
<br />
Restart Railo after copying the driver. Go into the Railo Web Administrator and go to "Datasource".<br />
<br />
Put in the name of your datasource, for <b>type</b> select <b>Other - JDBC</b>, and click <b>Create</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-9wDR7ZAs6dg/ULF4q8fi-gI/AAAAAAAABgU/qVd_N8CgaZw/s1600/Screen+Shot+2012-11-24+at+7.46.46+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="http://4.bp.blogspot.com/-9wDR7ZAs6dg/ULF4q8fi-gI/AAAAAAAABgU/qVd_N8CgaZw/s320/Screen+Shot+2012-11-24+at+7.46.46+PM.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Scroll down to <b>Class </b>and type in: <b>org.sqlite.JDBC</b></div>
<div class="separator" style="clear: both; text-align: left;">
For <b>DSN</b> type in: <b>jdbc:sqlite:/PATH/TO/SQL/DB/FILE</b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://3.bp.blogspot.com/-ZhNdPrSQ2go/ULF5pwvQPwI/AAAAAAAABgc/ASbtq8zQwcc/s1600/Screen+Shot+2012-11-24+at+7.51.08+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://3.bp.blogspot.com/-ZhNdPrSQ2go/ULF5pwvQPwI/AAAAAAAABgc/ASbtq8zQwcc/s320/Screen+Shot+2012-11-24+at+7.51.08+PM.png" width="242" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: left;">
<b><br /></b></div>
<div class="separator" style="clear: both; text-align: left;">
Click <b>Create</b> and you should be all set.</div>
<br />
<br />
<br />
<br />
<br />Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com2tag:blogger.com,1999:blog-5534069055846677990.post-61106947468928049232012-11-16T14:33:00.000-08:002012-11-16T14:33:02.577-08:00Korg Monotron Repair Mod<div class="separator" style="clear: both; text-align: center;">
<span style="text-align: left;">Due to a series of unfortunate events, the surface mounted 1/8 jack was torn off of the board of this Korg Monotron analog synth. I decided to try and tie into the existing onboard speaker to allow the synth to still connect to external speakers or mixer. </span></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://1.bp.blogspot.com/-OGh8cum3wpc/UKaweljPbhI/AAAAAAAABds/JsFLAJFx4Bg/s1600/DSC_0002.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="214" src="http://1.bp.blogspot.com/-OGh8cum3wpc/UKaweljPbhI/AAAAAAAABds/JsFLAJFx4Bg/s320/DSC_0002.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I drilled a small hole on the left side to allow wires into the enclosure.<br /></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-pJ4c0Ghndmo/UKawpeXRiZI/AAAAAAAABd0/89B8dkdwgMQ/s1600/DSC_0003.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="214" src="http://2.bp.blogspot.com/-pJ4c0Ghndmo/UKawpeXRiZI/AAAAAAAABd0/89B8dkdwgMQ/s320/DSC_0003.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I noted the wires so that if pulled, the solder joints won't be stressed.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://2.bp.blogspot.com/-EuJTQjxyQ6Q/UKawwnNjxEI/AAAAAAAABd8/BPpYwaENJ5k/s1600/DSC_0004.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="214" src="http://2.bp.blogspot.com/-EuJTQjxyQ6Q/UKawwnNjxEI/AAAAAAAABd8/BPpYwaENJ5k/s320/DSC_0004.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I ran the new line-out red line into the existing solder joint for the onboard speaker.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-VCn4fJNwGaE/UKaw4D94BXI/AAAAAAAABeE/uScjLIZVcSQ/s1600/DSC_0005.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="214" src="http://3.bp.blogspot.com/-VCn4fJNwGaE/UKaw4D94BXI/AAAAAAAABeE/uScjLIZVcSQ/s320/DSC_0005.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">I desoldered the black line to the onboard speaker. I made a joint between the new line-out black line, the speaker black line, and a new jumper.</td></tr>
</tbody></table>
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-QeUghO8GSJ4/UKaw_SfHFaI/AAAAAAAABeM/GZ9EIqOnmxs/s1600/DSC_0006.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="214" src="http://3.bp.blogspot.com/-QeUghO8GSJ4/UKaw_SfHFaI/AAAAAAAABeM/GZ9EIqOnmxs/s320/DSC_0006.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">All soldered together and bit of heat shrink.<br /></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://3.bp.blogspot.com/-pvWpiiPoocg/UKaxF34rnzI/AAAAAAAABeU/kT4VcO6V8VU/s1600/DSC_0007.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="214" src="http://3.bp.blogspot.com/-pvWpiiPoocg/UKaxF34rnzI/AAAAAAAABeU/kT4VcO6V8VU/s320/DSC_0007.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Connected the switch (momentary - normally off) to the original speaker black line solder joint and to the jumper from above.<br /></td></tr>
</tbody></table>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://4.bp.blogspot.com/-FpRGoriasBo/UKayXkcop-I/AAAAAAAABgA/manVz1JeI0Q/s1600/DSC_0023.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="214" src="http://4.bp.blogspot.com/-FpRGoriasBo/UKayXkcop-I/AAAAAAAABgA/manVz1JeI0Q/s320/DSC_0023.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">All put together with the switch mounted and a lesbian adapter on the 1/8 inch male plug end.<br /><br /><br /><div style="text-align: left;">
Here is a video of the synth put back together and operating. First part of the video (~20 secs) is demoing the momentary switch activating the onboard speaker. The rest is using an external speaker system.</div>
<br /><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/JIR9qDeaLqs?feature=player_embedded' frameborder='0'></iframe></td></tr>
</tbody></table>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com1tag:blogger.com,1999:blog-5534069055846677990.post-50632940602069294452012-11-15T08:54:00.000-08:002012-11-15T08:55:26.776-08:00snippets.rb: Titanium Studio Snippets Ruble CustomizationsThis here is just a space for holding my Titanium Studio customizations to extend or overwrite the provided ruble for snippets. Feel free to use them and let me know if you have any additions that help you code faster.<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>snippet 'inspectObject' do |s|
s.trigger = "inspect"
s.expansion =
'Ti.API.info("Inspecting Object: " + ${1:myObject});
for (var thing in ${1:myObject}) {
Ti.API.info("${1:myObject}." + thing + " = " + ${1:myObject}[thing]);
}'
end
snippet 'Ti.API.info qk' do |s|
s.trigger = 'dump'
s.expansion = 'Ti.API.info(\'[qk]:${1:variableName}\ = \' + ${1:variableName});'
end
snippet 'Alloy On Event' do |s|
s.trigger = 'on'
s.expansion =
'${1:myObject}.on("${2:click}", function(e){
});'
end
snippet 'Ti.API.info' do |s|
s.trigger = 'info'
s.expansion = 'Ti.API.info("${0:log}");'
end
</code></pre>
Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com1tag:blogger.com,1999:blog-5534069055846677990.post-22634444554356738772012-08-04T19:39:00.001-07:002012-08-04T19:41:08.932-07:00Titanium & UsergridI was trying to get a Titanium app up and running with a Usergrid backend and I kept getting the error:<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>[INFO] {"error":"web_application","timestamp":1344133939838,"duration":0,"exception":"javax.ws.rs.WebApplicationException"}</code></pre>
<br />
Turns out it was an issue with how the the Titanium HTTPClient serializes JSON data. (I thought the Ti API did this auto-magically but, maybe I'm mistaken.) If you run into the same problem, call JSON.stringify() manually on the JSON data that you are posting. Seems to do the trick. Here is an example:<br />
<br />
<pre style="background-color: #eeeeee; border: 1px dashed #999999; color: black; font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; font-size: 12px; line-height: 14px; overflow: auto; padding: 5px; width: 100%;"><code>var xhr = Ti.Network.createHTTPClient();
xhr.open("POST", "https://api.usergrid.com/YOUR_ORG-NAME/YOUR-APP-NAME/users");
xhr.setRequestHeader('Content-Type','application/json');
xhr.onload = function(){
try {
Ti.API.info(this.responseText);
} catch(e) {
Ti.API.info(e);
}
};
var data = {
username: "raoul.duke",
email: "raoul.duke@doomed.net",
name: "Raoul Duke",
password: "b4tc0untry!!"
};
xhr.send(JSON.stringify(data)); //this is the important bit
</code></pre>Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-25230985074693480222011-04-29T09:49:00.000-07:002011-04-29T09:53:31.160-07:00ColdFusion RegEx White List ExampleI 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:<div><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%"><code><br /><cffunction name="jsonSafe" access="private"><br /> <cfargument name="str" type="string" required="true"><br /> <cfset newStr = reReplace(arguments.str, '[^[:alnum:][:space:]$=;.?!\\/&"''`():,\[\]{}_\-]', '_','all')><br /> <cfreturn newStr><br /></cffunction><br /></code></pre><br /></div>Quinn Madsonhttp://www.blogger.com/profile/17707974593169671381noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-40865024325213061522011-04-07T14:14:00.000-07:002011-04-07T14:27:49.198-07:00Preserve epoch dates in Zimbra JSON via ColdFusion DeserializeJSON function<p><span class="Apple-style-span" >The DeserializeJSON() function in ColdFusion converts an epoch date/time in JSON from something like: <span class="Apple-style-span">1281364965000</span> to: <span class="Apple-style-span">1.281364965E+012.</span></span></p><p><span class="Apple-style-span" ><br /></span></p><p><span class="Apple-style-span" >To prevent this from happening, you can use something like this:</span></p><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%"><code><cfset jsonData = reReplace(jsonData, '([0-9]{13})', '"\1"', 'ALL')></code></pre><p><br /></p><p><span class="Apple-style-span" >Alternatively, to convert any number, 10 digits or more into a string to preserve the proper formatting, use something like this:</span></p> <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%"><code><cfset jsonData = reReplace(jsonData, '([0-9]{10,})', '"\1"', 'ALL')><br /></code></pre>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-89303673480251734962010-09-17T21:03:00.000-07:002010-09-17T21:10:35.826-07:00Fixing bootloaders when dual booting OS X and UbuntuI 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:<div><br /></div><div><ul><li>Reboot from the iATKOS v7 CD</li><li>Deselect all checkboxes except the one for Install Chameleon</li><li>Install</li></ul><div>Now you should be able to boot into OS X but, Ubuntu will be unavailable.</div></div><div><br /></div><div><ul><li>Boot from the Ubuntu Live CD</li><li>Open the Terminal from Applications >> Accessories</li></ul></div><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%"><code>sudo -s<br />mkdir /mnt/r<br />mount /dev/sda4 /mnt/r<br />mount --bind /dev /mnt/r/dev<br />mount --bind /proc /mnt/r/proc<br />chroot /mnt/r<br />update-grub<br />grub-install --force /dev/sda4<br /></code></pre>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-18499123046155521952010-09-15T13:43:00.001-07:002011-04-21T09:00:42.748-07:00Adding CFWheels Applications as "Custom Script" elements in the CommonSpot CMSIt 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.<br /><br />Here is what I did to get it working:<br /><ul><li>Put your CF Wheels application in the <span style="font-weight: bold;">customcf/</span> subdirectory</li><li>Rename Application.cfc to application.cfc (This is done to prevent the application from being initialized twice if accessed outside the CMS.)</li><li>Edit the <span style="font-weight: bold;">index.cfm</span> at the root of the application directory:</li></ul><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%;"><code><!--- Manually instantiate the application.cfc ---><br /><cfset server.railo = structNew()><br /><cfset server.railo.version = "fake version"><br /><br /><!--- If this is the first time the application has run, call the onApplicationStart method ---><br /><cfset app = CreateObject("component","application")><br /><br /><!--- Call the onRequestStart method and pass the current page as a parameter ---><br /><cfif not structKeyExists(application, "wheels")><br /><cfset app.onApplicationStart()><br /></cfif><br /><br /><!--- Call the onRequestStart method and pass the current page as a parameter ---><br /><cfset app.onRequestStart(cgi.script_name)><br /><br /><br /><!--- This is the only original line in the file ---><br /><cfinclude template="wheels/index.cfm"><br /></code></pre>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-43343097143782612672010-07-07T12:43:00.000-07:002010-07-07T13:10:08.639-07:00Gnome Screensaver Missing Lock Screen Prompt in Ubuntu Lucid 10.04For 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:<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%"><code>killall gnome-screensaver</code></pre><div>Although, after a while this gets annoying so, I looked for a better long term solution. Here it is:</div><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%"><code>sudo chmod a+r /etc/pam.d/*</code></pre><div>That's it. I assume that the permissions may have been messed up during an update. Posted here for posterity.</div>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com4tag:blogger.com,1999:blog-5534069055846677990.post-20864930572186446202010-01-06T21:56:00.000-08:002010-01-06T22:17:36.121-08:00CFEclipse Dictionary for CF on WheelsAs far as I could tell, there was no CFEclipse dictionary available for CF on Wheels so I created one.<div><br /></div><div>To get it, download the XML at: <a href="http://su.pr/6s1VUi">http://su.pr/6s1VUi</a></div><div><br /></div><div>To use it:</div><div><ul><li>Open your Eclipse plugins/ directory</li><li>Open the directory: org.cfeclipse.cfml_X/ (where X is your CFEclipse version number)</li><li>Open the directory: dictionary</li><li>Copy cfwheels.xml to this location</li><li>Close Eclipse if it is running</li><li>Open up: dictionaryconfig.xml</li></ul>Change:<br /><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%"><code><version key="cf8" label="Coldfusion 8"><br /> <grammar location="cf8.xml" /><br /> <grammar location="user.xml" /><br /></version><br /></code></pre>To:<br /><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%"><code><version key="cf8" label="Coldfusion 8"><br /> <grammar location="cf8.xml" /><br /> <grammar location="user.xml" /><br /> <grammar location="cfwheels.xml" /><br /></version><br /></code></pre>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.</div><div><br /></div><div>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. </div><div><br /></div><div>Here's the code:</div><div><br /><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%"><code><cfparam name="url.page" default="0"><br /><cfparam name="url.start" default="0"><br /><cfparam name="url.end" default="0"><br /><br /><!---<br /> Strips all table and table content tags and extra whitespace from a string.<br /><br /> @param string String to format. (Required)<br /> @return Returns a string.<br /> @author Jared Rypka-Hauer (jared@web-relevant.com)<br /> @version 1, August 25, 2005<br />---><br /><cffunction name="detableize"><br /> <cfargument name="string" type="string" required="true" /><br /> <cfset var outputString = arguments["string"]><br /> <cfset outputString = reReplaceNoCase(outputString , "</*table>", "", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "</*td>", "ΓΈ", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "</*t[rhd](\s*\w*=*""*\w*""*)*>", "", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "(?m)^\s*", "", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "\n{2,}", "#chr(10)#", "all")><br /> <cfreturn outputString /><br /></cffunction><br /><br /><!--- based on function above; removes garbage from api page ---><br /><cffunction name="detagify"><br /> <cfargument name="string" type="string" required="true" /><br /> <cfset var outputString = arguments["string"]><br /> <cfset outputString = reReplaceNoCase(outputString , "</*li>", "", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "<code>[a-z\(\)]*</code>", "", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "<a href=""", "", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , """></a>", ",", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "(?m)^\s*", "", "all")><br /> <cfset outputString = reReplaceNoCase(outputString , "\n{2,}", "#chr(10)#", "all")><br /> <cfreturn outputString /><br /></cffunction><br /><br /><cfscript><br /> /**<br /> * Returns the content enclosed in a tag pair.<br /> *<br /> * @param tag The tag to look for. Should be passed without < or > and without attributes. (Required)<br /> * @param string The string to search. (Required)<br /> * @return Returns a string.<br /> * @author Johan Steenkamp (johan@orbital.co.nz)<br /> * @version 1, September 16, 2002<br /> */<br /> function getTagContent(tag,str) {<br /> var matchStruct = structNew();<br /> var startTag = "<#tag#[^>]*>";<br /> var endTag = "</#tag#>";<br /> var endTagStart = 0;<br /> matchStruct = REFindNoCase(startTag,str,1,"true");<br /> if(matchStruct.len[1] eq 0 ) return "";<br /> endTagStart = REFindNoCase(endTag,str,matchStruct.pos[1],"false");<br /> return Mid(str,matchStruct.pos[1]+matchStruct.len[1],endTagStart-matchStruct.pos[1]-matchStruct.len[1]);<br /> }<br /> </cfscript><br /><br /> <!--- get urls ---><br /> <cfhttp url="http://cfwheels.org/docs/function/"></cfhttp><br /> <cfscript><br /> urlsFilecontent = cfhttp.filecontent;<br /> urlsStartPoint = find("<h1>Wheels <abbr title=""Application Programming Interface"">API</abbr></h1>", urlsFilecontent);<br /> urlsEndPoint = len(urlsFilecontent) - urlsStartPoint;<br /> urlsChopped = mid(urlsFilecontent, urlsStartPoint, urlsEndPoint);<br /> urlsChopped = getTagContent("ul", urlsChopped);<br /> urlsChopped = detagify(urlsChopped);<br /> urlsChopped = listToArray(urlsChopped);<br /> dictionary = "";<br /> itemsPerPage = 25;<br /> urlsPages = ceiling(arrayLen(urlsChopped) / itemsPerPage);<br /> </cfscript><br /><br /> <cfoutput><br /> <h1>CFWheels API to CFEclipse Dictionary Conversion</h1><br /> <p>#arrayLen(urlsChopped)# functions listed in documentation. Function conversions are broken up into batches to prevent timeouts.<br /> Click below to convert a batch.</p><br /> <ul><br /> <cfloop from="1" to="#urlsPages#" index="i"><br /> <cfscript><br /> if (i neq 1) {<br /> start = (i - 1) * itemsPerPage;<br /> end = start + itemsPerPage - 1;<br /> } else {<br /> start = 1;<br /> end = itemsPerPage - 1;<br /> }<br /> <br /> if (end gt arrayLen(urlsChopped)) {<br /> end = arrayLen(urlsChopped);<br /> }<br /> </cfscript><br /> <li><a href="?page=#i#&start=#start#&end=#end#">#i#: #start# - #end#</a></li><br /> </cfloop><br /> </ul><br /> </cfoutput><br /><br /><cfif url.page><br /><cfloop from="#url.start#" to="#url.end#" index="i"><br /><br /> <!--- convert html to cfeclipse dictionary xml ---><br /> <cfhttp url="http://cfwheels.org#urlsChopped[i]#"></cfhttp><br /> <cfset functionFilecontent = cfhttp.filecontent><br /><br /> <cfscript><br /> functionStartPoint = findnocase("contentWrapper", functionFilecontent);<br /> functionEndPoint = len(functionFilecontent) - functionStartPoint;<br /> functionChopped = mid(functionFilecontent, functionStartPoint, functionEndPoint);<br /> functionName = getTagContent("code", functionChopped);<br /> functionChopped = replacenocase(functionChopped, "<code>", "", "all");<br /> functionChopped = replacenocase(functionChopped, "</code>", "", "all");<br /> functionDescription = getTagContent("p", functionChopped);<br /> functionParameters = getTagContent("tbody", functionChopped);<br /> functionParameters = detableize(functionParameters);<br /> functionParameters = listToArray(functionParameters, "ΓΈ", true);<br /> </cfscript><br /><br /> <cfoutput><br /><cfsavecontent variable="functionOutput"><br /> <function xmlns="http://www.cfeclipse.org/version1/dictionary" name="#xmlFormat(functionName)#" returns=""><br /><br /> <help><![CDATA[<br /> #xmlFormat(trim(functionDescription))#<br /> ]]></help><br /> <cfloop from="1" to="#arrayLen(functionParameters)-1#" index="i" step="5"><cfif functionParameters[i+2] eq "No"><cfset required="false"><cfelse><cfset required="true"></cfif><br /> <parameter name="#xmlFormat(trim(functionParameters[i]))#" type="#xmlFormat(trim(functionParameters[i+1]))#" required="#xmlFormat(trim(required))#"><br /> <help><![CDATA[<br /> #xmlFormat(trim(functionParameters[i+4]))#<br /> ]]></help><br /> </parameter><br /> </cfloop><br /> </function><br /></cfsavecontent><br /> </cfoutput><br /><br /> <cfset dictionary = dictionary & functionOutput><br /><br /></cfloop><br /><cfoutput><br /><textarea cols="150" rows="50"><br />#dictionary#<br /></textarea><br /></cfoutput><br /></cfif><br /></code></pre>Hopes this helps some other CFEclipse & CF on Wheels developers out there.</div><div><div><br /></div></div>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com3tag:blogger.com,1999:blog-5534069055846677990.post-9875599487296423972009-07-28T13:45:00.000-07:002009-07-28T13:55:49.486-07:00Zimbra ZmAppt Object PropertiesAs 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.<br /><br /><table class="cfdump_struct"><tbody><tr><td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ALARM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ALLDAYEVENT</td> <td> false </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ATTENDEES</td> <td> [empty string] </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ENDDATE</td> <td> Tue Jul 28 2009 16:00:00 GMT-0500 (CST) </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">EXCEPTION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ID</td> <td> f6ec6325-5dd9-452c-aec5-c60561900b79:560 </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISRECURRING</td> <td> false </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">LOCATION</td> <td> Test Location 254 </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">NOTES</td> <td> Test Notes 254<br /></td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">OTHERATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RESOURCES</td> <td> [empty string] </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SRCOBJ</td> <td> ZmAppt </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">STARTDATE</td> <td> Tue Jul 28 2009 11:00:00 GMT-0500 (CST) </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SUBJECT</td> <td> Test Event 254 </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TIMEZONE</td> <td> (GMT-06.00) Central Time (US & Canada) </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TYPE</td> <td> ZmAppt </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">UID</td> <td> 02b205bf-72cc-48c7-a0ec-0862ae321124 </td></tr></tbody></table><br />Here is an example of the srcObj above:<br /><table class="cfdump_struct"><tbody> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ADDCHANGELISTENER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ADJUSTMS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ALARM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ALARMDATA</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ALLDAYEVENT</td> <td> false </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ATTACHMENTS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">CACHE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">CANCEL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">CLEAR</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">COMPNUM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">CONSTRUCTOR</td> <td> function Object() { [native code] } </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">CREATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">DELETELOCAL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ENDDATE</td> <td> Tue Jul 28 2009 16:00:00 GMT-0500 (CST) </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ENDSINUTC</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">FBA</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">FLAGLOCAL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">FOLDERID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">FRAGMENT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">FREEBUSY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETATTACHLISTHTML</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETATTACHMENTS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETATTENDEESTEXT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETATTENDEETOOLTIPDATA</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETATTENDEETOOLTIPSTRING</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETBYID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETCOMPNUM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETDATERANGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETDEFAULTDNDACTION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETDETAILS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETDURATION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETDURATIONTEXT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETENDTIME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETFOLDER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETFOLDERID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETHTMLSUMMARY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETLOCALFOLDERID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETLOCATION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETMAILNOTIFICATIONOPTION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETNAME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETNOTESPART</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETORGANIZER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETORIGSTARTDATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETORIGSTARTTIME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETORIGTIMEZONE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETPARTICIPANTSTATUSSTR</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETPRINTHTML</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETRECURBLURB</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETRECURTYPE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETREMINDERLOCATION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETREMINDERNAME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETREMOTEFOLDEROWNER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETRESTURL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETSENTBY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETSHORTSTARTHOUR</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETSTARTTIME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETSUMMARY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETTAGIMAGEINFO</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETTEXTSUMMARY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETTIMEZONE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETTOOLTIP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETUNIQUEENDDATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETUNIQUEID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETUNIQUESTARTDATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">GETURL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">HASALARMDATA</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">HASATTACHMENTS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">HASATTENDEEFORTYPE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">HASATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">HASPERSONATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">HASTAG</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ID</td> <td> f6ec6325-5dd9-452c-aec5-c60561900b79:560 </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">INVID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISALARMINRANGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISALARMINSTANCE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISALLDAYEVENT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISCUSTOMRECURRENCE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISENDINRANGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISEXCEPTION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISINRANGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISMULTIDAY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISORG</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISORGANIZER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISOVERLAPPING</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISPRIVATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISREADONLY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISRECURRING</td> <td> false </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISSHARED</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ISSTARTINRANGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">LIST</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">LOCATION</td> <td> location 254 </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">MESSAGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">MODIFY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">MOVE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">MOVELOCAL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">NAME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">NOTESTOPPART</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">NOTIFYDELETE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">NOTIFYMODIFY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ORGANIZER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ORIGATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ORIGEQUIPMENT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">ORIGLOCATIONS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">OTHERATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">PARSEALARM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">PARSEALARMDATA</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">PRIORITY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">PRIVACY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">PTST</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RECURRING</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">REMOVEALLCHANGELISTENERS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">REMOVEALLTAGSLOCAL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">REMOVEATTACHMENT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">REMOVECHANGELISTENER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RESETREPEATCUSTOMDAYOFWEEK</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RESETREPEATMONTHLYDAYLIST</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RESETREPEATWEEKLYDAYS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RESETREPEATYEARLYMONTHSLIST</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RIDZ</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">RSVP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SAVE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SENTBY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SERIESINVID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETALLDAYEVENT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETATTACHMENTS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETATTENDEETOOLTIPDATA</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETDATERANGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETENDDATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETFOLDERID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETFROMMAILMESSAGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETFROMMESSAGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETINCLUDEEDITREPLY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETMAILNOTIFICATIONOPTION</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETNAME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETNOBUSYOVERLAY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETORGANIZER</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETRECURTYPE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETREMINDERMINUTES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETRSVP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETSTARTDATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETTEXTNOTES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETTIMEZONE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETTYPE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SETVIEWMODE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SHOULDRSVP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">SHOWBLOBMISSINGDLG</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">STARTDATE</td> <td> Tue Jul 28 2009 11:00:00 GMT-0500 (CST) </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">STARTSINUTC</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">STATUS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TAGHASH</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TAGLOCAL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TAGS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TIMEZONE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TOOLTIP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TOSTRING</td> <td> function toString() { [native code] } </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TRANSPARENCY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TYPE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">TZO</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">UID</td> <td> 02b205bf-72cc-48c7-a0ec-0862ae321124 </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">UNIQSTARTTIME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">VIEWMODE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDATTENDEESTOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDATTENDEETOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDDATETIMETOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDEXTRASTOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDINVITEANDCOMPNUM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDLOCATIONTOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDNOTESTOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDXPARAMTOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDXPROPSTOALARM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ADDXPROPSTOSOAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ATTENDEES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_CURRENTLYLOADED</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_DOCANCEL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_EVT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_EVTMGR</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_FANOUTFIRST</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_FANOUTLAST</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_FANOUTNUM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETATTR</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETCLEANHTML2TEXT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETDEFAULTBLURB</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETDEFAULTFOLDERID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETFLAGS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETINVITEFROMERROR</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETSOAPFORMODE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETTEXTSUMMARYTIME</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_GETTTDAY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_HANDLECANCELERROR</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_HANDLEERRORGETDETAILS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_HANDLEERRORGETDETAILS2</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_HANDLERESPONSEGETDETAILS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_HANDLERESPONSESEND</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_LAYOUT</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_LOADFROMDOM</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_NOBUSYOVERLAY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_NOTIFY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ORIG</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ORIGSTARTDATE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_ORIGTIMEZONE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_PARSEFLAGS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_PARSETAGS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_PTSTLOCATIONMAP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_RECURRENCE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_REMINDERMINUTES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_REPLIES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_RESETCACHED</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SENDNOTIFICATIONMAIL</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SENDREQUEST</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETALARMDATA</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETALARMFROMMESSAGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETALARMXPROPS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETEXTRASFROMMESSAGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETNOTES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETRECURRENCE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETSIMPLESOAPATTRIBUTES</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_SETTIMEFROMMESSAGE</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_STARTTIMEUNIQID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_TOOLTIP</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_TRIMNOTESSUMMARY</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_UNIQID</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_UPDATEPARTICIPANTSTATUS</td> <td> undefined </td> </tr> <tr> <td class="struct" onclick="cfdump_toggleRow(this);" style="cursor: pointer;" title="click to collapse">_VALIDATTACHMENTS</td> <td> undefined </td></tr></tbody></table>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-39981969059188717012009-02-11T20:19:00.000-08:002009-07-23T13:02:26.540-07:00Upgrading MySQL 3.23.58 to 5 [WIP]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.<br /><br />Backup existing data:<br /><span style="font-weight: bold;font-family:courier new;" >mysqldump --all-databases</span><b style="font-weight: bold; font-family: courier new;"> </b><b style="font-weight: bold; font-family: courier new;">--quote-names</b><span style="font-weight: bold;font-family:courier new;" > -u root -p > backup.sql</span><br /><br />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.<br /><br />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:<br /><span style="font-weight: bold;font-family:courier new;" >grep 'CREATE DATABASE' backup.sql > bobby_droptables.sql</span><br /><span style="font-weight: bold;font-family:courier new;" >vi bobby_droptables.sql</span><br /><span style="font-weight: bold;font-family:courier new;" >:% s/CREATE/DROP/g</span><br /><span style="color: rgb(204, 0, 0); font-weight: bold;">** Remove the line: DROP DATABASE mysql; **</span><br /><br />If the import fails, you can run:<br /><span style="font-weight: bold;font-family:courier new;" >cat bobby_droptables.sql | mysql -u root -p</span><br /><br />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.<br /><br />Did this instead:<br /><span style="font-family:courier new;"><span style="font-weight: bold;">vi backup.sql<br /></span></span><span style="font-weight: bold;font-family:courier new;" >:% s/CREATE\sDATABASE\s\/\*\!32312\sIF\sNOT\sEXISTS\*\/\s\([a-zA-z0-9\_\-]*\);/CREATE DATABASE `\1\`;/g</span><br />The above RegEx puts back ticks around all database names.<br /><br />My backup.sql had create statements such as this:<br /><span style="font-weight: bold;font-family:courier new;" >CREATE DATABASE /*!32312 IF NOT EXISTS*/ some_database_name_here;</span><br />If your statement is different you may need to tweak the RegEx above.<br /><br />Also, I added:<br /><span style="font-weight: bold;font-family:courier new;" >DROP DATABASE mysql;</span><br />... immediately before the CREATE DATABASE mysql; statement. <del>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.</del> It worked!<br /><br />Now after all this, I was finally able to import the sql:<br /><span style="font-weight: bold;font-family:courier new;" >cat backup.sql | mysql -u root -p --verbose</span><br />--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:<br /><span style="font-weight: bold;font-family:courier new;" >mysql -u root -p</span><br /><span style="font-weight: bold;font-family:courier new;" >show databases;</span><br />but with --verbose you get to see all the SQL whiz past your screen.<br /><br /><span style="font-weight: bold;font-family:courier new;" ></span>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-66930798925846186882008-12-23T12:22:00.000-08:002008-12-23T12:24:26.051-08:00SQL Developer + tnsnames.ora for UWMAfter 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.<br /><br />For Linux machines:<br /> -get tnsnames.ora from: <a class="moz-txt-link-freetext" href="https://mumbles.imt.uwm.edu/dbdoc/tnsnames-noworld.php">https://mumbles.imt.uwm.edu/dbdoc/tnsnames-noworld.php</a><br /> -copy the file to: /etc<br /><br />For Windows XP machines:<br /> -get tnsnames.ora from: <a class="moz-txt-link-freetext" href="https://mumbles.imt.uwm.edu/dbdoc/tnsnames-world.php">https://mumbles.imt.uwm.edu/dbdoc/tnsnames-world.php</a><br /> -copy to c:\tnsnames\ (or some other directory where it will never be moved)<br /> -right-click "My Computer" and select "Properties"<br /> -click "Advanced" tab<br /> -click "Environment Variables"<br /> -under "System variables" click "New"<br /> -"Variable name:" TNS_ADMIN (must be caps)<br /> -"Variable value:" c:\tnsnames\ (or whatever directory you used above)<br /> -Click "OK"<br /> -Click "OK"<br /> -Click "OK"<br /><br />Ref:<br /><a class="moz-txt-link-freetext" href="http://wiki.oracle.com/page/SQL+Developer+FAQ?t=anon">http://wiki.oracle.com/page/SQL+Developer+FAQ?t=anon</a><br /><br /> * How does SQL Developer find my TNSNames file?<br /> o SQL Developer checks the following:<br /> 1) $HOME/tnsnames.ora<br /> 2) $TNS_ADMIN/tnsnames.ora<br /> 3) /etc/tnsnames.ora ( non-windows )<br /> 4) $ORACLE_HOME/network/admin/tnsnames.ora<br /> 5) Registry KeyQuinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-67599849501416510742008-11-02T23:05:00.001-08:002008-11-02T23:09:02.900-08:00Wicked JujuSpent 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.<br /><br />No dice!<br /><br />Found this wicked juju from: http://mlblog.osdir.com/multimedia.mvpmc.user/2006-05/msg00020.shtml<br />Reposting it here for posterity:<br /><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%;"><code>Guys,<br /><br />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):<br /><br />After trying several experiments, the following sequence got me back to reliable time and time again booting (until you boot from flash again):<br /><br /> * Unplug the MVP for (I got it to work with a 90 second to 120 second cycle).<br /> * After the 120 seconds have elapsed, unplug the ethernet cable (I think leaving it plugged in may help bleed off any capacitors)<br /> * 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.<br /> * Power it down<br /> * Plug in the ethernet cable<br /> * Power it up (no waiting)<br /> * You should get past the hanging last square<br /> * When you get to the screen that states to press OK within 3 seconds to configure press OK<br /> * You should notice that the MVP is re-scanning and your available server should appear on the list.<br /> * Press OK to save the configuration (this takes a while and I suspect clears out any "bad" data that may be causing the problem)<br /> * The MVP restarts<br /> * 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)<br /> * There is a delay as the mvpmc application loads and screen flashes as it boots up perfectly.<br /><br />Please let me know if this works for you as well...<br /><br />Cheers...<br /><br />Sergio<br /></code></pre>It works ... as goofy as it seems ... it works.Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-45137205232514853362008-10-31T09:24:00.000-07:002008-10-31T09:34:30.987-07:00CAS + ColdFusionThe 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):<br />Application.cfm<br /><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%;"><code><cfapplication name="my_awesome_app_name_here"<br />clientmanagement="yes" sessionmanagement="yes"<br />setclientcookies="yes" setdomaincookies="no"<br />loginstorage="session"><br /></code></pre>index.cfm<br /><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%;"><code><!--- globals ---><br /><cfparam name="url.ticket" default=""><br /><cfparam name="username" default=""><br /><cfparam name="url.action" default=""><br /><cfscript><br /> cas_path = "https://cas-server.example.edu/cas/";<br /> app_path = "https://coldfusion-server.example.edu/path/to/this/app/";<br /> cas_url = cas_path & "login?" & "service=" & app_path;<br /></cfscript><br /><br /><!--- session init ---><br /><cflock timeout="10" scope="session" type="readonly"><br /> <cfparam name="session.username" default=""><br /> <cfparam name="session.authorized" default="0"><br /></cflock><br /><br /><!--- logout action ---><br /><cfif url.action eq "logout"><br /> <!--- session reset ---><br /> <cflock scope="session" timeout="30" type="exclusive"><br /> <cfset session.username = ""><br /> <cfset session.authorized = "0"><br /> </cflock><br /><br /> <cfset cas_url = cas_path & "logout"><br /> <cflocation url="#cas_url#" addtoken="false"><br /><br /><cfelse><br /> <!--- auth check ---><br /> <cfif not len(trim(session.username))><br /> <cfif not len(trim(ticket))><br /> <cflocation url="#cas_url#" addtoken="no"><br /> <cfelse><br /> <cfset cas_url = #cas_path# & "serviceValidate?ticket=" & url.ticket & "&" & "service=" & app_path & "/"><br /> <cfhttp url="#cas_url#" method="get"/><br /> <cfset objXML = xmlParse(cfhttp.filecontent)><br /> <cfset SearchResults = XmlSearch(objXML,"cas:serviceResponse/cas:authenticationSuccess/cas:user")><br /> <br /> <cfif arraylen(SearchResults)><br /> Raw XML:<cfdump var="#cfhttp.filecontent#"><br /> <cfdump var="#objXML#" label="CAS Results"><br /> <cfdump var="#SearchResults#" label="Parsed CAS Results"><br /> <cfset username = SearchResults[1].XmlText><br /> <cflock scope="session" timeout="30" type="exclusive"><br /> <cfset session.username = username><br /> <cfset session.authorized = "1"><br /> </cflock><br /> <cfelse><br /> <cflocation url="#cas_url#" addtoken="no"><br /> </cfif><br /> </cfif><br /> </cfif><br /><br /><br /><br /> <cfif structKeyExists(url, "accessdenied")><br /> Access Error<br /> <cfelse><br /> Authenticated.<br/><br /> <cfdump var="#session#" label="ColdFusion Session Object"><br /> <a href="?action=logout">Logout</a><br/><br /> </cfif><br /></cfif><br /></code></pre>Honestly, it's a pretty simple process:<br /><ul><li>Check for a ColdFusion session</li><li>If one doesn't exist, redirect to CAS and provide a call back URL</li><li>When CAS redirects back to your application you grab the ticket and verify it server to server via cfhttp.</li><li>If the ticket checks out, you create a ColdFusion session and use it within your application.</li></ul>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.Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com3tag:blogger.com,1999:blog-5534069055846677990.post-21376124672327509012008-10-20T07:08:00.000-07:002008-10-20T07:11:52.917-07:00Zimbra URLsZimbra 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.<br /><br />For an HTML representation of a public calendar we use a URL like this:<br /><br /><a class="moz-txt-link-freetext" href="https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.html?view=week">https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.html?view=week</a><br /><br />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:<br /><br /><a class="moz-txt-link-freetext" href="https://pantherlink.uwm.edu/home/bmaas/?fmt=freebusy&view=week">https://pantherlink.uwm.edu/home/bmaas/?fmt=freebusy&view=week</a><br /><br />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:<br /><br /><a class="moz-txt-link-freetext" href="http://www.zimbrablog.com/blog/archives/2006/01/rest-update.html">http://www.zimbrablog.com/blog/archives/2006/01/rest-update.html</a><br /><br />The show examples of how to use various feed options in Zimbra. For example, if you wanted to use RSS:<br /><br /><a class="moz-txt-link-freetext" href="https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.rss">https://pantherlink.uwm.edu/zimbra/home/qkmadson/calendar.rss</a>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com1tag:blogger.com,1999:blog-5534069055846677990.post-66595917161065176532008-10-13T09:01:00.000-07:002008-10-13T09:15:00.054-07:00RapidSVN currently broken in Ubuntu RepositoryThe current package for RapidSVN segfaults constantly with the current version (as of today's date) in the Hardy Heron repos. To fix this:<ul><li>Grab the Intrepid Ibex package by editing: /etc/apt/sources.list</li><li>Do a search and replace: "hardy" for "intrepid".</li><li>Update your packages and reinstall RapidSVN.</li></ul>You can do this from the GUI side with gedit and synaptic. From the command line:<br /><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%;"><code>sudo -s<br />vim /etc/apt/sources.list<br /><br /></code></pre>in vi:<br /><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%;"><code>:%s/hardy/intrepid/gi<br />:wq!<br /><br /></code></pre>command line:<br /><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%;"><code>apt-get update<br />apt-get install rapidsvn<br /></code></pre>At this point, you should switch back to the hardy repos by editing sources.list and re-replacing intrepid for hardy.Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-69415666928810149452008-10-06T18:12:00.000-07:002008-10-06T19:09:12.889-07:00Network Debugging w/ MVPMCWhile running the MVPMC software on MVC devices, sometimes I will receive an error that the streaming server cannot be found.<br /><br />Check /var/log/messages for:<br /><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%;"><code> dhcpd: DHCPACK on 192.168.0.51 to 00:0d:fe:39:21:06 via eth0<br /><br /></code></pre>if that's the last message, make sure you run:<br /><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%;"><code>/usr/sbin/in.tftpd -l -a :16869 -s /tftpboot -v<br />/usr/bin/mvprelay 16881 5906 6337 192.168.0.1 &<br /></code></pre>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0tag:blogger.com,1999:blog-5534069055846677990.post-17458571715175746922008-08-04T11:17:00.000-07:002008-08-04T11:48:45.954-07:00Extending the Zimbra CanvasThe 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.<br /><br />It's pretty easy to get a canvas going from the JS side but, I was having issues getting the iframe style <actionUrl> functionality from the XML side. I had to reverse engineer this based on the source of ZmZimletBase();.<br /><br />Here is the XML:<br /><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%;"><code><zimlet name="edu_myschool_myzimlet" version="1.0" description="Some Zimlet"><br /><br /><include>http://www.myschool.edu/LOCATION/TO/ZIMLET/zimlet.js</include><br /><includeCSS>http://www.myschool.edu/LOCATION/TO/ZIMLET/zimlet.css</includeCSS><br /><handlerObject>Edu_myschool_myzimlet</handlerObject><br /><br /><zimletPanelItem label="Some Zimlet" icon="My-panelIcon"><br /> <toolTipText>This is a super awesome zimlet that does something.</toolTipText><br /> <contextMenu><br /> <menuItem label="Do something" id="doSomething" icon="My-panelIcon"><br /> <canvas type="dialog" width="700" height="500" /><br /> <actionUrl target="http://www.myschool.edu/LOCATION/TO/MASHUP/AWESOMENESS/" /><br /> </menuItem><br /> </contextMenu><br /> </zimletPanelItem><br /></zimlet><br /></code></pre>This sets a right-click menu using the <zimletPanelItem> directive. More importantly, (for us, right now) is that it calls out to our JavaScript. Here is what the JavaScript should look like:<br /><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%;"><code>function Edu_myschool_myzimlet() {<br />}<br /><br />Edu_myschool_myzimlet.prototype = new ZmZimletBase();<br />Edu_myschool_myzimlet.prototype.constructor = Edu_myschool_myzimlet;<br /><br />Edu_myschool_myzimlet.prototype.init =<br />function() {<br />};<br /><br />// Called by the Zimbra framework when the panel item was double clicked<br />Edu_myschool_myzimlet.prototype.doubleClicked = function() {<br /> this.singleClicked();<br />};<br /><br />// Called by the Zimbra framework when the panel item was clicked<br />Edu_myschool_myzimlet.prototype.singleClicked = function() {<br /><br /> var view = new DwtComposite(this.getShell());<br /> view.setSize("500px", "500px");<br /> var el = view.getHtmlElement();<br /> var myBox = document.createElement("div");<br /> el.appendChild(myBox);<br /><br /> var html = new Array();<br /> var i = 0;<br /> html[i++] = "First line of HTML <br/>";<br /> html[i++] = "More lines of HTML";<br /><br /> // package up html and display it<br /> myBox.innerHTML = html.join('');<br /> this._dialog = this._createDialog({title:"My Dialog Title", view:view});<br /> this._dialog.setButtonListener(DwtDialog.OK_BUTTON, new AjxListener(this, this.myHandler));<br /> this._dialog.setButtonTitle(DwtDialog.OK_BUTTON, "Go go gadget Zimlet!");<br /> this._dialog.popup();<br />};<br /><br />Edu_myschool_myzimlet.prototype.myHandler =<br />function(ev) {<br /> //do come more stuff: web services, api calls, etc<br /> this._dialog.popdown();<br />}<br /></code></pre>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.<br /><br />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 <actionUrl> does, change the click action functions:<br /><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%;"><code>Edu_myschool_myzimlet.prototype.singleClicked =<br />function() {<br /> var view = new DwtComposite(this.getShell());<br /> view.setSize("700px", "500px");<br /> var el = document.createElement("iframe");<br /> el.src = "http://www.myschool.edu/PATH/TO/MY/CODE/mashup.cfm";<br /> var sz = view.getSize();<br /> if (!AjxEnv.isIE) {<br /> // substract default frame borders<br /> sz.x -= 4;<br /> sz.y -= 4;<br /> }<br /> el.style.width = sz.x + "px";<br /> el.style.height = sz.y + "px";<br /> view.getHtmlElement().appendChild(el);<br /><br /> //TITLE OF THE DIALOG BOX<br /> var dialog_args = {<br /> title : "Example",<br /> view : view<br /> };<br /> var dlg = this._createDialog(dialog_args);<br /> dlg.popup();<br />};<br /></code></pre>From here you could add code to modify the buttons, pass a query string from JavaScript via the URL, etc.Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com1tag:blogger.com,1999:blog-5534069055846677990.post-59625908662430609662008-07-30T19:27:00.000-07:002008-12-10T03:46:13.914-08:00Dual Network Booting (Mythbuntu, MediaMVP, and random crappy laptops)<span style="font-weight: bold;font-size:130%;" >Background</span><br />I built a <a href="http://mythbuntu.org/">Mythbuntu</a> 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).<br /><br />I ended up getting 2 <a href="http://www.hauppauge.com/site/products/data_mediamvp.html">Hauppauge MediaMVPs</a>. 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: <a href="http://mvpmc.org/">http://mvpmc.org</a> that runs a small linux distro and can connect to: <span>MythTV, ReplayTV, Hauppauge, VLC, SqueezeCenter (aka SlimServer) with various other bells and/or whistles.<br /><br />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.)<br /><br />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 <a href="http://freshmeat.net/projects/atftp/">aTFTP</a> server which conflicts with Mythbuntu's diskless server.<br /><br /><span style="font-weight: bold;font-size:130%;" >HOW-TO:<br /><span style="font-size:100%;">DHCP:</span><br /></span>On the Mythbuntu media server, go to:<br /></span><ul><li><span>Applications >> System >> Mythbuntu Control Centre >> System Roles.</span></li><li>Check "Diskless Server" and "Add DHCP server"</li><li>Click "Apply"<br /></li></ul><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ffNeNtWGC6g/SJEscjl4raI/AAAAAAAAAAM/1PX6qpAbZOw/s1600-h/01-roles.jpg"><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" /></a>A progress bar will whir away and eventually the "<span>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.<br /><br />To check, go to: Applications >> Accessories >> Terminal.<br /><br />At the prompt type:<br /><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%;"><code>ls /opt/ltsp<br /></code></pre>If you see:</span><br /><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%;"><code>i386 images<br /></code></pre>... you should be all set. If the "images" directory is missing, the build failed. If the build failed, at the command prompt type:<br /><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%;"><code>sudo rm -rf i386<br />sudo ltsp-build-client --mythbuntu --mythbuntu-copy-user-credentials<br /></code></pre>If the first command fails, you can try going back to the Myth Control Centre. Diskless Server >> CPU architecture of your clients: >> i386 >> Delete Image >> Apply. <span style="font-weight: bold;">DO NOT</span> run the second command from a root shell (only run it through sudo) or it will take a long time and eventually fail.<br /><br />Moving along, commandline:<br /><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%;"><code>sudo -s<br />vim /etc/dhcp3/dhcpd.conf<br /></code></pre>[or if you don't like the vi editor (wha?) use something else]<br />make the file look like this:<br /><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%;"><code><br />authoritative;<br /><br />log-facility local7;<br /><br />option domain-name "madsonclan.net";<br />option subnet-mask 255.255.255.0;<br />option domain-name-servers 65.24.7.10, 65.24.7.11;<br /><br />allow bootp;<br />allow booting;<br /><br />#option ip-forwarding false; # No IP forwarding<br />#option mask-supplier false; # Don't respond to ICMP Mask req<br /><br />subnet 192.168.0.0 netmask 255.255.255.0 {<br />option routers 192.168.0.1;<br />range 192.168.0.100 192.168.0.250;<br />option broadcast-address 192.168.0.255;<br />option subnet-mask 255.255.255.0;<br />option root-path "/opt/ltsp/i386";<br />if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {<br />filename "/ltsp/i386/pxelinux.0";<br />} else {<br />filename "/ltsp/i386/nbi.img";<br />}<br /><br />}<br /><br />group {<br />next-server 192.168.0.1; # IP address of your TFTP server<br /><br />host mvp { # NOTE: Change the hardware ethernet to the MAC address of your actual MVP<br />hardware ethernet 00:0d:fe:39:21:04;<br />fixed-address 192.168.0.50;<br />filename "dongle.bin.mvpmc";<br />option root-path "/home/mvp,rsize=4096,wsize=4096,nolock";<br />}<br />host mvp2 {<br />hardware ethernet 00:0d:fe:39:21:06;<br />fixed-address 192.168.0.51;<br />filename "dongle.bin.mvpmc";<br />option root-path "/home/mvp,rsize=4096,wsize=4096,nolock";<br />}<br />}<br /></code></pre>[substitutions]<br />madsonclan.net = yourdomain.com or make something up<br />65.24.7.10, 65.24.7.11 = your ISP dns servers<br />192.168.0.XXX = your internal IP addresses<br />00:0d:fe:39:21:04/06 = the MAC address of you MediaMVP (sticker on the bottom)<br /><br /><span style="font-weight: bold;">MVPMC:</span><br />Go get the latest dongle.bin from: <a href="http://www.mvpmc.org/index.php?pg=downloads">mvpmc.org</a><br />and then:<br /><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%;"><code>mkdir /tftpboot<br />cp [DOWNLOADED_FILE] /tftpboot/dongle.bin<br />dd if=/tftpboot/dongle.bin of=/tftpboot/dongle.bin.ver bs=1 count=40 skip=52<br />vim /tftpboot/dongle.bin.config<br /></code></pre>file should like:<br /><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%;"><code># set up host environment variable<br />HNAME='mvp_uno'<br />export HNAME<br /><br /># time stuff<br />TZ='US, Central: CST+6CDT,M3.2.0/2,M11.1.0/2'<br />export TZ<br />echo "TZ='US, Central: CST+6CDT,M3.2.0/2,M11.1.0/2'" >; /etc/shell.config<br />echo "export TZ" >> /etc/shell.config<br />NTP=time-a.nist.gov<br /><br /># create an /etc/hosts file<br /></code><code>echo "</code><code>127.0.0.1 localhost localhost</code><code>" >> /etc/hosts<br /></code><code>echo "</code><code>192.168.0.1 media-server media-server</code><code>" >> /etc/hosts</code><br /><code>echo "192.168.0.1 eteo eteo" >> /etc/hosts #important! or mythtv won't play. replace eteo w/ myth server hostname<br /><br /># load settings<br />. /etc/udhcpc.config<br />SETTINGSDIR=/tmp/settings<br />mkdir -p ${SETTINGSDIR}<br />SETTINGS=${SETTINGSDIR}/settings<br />RSETTINGS=settings.${HNAME:-$IP}<br />LASTSAVED=${SETTINGSDIR}/.lastsaved<br />touch $LASTSAVED<br />tftp -g -r $RSETTINGS -l $SETTINGS $SERVER;<br /><br /># mounts (change for your network)<br /># i use nfs for linux and cifs for xp<br />mkdir /media<br />mkdir /media/sde1<br />mkdir /media/sda1<br />mkdir /media/sdb1<br />mkdir /media/quinn<br />mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/sde1 /media/sde1<br />mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/sda1 /media/sda1<br />mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/sdb1 /media/sdb1<br />#mount -t nfs -o nolock,rsize=4096,wsize=4096,nfsvers=3 192.168.0.1:/media/quinn /media/quinn<br />mount.cifs //192.168.0.23/quinn /media/quinn/ -o user=someuser,pass=somepass,rsize=34000<br /><br /># save settings<br />(<br />while true; do<br />if [ $SETTINGS -nt $LASTSAVED ] ; then<br /> tftp -p -l $SETTINGS -r $RSETTINGS $SERVER;<br /> touch $LASTSAVED;<br />fi;<br />sleep 300;<br />done<br />)&<br /><br /># mvpmc settings<br /><br />#known working<br />#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 &<br /><br />#real-world<br />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 &<br /></code></pre>Change IPs, hostnames, drive mappings, weather code, etc for your needs.<br /><br /><span style="font-weight: bold;">TFTP/NBD:</span><br /><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%;"><code>vim /etc/inetd.conf<br /></code></pre><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%;"><code>tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /tftpboot<br />9571 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/ldminfod<br />9572 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nbdswapd<br />2000 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nbdrootd /opt/ltsp/images/i386.img<br /><br /></code></pre><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%;"><code>vim /etc/nbd-server/config<br /></code></pre><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%;"><code>[generic]<br /># If you want to run everything as root rather than the nbd user, you<br /># may either say "root" in the two following lines, or remove them<br /># altogether. Do not remove the [generic] section, however.<br /> user = nbd<br /> group = nbd<br /><br /># What follows are export definitions. You may create as much of them as<br /># you want, but the section header has to be unique.<br />[export]<br /> exportname = /opt/ltsp/images/i386.img<br /> port = 2000<br /><br /></code></pre>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.<br /><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%;"><code>/etc/init.d/dhcdbd restart<br />/etc/init.d/dhcp3-server restart<br />/etc/init.d/nbd-server restart<br />/etc/init.d/xinetd restart<br /></code></pre>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.<br /><br /><span style="font-weight: bold;">Oh yea:<br /></span>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: <a href="https://help.ubuntu.com/community/MythTV/MediaMVP_Frontend">https://help.ubuntu.com/community/MythTV/MediaMVP_Frontend</a><br /><br />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.<br /><br /><span style="font-weight: bold;">Still have problems:</span><br />This forum thread is pretty invaluable and if all else fails, ask them: <a href="http://ubuntuforums.org/showthread.php?t=711079">http://ubuntuforums.org/showthread.php?t=711079</a><br /><span style="font-weight: bold;"></span>Quinn Madsonhttp://www.blogger.com/profile/11116935753626676975noreply@blogger.com0