<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>deekayen's blog</title>
  <link rel="alternate" type="text/html" href="http://deekayen.net/blog/deekayen"/>
  <link rel="self" type="application/atom+xml" href="http://deekayen.net/blog/1/atom/feed"/>
  <id>http://deekayen.net/blog/1/atom/feed</id>
  <updated>2007-11-21T17:31:32+00:00</updated>
  <entry>
    <title>President Ham Sandwich</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/president-ham-sandwich" />
    <id>http://deekayen.net/president-ham-sandwich</id>
    <published>2008-05-13T20:31:53+00:00</published>
    <updated>2008-05-13T20:31:53+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="ham" />
    <category term="joke" />
    <category term="politics" />
    <category term="sandwich" />
    <summary type="html"><![CDATA[<p>I was talking about Bob Barr for president 2008 and one of my coworkers made some good points about how he's just an old-school Republican in Libertarian disguise. When I asked who I could vote for instead, he asked if he could write-in Ham Sandwich. The coworker on the opposite side of me said he'd like to vote for a poodle. That inevitably led to the question, how long before Vice President Poodle ate President Ham Sandwich?</p>    ]]></summary>
    <content type="html"><![CDATA[<p>I was talking about Bob Barr for president 2008 and one of my coworkers made some good points about how he's just an old-school Republican in Libertarian disguise. When I asked who I could vote for instead, he asked if he could write-in Ham Sandwich. The coworker on the opposite side of me said he'd like to vote for a poodle. That inevitably led to the question, how long before Vice President Poodle ate President Ham Sandwich?</p><a href="http://ypn-rss.overture.com/rss/31384/1243/click/"><img src="http://ypn-rss.overture.com/rss/31384/1243/img/?url=http%3A%2F%2Fdeekayen.net%2Fpresident-ham-sandwich&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Zend Studio for Eclipse Drupal formatter</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/zend-studio-eclipse-drupal-formatter" />
    <id>http://deekayen.net/zend-studio-eclipse-drupal-formatter</id>
    <published>2008-05-05T17:33:31+00:00</published>
    <updated>2008-05-05T17:33:31+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="coding standards" />
    <category term="Drupal" />
    <category term="Eclipse" />
    <category term="PHP" />
    <category term="Zend" />
    <summary type="html"><![CDATA[<p>For years I've been a paying customer of <a href="http://www.zend.com/">Zend</a>, using their Zend Studio Professional. They discontinued production of their custom Java version and opted to switch to making plugins for <a href="http://www.eclipse.org/">Eclipse</a>.</p>
<p>I'm just now switching from the old Zend to the new one and discovered a formatter to handle all the code spacing automatically. Naturally, since I do most of my work with Drupal, I made a custom formatter file to follow coding standards for 4.7.x to 6.x. There have been some standards changes to take effect for D7, and I'm not coding for that yet, so this should be a good file for a general audience.</p>
<p>In your Zend for Eclipse or PDT install, go to the preferences, PHP section, Formatter and Import... the attached XML file.</p>
<p>Don't forget to also run your code through the <a href="http://drupal.org/project/coder/">coder module</a>, which will not only check your coding style, but look for upgrades, database injections, and some other cool things.</p>    ]]></summary>
    <content type="html"><![CDATA[<p>For years I've been a paying customer of <a href="http://www.zend.com/">Zend</a>, using their Zend Studio Professional. They discontinued production of their custom Java version and opted to switch to making plugins for <a href="http://www.eclipse.org/">Eclipse</a>.</p>
<p>I'm just now switching from the old Zend to the new one and discovered a formatter to handle all the code spacing automatically. Naturally, since I do most of my work with Drupal, I made a custom formatter file to follow coding standards for 4.7.x to 6.x. There have been some standards changes to take effect for D7, and I'm not coding for that yet, so this should be a good file for a general audience.</p>
<p>In your Zend for Eclipse or PDT install, go to the preferences, PHP section, Formatter and Import... the attached XML file.</p>
<p>Don't forget to also run your code through the <a href="http://drupal.org/project/coder/">coder module</a>, which will not only check your coding style, but look for upgrades, database injections, and some other cool things.</p><a href="http://ypn-rss.overture.com/rss/31384/1242/click/"><img src="http://ypn-rss.overture.com/rss/31384/1242/img/?url=http%3A%2F%2Fdeekayen.net%2Fzend-studio-eclipse-drupal-formatter&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Learning DVORAK</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/learning-dvorak" />
    <id>http://deekayen.net/learning-dvorak</id>
    <published>2008-03-25T13:43:11+00:00</published>
    <updated>2008-03-25T13:43:11+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="DVORAK" />
    <summary type="html"><![CDATA[<p><img src="http://deekayen.net/sites/deekayen.net/files/DVORAK.jpg" width="212" height="111" alt="DVORAK keyboard layout on MacBook Pro" style="float: right" />I'm very slowly learning the DVORAK keyboard layout. In a rare occasion for me to actually purchase software, I have copies of <a href="http://www.tenthumbstypingtutor.com/">Ten Thumbs</a> and <a href="http://macinmind.com/">Master Key</a>. They're both great programs each with their own strengths and they were good starts for introducing me to the home row. While I could have practiced by blogging, last night I used <a href="http://recaptcha.net/">reCAPTCHA</a> as my word list for practice. Their <a href="http://recaptcha.net/learnmore.html">learn more</a> page has a demo box you can use to submit OCR strings. Learning to type all over again is frustrating to say the least, but I'm convinced it's worth it.</p>
<p>If you have a Mac, and want to convert to DVORAK, grab the top two corners of your keys and pull forward. There's a lip on the bottom of the key holding that part on. Just be sure you grab the tippy tip of the corners because otherwise you'll also grab the white clips that hold on to the body of the keyboard and those are a pain to put back together.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p><img src="http://deekayen.net/sites/deekayen.net/files/DVORAK.jpg" width="212" height="111" alt="DVORAK keyboard layout on MacBook Pro" style="float: right" />I'm very slowly learning the DVORAK keyboard layout. In a rare occasion for me to actually purchase software, I have copies of <a href="http://www.tenthumbstypingtutor.com/">Ten Thumbs</a> and <a href="http://macinmind.com/">Master Key</a>. They're both great programs each with their own strengths and they were good starts for introducing me to the home row. While I could have practiced by blogging, last night I used <a href="http://recaptcha.net/">reCAPTCHA</a> as my word list for practice. Their <a href="http://recaptcha.net/learnmore.html">learn more</a> page has a demo box you can use to submit OCR strings. Learning to type all over again is frustrating to say the least, but I'm convinced it's worth it.</p>
<p>If you have a Mac, and want to convert to DVORAK, grab the top two corners of your keys and pull forward. There's a lip on the bottom of the key holding that part on. Just be sure you grab the tippy tip of the corners because otherwise you'll also grab the white clips that hold on to the body of the keyboard and those are a pain to put back together.</p>
<a href="http://ypn-rss.overture.com/rss/31384/1237/click/"><img src="http://ypn-rss.overture.com/rss/31384/1237/img/?url=http%3A%2F%2Fdeekayen.net%2Flearning-dvorak&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Automate unchecking checkboxes</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/automate-unchecking-checkboxes" />
    <id>http://deekayen.net/automate-unchecking-checkboxes</id>
    <published>2008-03-17T21:03:36+00:00</published>
    <updated>2008-03-18T16:00:51+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="checkbox" />
    <category term="Drupal" />
    <category term="greasemonkey" />
    <summary type="html"><![CDATA[<p>I'm doing some testing of an upgrade for a site from <a href="http://drupal.org/">Drupal</a> 4.7.x to 5.x. As part of the major version upgrades in Drupal, you're supposed to disable all the modules you have installed. Since I got tired of unchecking boxes, I used the <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> addon for <a href="http://www.mozilla.com/">Firefox</a> 2 to do it for me.</p>
<p>Once the addon is installed, right click on the monkey face in your status bar and make a new user script.</p>
<pre>
name: Uncheck Boxes
namespace: uncheck_boxes
description: Unchecks all checkboxes that are enabled by default
include: <a href="http://yourtestlocation/admin/modules" title="http://yourtestlocation/admin/modules">http://yourtestlocation/admin/modules</a>
</pre><p>
When you hit ok, your default text editor will ask you for script content.</p>
<p>
<div class="codeblock"><code>// ==UserScript==&lt;br /&gt;// @name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Uncheck Boxes&lt;br /&gt;// @namespace&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; uncheck_boxes&lt;br /&gt;// @description&amp;nbsp;&amp;nbsp;&amp;nbsp; Unchecks all checkboxes enabled by default&lt;br /&gt;// @include&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://davidnorman.local/test25/admin/modules&quot; title=&quot;http://davidnorman.local/test25/admin/modules&quot;&gt;http://davidnorman.local/test25/admin/modules&lt;/a&gt;&lt;br /&gt;// ==/UserScript==&lt;br /&gt;&lt;br /&gt;var chkboxes=document.getElementsByTagName(&amp;#039;input&amp;#039;)&lt;br /&gt;for (var i=0; i &amp;lt; chkboxes.length; i++) {&lt;br /&gt;&amp;nbsp; if (chkboxes[i].type==&amp;quot;checkbox&amp;quot;) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chkboxes[i].checked=false&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}</code></div>
</p>
<p>That's it! Reload your modules page and all the checkboxes should be unchecked by default. When you're done disabling, you can right click the monkey face and uncheck your Uncheck Boxes script, disable Greasemonkey, or leave it available for other sites you want to uncheck by default.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>I'm doing some testing of an upgrade for a site from <a href="http://drupal.org/">Drupal</a> 4.7.x to 5.x. As part of the major version upgrades in Drupal, you're supposed to disable all the modules you have installed. Since I got tired of unchecking boxes, I used the <a href="https://addons.mozilla.org/en-US/firefox/addon/748">Greasemonkey</a> addon for <a href="http://www.mozilla.com/">Firefox</a> 2 to do it for me.</p>
<p>Once the addon is installed, right click on the monkey face in your status bar and make a new user script.</p>
<pre>
name: Uncheck Boxes
namespace: uncheck_boxes
description: Unchecks all checkboxes that are enabled by default
include: <a href="http://yourtestlocation/admin/modules" title="http://yourtestlocation/admin/modules">http://yourtestlocation/admin/modules</a>
</pre><p>
When you hit ok, your default text editor will ask you for script content.</p>
<p><div class="codeblock"><code>// ==UserScript==<br />// @name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Uncheck Boxes<br />// @namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uncheck_boxes<br />// @description&nbsp;&nbsp;&nbsp; Unchecks all checkboxes enabled by default<br />// @include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://davidnorman.local/test25/admin/modules" title="http://davidnorman.local/test25/admin/modules">http://davidnorman.local/test25/admin/modules</a><br />// ==/UserScript==<br /><br />var chkboxes=document.getElementsByTagName(&#039;input&#039;)<br />for (var i=0; i &lt; chkboxes.length; i++) {<br />&nbsp; if (chkboxes[i].type==&quot;checkbox&quot;) {<br />&nbsp;&nbsp;&nbsp; chkboxes[i].checked=false<br />&nbsp; }<br />}</code></div></p>
<p>That's it! Reload your modules page and all the checkboxes should be unchecked by default. When you're done disabling, you can right click the monkey face and uncheck your Uncheck Boxes script, disable Greasemonkey, or leave it available for other sites you want to uncheck by default.</p>
<a href="http://ypn-rss.overture.com/rss/31384/1235/click/"><img src="http://ypn-rss.overture.com/rss/31384/1235/img/?url=http%3A%2F%2Fdeekayen.net%2Fautomate-unchecking-checkboxes&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>My Firefox2 addons</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/my-firefox2-addons" />
    <id>http://deekayen.net/my-firefox2-addons</id>
    <published>2008-03-17T17:11:52+00:00</published>
    <updated>2008-04-05T20:15:32+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="firefox" />
    <summary type="html"><![CDATA[<p>I've been using <a href="http://arvidaxelsson.se/qute/">Qute</a> as my theme for probably years now. I have tried others, but I keep coming back to Qute. The rest of this list is extensions.</p>
<ol>
<li><a href="http://adblockplus.org/">Adblock Plus</a> Turned off most of the time, but doesn't load ads on webpages when it is enabled.</li>
<li style="font-weight: bold"><a href="http://autocopy.mozdev.org/">Autocopy</a> Copies text you highlight in Firefox to the clipboard automatically.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/1478">Clipboard Save As</a> Save the clipboard as a file.</li>
<li><a href="http://www.iosart.com/firefox/colorzilla/">ColorZilla</a> For those rare times I do website themeing and want to know what a hex color value is on a different website I like.</li>
<li><a href="http://cookieswap.mozdev.org/">CookieSwap</a> Switch users on the same website without having to logout.</li>
<li><a href="http://www.customizegoogle.com/">CustomizeGoogle</a> My favorite options: turn off Google's tracking cookies but still be logged in, removes ads from google.com pages, adds links to competitors, refuse cookies from Google Analytics (though I also let NoScript refuse those), and auto-switch to https where possible.</li>
<li><a href="http://www.gness.com/distrust/">Distrust</a> For when I want to minimize traces of my browsing for a short period of time.</li>
<li style="font-weight: bold"><a href="http://www.downthemall.net/">DownThemAll!</a> I originally installed this to download all the MP3s on webpage I subscribed to without having to click 50 links (it let me just download everything with .mp3 ink the link very easily). Now I use it because it saves download location favorites, has a nicer download queue than Firefox's default, and has some resume functionality I can interact with.</li>
<li><a href="http://www.getfirebug.com/">Firebug</a> Just standard to the web developer's toolkit now. I most often use it with <a href="http://developer.yahoo.com/yslow/">YSlow</a> for optimizing page loading performance. It's supposed to help with javascript debugging, too, but I can't speak to that.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/2109">FEBE</a> It backs up your Firefox config and addons. I think it might only be useful if you're afraid your hard drive will crash and Firefox will stop allowing downloads of addons to replace them at the same time.</li>
<li style="font-weight: bold"><a href="http://fireftp.mozdev.org/">FireFTP</a> FTP Client that's actually pretty good.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/1882">Formfiller</a> Fills in repetitive forms more easily.</li>
<li style="font-weight: bold"><a href="http://foxyproxy.mozdev.org/">FoxyProxy</a> I used to use <a href="http://freehaven.net/~squires/torbutton/">Torbutton</a> instead of this, but FoxyProxy has a configuration wizard to setup for working with Tor and it lets you set white and blacklist rules for sites you want to be proxied. This was especially an issue for me when I wouldn't want my localhost/127.0.0.1/davidnorman.local requests to go through privoxy or I wanted to send traffic I didn't trust with a random Tor exit server.</li>
<li><a href="http://www.google.com/tools/firefox/sendtophone/">Google Send to Phone</a> Sends text messages for free.</li>
<li><a href="http://www.greasespot.net/">Greasemonkey</a> A quick way to write interface modifications for webpages if you're handy at scripting.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/3899">Hackbar</a> A toolbar for shortcuts to creating tests for SQL injections.</li>
<li><a href="http://www.iopus.com/imacros/firefox/">iMacros for Firefox</a> When I was selecting and submitting a form over and over again, this was a cool way to record what I did one time, then just replay it for each new test.</li>
<li><a href="http://www.kevinfreitas.net/extensions/measureit/">MeasureIt</a> A pixel ruler. There's also one in the <a href="http://chrispederick.com/work/web-developer/">Web Developer</a> addon, but this one gets added to the bottom left of the status bar for easy finding next to the <a href="http://www.iosart.com/firefox/colorzilla/">ColorZilla</a> and <a href="http://www.gusprevas.com/palettegrabber/">Palette Grabber</a> buttons.</li>
<li><a href="http://noscript.net/">NoScript</a> Blocks Javascript, Flash, Java, and suspicious redirects by default.</li>
<li><a href="http://www.gnuman.ru/pte/">Page Title Eraser</a> Useful when you're taking a screenshot and don't want the recipient to know where the website is (e.g. intranet, client who hasn't paid, etc)</li>
<li style="font-weight: bold"><a href="http://pasteandgo2.mozdev.org/">Paste and Go 2</a> One of the simple pleasure addons that allowes you to right-click in the address bar, select "Paste and go 2" and you instantly load the page without having to click go or hit enter.</li>
<li><a href="http://www.stardrifter.org/refcontrol/">refcontrol</a> Control who you send Referrer headers to.</li>
<li style="font-weight: bold"><a href="http://trac.arantius.com/wiki/Extensions/Resurrect">Resurrect Pages</a> When a page is Not Found, this will add links to various Internet archives and search engine caches to find an old version of the URL.</li>
<li style="font-weight: bold"><a href="http://www.screengrab.org/">Screen Grab!</a> Save a webpage as an image (screenshot). Saves as a PNG. Not much to say, but it's a great tool; I use it often.</li>
<li style="font-weight: bold"><a href="http://exaltations.net/weblogs/christefano/a_more_secure_drupal_org">securedrupalorg</a> Automatically redirects requests from <a href="http://drupal.org/user" title="http://drupal.org/user">http://drupal.org/user</a> to <a href="https://drupal.org/user" title="https://drupal.org/user">https://drupal.org/user</a>.</li>
<li style="font-weight: bold"><a href="http://labs.beffa.org/sendreferer/">Send Referer</a> By default, turns off sending Referers to webpages unless you select to open the link by right clicking to select the Open Links with Referer Header option.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/4336">Snap Links</a> Right-click drag over a group of links and open them all in new tabs automatically. Doesn't work on Mac, but I like it on Linux and Windows.</li>
<li style="font-weight: bold"><a href="https://addons.mozilla.org/en-US/firefox/addon/3275">Split Pannel</a> Like the split screen you might know better from MS Word. Lets you use the side panel as a website browser so you can view two pages next to each other. <a href="http://piro.sakura.ne.jp/xul/_splitbrowser.html.en">Split Browser</a> has more features, but I've pinpointed it as the cause for my Firefox crashing lots.</a></li>
<li style="font-weight: bold"><a href="http://tmp.garyr.net/">Tab Mix Plus</a> Instead of having my tabs spill off the screen when I open lots, I stack them in rows. It also has features for freezing, protecting, locking, reloading, recovering, resizing, renaming, and other things to tabs.</li>
<li style="font-weight: bold"><a href="https://addons.mozilla.org/en-US/firefox/addon/2063">Timestamp Converter</a> Popup mini app for converting UNIX timestamps to something readable or vice versa.</li>
<li><a href="http://dev.deboot.sk/firefox/timestampdecode/">Timestamp Decode</a> Does the same thing as <a href="https://addons.mozilla.org/en-US/firefox/addon/2063">Timestamp Converter</a>, but based on text you highlight. It's hard to remember I have this option, so I'm not sure I've actually used it.</li>
<li><a href="http://www.contrex.ca/gecko/">Unhide Passwords</a> Lets you see the text in a password field instead of just asterisks. <a href="http://chrispederick.com/work/web-developer/">Web Developer</a> has something similar, but this addon is turned on all password fields all the time. Unfortunately, it doesn't catch every password field and convert it to plaintext.</li>
<li><a href="http://www.chrisfinke.com/addons/url-fixer/">URL Fixer</a> Auto-fixes common typos in the URL bar.</li>
<li><a href="http://www.fnxweb.com/software-mozilla">URL Link</a> Visit a URL by right clicking on it when the website author didn't make it clickable (by wrapping it in a HREF tag).</li>
<li><a href="http://chrispederick.com/work/user-agent-switcher/">User Agent Switcher</a> If you've never tried it, sometimes websites show different content if you pretend to be Googlebot.</li>
<li style="font-weight: bold"><a href="http://chrispederick.com/work/web-developer/">Web Developer</a> If you're a web developer, you're probably already nodding your head about just how essential this addon is.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/3960">Xdebug Helper</a> I had to modify this one's XPI source to get it working. Worth the trouble if you use Xdebug.</li>
<li><a href="http://developer.yahoo.com/yslow/">YSlow</a> Gives you advice on how to optimize your webpage.</li>
<li><a href="http://www.zend.com/">Zend Studio Toolbar</a> Debug helper. A must if you're using Zend Studio to step through files.</li>
</ol>
    ]]></summary>
    <content type="html"><![CDATA[<p>I've been using <a href="http://arvidaxelsson.se/qute/">Qute</a> as my theme for probably years now. I have tried others, but I keep coming back to Qute. The rest of this list is extensions.</p>
<ol>
<li><a href="http://adblockplus.org/">Adblock Plus</a> Turned off most of the time, but doesn't load ads on webpages when it is enabled.</li>
<li style="font-weight: bold"><a href="http://autocopy.mozdev.org/">Autocopy</a> Copies text you highlight in Firefox to the clipboard automatically.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/1478">Clipboard Save As</a> Save the clipboard as a file.</li>
<li><a href="http://www.iosart.com/firefox/colorzilla/">ColorZilla</a> For those rare times I do website themeing and want to know what a hex color value is on a different website I like.</li>
<li><a href="http://cookieswap.mozdev.org/">CookieSwap</a> Switch users on the same website without having to logout.</li>
<li><a href="http://www.customizegoogle.com/">CustomizeGoogle</a> My favorite options: turn off Google's tracking cookies but still be logged in, removes ads from google.com pages, adds links to competitors, refuse cookies from Google Analytics (though I also let NoScript refuse those), and auto-switch to https where possible.</li>
<li><a href="http://www.gness.com/distrust/">Distrust</a> For when I want to minimize traces of my browsing for a short period of time.</li>
<li style="font-weight: bold"><a href="http://www.downthemall.net/">DownThemAll!</a> I originally installed this to download all the MP3s on webpage I subscribed to without having to click 50 links (it let me just download everything with .mp3 ink the link very easily). Now I use it because it saves download location favorites, has a nicer download queue than Firefox's default, and has some resume functionality I can interact with.</li>
<li><a href="http://www.getfirebug.com/">Firebug</a> Just standard to the web developer's toolkit now. I most often use it with <a href="http://developer.yahoo.com/yslow/">YSlow</a> for optimizing page loading performance. It's supposed to help with javascript debugging, too, but I can't speak to that.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/2109">FEBE</a> It backs up your Firefox config and addons. I think it might only be useful if you're afraid your hard drive will crash and Firefox will stop allowing downloads of addons to replace them at the same time.</li>
<li style="font-weight: bold"><a href="http://fireftp.mozdev.org/">FireFTP</a> FTP Client that's actually pretty good.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/1882">Formfiller</a> Fills in repetitive forms more easily.</li>
<li style="font-weight: bold"><a href="http://foxyproxy.mozdev.org/">FoxyProxy</a> I used to use <a href="http://freehaven.net/~squires/torbutton/">Torbutton</a> instead of this, but FoxyProxy has a configuration wizard to setup for working with Tor and it lets you set white and blacklist rules for sites you want to be proxied. This was especially an issue for me when I wouldn't want my localhost/127.0.0.1/davidnorman.local requests to go through privoxy or I wanted to send traffic I didn't trust with a random Tor exit server.</li>
<li><a href="http://www.google.com/tools/firefox/sendtophone/">Google Send to Phone</a> Sends text messages for free.</li>
<li><a href="http://www.greasespot.net/">Greasemonkey</a> A quick way to write interface modifications for webpages if you're handy at scripting.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/3899">Hackbar</a> A toolbar for shortcuts to creating tests for SQL injections.</li>
<li><a href="http://www.iopus.com/imacros/firefox/">iMacros for Firefox</a> When I was selecting and submitting a form over and over again, this was a cool way to record what I did one time, then just replay it for each new test.</li>
<li><a href="http://www.kevinfreitas.net/extensions/measureit/">MeasureIt</a> A pixel ruler. There's also one in the <a href="http://chrispederick.com/work/web-developer/">Web Developer</a> addon, but this one gets added to the bottom left of the status bar for easy finding next to the <a href="http://www.iosart.com/firefox/colorzilla/">ColorZilla</a> and <a href="http://www.gusprevas.com/palettegrabber/">Palette Grabber</a> buttons.</li>
<li><a href="http://noscript.net/">NoScript</a> Blocks Javascript, Flash, Java, and suspicious redirects by default.</li>
<li><a href="http://www.gnuman.ru/pte/">Page Title Eraser</a> Useful when you're taking a screenshot and don't want the recipient to know where the website is (e.g. intranet, client who hasn't paid, etc)</li>
<li style="font-weight: bold"><a href="http://pasteandgo2.mozdev.org/">Paste and Go 2</a> One of the simple pleasure addons that allowes you to right-click in the address bar, select "Paste and go 2" and you instantly load the page without having to click go or hit enter.</li>
<li><a href="http://www.stardrifter.org/refcontrol/">refcontrol</a> Control who you send Referrer headers to.</li>
<li style="font-weight: bold"><a href="http://trac.arantius.com/wiki/Extensions/Resurrect">Resurrect Pages</a> When a page is Not Found, this will add links to various Internet archives and search engine caches to find an old version of the URL.</li>
<li style="font-weight: bold"><a href="http://www.screengrab.org/">Screen Grab!</a> Save a webpage as an image (screenshot). Saves as a PNG. Not much to say, but it's a great tool; I use it often.</li>
<li style="font-weight: bold"><a href="http://exaltations.net/weblogs/christefano/a_more_secure_drupal_org">securedrupalorg</a> Automatically redirects requests from <a href="http://drupal.org/user" title="http://drupal.org/user">http://drupal.org/user</a> to <a href="https://drupal.org/user" title="https://drupal.org/user">https://drupal.org/user</a>.</li>
<li style="font-weight: bold"><a href="http://labs.beffa.org/sendreferer/">Send Referer</a> By default, turns off sending Referers to webpages unless you select to open the link by right clicking to select the Open Links with Referer Header option.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/4336">Snap Links</a> Right-click drag over a group of links and open them all in new tabs automatically. Doesn't work on Mac, but I like it on Linux and Windows.</li>
<li style="font-weight: bold"><a href="https://addons.mozilla.org/en-US/firefox/addon/3275">Split Pannel</a> Like the split screen you might know better from MS Word. Lets you use the side panel as a website browser so you can view two pages next to each other. <a href="http://piro.sakura.ne.jp/xul/_splitbrowser.html.en">Split Browser</a> has more features, but I've pinpointed it as the cause for my Firefox crashing lots.</a></li>
<li style="font-weight: bold"><a href="http://tmp.garyr.net/">Tab Mix Plus</a> Instead of having my tabs spill off the screen when I open lots, I stack them in rows. It also has features for freezing, protecting, locking, reloading, recovering, resizing, renaming, and other things to tabs.</li>
<li style="font-weight: bold"><a href="https://addons.mozilla.org/en-US/firefox/addon/2063">Timestamp Converter</a> Popup mini app for converting UNIX timestamps to something readable or vice versa.</li>
<li><a href="http://dev.deboot.sk/firefox/timestampdecode/">Timestamp Decode</a> Does the same thing as <a href="https://addons.mozilla.org/en-US/firefox/addon/2063">Timestamp Converter</a>, but based on text you highlight. It's hard to remember I have this option, so I'm not sure I've actually used it.</li>
<li><a href="http://www.contrex.ca/gecko/">Unhide Passwords</a> Lets you see the text in a password field instead of just asterisks. <a href="http://chrispederick.com/work/web-developer/">Web Developer</a> has something similar, but this addon is turned on all password fields all the time. Unfortunately, it doesn't catch every password field and convert it to plaintext.</li>
<li><a href="http://www.chrisfinke.com/addons/url-fixer/">URL Fixer</a> Auto-fixes common typos in the URL bar.</li>
<li><a href="http://www.fnxweb.com/software-mozilla">URL Link</a> Visit a URL by right clicking on it when the website author didn't make it clickable (by wrapping it in a HREF tag).</li>
<li><a href="http://chrispederick.com/work/user-agent-switcher/">User Agent Switcher</a> If you've never tried it, sometimes websites show different content if you pretend to be Googlebot.</li>
<li style="font-weight: bold"><a href="http://chrispederick.com/work/web-developer/">Web Developer</a> If you're a web developer, you're probably already nodding your head about just how essential this addon is.</li>
<li><a href="https://addons.mozilla.org/en-US/firefox/addon/3960">Xdebug Helper</a> I had to modify this one's XPI source to get it working. Worth the trouble if you use Xdebug.</li>
<li><a href="http://developer.yahoo.com/yslow/">YSlow</a> Gives you advice on how to optimize your webpage.</li>
<li><a href="http://www.zend.com/">Zend Studio Toolbar</a> Debug helper. A must if you're using Zend Studio to step through files.</li>
</ol>
<a href="http://ypn-rss.overture.com/rss/31384/1234/click/"><img src="http://ypn-rss.overture.com/rss/31384/1234/img/?url=http%3A%2F%2Fdeekayen.net%2Fmy-firefox2-addons&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Event spam</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/event-spam" />
    <id>http://deekayen.net/event-spam</id>
    <published>2008-03-17T13:22:06+00:00</published>
    <updated>2008-03-17T13:28:23+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="calendar" />
    <category term="spam" />
    <summary type="html"><![CDATA[<p>I received a new kind of spam today in my <a href="http://mail.google.com/mail/">gmail</a> account. It is an event invitation to participate in a 419 African deposit scam <em>and</em> apparently get my identity stolen in the process. Since I read my gmail in <a href="http://www.mozilla.com/thunderbird/">Thunderbird</a> and have the <a href="http://www.mozilla.org/projects/calendar/lightning/">Lightning</a> add-on installed, all I needed to do was hit the accept button on the invitation to blast a message of receipt to the spammer. Now, I'll find out how to report this new spam type.</p>
<blockquote><p>
David Norman, you are invited to</p>
<p>Title: NOTIFICATION OF REQUEST
Time: Mon Mar 17 15:00 - 16:00 (Timezone: Eastern Time)
Calendar: David Norman
Description: Dear Friend,</p>
<p>I want you to assist me and my partner to receive a package which we are working on how to move it out of our country down to your country,and we promise to give you 30% of the package.</p>
<p>We only need: (1) Your full name (2) Your address (3) Mobile Telephone number (4) Your international passport number or Photograph for us to make the deposit with your name.</p>
<p>The flight will be living with the package this weekend that is why we need your assistance for us to make sure the package live immediately.</p>
<p>The content of the package is $15 million U.S dollars our company Sell Bloc, Crude Oil want to send this money to our customers in Europe through a security company and it was declare personal effect. We want to divert the money to you so that we all will shear it,So we want you to send us the needed information for us to deposit the money with your name to the security company that will be living with the package.</p>
<p>Please we are sorry if we have offended you for the assistance,but we believe the business will change our life. I wait your reply with the information so that we will deposit it with your name as the rightful beneficiary and after that we give you the: Goods Number, Code,The Tracking Number.</p>
<p>Hoping to hear from you.</p>
<p>Thanks and God bless us,</p>
<p>Dr.Graham Douglas</p>
<p>You can view this event at <a href="http://www.google.com/calendar/event?action=VIEW&amp;eid=dGVvcnNodWxtOG1pYm10M2F1ZDhnaGxtb2cgZGVla2F5ZW5AbQ&amp;tok=MjUjZ3JhaGFtZG91Z2xhczEyQGdtYWlsLmNvbWI4NGEzYjAyOTNjYWZjYTY5YjQ0NWUxNmZkYzI0YzE5MGZiZTdlNWY&amp;ctz=America%2FNew_York&amp;hl=en" title="http://www.google.com/calendar/event?action=VIEW&amp;eid=dGVvcnNodWxtOG1pYm10M2F1ZDhnaGxtb2cgZGVla2F5ZW5AbQ&amp;tok=MjUjZ3JhaGFtZG91Z2xhczEyQGdtYWlsLmNvbWI4NGEzYjAyOTNjYWZjYTY5YjQ0NWUxNmZkYzI0YzE5MGZiZTdlNWY&amp;ctz=America%2FNew_York&amp;hl=en">http://www.google.com/calendar/event?action=VIEW&amp;eid=dGVvcnNodWxtOG1pYm1...</a></p>
<p>You can also view your calendar at <a href="http://www.google.com/calendar/" title="http://www.google.com/calendar/">http://www.google.com/calendar/</a></p>
<p>You are receiving this email at the account <a href="mailto:x@gmail.com">x@gmail.com</a> because you are subscribed for invitations on calendar David Norman.</p>
<p>To stop receiving these notifications, please log in to <a href="http://www.google.com/calendar/" title="http://www.google.com/calendar/">http://www.google.com/calendar/</a> and change your notification settings for this calendar.
</p>
</p></blockquote>    ]]></summary>
    <content type="html"><![CDATA[<p>I received a new kind of spam today in my <a href="http://mail.google.com/mail/">gmail</a> account. It is an event invitation to participate in a 419 African deposit scam <em>and</em> apparently get my identity stolen in the process. Since I read my gmail in <a href="http://www.mozilla.com/thunderbird/">Thunderbird</a> and have the <a href="http://www.mozilla.org/projects/calendar/lightning/">Lightning</a> add-on installed, all I needed to do was hit the accept button on the invitation to blast a message of receipt to the spammer. Now, I'll find out how to report this new spam type.</p>
<blockquote><p>
David Norman, you are invited to</p>
<p>Title: NOTIFICATION OF REQUEST
Time: Mon Mar 17 15:00 - 16:00 (Timezone: Eastern Time)
Calendar: David Norman
Description: Dear Friend,</p>
<p>I want you to assist me and my partner to receive a package which we are working on how to move it out of our country down to your country,and we promise to give you 30% of the package.</p>
<p>We only need: (1) Your full name (2) Your address (3) Mobile Telephone number (4) Your international passport number or Photograph for us to make the deposit with your name.</p>
<p>The flight will be living with the package this weekend that is why we need your assistance for us to make sure the package live immediately.</p>
<p>The content of the package is $15 million U.S dollars our company Sell Bloc, Crude Oil want to send this money to our customers in Europe through a security company and it was declare personal effect. We want to divert the money to you so that we all will shear it,So we want you to send us the needed information for us to deposit the money with your name to the security company that will be living with the package.</p>
<p>Please we are sorry if we have offended you for the assistance,but we believe the business will change our life. I wait your reply with the information so that we will deposit it with your name as the rightful beneficiary and after that we give you the: Goods Number, Code,The Tracking Number.</p>
<p>Hoping to hear from you.</p>
<p>Thanks and God bless us,</p>
<p>Dr.Graham Douglas</p>
<p>You can view this event at <a href="http://www.google.com/calendar/event?action=VIEW&amp;eid=dGVvcnNodWxtOG1pYm10M2F1ZDhnaGxtb2cgZGVla2F5ZW5AbQ&amp;tok=MjUjZ3JhaGFtZG91Z2xhczEyQGdtYWlsLmNvbWI4NGEzYjAyOTNjYWZjYTY5YjQ0NWUxNmZkYzI0YzE5MGZiZTdlNWY&amp;ctz=America%2FNew_York&amp;hl=en" title="http://www.google.com/calendar/event?action=VIEW&amp;eid=dGVvcnNodWxtOG1pYm10M2F1ZDhnaGxtb2cgZGVla2F5ZW5AbQ&amp;tok=MjUjZ3JhaGFtZG91Z2xhczEyQGdtYWlsLmNvbWI4NGEzYjAyOTNjYWZjYTY5YjQ0NWUxNmZkYzI0YzE5MGZiZTdlNWY&amp;ctz=America%2FNew_York&amp;hl=en">http://www.google.com/calendar/event?action=VIEW&amp;eid=dGVvcnNodWxtOG1pYm1...</a></p>
<p>You can also view your calendar at <a href="http://www.google.com/calendar/" title="http://www.google.com/calendar/">http://www.google.com/calendar/</a></p>
<p>You are receiving this email at the account <a href="mailto:x@gmail.com">x@gmail.com</a> because you are subscribed for invitations on calendar David Norman.</p>
<p>To stop receiving these notifications, please log in to <a href="http://www.google.com/calendar/" title="http://www.google.com/calendar/">http://www.google.com/calendar/</a> and change your notification settings for this calendar.
</p></blockquote><a href="http://ypn-rss.overture.com/rss/31384/1233/click/"><img src="http://ypn-rss.overture.com/rss/31384/1233/img/?url=http%3A%2F%2Fdeekayen.net%2Fevent-spam&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Residential fault tolerance</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/residential-fault-tolerance" />
    <id>http://deekayen.net/residential-fault-tolerance</id>
    <published>2008-03-14T16:29:26+00:00</published>
    <updated>2008-03-14T16:32:35+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <summary type="html"><![CDATA[<p>When discussing fault tolerance and doing backups for computer data, I thought of the following marketing scares:</p>
<blockquote><p>
"How good is your home redundancy?"
</p>
</p></blockquote>
<blockquote><p>
"When was the last time you backed up your house?"
</p>
</p></blockquote>    ]]></summary>
    <content type="html"><![CDATA[<p>When discussing fault tolerance and doing backups for computer data, I thought of the following marketing scares:</p>
<blockquote><p>
"How good is your home redundancy?"
</p></blockquote>
<blockquote><p>
"When was the last time you backed up your house?"
</p></blockquote><a href="http://ypn-rss.overture.com/rss/31384/1232/click/"><img src="http://ypn-rss.overture.com/rss/31384/1232/img/?url=http%3A%2F%2Fdeekayen.net%2Fresidential-fault-tolerance&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Drupalcon Boston 2008 Day 3</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/drupalcon-boston-2008-day-3" />
    <id>http://deekayen.net/drupalcon-boston-2008-day-3</id>
    <published>2008-03-06T05:44:05+00:00</published>
    <updated>2008-03-10T21:43:54+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="2008" />
    <category term="Boston" />
    <category term="DrupalCon" />
    <summary type="html"><![CDATA[<p><a href="http://www.flickr.com/photos/deekayen/2313384008/" title="Michael Goldsmith and Adrian Rousseau by David Norman, on Flickr"><img src="http://farm4.static.flickr.com/3189/2313384008_61aa5fdcaa_m.jpg" width="240" height="180" alt="Michael Goldsmith and Adrian Rousseau" style="float: right" /></a>I talked for a while to <a href="https://drupal.org/user/1337">Adrian Rousseau</a> from Bryght/<a href="http://www.raincitystudios.com/">Raincity</a> and Michael Goldsmith. Adrian decided that as he's done upgrade contracts for involving CCK, he's phasing out or reducing use of CCK in their sites (where possible).</p>
<p>He mentioned some nice APIs for <a href="http://drupal.org/project/cck">CCK</a>2 are coming, and would work nicely with <a href="http://drupal.org/project/views">Views</a>, but writing custom modules is faster in some cases when custom output is needed and the views support is roughly equivalent, granted all the <a href="http://drupal.org/node/132845">node_example.module</a> hooks are implemented to expose the fields to Views.</p>
<p>I asked if how they use CCK if at all anymore then, and they said it was good for prototyping.</p>
<p>At <a href="http://www.classicgraphics.com/">Classic Graphics</a>, we have built a custom engine that directly queries a custom content type's tables. While using the content.module API functions should have probably be done in the first place, there are a lot of special case reasons the direct query was done and I can't imagine having to rewrite those 50-line queries every time CCK changes database structure.</p>
<p>This has had me thinking, instead of venturing into the world of 100% shared fields in CCK and the uncertainty of how <a href="http://drupal.org/node/108753">field group nesting</a> would get implemented and/or committed, maybe it's time to open the idea realm to consider the occasional custom content module. I spend more time re-rolling the nesting patch than I do actually making progress on it.</p>
<p>If we were to venture down that road, then how do we handle CCK <a href="http://cvs.drupal.org/viewvc.py/drupal/contributions/modules/cck/nodereference.module">nodereference</a>/rolereference/<a href="http://drupal.org/project/usernode">usernode</a>/<a href="http://drupal.org/project/date">date</a> type fields? I think once the CCK handler stuff gets chopped out of those modules, you're left with just a few tiny functions that could roll into custom modules. That removes community maintenance though. It's an difficult tradeoff.</p>
<p>I talked it over with <a href="http://drupal.org/user/202205">Chris</a> and I think he's starting to think I'm really crazy now. Even I'm getting a feeling like it's hard to make up my mind. I think at least for upgrading our existing sites at <a href="http://www.classicgraphics.com/">Classic Graphics</a> to Drupal 5, we can/should stay with CCK since I think it's still fairly straightforward from 4.7. For Drupal 6, that might be a place to consider this custom content type coded module idea instead of CCK.</p>
<p>I also overheard a discussion from someone trying to plug their consulting services that's related to yesterday's session about development workflow. As an example of what type of experience he offered, a possible solution to the issue of sandbox to dev to test/staging to live, he writes as much config as he can in code. Instead of configuring blocks and menus through the GUI, he writes them in code like <a href="http://api.drupal.org/api/function/hook_menu">hook_menu()</a> and <a href="http://api.drupal.org/api/function/hook_block">hook_block()</a>. Then the SVN update to the live site takes care of a lot of the clicking configuration. It puts more dependencies on developers (translate in this guy's case: followup consulting), but his solution isn't totally without merit. The harder part is deciding whether or not that's an unacceptable burden to repeatedly ask developers to *create more* maintain and revise as opposed to allowing room for creating new and better. Again, I think this idea falls into the category of *a* solution, not The Solution.</p>
<p>My evening was spent in the Drupal Association meeting for the Permanent Members. I'm sure the important parts of the meeting will be covered in the various sessions the association will have tomorrow. I got some photos.</p>
<p>When I got back to the hotel, <a href="http://www.knitgeeklife.com/">Nikki Henninger</a> and <a href="http://alligatorsneeze.com/">Brenda Boggs</a> were in the Royal Sonesta Business Center to get some Internet (it's not working in the rooms). Nikki and I had a short talk about when we worked and then stopped working at <a href="http://trellon.com/">Trellon</a>. We seem to share some of the same observations from our time there. Cheers to <a href="http://www.disobey.com/">morbus</a>, who was also a fun partial topic of the conversation.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p><a href="http://www.flickr.com/photos/deekayen/2313384008/" title="Michael Goldsmith and Adrian Rousseau by David Norman, on Flickr"><img src="http://farm4.static.flickr.com/3189/2313384008_61aa5fdcaa_m.jpg" width="240" height="180" alt="Michael Goldsmith and Adrian Rousseau" style="float: right" /></a>I talked for a while to <a href="https://drupal.org/user/1337">Adrian Rousseau</a> from Bryght/<a href="http://www.raincitystudios.com/">Raincity</a> and Michael Goldsmith. Adrian decided that as he's done upgrade contracts for involving CCK, he's phasing out or reducing use of CCK in their sites (where possible).</p>
<p>He mentioned some nice APIs for <a href="http://drupal.org/project/cck">CCK</a>2 are coming, and would work nicely with <a href="http://drupal.org/project/views">Views</a>, but writing custom modules is faster in some cases when custom output is needed and the views support is roughly equivalent, granted all the <a href="http://drupal.org/node/132845">node_example.module</a> hooks are implemented to expose the fields to Views.</p>
<p>I asked if how they use CCK if at all anymore then, and they said it was good for prototyping.</p>
<p>At <a href="http://www.classicgraphics.com/">Classic Graphics</a>, we have built a custom engine that directly queries a custom content type's tables. While using the content.module API functions should have probably be done in the first place, there are a lot of special case reasons the direct query was done and I can't imagine having to rewrite those 50-line queries every time CCK changes database structure.</p>
<p>This has had me thinking, instead of venturing into the world of 100% shared fields in CCK and the uncertainty of how <a href="http://drupal.org/node/108753">field group nesting</a> would get implemented and/or committed, maybe it's time to open the idea realm to consider the occasional custom content module. I spend more time re-rolling the nesting patch than I do actually making progress on it.</p>
<p>If we were to venture down that road, then how do we handle CCK <a href="http://cvs.drupal.org/viewvc.py/drupal/contributions/modules/cck/nodereference.module">nodereference</a>/rolereference/<a href="http://drupal.org/project/usernode">usernode</a>/<a href="http://drupal.org/project/date">date</a> type fields? I think once the CCK handler stuff gets chopped out of those modules, you're left with just a few tiny functions that could roll into custom modules. That removes community maintenance though. It's an difficult tradeoff.</p>
<p>I talked it over with <a href="http://drupal.org/user/202205">Chris</a> and I think he's starting to think I'm really crazy now. Even I'm getting a feeling like it's hard to make up my mind. I think at least for upgrading our existing sites at <a href="http://www.classicgraphics.com/">Classic Graphics</a> to Drupal 5, we can/should stay with CCK since I think it's still fairly straightforward from 4.7. For Drupal 6, that might be a place to consider this custom content type coded module idea instead of CCK.</p>
<p>I also overheard a discussion from someone trying to plug their consulting services that's related to yesterday's session about development workflow. As an example of what type of experience he offered, a possible solution to the issue of sandbox to dev to test/staging to live, he writes as much config as he can in code. Instead of configuring blocks and menus through the GUI, he writes them in code like <a href="http://api.drupal.org/api/function/hook_menu">hook_menu()</a> and <a href="http://api.drupal.org/api/function/hook_block">hook_block()</a>. Then the SVN update to the live site takes care of a lot of the clicking configuration. It puts more dependencies on developers (translate in this guy's case: followup consulting), but his solution isn't totally without merit. The harder part is deciding whether or not that's an unacceptable burden to repeatedly ask developers to *create more* maintain and revise as opposed to allowing room for creating new and better. Again, I think this idea falls into the category of *a* solution, not The Solution.</p>
<p>My evening was spent in the Drupal Association meeting for the Permanent Members. I'm sure the important parts of the meeting will be covered in the various sessions the association will have tomorrow. I got some photos.</p>
<p>When I got back to the hotel, <a href="http://www.knitgeeklife.com/">Nikki Henninger</a> and <a href="http://alligatorsneeze.com/">Brenda Boggs</a> were in the Royal Sonesta Business Center to get some Internet (it's not working in the rooms). Nikki and I had a short talk about when we worked and then stopped working at <a href="http://trellon.com/">Trellon</a>. We seem to share some of the same observations from our time there. Cheers to <a href="http://www.disobey.com/">morbus</a>, who was also a fun partial topic of the conversation.</p>
<a href="http://ypn-rss.overture.com/rss/31384/1231/click/"><img src="http://ypn-rss.overture.com/rss/31384/1231/img/?url=http%3A%2F%2Fdeekayen.net%2Fdrupalcon-boston-2008-day-3&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Drupalcon Boston 2008 Day 2</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/drupalcon-boston-2008-day-2" />
    <id>http://deekayen.net/drupalcon-boston-2008-day-2</id>
    <published>2008-03-05T04:24:27+00:00</published>
    <updated>2008-03-05T15:06:19+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="2008" />
    <category term="Boston" />
    <category term="DrupalCon" />
    <summary type="html"><![CDATA[<p>During the sessions and events at DrupalCon Boston 2008, some smaller meetings were taking place in the hallway and in the Birds of a Feather room. I got to the conference late again because we had some additional trouble navigating the Boston roads this morning, so when I arrived, I was part-way though a meeting with <a href="http://www.buytaert.net/">Dries Buytaert</a>, <a href="http://www.webchick.net/">Angie Byron</a>, Dmitri Gaskin, <a href="http://www.angrydonuts.com/">Earl Miles</a>, <a href="http://esmerel.livejournal.com/">Lynette Miles</a>, Sprout Miles, <a href="http://drupal4hu.com/">Károly Négyesi</a>, <a href="http://www.tejasa.com/">Moshe Weitzman</a>, <a href="http://www.blkmtn.org/">Steven Peck</a>, and some others (I'm getting tired of listing people). It was big enough to have a hard time hearing people if they spoke too softly.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2309731687/" title="Mini BoF by David Norman, on Flickr"><img src="http://farm4.static.flickr.com/3020/2309731687_b3dff1a4d2_m.jpg" width="240" height="180" alt="Mini BoF" style="float: right" /></a>The topic of the morning was the unit testing Dries announced he would like to have in place for Drupal 7 during his State of Drupal keynote. The meeting didn't appear to end with anything concrete, but there did seem to be a general consensus that <a href="http://drupal.org/project/simpletest">Simpletest</a> could remain something in-use, but an additional level of testing would be needed for checking the interactions between modules.</p>
<p>The discussion also occasionally strayed into the project module where they talked about bug handling and git repository links. Someone raised the idea of automatic cross-posting of duplicate issues. Right now the standard procedure is to mark an issue duplicate and paste a link to the older/correct issue, but pasting the link of the duplicate is often not done in the main issue, so tracking down the duplicate is sometimes impossible. Angie said stuff like that wasn't helping when she tried to go back and find that one issue in a sea of thousands.</p>
<p><a href="http://boston2008.drupalcon.org/session/updating-and-upgrading-live-sites">Updating and upgrading live sites</a> is what I went to in the early afternoon. It started small, but over-grew the table. People were standing four levels deep away from the table at times. I imagine trying to hear was a problem going beyond that. The big issue was how to get newly configured data from development, testing, and staging to a production site. Some discussion tried to steer to ideas for getting fresh copies of live to developers, but that really wasn't the biggest concern of the group.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2311852974/" title="Dave Cohen by David Norman, on Flickr"><img src="http://farm4.static.flickr.com/3030/2311852974_75f27e731e_m.jpg" width="240" height="180" alt="Dave Cohen" style="float: right" /></a><a href="http://www.dave-cohen.com/">Dave Cohen</a> proposed to keep the first 1000 IDs of nodes and taxonomies reserved for developers to use. All new content on a live site would essentially start from 1000. That way, when you create a new node that you want to make your front page, you can make it on your development server, save the configuration to start at that node number that's less than 1000, and duplicate those in the reserved id space on production.</p>
<p>Another participant said she had already thought of the idea, but she's already up to 5000 of the 10000 node IDs she reserved. She also apparently has an elaborate set of scripts for downloading a snapshot of the live site, diffing it to her development copy, and merging the information. She said to accomplish it, she has had to revoke editing permissions to users before she takes the database snapshot for diffing and turn off <a href="http://httpd.apache.org/">Apache</a> when she dumps the new database back to the live site with the merged data. It sounded to me like she was the only person in that role of responsibility, so it wouldn't probably scale very well to larger groups. She also had some methodology she used to decide which tables got diffed and how it would be done.</p>
<p>A gentleman from France had a hard time conversing, but got across the point that his group uses an even/odd system of id reservations. It scales (theoretically) infinitely large when compared to the block-style reservation, but I'm not sure how much hackery you really have to do to make such a thing possible.</p>
<p><a href="http://boston2008.drupalcon.org/user/1349">Ori Pekelman</a> was one person that touched on using SVN for various things. He does a cron to update the development server with SVN about every 20 minutes. He proposed to Dave Cohen doing a code sprint to write something that would automate synchronizing development and live. Dave and I had to agree that we came to some solutions for specific issues people had in the group, but not The Solution that would solve all the problems of incremented database identifiers. The macro engine of the  <a href="http://drupal.org/project/devel">devel module</a> was identified as one tool, but not for most situations where new node IDsIDs and site configuration collided. I suggested perhaps a Drupal diff tool for node table changes might be necessary to tell an import what exactly should be inserted, overwritten, and/or deleted.</p>
<p>I also discovered Dave Cohen had modified one of his <a href="http://drupal.org/project/workflow">workflow module</a> implementations to disallow editing a node in specific workflow states. I mentioned at <a href="http://www.classicgraphics.com/">Classic Graphics</a> we're doing node privacy and field privacy by role and workflow state. His reaction to more field control was hard to interpret. He said he basically <a href="http://api.drupal.org/api/function/hook_form_alter">hook_form_alter()</a>ed away the <code>$form</code> content since his module was a custom implementation of a content type. It still showed the edit tab, but instead of a form, it showed a <a href="http://api.drupal.org/api/function/drupal_set_message">drupal_set_message()</a> with instructions on what the user is supposed to be doing instead of form editing. While his solution doesn't require the core hack I have been using at work to node.module, his doesn't seem to allow for proper privacy checks when other modules use the access API. He did mention he thought <a href="http://api.drupal.org/api/function/hook_node_grants">hook_node_grants()</a> was worth exploring. For example, by adding a core patch to node.module, what we're doing allows the standard access check to return false on something like whether or not to display an edit link in a <a href="http://drupal.org/project/views">view</a>. <a href="http://blackboot.biz/">Bryan Stalcup</a> calls it our our explicit deny.</p>
<p>I ended the afternoon with another talk lead by <a href="http://www.garfieldtech.com/">Larry Garfield</a> with <a href="http://www.buytaert.net/">Dries Buytaert</a>, <a href="http://www.angrydonuts.com/">Earl Miles</a>, Dmitri Gaskin, <a href="http://jaspan.com/">Barry Jaspan</a>, <a href="http://drupal.org/user/53081">Brandon Bergren</a> and others. Much of the conversation was between Larry, Earl, and Dries and a lot of it went over the heads of people like myself who haven't looked at either the new database patch for Drupal 7 or the new Views.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2311851926/" title="Database API BoF by David Norman, on Flickr"><img src="http://farm3.static.flickr.com/2194/2311851926_3f31af4fc8_m.jpg" width="240" height="180" alt="Database API BoF" style="float: left" /></a>Larry's session covered some of the new PDO features he and Károly wrote and what requirements the new core Views would have at the database layer. Apparently <a href="http://drupal.org/user/39030">Andy Kirkham</a> did some benchmarking of the proposed DB code and it was at minimum on par in speed with the current database code. It also has some auto magic for query building and backwards compatibility with Drupal 6-style database code. The engine also allows for querying from multiple databases of different types. That means the node tables could remain in MySQL while the cache tables live in SQLite. Postgres isn't written yet, but apparently separate engines are still needed for special handling on database-specific quirks.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2311042985/" title="Database API BoF by David Norman, on Flickr"><img src="http://farm3.static.flickr.com/2061/2311042985_0f0915d3b6_m.jpg" width="240" height="180" alt="Database API BoF" style="float: right" /></a>Dries thought it was a good idea to make sure the new DB code had functionality to stream blobs from a database. The examples he gave were streaming videos and immediately printing page cache instead of buffering it through Drupal/PHP. Someone also asked about whether that would then allow all files stored in on the filesystem in /files to be in the database so the privacy to them could be controlled at a user level, which naturally could also include any of the other access control modules out there like <a href="http://drupal.org/project/acl">ACL</a> and <a href="http://drupal.org/project/node_privacy_byrole">node_privacy_byrole</a>. The idea of storing all of /files in a SQLite database received grumbles around the table, which was noted by Dmitri.</p>
<p>Dries grabbed Barry from somewhere to talk about Earl's <a href="http://drupal.org/project/schema">Schema</a> requirements in Drupal 7. Earl was asking for a structure within the Schema API to allow for schema definitions that wouldn't actually create tables in the database so he would be able to create a kind of virtual table for querying fields out of tables as a table of their own in a view, giving profiles as an example where each profile field would be treated as a table. Earl also wanted to be able to read default values from the schema definitions of all table types. In particular blobs are an issue in MySQL because blobs cannot have a default value and defining one as part of the schema for the definition of how to create the table wouldn't make sense. Barry admitted he was perhaps too strict on the rules, but he would write special cases during table creation to ignore default values on fields where no default should be set. That way Views would have a setting to pre-fill the Views forms with. Postgres apparently fails queries that have a default value set for blob fields rather than ignoring it, which could be a significant problem for a module that tries to create a table with such a definition during its installation.</p>
<p>Barry also strayed off into discussing fields in <a href="http://drupal.org/project/cck">CCK</a>, and Schema API, specifically CCK field splitting, which I've just recently been dipping my toe into CCK source, starting a <a href="http://drupal.org/node/108753">patch to nest field groups</a>. Earl at first agreed with me that fields have a good reason for staying all in the same table, but when he realized he used shared fields for images, he backed away from fighting a CCK system where all fields are split away from the main content table all the time. It's also impossible to argue against Barry's note that even on the content types where fields aren't shared, multivalue fields still need their own table. The part I don't know enough about is the discussion that CCK makes a new SELECT query for each field on an un-shared content type anyway. I think that's more of just a design problem that could be resolved with some well thought out code cleanup as opposed to feature destruction, but that opinion gained no traction in the discussion. The discussion seems to have already reached it's decisions in that arena, at least for revision 1, whatever that happens to mean. Earl thought there was a limit to the number of JOINs MySQL can do, but nobody seemed to think that was a big issue. I think unless a technical limitation is found other than the obvious potential overhead for huge JOINs brings, there's enough momentum to proceed with having fields only stored in separate tables. I didn't think it was the best time to mention the <a href="http://cvs.drupal.org/viewvc.py/drupal/contributions/sandbox/deekayen/modules/cck_table_despliter/">cck_table_despliter module</a> I wrote one night after having exploded CCK tables that had hard queries depending on their unified structure.</p>
<p>On a somewhat unrelated note, I removed my laptop from my bag a coupe times at the conference. Most of the time people keep their attention to themselves, but during Larry's BoF, the guy sitting next to me kept trying to read my screen. He couldn't because had my brightness turned down and I use a <a href="http://solutions.3m.com/wps/portal/3M/en_US/ComputerFilter/Home/">3M privacy filter</a>. I've sometimes been annoyed that it reduces the brightness on my screen by a noticeable amount, but it has acted as a nice screen protector when I've accidently spit on my screen while talking or splashed a drink nearby. The last two days it's been nice to have the privacy. I will buy one for every one of my next laptops. I have to admit, I couldn't keep my eyes from wandering to other laptops during sessions and BoFs either. For example, I know Earl was reading an article on CNN.com about Hillary and Obama during Larry's BoF and during Dries keynote, <a href="http://drupal.org/user/94675">Narayan Newton</a> was talking in IRC a lot about what was going on with the messed up wireless Internet access at the conference center and the slowness of <a href="http://drupal.org/">drupal.org</a> from it.</p>
<p>I'm sure a participant of one of the events will get around to reading this. I wrote it all from memory, so feel free to correct me.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>During the sessions and events at DrupalCon Boston 2008, some smaller meetings were taking place in the hallway and in the Birds of a Feather room. I got to the conference late again because we had some additional trouble navigating the Boston roads this morning, so when I arrived, I was part-way though a meeting with <a href="http://www.buytaert.net/">Dries Buytaert</a>, <a href="http://www.webchick.net/">Angie Byron</a>, Dmitri Gaskin, <a href="http://www.angrydonuts.com/">Earl Miles</a>, <a href="http://esmerel.livejournal.com/">Lynette Miles</a>, Sprout Miles, <a href="http://drupal4hu.com/">Károly Négyesi</a>, <a href="http://www.tejasa.com/">Moshe Weitzman</a>, <a href="http://www.blkmtn.org/">Steven Peck</a>, and some others (I'm getting tired of listing people). It was big enough to have a hard time hearing people if they spoke too softly.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2309731687/" title="Mini BoF by David Norman, on Flickr"><img src="http://farm4.static.flickr.com/3020/2309731687_b3dff1a4d2_m.jpg" width="240" height="180" alt="Mini BoF" style="float: right" /></a>The topic of the morning was the unit testing Dries announced he would like to have in place for Drupal 7 during his State of Drupal keynote. The meeting didn't appear to end with anything concrete, but there did seem to be a general consensus that <a href="http://drupal.org/project/simpletest">Simpletest</a> could remain something in-use, but an additional level of testing would be needed for checking the interactions between modules.</p>
<p>The discussion also occasionally strayed into the project module where they talked about bug handling and git repository links. Someone raised the idea of automatic cross-posting of duplicate issues. Right now the standard procedure is to mark an issue duplicate and paste a link to the older/correct issue, but pasting the link of the duplicate is often not done in the main issue, so tracking down the duplicate is sometimes impossible. Angie said stuff like that wasn't helping when she tried to go back and find that one issue in a sea of thousands.</p>
<p><a href="http://boston2008.drupalcon.org/session/updating-and-upgrading-live-sites">Updating and upgrading live sites</a> is what I went to in the early afternoon. It started small, but over-grew the table. People were standing four levels deep away from the table at times. I imagine trying to hear was a problem going beyond that. The big issue was how to get newly configured data from development, testing, and staging to a production site. Some discussion tried to steer to ideas for getting fresh copies of live to developers, but that really wasn't the biggest concern of the group.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2311852974/" title="Dave Cohen by David Norman, on Flickr"><img src="http://farm4.static.flickr.com/3030/2311852974_75f27e731e_m.jpg" width="240" height="180" alt="Dave Cohen" style="float: right" /></a><a href="http://www.dave-cohen.com/">Dave Cohen</a> proposed to keep the first 1000 IDs of nodes and taxonomies reserved for developers to use. All new content on a live site would essentially start from 1000. That way, when you create a new node that you want to make your front page, you can make it on your development server, save the configuration to start at that node number that's less than 1000, and duplicate those in the reserved id space on production.</p>
<p>Another participant said she had already thought of the idea, but she's already up to 5000 of the 10000 node IDs she reserved. She also apparently has an elaborate set of scripts for downloading a snapshot of the live site, diffing it to her development copy, and merging the information. She said to accomplish it, she has had to revoke editing permissions to users before she takes the database snapshot for diffing and turn off <a href="http://httpd.apache.org/">Apache</a> when she dumps the new database back to the live site with the merged data. It sounded to me like she was the only person in that role of responsibility, so it wouldn't probably scale very well to larger groups. She also had some methodology she used to decide which tables got diffed and how it would be done.</p>
<p>A gentleman from France had a hard time conversing, but got across the point that his group uses an even/odd system of id reservations. It scales (theoretically) infinitely large when compared to the block-style reservation, but I'm not sure how much hackery you really have to do to make such a thing possible.</p>
<p><a href="http://boston2008.drupalcon.org/user/1349">Ori Pekelman</a> was one person that touched on using SVN for various things. He does a cron to update the development server with SVN about every 20 minutes. He proposed to Dave Cohen doing a code sprint to write something that would automate synchronizing development and live. Dave and I had to agree that we came to some solutions for specific issues people had in the group, but not The Solution that would solve all the problems of incremented database identifiers. The macro engine of the  <a href="http://drupal.org/project/devel">devel module</a> was identified as one tool, but not for most situations where new node IDsIDs and site configuration collided. I suggested perhaps a Drupal diff tool for node table changes might be necessary to tell an import what exactly should be inserted, overwritten, and/or deleted.</p>
<p>I also discovered Dave Cohen had modified one of his <a href="http://drupal.org/project/workflow">workflow module</a> implementations to disallow editing a node in specific workflow states. I mentioned at <a href="http://www.classicgraphics.com/">Classic Graphics</a> we're doing node privacy and field privacy by role and workflow state. His reaction to more field control was hard to interpret. He said he basically <a href="http://api.drupal.org/api/function/hook_form_alter">hook_form_alter()</a>ed away the <code>$form</code> content since his module was a custom implementation of a content type. It still showed the edit tab, but instead of a form, it showed a <a href="http://api.drupal.org/api/function/drupal_set_message">drupal_set_message()</a> with instructions on what the user is supposed to be doing instead of form editing. While his solution doesn't require the core hack I have been using at work to node.module, his doesn't seem to allow for proper privacy checks when other modules use the access API. He did mention he thought <a href="http://api.drupal.org/api/function/hook_node_grants">hook_node_grants()</a> was worth exploring. For example, by adding a core patch to node.module, what we're doing allows the standard access check to return false on something like whether or not to display an edit link in a <a href="http://drupal.org/project/views">view</a>. <a href="http://blackboot.biz/">Bryan Stalcup</a> calls it our our explicit deny.</p>
<p>I ended the afternoon with another talk lead by <a href="http://www.garfieldtech.com/">Larry Garfield</a> with <a href="http://www.buytaert.net/">Dries Buytaert</a>, <a href="http://www.angrydonuts.com/">Earl Miles</a>, Dmitri Gaskin, <a href="http://jaspan.com/">Barry Jaspan</a>, <a href="http://drupal.org/user/53081">Brandon Bergren</a> and others. Much of the conversation was between Larry, Earl, and Dries and a lot of it went over the heads of people like myself who haven't looked at either the new database patch for Drupal 7 or the new Views.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2311851926/" title="Database API BoF by David Norman, on Flickr"><img src="http://farm3.static.flickr.com/2194/2311851926_3f31af4fc8_m.jpg" width="240" height="180" alt="Database API BoF" style="float: left" /></a>Larry's session covered some of the new PDO features he and Károly wrote and what requirements the new core Views would have at the database layer. Apparently <a href="http://drupal.org/user/39030">Andy Kirkham</a> did some benchmarking of the proposed DB code and it was at minimum on par in speed with the current database code. It also has some auto magic for query building and backwards compatibility with Drupal 6-style database code. The engine also allows for querying from multiple databases of different types. That means the node tables could remain in MySQL while the cache tables live in SQLite. Postgres isn't written yet, but apparently separate engines are still needed for special handling on database-specific quirks.</p>
<p><a href="http://www.flickr.com/photos/deekayen/2311042985/" title="Database API BoF by David Norman, on Flickr"><img src="http://farm3.static.flickr.com/2061/2311042985_0f0915d3b6_m.jpg" width="240" height="180" alt="Database API BoF" style="float: right" /></a>Dries thought it was a good idea to make sure the new DB code had functionality to stream blobs from a database. The examples he gave were streaming videos and immediately printing page cache instead of buffering it through Drupal/PHP. Someone also asked about whether that would then allow all files stored in on the filesystem in /files to be in the database so the privacy to them could be controlled at a user level, which naturally could also include any of the other access control modules out there like <a href="http://drupal.org/project/acl">ACL</a> and <a href="http://drupal.org/project/node_privacy_byrole">node_privacy_byrole</a>. The idea of storing all of /files in a SQLite database received grumbles around the table, which was noted by Dmitri.</p>
<p>Dries grabbed Barry from somewhere to talk about Earl's <a href="http://drupal.org/project/schema">Schema</a> requirements in Drupal 7. Earl was asking for a structure within the Schema API to allow for schema definitions that wouldn't actually create tables in the database so he would be able to create a kind of virtual table for querying fields out of tables as a table of their own in a view, giving profiles as an example where each profile field would be treated as a table. Earl also wanted to be able to read default values from the schema definitions of all table types. In particular blobs are an issue in MySQL because blobs cannot have a default value and defining one as part of the schema for the definition of how to create the table wouldn't make sense. Barry admitted he was perhaps too strict on the rules, but he would write special cases during table creation to ignore default values on fields where no default should be set. That way Views would have a setting to pre-fill the Views forms with. Postgres apparently fails queries that have a default value set for blob fields rather than ignoring it, which could be a significant problem for a module that tries to create a table with such a definition during its installation.</p>
<p>Barry also strayed off into discussing fields in <a href="http://drupal.org/project/cck">CCK</a>, and Schema API, specifically CCK field splitting, which I've just recently been dipping my toe into CCK source, starting a <a href="http://drupal.org/node/108753">patch to nest field groups</a>. Earl at first agreed with me that fields have a good reason for staying all in the same table, but when he realized he used shared fields for images, he backed away from fighting a CCK system where all fields are split away from the main content table all the time. It's also impossible to argue against Barry's note that even on the content types where fields aren't shared, multivalue fields still need their own table. The part I don't know enough about is the discussion that CCK makes a new SELECT query for each field on an un-shared content type anyway. I think that's more of just a design problem that could be resolved with some well thought out code cleanup as opposed to feature destruction, but that opinion gained no traction in the discussion. The discussion seems to have already reached it's decisions in that arena, at least for revision 1, whatever that happens to mean. Earl thought there was a limit to the number of JOINs MySQL can do, but nobody seemed to think that was a big issue. I think unless a technical limitation is found other than the obvious potential overhead for huge JOINs brings, there's enough momentum to proceed with having fields only stored in separate tables. I didn't think it was the best time to mention the <a href="http://cvs.drupal.org/viewvc.py/drupal/contributions/sandbox/deekayen/modules/cck_table_despliter/">cck_table_despliter module</a> I wrote one night after having exploded CCK tables that had hard queries depending on their unified structure.</p>
<p>On a somewhat unrelated note, I removed my laptop from my bag a coupe times at the conference. Most of the time people keep their attention to themselves, but during Larry's BoF, the guy sitting next to me kept trying to read my screen. He couldn't because had my brightness turned down and I use a <a href="http://solutions.3m.com/wps/portal/3M/en_US/ComputerFilter/Home/">3M privacy filter</a>. I've sometimes been annoyed that it reduces the brightness on my screen by a noticeable amount, but it has acted as a nice screen protector when I've accidently spit on my screen while talking or splashed a drink nearby. The last two days it's been nice to have the privacy. I will buy one for every one of my next laptops. I have to admit, I couldn't keep my eyes from wandering to other laptops during sessions and BoFs either. For example, I know Earl was reading an article on CNN.com about Hillary and Obama during Larry's BoF and during Dries keynote, <a href="http://drupal.org/user/94675">Narayan Newton</a> was talking in IRC a lot about what was going on with the messed up wireless Internet access at the conference center and the slowness of <a href="http://drupal.org/">drupal.org</a> from it.</p>
<p>I'm sure a participant of one of the events will get around to reading this. I wrote it all from memory, so feel free to correct me.</p>
<a href="http://ypn-rss.overture.com/rss/31384/1230/click/"><img src="http://ypn-rss.overture.com/rss/31384/1230/img/?url=http%3A%2F%2Fdeekayen.net%2Fdrupalcon-boston-2008-day-2&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Dissertation successfuly proposed</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/dissertation-successfuly-proposed" />
    <id>http://deekayen.net/dissertation-successfuly-proposed</id>
    <published>2008-03-01T17:37:02+00:00</published>
    <updated>2008-03-05T17:29:01+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="AmeriSuites" />
    <category term="dissertation" />
    <category term="MCO" />
    <category term="proposal" />
    <category term="UCF" />
    <summary type="html"><![CDATA[<p>Taking advantage of the leap day, I successfully proposed my dissertation and filed an intent to graduate form. I stumbled on one of the questions they asked me about a possible outcome, so they asked me to shore up my literature review with more information about it before my defense. If you're reading this now, I hope and expect you will participate in my dissertation questionnaire when I announce it. I still have to get my official exemption from the institutional review board.</p>
<p>On a green note, my minivan usually used between 5.5 and 6 gallons of gas to drive from my old house to the University of Central Florida and back. Since now I don't live there and I rented a Chevy Cobalt, it only took 1.5 gallons to go the same distance. It might have helped that the Cobalt was decked out with every feature, but I was pleasantly surprised now nice a car it was, though the back seat was a bit cramped looking if I had, had passengers.</p>
<p>I did a lot of research to find the last flight out of Orlando when I was done proposing. Turns out some ice in Philadelphia messed up flights all over the country and I misconnected. AirTran put me in AmeriSuites for the night and paid for a meal at a vendor of my choice. I was neither surprised or disappointed, just satisfied, as is probably should be.</p>
<p>While I waited for the shuttle to pick us misconnectors up from the airport, and older man came up to 3 college girls from Michigan and flirted with them. I felt like I should do something to embarass the man away from them, but they seemed to be having fun with him. As soon as his shuttle came, they made plenty of jokes about him.</p>
<p>As for AmeriSuites Northeast, Orlando International Airport, I did consider it when I booked a place to stay for my proposal. I didn't because I read a review when doing my hotel search that said the hotel smelled bad, especially the elevators. Now I know it smells because some air freshener sales company over-sold this hotel. There are fresheners in the hotel hallways and elevators. They didn't smell bad, there were just too many. The hotel showed some signs of a cheaply done remodeling job, the bed springs were not padded, and noise from the hallway pretty easily crept under the door. The wireless Internet was strong everywhere in the hotel, but the TV had just maybe 16 channels or so. I reluctantly paid $1.75 for 20oz a bottle of Aquafina.</p>
<p>It's funny to me that I had originally planned on staying overnight anyway and had rebooked to come home earlier, only to end up leaving when I originally was. I'll be leaving Charlotte again tomorrow to attend Drupalcon. It will actually be my first nerdy conference to attend, so it should be interesting.</p>
<p>Also take note that it now appears Orlando International Airport has free and open wireless Internet. I'm posting from it right now while waiting on my flight.</p>    ]]></summary>
    <content type="html"><![CDATA[<p>Taking advantage of the leap day, I successfully proposed my dissertation and filed an intent to graduate form. I stumbled on one of the questions they asked me about a possible outcome, so they asked me to shore up my literature review with more information about it before my defense. If you're reading this now, I hope and expect you will participate in my dissertation questionnaire when I announce it. I still have to get my official exemption from the institutional review board.</p>
<p>On a green note, my minivan usually used between 5.5 and 6 gallons of gas to drive from my old house to the University of Central Florida and back. Since now I don't live there and I rented a Chevy Cobalt, it only took 1.5 gallons to go the same distance. It might have helped that the Cobalt was decked out with every feature, but I was pleasantly surprised now nice a car it was, though the back seat was a bit cramped looking if I had, had passengers.</p>
<p>I did a lot of research to find the last flight out of Orlando when I was done proposing. Turns out some ice in Philadelphia messed up flights all over the country and I misconnected. AirTran put me in AmeriSuites for the night and paid for a meal at a vendor of my choice. I was neither surprised or disappointed, just satisfied, as is probably should be.</p>
<p>While I waited for the shuttle to pick us misconnectors up from the airport, and older man came up to 3 college girls from Michigan and flirted with them. I felt like I should do something to embarass the man away from them, but they seemed to be having fun with him. As soon as his shuttle came, they made plenty of jokes about him.</p>
<p>As for AmeriSuites Northeast, Orlando International Airport, I did consider it when I booked a place to stay for my proposal. I didn't because I read a review when doing my hotel search that said the hotel smelled bad, especially the elevators. Now I know it smells because some air freshener sales company over-sold this hotel. There are fresheners in the hotel hallways and elevators. They didn't smell bad, there were just too many. The hotel showed some signs of a cheaply done remodeling job, the bed springs were not padded, and noise from the hallway pretty easily crept under the door. The wireless Internet was strong everywhere in the hotel, but the TV had just maybe 16 channels or so. I reluctantly paid $1.75 for 20oz a bottle of Aquafina.</p>
<p>It's funny to me that I had originally planned on staying overnight anyway and had rebooked to come home earlier, only to end up leaving when I originally was. I'll be leaving Charlotte again tomorrow to attend Drupalcon. It will actually be my first nerdy conference to attend, so it should be interesting.</p>
<p>Also take note that it now appears Orlando International Airport has free and open wireless Internet. I'm posting from it right now while waiting on my flight.</p><a href="http://ypn-rss.overture.com/rss/31384/1229/click/"><img src="http://ypn-rss.overture.com/rss/31384/1229/img/?url=http%3A%2F%2Fdeekayen.net%2Fdissertation-successfuly-proposed&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Xorg.conf settings for Quadro NVS 440 dual monitors</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/xorgconf-settings-quadro-nvs-440-dual-monitors" />
    <id>http://deekayen.net/xorgconf-settings-quadro-nvs-440-dual-monitors</id>
    <published>2008-02-21T04:32:59+00:00</published>
    <updated>2008-02-21T04:33:10+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="nvidia" />
    <category term="ubuntu" />
    <category term="xinerama" />
    <category term="xorg" />
    <summary type="html"><![CDATA[<p>I was totally unable to use the "Screens and Graphics" utility that came with Gutsy Gibbon Ubuntu to setup my dual-chip Quadro NVS 440 card for two monitors. I made my own config in the end.</p>
<pre>
Section "Files"
EndSection

Section "Module"
	Load		"glx"
	Load		"v4l"
EndSection

Section "InputDevice"
	Identifier	"Generic Keyboard"
	Driver		"kbd"
	Option		"CoreKeyboard"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"pc105"
	Option		"XkbLayout"	"us"
EndSection

Section "InputDevice"
	Identifier	"Configured Mouse"
	Driver		"mouse"
	Option		"CorePointer"
	Option		"Device"	"/dev/input/mice"
	Option		"Protocol"	"ImPS/2"
	Option		"ZAxisMapping"	"4 5"
	Option		"Emulate3Buttons"	"true"
EndSection

Section "ServerLayout"
	Identifier	"Default Layout"
	Screen		"screen1" LeftOf "screen2"
	Screen		"screen2"
	Option		"Xinerama" "on"
	Option		"Clone" "off"
	Inputdevice	"Generic Keyboard"
	Inputdevice	"Configured Mouse"
EndSection
Section "device"
	Identifier	"device1"
	Boardname	"NVIDIA Quadro NVS 440"
	Busid		"PCI:3:0:0"
	Driver		"nvidia"
EndSection
Section "screen"
	Identifier	"screen1"
	Device		"device1"
	Defaultdepth	24
	Monitor		"monitor1"
	SubSection "Display"
		Depth	24
		Modes	"1280x1024" "1280x960" "1152x864" "1024x768" "800x600"
	EndSubSection
EndSection
Section "monitor"
	Identifier	"monitor1"
	Vendorname	"ViewSonic"
	Modelname	"ViewSonic VP181b-2"
	Horizsync	30-92
	Vertrefresh	50-85
	Option		"dpms"
EndSection
Section "screen"
	Identifier	"screen2"
	Device		"device2"
	Defaultdepth	24
	Monitor		"monitor2"
	SubSection "Display"
		Depth	24
		Modes	"1280x1024" "1280x960" "1152x864" "1024x768" "800x600"
	EndSubSection
EndSection
Section "monitor"
	Identifier	"monitor2"
	Vendorname	"Dell"
	Modelname	"Dell D1025TM"
	Horizsync	31.0-85.0
	Vertrefresh	50.0-120.0
	Option		"dpms"
EndSection
Section "device"
	Identifier	"device2"
	Boardname	"NVIDIA Quadro NVS 440"
	Busid		"PCI:4:0:0"
	Driver		"nvidia"
	Vendorname	"NVIDIA"
EndSection
</pre>    ]]></summary>
    <content type="html"><![CDATA[<p>I was totally unable to use the "Screens and Graphics" utility that came with Gutsy Gibbon Ubuntu to setup my dual-chip Quadro NVS 440 card for two monitors. I made my own config in the end.</p>
<pre>
Section "Files"
EndSection

Section "Module"
	Load		"glx"
	Load		"v4l"
EndSection

Section "InputDevice"
	Identifier	"Generic Keyboard"
	Driver		"kbd"
	Option		"CoreKeyboard"
	Option		"XkbRules"	"xorg"
	Option		"XkbModel"	"pc105"
	Option		"XkbLayout"	"us"
EndSection

Section "InputDevice"
	Identifier	"Configured Mouse"
	Driver		"mouse"
	Option		"CorePointer"
	Option		"Device"	"/dev/input/mice"
	Option		"Protocol"	"ImPS/2"
	Option		"ZAxisMapping"	"4 5"
	Option		"Emulate3Buttons"	"true"
EndSection

Section "ServerLayout"
	Identifier	"Default Layout"
	Screen		"screen1" LeftOf "screen2"
	Screen		"screen2"
	Option		"Xinerama" "on"
	Option		"Clone" "off"
	Inputdevice	"Generic Keyboard"
	Inputdevice	"Configured Mouse"
EndSection
Section "device"
	Identifier	"device1"
	Boardname	"NVIDIA Quadro NVS 440"
	Busid		"PCI:3:0:0"
	Driver		"nvidia"
EndSection
Section "screen"
	Identifier	"screen1"
	Device		"device1"
	Defaultdepth	24
	Monitor		"monitor1"
	SubSection "Display"
		Depth	24
		Modes	"1280x1024" "1280x960" "1152x864" "1024x768" "800x600"
	EndSubSection
EndSection
Section "monitor"
	Identifier	"monitor1"
	Vendorname	"ViewSonic"
	Modelname	"ViewSonic VP181b-2"
	Horizsync	30-92
	Vertrefresh	50-85
	Option		"dpms"
EndSection
Section "screen"
	Identifier	"screen2"
	Device		"device2"
	Defaultdepth	24
	Monitor		"monitor2"
	SubSection "Display"
		Depth	24
		Modes	"1280x1024" "1280x960" "1152x864" "1024x768" "800x600"
	EndSubSection
EndSection
Section "monitor"
	Identifier	"monitor2"
	Vendorname	"Dell"
	Modelname	"Dell D1025TM"
	Horizsync	31.0-85.0
	Vertrefresh	50.0-120.0
	Option		"dpms"
EndSection
Section "device"
	Identifier	"device2"
	Boardname	"NVIDIA Quadro NVS 440"
	Busid		"PCI:4:0:0"
	Driver		"nvidia"
	Vendorname	"NVIDIA"
EndSection
</pre><a href="http://ypn-rss.overture.com/rss/31384/1228/click/"><img src="http://ypn-rss.overture.com/rss/31384/1228/img/?url=http%3A%2F%2Fdeekayen.net%2Fxorgconf-settings-quadro-nvs-440-dual-monitors&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Anyone can help Drupal</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/anyone-can-help-drupal" />
    <id>http://deekayen.net/anyone-can-help-drupal</id>
    <published>2008-02-14T14:34:35+00:00</published>
    <updated>2008-02-14T14:34:35+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="Drupal" />
    <category term="Drupal Association" />
    <summary type="html"><![CDATA[<p>If you like Drupal, but you don't really know how so many people are able to <a href="http://drupal.org/node/10259">contribute</a> on average 4 new modules <em>a day</em>, or use their creativity to <a href="http://drupal.org/node/196218">create a new theme</a>, <a href="http://drupal.org/project/issues">patch a bug</a>, or something else. There's a commitment I have taken on that doesn't take any thought, learning, or insight.</p>
<p>I have made a commitment to <a href="http://association.drupal.org/donate">donate</a> to the Drupal Association every week (I get paid every week). The budget is the big item on the Drupal Association's plate and the <a href="http://buytaert.net/drupal-association-2008-wishlist">Drupal 2008 wishlist</a>, voted on by members of drupal.org, is a big point of guidance for that budget. Make the same commitment and you'll help ensure things like updates to hardware, a drupal.org redesign, and conferences of various sizes can grow.</p>    ]]></summary>
    <content type="html"><![CDATA[<p>If you like Drupal, but you don't really know how so many people are able to <a href="http://drupal.org/node/10259">contribute</a> on average 4 new modules <em>a day</em>, or use their creativity to <a href="http://drupal.org/node/196218">create a new theme</a>, <a href="http://drupal.org/project/issues">patch a bug</a>, or something else. There's a commitment I have taken on that doesn't take any thought, learning, or insight.</p>
<p>I have made a commitment to <a href="http://association.drupal.org/donate">donate</a> to the Drupal Association every week (I get paid every week). The budget is the big item on the Drupal Association's plate and the <a href="http://buytaert.net/drupal-association-2008-wishlist">Drupal 2008 wishlist</a>, voted on by members of drupal.org, is a big point of guidance for that budget. Make the same commitment and you'll help ensure things like updates to hardware, a drupal.org redesign, and conferences of various sizes can grow.</p><a href="http://ypn-rss.overture.com/rss/31384/1227/click/"><img src="http://ypn-rss.overture.com/rss/31384/1227/img/?url=http%3A%2F%2Fdeekayen.net%2Fanyone-can-help-drupal&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>DrupalCon excitement</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/drupalcon-excitement" />
    <id>http://deekayen.net/drupalcon-excitement</id>
    <published>2008-01-17T16:37:51+00:00</published>
    <updated>2008-01-17T17:27:37+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="Boston" />
    <category term="conference" />
    <category term="Drupal Association" />
    <category term="DrupalCon" />
    <summary type="html"><![CDATA[<div style="float: right"><a href="http://boston2008.drupalcon.org/"><img src="http://deekayen.net/sites/deekayen.net/files/drupalcon_02_jp.jpg" height="124" width="124" alt="DrupalCon Boston 2008" border="0" /></a></div>
<p>With the upcoming release of Drupal 6, <a href="http://boston2008.drupalcon.org/">DrupalCon Boston 2008</a> promises to unleash a flood of cool new stuff.</p>
<p>With <a href="http://drupal.org/node/172152">Actions</a> in core, <a href="http://drupal.org/project/workflow_ng">workflow-ng</a> taking a new twist on <a href="http://drupal.org/project/workflow">Workflow</a>, <a href="http://drupal.org/project/views">Views2</a> and <a href="http://drupal.org/project/panels">Panels2</a>, additions to the <a href="http://drupal.org/project/devel">devel</a> module for themers, upgrades to jQuery, new database <a href="http://drupal.org/node/146843">Schema API</a>, a fresh Drupal Association <a href="http://association.drupal.org/about/staff">board</a>, things look bright. I might make this the first Drupal or PHP conference I ever attempt to attend.</p>
<p><a href="http://boston2008.drupalcon.org/drupalcon-boston-sponsorships">Sponsorship</a> opportunities are still available and I expect the attendance to be sold out, especially since admission is &#188; the cost of <a href="http://tek.phparch.com/">php|tek</a>. Maybe your sponsorship will even attract a bright new employee to your organization. Only the best are at DrupalCon.</p>
    ]]></summary>
    <content type="html"><![CDATA[<div style="float: right"><a href="http://boston2008.drupalcon.org/"><img src="http://deekayen.net/sites/deekayen.net/files/drupalcon_02_jp.jpg" height="124" width="124" alt="DrupalCon Boston 2008" border="0" /></a></div>
<p>With the upcoming release of Drupal 6, <a href="http://boston2008.drupalcon.org/">DrupalCon Boston 2008</a> promises to unleash a flood of cool new stuff.</p>
<p>With <a href="http://drupal.org/node/172152">Actions</a> in core, <a href="http://drupal.org/project/workflow_ng">workflow-ng</a> taking a new twist on <a href="http://drupal.org/project/workflow">Workflow</a>, <a href="http://drupal.org/project/views">Views2</a> and <a href="http://drupal.org/project/panels">Panels2</a>, additions to the <a href="http://drupal.org/project/devel">devel</a> module for themers, upgrades to jQuery, new database <a href="http://drupal.org/node/146843">Schema API</a>, a fresh Drupal Association <a href="http://association.drupal.org/about/staff">board</a>, things look bright. I might make this the first Drupal or PHP conference I ever attempt to attend.</p>
<p><a href="http://boston2008.drupalcon.org/drupalcon-boston-sponsorships">Sponsorship</a> opportunities are still available and I expect the attendance to be sold out, especially since admission is &#188; the cost of <a href="http://tek.phparch.com/">php|tek</a>. Maybe your sponsorship will even attract a bright new employee to your organization. Only the best are at DrupalCon.</p>
<a href="http://ypn-rss.overture.com/rss/31384/1224/click/"><img src="http://ypn-rss.overture.com/rss/31384/1224/img/?url=http%3A%2F%2Fdeekayen.net%2Fdrupalcon-excitement&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>Go Green and get 5.01% APY</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/go-green-and-get-501-apy" />
    <id>http://deekayen.net/go-green-and-get-501-apy</id>
    <published>2008-01-02T18:49:11+00:00</published>
    <updated>2008-01-02T19:13:09+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <category term="banking" />
    <category term="checking" />
    <category term="checks" />
    <category term="coastal federal credit union" />
    <category term="debit card" />
    <category term="go green" />
    <category term="interest" />
    <category term="money" />
    <category term="visa" />
    <summary type="html"><![CDATA[<p><a href="http://www.coastalfcu.org/gogreen/"><img src="http://deekayen.net/sites/deekayen.net/files/coastalfcu-gogreen.jpg" height="60" width="222" alt="" border="0" style="float: right" /></a></p>
<p><a href="http://www.coastalfcu.org/">Coastal Federal Credit Union</a> is offering 5.01% APY on their new <a href="http://www.coastalfcu.org/gogreen/">Go Green checking</a> account as of January 2, 2008. It's not a promotional rate on their existing interest checking, it's a new account type.</p>
<p>What's the catch? You must make 25 debit card transactions per month on the account (PIN, signature, or electronic). In months you don't make 25 debit card transactions, you revert to the 0.6% rate of the standard interest bearing account. As soon as you make 25 transactions again, you make high yields.</p>
<blockquote><p>
Go Green Checking is simply tied to using your debit card a minimum of 25 times per month. We felt all the other requirements were a nuisance and just got in the way.</p>
<p>- <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1180&amp;p_created=1196370183&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">Coastal FAQ</a>
</p>
</p></blockquote>
<p>You still get online account access, <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1177&amp;p_created=1196368675&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">can still write checks</a>, <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1179&amp;p_created=1196369781&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">direct deposit is not required</a>, can see branch tellers, teller-by-mail, call the 24/7 call center, use the e-payments site (<a href="https://global1.onlinebank.com/cgi-forte/fortecgi.exe/frte_cs0?BankTag=612coastal&amp;TemplateName=Login.htm&amp;ServiceName=webteller">c-Pay</a>), and there are <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1172&amp;p_created=1196193761&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">no account minimums</a> like with their standard interest bearing account.</p>
<p>When I asked why they're doing such a thing, they're trying to encourage people to write fewer checks because it's much less expensive for the credit union to process a debit card transaction than it is when you write a check. Since credit unions like Coastal are owned by the account holders (as compared to banks being owned by stockholders), Coastal is able to pass on the savings as higher interest rates to the account holders. Oh, and there's also the added environmental benefits in paper savings.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p><a href="http://www.coastalfcu.org/gogreen/"><img src="http://deekayen.net/sites/deekayen.net/files/coastalfcu-gogreen.jpg" height="60" width="222" alt="" border="0" style="float: right" /></a></p>
<p><a href="http://www.coastalfcu.org/">Coastal Federal Credit Union</a> is offering 5.01% APY on their new <a href="http://www.coastalfcu.org/gogreen/">Go Green checking</a> account as of January 2, 2008. It's not a promotional rate on their existing interest checking, it's a new account type.</p>
<p>What's the catch? You must make 25 debit card transactions per month on the account (PIN, signature, or electronic). In months you don't make 25 debit card transactions, you revert to the 0.6% rate of the standard interest bearing account. As soon as you make 25 transactions again, you make high yields.</p>
<blockquote><p>
Go Green Checking is simply tied to using your debit card a minimum of 25 times per month. We felt all the other requirements were a nuisance and just got in the way.</p>
<p>- <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1180&amp;p_created=1196370183&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">Coastal FAQ</a>
</p></blockquote>
<p>You still get online account access, <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1177&amp;p_created=1196368675&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">can still write checks</a>, <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1179&amp;p_created=1196369781&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">direct deposit is not required</a>, can see branch tellers, teller-by-mail, call the 24/7 call center, use the e-payments site (<a href="https://global1.onlinebank.com/cgi-forte/fortecgi.exe/frte_cs0?BankTag=612coastal&amp;TemplateName=Login.htm&amp;ServiceName=webteller">c-Pay</a>), and there are <a href="http://coastalfcu.custhelp.com/cgi-bin/coastalfcu.cfg/php/enduser/std_adp.php?p_faqid=1172&amp;p_created=1196193761&amp;p_sid=FBSYuMUi&amp;p_lva=&amp;p_sp=cF9zcmNoPTEmcF9zb3J0X2J5PSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NTYmcF9wcm9kcz0wJnBfY2F0cz0mcF9wdj0mcF9jdj0mcF9wYWdlPTEmcF9zZWFyY2hfdGV4dD1nbyBncmVlbg**&amp;p_li=&amp;p_topview=1">no account minimums</a> like with their standard interest bearing account.</p>
<p>When I asked why they're doing such a thing, they're trying to encourage people to write fewer checks because it's much less expensive for the credit union to process a debit card transaction than it is when you write a check. Since credit unions like Coastal are owned by the account holders (as compared to banks being owned by stockholders), Coastal is able to pass on the savings as higher interest rates to the account holders. Oh, and there's also the added environmental benefits in paper savings.</p>
<a href="http://ypn-rss.overture.com/rss/31384/1222/click/"><img src="http://ypn-rss.overture.com/rss/31384/1222/img/?url=http%3A%2F%2Fdeekayen.net%2Fgo-green-and-get-501-apy&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
  <entry>
    <title>New hook_theme() in Drupal 6</title>
    <link rel="alternate" type="text/html" href="http://deekayen.net/new-hooktheme-drupal-6" />
    <id>http://deekayen.net/new-hooktheme-drupal-6</id>
    <published>2007-11-21T15:14:11+00:00</published>
    <updated>2007-11-21T17:31:32+00:00</updated>
    <author>
      <name>deekayen</name>
    </author>
    <summary type="html"><![CDATA[<p>As of Drupal 6, when you're writing modules, you might find the <code>theme()</code> function doesn't work as you expect. Whereas before you'd pass a parameter to the <code>theme()</code> function that told it which theme_* function to call, now you have to register the theme_* function for it to actually get called.</p>
<p>Not doing so probably results in mysterious data loss during execution for most implementations. I've known about it for some time now and still forget to register my theme_* functions.</p>
<p>There are so few examples at the moment on how to register theme functions, I wrote a stub module with just enough code to show the registration at work. I've made it available for download as a .tgz for you to play around with on your own.</p>    ]]></summary>
    <content type="html"><![CDATA[<p>As of Drupal 6, when you're writing modules, you might find the <code>theme()</code> function doesn't work as you expect. Whereas before you'd pass a parameter to the <code>theme()</code> function that told it which theme_* function to call, now you have to register the theme_* function for it to actually get called.</p>
<p>Not doing so probably results in mysterious data loss during execution for most implementations. I've known about it for some time now and still forget to register my theme_* functions.</p>
<p>There are so few examples at the moment on how to register theme functions, I wrote a stub module with just enough code to show the registration at work. I've made it available for download as a .tgz for you to play around with on your own.

<div class="codeblock"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">/**<br /> * @file<br /> * Demonstration of theme function registration for Drupal 6<br /> *<br /> * @author David Kent Norman<br /> */<br /><br />/**<br /> * hook_menu()<br /> *<br /> * @return array<br /> */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">themedemo_menu</span><span style="color: #007700">() {<br /><br />&nbsp; </span><span style="color: #0000BB">$items </span><span style="color: #007700">= array();<br /><br />&nbsp; </span><span style="color: #0000BB">$items</span><span style="color: #007700">[</span><span style="color: #DD0000">'themedemo'</span><span style="color: #007700">] = array(<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'title' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'Theme Demo for Drupal 6'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'page callback' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'drupal_get_form'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'page arguments' </span><span style="color: #007700">=&gt; array(</span><span style="color: #DD0000">'themedemo_example'</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'access callback' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'user_access'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'access arguments' </span><span style="color: #007700">=&gt; array(</span><span style="color: #DD0000">'access content'</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'type' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">MENU_NORMAL_ITEM<br />&nbsp; </span><span style="color: #007700">);<br />&nbsp; return </span><span style="color: #0000BB">$items</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">/**<br /> * Demo form to have something to theme<br /> *<br /> * @return array<br /> */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">themedemo_example</span><span style="color: #007700">() {<br />&nbsp; </span><span style="color: #0000BB">$form </span><span style="color: #007700">= array();<br /><br />&nbsp; </span><span style="color: #0000BB">$form</span><span style="color: #007700">[</span><span style="color: #DD0000">'example'</span><span style="color: #007700">] = array(<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#title' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'This is just an example'</span><span style="color: #007700">),<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#type' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'checkbox'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'#default_value' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">FALSE<br />&nbsp; </span><span style="color: #007700">);<br /><br />&nbsp; return </span><span style="color: #0000BB">$form</span><span style="color: #007700">;<br />}<br /><br /></span><span style="color: #FF8000">/**<br /> * hook_theme()<br /> * New registration function introduced in Drupal 6<br /> *<br /> * @return array<br /> */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">themedemo_theme</span><span style="color: #007700">() {<br />&nbsp; return array(<br />&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'themedemo_example' </span><span style="color: #007700">=&gt; array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #DD0000">'arguments' </span><span style="color: #007700">=&gt; array(</span><span style="color: #DD0000">'form' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">NULL</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp; )<br />&nbsp; );<br />}<br /><br /></span><span style="color: #FF8000">/**<br /> * The function that has to be registered in hook_theme()<br /> *<br /> * @param array $form<br /> * @return string<br /> */<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">theme_themedemo_example</span><span style="color: #007700">(</span><span style="color: #0000BB">$form</span><span style="color: #007700">) {<br />&nbsp; </span><span style="color: #0000BB">$form</span><span style="color: #007700">[</span><span style="color: #DD0000">'example'</span><span style="color: #007700">][</span><span style="color: #DD0000">'#description'</span><span style="color: #007700">] = </span><span style="color: #0000BB">t</span><span style="color: #007700">(</span><span style="color: #DD0000">'This description was added by the registered theme function.'</span><span style="color: #007700">);<br /><br />&nbsp; </span><span style="color: #0000BB">$output </span><span style="color: #007700">= </span><span style="color: #0000BB">drupal_render</span><span style="color: #007700">(</span><span style="color: #0000BB">$form</span><span style="color: #007700">);<br />&nbsp; return </span><span style="color: #0000BB">$output</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div></p><a href="http://ypn-rss.overture.com/rss/31384/1220/click/"><img src="http://ypn-rss.overture.com/rss/31384/1220/img/?url=http%3A%2F%2Fdeekayen.net%2Fnew-hooktheme-drupal-6&amp;pid=1426196321" border="0" /></a>    ]]></content>
  </entry>
</feed>
