Planet #WPIRC
July 04, 2009
<p><p>Lenovo has turned 180&deg; and brought ThinkVantage System Update (TVSU) back from the dead. In a blog post on "Inside the Box" called "<a href="http://lenovoblogs.com/insidethebox/?p=239">ThinkVantage System Update Returns</a>", Matt Kohut, Global Lenovo Strategist, announces that System Update has been revived.</p><br></p><p><p>He goes on to explain that customer reactions, both blog posts and forum postings, has had such a big impact that it has caused Lenovo to rethink their decision.<br></p><blockquote cite="http://http://lenovoblogs.com/insidethebox/?p=239">Following our announcement, however, we heard from many customers on our blogs and forums. We’ve heard clearly that our individual and business customers alike value TVSU highly. Therefore, we are adjusting course based on your feedback, and have released a new version of TVSU on May 31st. In addition, we have made some backend investments which should indeed improve system performance. </blockquote></p><p><p>As I posted about this issue a little while back, outlining <a href="http://h0bbel.p0ggel.org/lenovo-discontinues-thinkvantage-system-update-tvsu">my reaction to the discontinuation</a>, I'm very happy to see that this gets reversed. TVSU is a valuable tool, and hopefully will continue to be so in the future. </p></p><p><p>At least it does seem like the downloads go a lot quicker now than before, but I fear that might just be temporary until "everyone" starts using TVSU again. I hope the investments Lenovo has put into the backend of things work out, also in the long run.</p><br></p><p><p>Re-reading my previous critical post about this, I realize that I probably was a bit ambiguous with regards to how we use TVSU in my organization though. We <em>only</em> use TVSU on the computers that doesn't get their updates from our own local repository that gets it's updates through the <a hef="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TVAN-ADMIN#ur">ThinkVantage Update Retriever (TVUR)</a>, and this has worked as expected through the period when TVSU wasn't available.</p>.</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=B994rvAaxNE:bbueGSxZdYA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=B994rvAaxNE:bbueGSxZdYA:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/B994rvAaxNE" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><p>A while ago, Lenovo pulled the plug on the old <a href="http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&lndocid=MIGR-72207">ThinkVantage System Update (TVSU)</a> infrastructure and announed that they would return in the beginning of May with a new and improved system. While I am all for improvement and progress, I questioned why Lenovo had to completely remove the old (somewhat) working driver repository before the "new and improved" system was in place. I was willing to live with that, as long as we got a new and improved system in place. I was, in fact, looking forward to see what Lenovo was up to.</p><br></p><p><p>Today, I was pointed to this little gem on the Lenovo site<br></p><blockquote cite="http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&lndocid=MIGR-72207">
<b>Lenovo is changing the way customers obtain updates for their PCs and Servers.</b></p>
<ul>
<li>For our PC customers, automatic updates via ThinkVantage System Update (TVSU) are being discontinued. Customers can continue to download updates by accessing the Lenovo support site at <a href="http://www.lenovo.com/support/">Lenovo Support &amp; downloads</a>. Lenovo is pursuing alternative solutions for system updates and future offerings will be communicated through the new <a href="http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&lndocid=MIGR-71139">Lenovo Message Center Plus</a>.<br>
</li>
</ul>
</blockquote></p><p>I'm sorry Lenovo, but completely discontinuing TVSU is not "changing the way customers obtain updates", it's telling your users that you don't value their time. Sadly, this is not the first time I've had that experience with Lenovo. I know this is pretty harsh, but consider the following scenario:<br></p><ul>
<li>You run an IT-department when you standardize on Lenovo Thinkpads for your mobile workforce.</li>
<li>As a consequence of your standardization efforts you set up several deployment methods for these Thinkpads</li>
<li>Seeing that your preferred vendor provides you with tools like <a href="http://www-07.ibm.com/lenovoinfo/au/innovation/imageultra.html">ThinkVantage® ImageUltra™ Builder</a>, and ThinkVantage® System Update you decide to spend considerable time investigating and perfecting your deployment methods based on these vendor supplied tools that actually adds value to your hardware investments. It's kind of magic, but it works!</li>
<li>Lenovo then pulls the rug from under your feet and you basically have to start over.</li>
</ul><p><p>This is the scenario I'm currently facing. Newer Thinkpad models, like the t400 and t500, are (naturally) not supported by the aging ThinkVantage® ImageUltra™ Builder (The readme for the trial download was last updated in 2007). Since we use it for deploying our base business OS and a minimal set of drivers this was a problem for us. After investigating a bit, we decided to try and give Lenovo a call and see if someone could help us out getting it to work on newer models.</p></p><p><p>I still can't believe how incredibly difficult it as to get support for that particular piece of software. Calling Lenovo support was useless, they didn't even know what product we were talking about. To this date, we have been unable to contact <em>anyone</em> in Lenovo, or IBM for that matter, that can help us with technical issues with it. No one. None. Zero! We did manage to get the basic drivers working inside the deployment image we have after quite a bit of investigation and trial and error on our own, no thanks to Lenovo.</p></p><p><p>So, where does ThinkVantage® System Update enter the picture? Well, we followed best practices and setup a minimal image that basically only includes networking drivers for the Thinkpad models we have. Then, and here's the magic part, the image installed ThinkVantage® System Update that connected to a local copy of the TVSU that contained the drivers we need for the rest of the devices. In reality, it's brilliant. Or, I should say that it <em>was</em> brilliant.</p></p><p><p>Now that Lenovo has yanked the foundation for our ImageUltra based installation services away from us, and we don't get support for it in the first place, what are we supposed to do? Manually download drivers and place it in the repository and hope the old TVSU client will find them?</p></p><p><p>Lenovo, I'm sorry, but this was not what you were supposed to be doing when you were "improving" the service. I've been a strong advocate for TVSU for a few years, even used it as a selling point when our business invests in hardware. Your most recent move has left me stranded, and now I need to start over setting up a distribution mechanism all over again. I know there are good alternatives to ImageUltra and, trust me, I know it has weaknesses, but I was willing to live with them as long as TVSU did the grunt work with regards to drivers. Right now <a href="http://technet.microsoft.com/en-us/library/cc265612.aspx">Windows Deployment Services</a> springs to mind, but that still leaves the problem with driver installation and management. TVSU sorted out that bit for us, and I'm sure Lenovo has other customers with similar stories.</p><br></p><p><p>I would really like to see the reasoning behind this decision, it sure doesn't make sense to me. But then again, I'm just a lowly user that actually utilized the very system Lenovo made available to me. How incredibly stupid of me.</p></p><p><b>Update 03. June 2009</b>: <a href="http://h0bbel.p0ggel.org/lenovo-rethinks-and-brings-thinkvantage-system-update-tvsu-back">Lenovo reverses decision discontinue TVSU</a>. Good one, Lenovo!</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=eesM3kPI4WE:6npJyb8CAK8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=eesM3kPI4WE:6npJyb8CAK8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/eesM3kPI4WE" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><p>To follow up on the <a href="http://h0bbel.p0ggel.org/microsoft-hyper-v-mythbusting-video-busted">Microsoft Mythbusting Video</a> Stu has dissected a Microsoft technical case study called <a href="http://technet.microsoft.com/en-us/library/cc974012.aspx">How Microsoft Designs the Virtualization Host and Network Infrastructure</a>.</p></p><p><p>Head on over to vinternals and read <a href="http://vinternals.com/2009/04/microsoft-myths-and-realities/">Microsoft Myths and Realities…</a>. As Stu concludes, VMware doesn't need marketing when Microsoft provides us with this kind of real life examples on how their infrastructure works.</p></p><p><p>Thanks Microsoft, you just made my job much easier with regards to explaining to management why Hyper-V just doesn't cut it.</p></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=vJko188_7tY:lyRU-OZ0PEs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=vJko188_7tY:lyRU-OZ0PEs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/vJko188_7tY" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><a href="http://habariproject.org/en/habari-06-released">Habari 0.6 has been released into the wild</a>. It's been a long time coming, but we're very happy to send a new release out the door. As the official release statement says </p><blockquote>Executive Summary: New release. <a href="http://habariproject.org/en/download">Get</a>.</blockquote></p><p><p>Noteworthy additions in the new version includes the new ACL permissions system, new API features and general improvements to the administration system</p><br></p><p><p>Grab your copy now and give it a test! We're confident you'll like it!</p></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=CoEgbMYywDM:0vU27n756iQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=CoEgbMYywDM:0vU27n756iQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/CoEgbMYywDM" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><p>On the 3rd of April 2009, Microsoft released a video which was <a href="http://www.microsoft.com/video/en/us/details/f8c3314f-c82d-4f8d-8b19-6a59733670f8?vp_evt=eref&vp_video=Microsoft+Mythbusters%3a+Top+10+VMware+Myths">supposed to "bust" 10 "VMware Myths"</a>, but as far as I can see the entire video has backfired pretty badly.</p><br></p><p><p>I'll let some of the brighter minds highlight the video content and dissect the myths, but I have to say this: <span class="alt"><em>Microsoft, please, if you want to play this game do it right. Make your own cases, don't try to disprove other people by highlighting their errors, erroneously. That doesn't work, sorry.</em></span></p><br></p><p><a href="http://twitter.com/gabvirtualworld"><p>Gabe</a> posted "<a href="http://www.gabesvirtualworld.com/?p=445">When myth busting goes wrong and becomes a myth to bust it self</a>"<br><br><a href="http://twitter.com/vinternals">Stu</a> posted "<a href="http://vinternals.com/2009/04/microsoft-hyper-v-20-no-memory-overcommit/">Microsoft Hyper-V 2.0 - NO Memory Overcommit!</a>"</p><br></p><p><p>Be sure to read the comments on the original video as well. Can anyone spell busted? Or is that coming in R2?<br></p><br></p><p><p>Finally I want to highlight a post by <a href="http://twitter.com/esloof">Eric Sloof</a>: "<a href="http://www.ntpro.nl/blog/archives/1043-When-Im-feeling-blue.html">When I’m feeling blue</a>" hits the sweet spot with regards to just how mature and stable Hyper-V is. I guess busted is a part of v1.0 after all.</p></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=oo8T-b4G8Es:mdrkWGqMswg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=oo8T-b4G8Es:mdrkWGqMswg:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/oo8T-b4G8Es" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><a href="http://halr9000.com/"><p>Hal Rottenberg</a>'s <a href="https://www.scriptingoutpost.com/p-129-managing-vmware-infrastructure-with-windows-powershell-tfm.aspx">Managing VMWare Infrastructure with Windows PowerShell</a> is now available as pre-order from <a href="http://www.scriptingoutpost.com">ScriptingOutpost.com</a></p><br></p><p><p>I follow <a href="http://twitter.com/halr9000">Hal on Twitter</a> and find his PowerShell and VMware knowledge inspiring, hopefully his book will help me master the black art of PowerShell and help me in my day to day VMware Infrastructure management as well.</p><br></p><p><p>Go order now, I know I will.</p></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=ZfZHr2bAaGE:N5oKc_a5kGM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=ZfZHr2bAaGE:N5oKc_a5kGM:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/ZfZHr2bAaGE" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><a href="http://www.virtu-al.net/"><p>Alan Renouf</a>, who I believe is french, asks if a <a href="http://www.virtu-al.net/2009/03/30/vmware-virtual-user-group/">VMware Virtual User Group</a> is a good idea.</p></p><p><p>Sure, why not? If you have some input, please do the <a href="http://freeonlinesurveys.com/rendersurvey.asp?sid=izrulmfeighpeuj571100">survey that Alan has prepared</a>, and have your say!</p></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=nr69-heesBg:2dqTiOOLIqc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=nr69-heesBg:2dqTiOOLIqc:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/nr69-heesBg" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><p>Yesterday I received an email from Ellen Skoglund, Windows Partner Solutions Manager here in Norway. Basically it's a "Get ready for Windows 7" email detailing how you should start to get ready for the Windows 7 release.</p></p><p><p>More interestingly, at least for the time being, it also had some thoughts regarding the usage of Internet Explorer 6.</p></p><p><p>They even quote Gartner Group: </p><blockquote>"IE6 Is a Bad Place to Be. IE6 has limitations in the areas of user experience, standards support and, historically, security".</blockquote></p><p><p>Microsoft goes on to link to the Norwegian <a href="http://ie6.forteller.net/index.php?title=Main_Page">IE6-campaign</a>. Several international outlets have commented on the campaign earlier including <a href="http://blog.wired.com/business/2009/02/norwegian-websi.html">Wired</a>, <a href="http://www.theregister.co.uk/2009/02/19/norway_ie6/">The Register</a>, <a href="http://tech.slashdot.org/article.pl?sid=09/02/20/214210">Slashdot</a> og <a href="http://www.pcworld.com/article/159898/norway_pushes_to_boot_microsofts_ie6_browser_off_the_web.html">PCWorld</a>.</p></p><p><p>The whole email and comments by Anders Brenna, editor for <a href="http://www.tu.no/">Teknisk Ukeblad</a>, can be read on their <a href="http://tekniskbeta.no/hva-gj%C3%B8r-microsoft-med-ie8/">Teknisk Beta blog</a> (norwegian link).</p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/h0bbel?a=jc7OUwx6Q90:vRiPNr2OoBs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/h0bbel?a=jc7OUwx6Q90:vRiPNr2OoBs:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/h0bbel?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/jc7OUwx6Q90" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><a href="http://www.petri.co.il/"><p>Petri.co.il</a> has just informed me that my article titled "<a href="http://www.petri.co.il/installing-windows-7-in-vmware-server-20.htm">Installing Windows 7 in VMware Server 2.0</a>" has been approved and published.</p></p><p><p>Hopefully this is just the first of many articles I'll be contributing to the site, and for me personally this is pretty exciting. Normally I'm the writer, editor and publicist all wrapped up in one when I post something online, and having someone else reading through and approving my article is not something I'm used to.</p></p><p><p>But there it is, complete with author bio and all. Good times!</p></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/h0bbel?a=XFmq5ss7"><img src="http://feeds.feedburner.com/~f/h0bbel?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/h0bbel?a=4nn4wdkI"><img src="http://feeds.feedburner.com/~f/h0bbel?d=50" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/Hk78wyMBHTw" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><p>The Gallery team has released the first <a href="http://gallery.menalto.com/gallery_3.0_alpha_1_released">"Technology Preview" of Gallery 3</a>. As this is a preview, it has not yet been through the normal security audits and it's not quite ready for prime time quite yet.</p><br></p><p><p>It does, however, have a lot features already implemented and more is in the pipeline before the estimated tentatively release of the first version in about 6 weeks.</p><br></p><p><p>Check it out, it does indeed show some great promise!</p><br></p><p><p>It's about time I rolled up my sleeves and got working on this as well.</p></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/h0bbel?a=0cvuoi7M"><img src="http://feeds.feedburner.com/~f/h0bbel?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/h0bbel?a=qq22MVir"><img src="http://feeds.feedburner.com/~f/h0bbel?d=50" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/h0bbel/~4/Ulxuc6NCEGA" height="1" width="1"/></content>
by Christian Mohn at July 04, 2009 01:03 AM
<p><p>One of the great things about <a href="https://www.google.com/a/">Google Apps for Domains</a> is they run a mail server for you, and you get the GMail web interface for email. Not only that, but you get a fully functional IMAP server as well. Unfortunately, GMail has a few annoyances.</p></p><h3>GPG</h3><p><p>The first annoyance is the lack of support for <a href="http://www.gnupg.org/">GPG</a>. Fortunately this is easily overcome with the use of <a href="http://getfiregpg.org/">FireGPG</a> extension for <a href="http://www.mozilla.com/en-US/firefox/">FireFox</a>. FireGPG provides a simple easy interface for using GPG, including, but not limited to, digitally signing emails, encrypting email and attachments, and GPGAuth.</p></p><p><p>If your not into GMail, FireGPG can also support <a href="http://roundcube.net/">Rouncube Webmail</a>. It also provides an easy mechanism to import GPG Keys, you know those big hash like things people paste on their sites; with one click you can import them.</p></p><h3>Fixed-Width Fonts</h3><p><a href="http://mattread.com/user/files/Screenshot-Matt Read, Services Mail.png"><img src="http://mattread.com/user/files/.deriv/Screenshot-Matt%20Read,%20Services%20Mail.png.thumbnail.jpg" alt="Screenshot of GMail with fixed-width fonts." style="float:right;"></a></p><p><p>The other major annoyance, which I find extremely annoying, is GMail displays all emails in a variable-width font instead of fixed-width. There is a "labs" feature that gives a toggle switch to change to fixed-width font, but you cannot make it the default. Fortuantely, again, <a href="http://www.mozilla.com/en-US/firefox/">FireFox</a> comes to the rescue, with it's "user defined style sheets". With only a couple of lines of CSS you can haz your email in fixed-width fonts.</p></p><p><p>User style sheets are located your <a href="http://www.mozilla.com/en-US/firefox/">FireFox</a> profile directory, and is named userContent.css. Any CSS you put in the file will be applied to each and every site you visit, so we can use it to get back our fonts. In Ubuntu it's located at <var>"~/.mozilla/firefox/xxx.default/chrome/userContent.css"</var>.</p></p><p><p>Just add the following to that file:</p></p><pre><code class="highlight css">
/* GMail fixed-width font: see http://3cx.org/item/34 */
div.msg div.mb, div.ArwC7c {
font-family: monospace !important;
font-size: 12px !important;
}
div.yxEQwb {
display: none;
}
div.ckChnd textarea, textarea.tb {
font-family: monospace !important;
font-size: 12px !important;
}
td.ct {
font-family: monospace !important;
font-size: 12px !important;
}
</code></pre><p><p>This will give you fixed-width fonts for all plain text emails, in the old and new, GMail interface, and it will hide those annoying "Sponsored Links". Also, it will give you fixed-width fonts on <a href="http://groups.google.com/">Google Groups</a>. Awesomeness!</p></p><h3>Customizing GMail With Labs</h3><p><p>In the <a href="http://gmailblog.blogspot.com/2008/06/introducing-gmail-labs.html">GMail Labs</a> section there are a bunch of goodies to be had. My favorites are Tasks, Advanced IMAP Control, and Navbar drag and drop.</p></p><p><p>Tasks are very simple. It gives you a little pop-out at the bottom for which you can add tasks, mark them as completed, link them to corresponding emails, etc. Lovely little TODO list keeper.</p></p><p><p>Advanced IMAP Controls gives you the ability to <q>Choose which labels show up in IMAP, turn off message auto-expunging, or trash messages when they're deleted from IMAP</q>. I love being able to choose which label/folders IMAP can use.</p></p><p><p>Pretty simple, title says it all. You can drag around all the little gadgets to the order of your choosing.</p></p><h3>GMail Almost Rocks</h3><p><p>As long as you have <a href="http://www.mozilla.com/en-US/firefox/">FireFox</a>, the GMail web interface is almost a complete replacement for those old and clumsy desktop mail apps. Hopefully we'll see some cool new Labs features roll out, like plain text/fixed-width only email ;).</p></p><p><p>As long as I don't have to maintain a mail server, I'm happy with GMail.</p></p></content>
by Matt Read at July 04, 2009 01:02 AM
<p>After deleting thousands of spam comments every week, I got fed up. I went looking for a way to eliminate spam all together. There are many different approaches that work at completely destroying spam bots A Honey Pot, [a Habari plugin](http://svn.habariproject.org/habari-extras/plugins/spamhoneypot/) by [Sean Coates](http://seancoates.com/), that adds a CSS hidden field that only bots would fill in; encoding the "action" URL, and input elements names and ids of the submitting form, a technique used by [Prof. Sneddy](http://gsnedders.com), killing all spam bots which don't use an HTML parser (which is all of them). There are others, but those are two that I find work reliably.</p><p><img alt="OpenID Logo" src="http://mattread.com/user/files/openid.png" style="float:right;"> The above mentioned methods, however, do not provide any way to authenticate the identity of the submitting comment author. In comes [OpenID](http://openid.net/). Using [OpenID](http://openid.net/) to authenticate that the commenter is who they say they are, allows us to ensure that only valid comments are submitted. Since I haven't seen a spam bot with an [OpenID](http://openid.net/), this will absolutely stop them in their tracks.</p><p>[OpenID](http://openid.net/) also allows to use heuristics to determine which [OpenIDs](http://openid.net/) can be trusted, and which can be blacklisted. Since every commenter has a unique authenticated [OpenID](http://openid.net/), we can reliably trust repeat commenters and push their comments through the moderation queue; at the same time, not trust blacklisted [OpenIDs](http://openid.net/), deleting them immediately, without needing any human interaction to _reliably_ do so.</p><p>I've decide to jump head first into the deep end, and only allow comments to be submitted using an OpenID Identifier. This means, that if you want submit a comment on my site, you _must_ have an [OpenID](http://openid.net/). There are many people who do not have an [OpenID](http://openid.net/) yet, but for your protection, and mine, I would highly recommend you go out and get one now.</p><p>I use [Verisign's <abbr title="Personal Identity Portal">PIP</abbr>](https://pip.verisignlabs.com/) service for my OpenID provider. The service is still in "beta" (whatever that means nowadays) but I would highly recommend it. They even provide phishing detection, and "Strong Authentication" methods, including Browser Certificates, and their [VIP Credetial](https://idprotect.verisign.com/learnmore.v). Go sign up!</p></content>
by Matt Read at July 04, 2009 01:02 AM
<p>One of the "neat" things in Javascript is you are able to dynamically add or change methods of a class and automatically update every instance of that class. Some of the things I usually find useful are adding to the String class, like so:</p><pre><code class="highlight javascript">
<![CDATA[
String.prototype.htmlSpecialChars = function() {
return this.replace(/\</g,'&#060;').replace(/\>/g,'&#062;');
}
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, '');
}
]]>
</code></pre><p>Obviously we cannot do this in PHP, and why would we, right? However we can emulate this behaviour to a certain extent using my "neat" little [Prototype](http://pastoid.com/9n+) class. With this Prototype class we can dynamically add properties and methods to any class, and they will be inherited by all instances of that class.</p><p>Let's look at the following "normal" PHP code.</p><pre><code class="highlight php">
<![CDATA[
class Person extends Prototype
{
public $name;
public $gender;
public function gender()
{
printf("%s is %s\n", $this->name, $this->gender);
}
}
$matt = new Person;
$matt->name = 'Matt';
$matt->gender = 'male';
$matt->gender();
// Matt is male
]]>
</code></pre><p>Now, there is nothing magical or out-of-the-ordinary going on here. We just instantiate the Person class and setup some properties. Calling the <code class="highlight php">gender()</code> method outputs a nice little string for us.</p><p>However, you see that the Person class is actually a child of the Prototype class. This will allow us to do some of that "neat" Javascript stuff. Using Prototype, let us expand the Person class to add an <code class="highlight php">$age</code> property and an <code class="highlight php">age()</code> method to output a nice string. Like so:</p><pre><code class="highlight php">
<![CDATA[
Person::add_property('age');
Person::add_method('age', 'printf("%s is a %d year old %s\n", $this->name, $this->age, $this->gender);');
$matt->age = 28;
$matt->age();
// Matt is a 28 year old male
]]>
</code></pre><p>Now all instances of Person inherit the <code class="highlight php">$age</code> property and <code class="highlight php">age()</code> method. So we can create a new Person, Susie, and this object will now have the age stuff.</p><pre><code class="highlight php">
<![CDATA[
$susie = new Person;
$susie->name = 'Susie';
$susie->gender = 'female';
$susie->age = 21;
$susie->age();
// Susie is a 21 year old female
]]>
</code></pre><p>One limitation of the Prototype class though, is you cannot overload a current method. So the following code, that attempts to overload the <code class="highlight php">gender()</code> method, will not work.</p><pre><code class="highlight php">
<![CDATA[
Person::add_method('gender', 'printf("%s is a %d year old %s\n", $this->name, $this->age, $this->gender);');
$matt->gender();
// Matt is male
]]>
</code></pre><p>There are also many, many, many other problems with this Prototype class. Some of which are:</p><p>- The '$this' keyword is reserved, so it actually does a string replace and uses '$self' instead.<br>- You cannot access/add new methods or properties statically (until PHP 5.3 with __callStatic()).<br>- It uses create_function, so every "method" is actually defined in the global namespace.<br>- Iteration does not work, although it could possibly be done with Iterator, Countable, et al.<br>- You cannot reference static variables/methods in your add method.<br>- You cannot share methods between classes.<br>- And so on and so forth...</p><p>This class was just an experiment to see if it was at all possible to implement something like Javascript's prototype behaviour in PHP with out using the [Runkit PECL extension](http://pecl.php.net/package/runkit). I had no intention of actually making this usable in production, for many reasons ;), although it was fun. If you have any improvements or additions to Protoype please add them to the [wiki page](http://mattread.org/PHPPrototype), or paste them in comment.</p></content>
by Matt Read at July 04, 2009 01:02 AM
<p>Wait, What? Yeah that's what I thought too. Still no Idea what I'm talking about? Well, let's take a look at the following code. Let's call it "fred".</p><pre><code class="highlight php">
class foo {
function bar( $b = 0 )
{
static $a = 0;
if ( $b ) {
$a = $b;
}
echo $a;
}
}
$faz = new foo;
$faz->bar(3);
$baz = new foo;
$baz->bar();
foo::bar();
foo:bar(1);
$faz->bar();
</code></pre><p>The code above, named "fred", basically creates a static variable <code class="highlight php">$a</code> inside the function <code class="highlight php">foo()</code>. When you call <code class="highlight php">foo(0)</code> it outputs the value of <code class="highlight php">$a</code>. When you call <code class="highlight php">foo('x')</code> , where x can be anything, it updates the value of <code class="highlight php">$a</code> with <code class="highlight php">'x'</code>, and outputs the new result.</p><p>Now, what would expect "fred" to output? If your like me, then you are completely wrong. "fred" will actually output the following code.</p><pre><code class="highlight php">
<![CDATA[
/*
Actual Outputs:
$faz->bar(3); ==> 3
$baz->bar(); ==> 3
foo::bar(); ==> 3
foo:bar(1); ==> 1
$faz->bar(); ==> 1
Expected outputs:
$faz->bar(3); ==> 3
$baz->bar(); ==> 0
foo::bar(); ==> 0
foo:bar(1); ==> 1
$faz->bar(); ==> 3
*/
]]>
</code></pre><p>Yes, that's what I said at the start, "Persistent Static Variables Across Instances". The static variable <code class="highlight php">$a</code> actually persists across the two instances of foo that "fred" created, and even into the static method call. This was completely unexpected, at least by me. So I'll ask, does anyone know if this is actually the expected behaviour, and why it is or is not?</p></content>
by Matt Read at July 04, 2009 01:02 AM
<p><p>A while ago I remember reading about an easter egg in <a href="http://haveamint.com">Mint</a>. You type in a secret code and receive a special prize, or something.</p></p><p><p>I thought it sounded ... neat. And we all know neat stuff is like so neat ... and stuff. Anyway, I started to create my own easter egg, and came up with this <a href="/projects/javascript/easter-egg/">"neat" little script</a>.</p></p><p><p>HINT: jibby</p></p></content>
by Matt Read at July 04, 2009 01:02 AM
<p><p>There have many concerns and question about the template system used in <a href="http://wordpress.org">WordPress</a>. Mostly the concerns are with n00bs and the complications of PHP. “I want to change this and that, but don't know PHP”. I hear this a lot. But the thing is, you don't need to know PHP to change the <a href="http://codex.wordpress.org/Templates">Templates</a> in <a href="http://wordpress.org">WordPress</a>. <!--more--></p></p><h3>The Template System</h3><p><p>Lets' start with “<a href="http://codex.wordpress.org/The_Loop">the Loop</a>” as we call it. Probably the most confusing part of the <a href="http://codex.wordpress.org/Templates">Template</a> for a non-programmer. The Loop looks like this:</p></p><pre id="ex1"><code class="php">&lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;
Template Section 1: post content Template Tags go here
&lt;?php endwhile; else: ?&gt;
Template Section2: no posts found stuff here.
&lt;?php endif; ?&gt;</code></pre><p><p>It may look complicated, but it's actually quite simple. In <a href="#ex1">Template Section 1</a>, all the posts information will be displayed. Within that section we will put all the posts <a href="http://codex.wordpress.org/Template_Tags">Template Tags</a>, and our HTML to format them. In <a href="#ex1">Template Section 2</a>, we will display a message telling the user no posts were found, if we find none to meet their criteria. </p></p><h4>Template Section 1: The Posts</h4><p><p>We'll start with outputting the post tile. Simply add in the <a href="http://codex.wordpress.org/Template_Tags">Template Tag</a> <code class="html">&lt;?php the_title() ?&gt;</code>. That will output the title of the post. </p></p><p><p>Now let's output the date of the post. Simply add the date's <a href="http://codex.wordpress.org/Template_Tags">Template Tag</a> <code class="html">&lt;?php the_date() ?&gt;</code>. That outputs the date of the post.</p></p><p><p>We will also, of coarse, need the content of the actual post. Simply, again, add the <a href="http://codex.wordpress.org/Template_Tags">Template Tag</a> <code class="html">&lt;?php the_content() ?&gt;</code>.</p></p><p><p>Now let's put it all together with some HTML:</p></p><pre><code class="html">&lt;div class=”post”&gt;
&lt;h2&gt; &lt;?php the_title() ?&gt; &lt;/h2&gt;
&lt;p&gt; &lt;?php the_date() ?&gt; &lt;/p&gt;
&lt;?php the_content() ?&gt;
&lt;/div&gt;
</code></pre><p><p>And there's our simple template. Now let's add some more.</p></p><p><p>First let's add a link to the post, permalink as it's called, on the title. We get the actual URL, something like <code class="html">http://mysite.com/archives/2004/09/post-title/</code>, with the <a href="http://codex.wordpress.org/Template_Tags">Template Tag</a> <code class="html">&lt;?php the_permalink() ?&gt;</code>. We will need to put that in our <code class="html">&lt;a href=””&gt;</code> HTML tag.</p></p><p><p>We also want to add in links to each page of our post, next page, previous page, etc.. We simply call another <a href="http://codex.wordpress.org/Template_Tags">Template Tag</a>, <code class="html">&lt;?php link_pages('&lt;p&gt;','&lt;/p&gt;') ?&gt;</code>. Now here's another confusion people have. We've added in, what programmers would call, arguments to our <a href="http://codex.wordpress.org/Template_Tags">Template Tag</a>. That is, we've added in <code class="html">'&lt;p&gt;', '&lt;/p&gt;'</code> to the brackets of the <a href="http://codex.wordpress.org/Template_Tags">Template Tag</a>. In this case we are just saying, if there are pages to link, output the page links with a <code class="html">&lt;p&gt;</code> at the start, and a <code class="html">&lt;/p&gt;</code> at the end. Hence, enclosing it all in HTML paragraph tags. Most <a href="http://codex.wordpress.org/Template_Tags">Template Tags</a> have different arguments you can pass to them, causing them to format their output differently.</p></p><p><p>Now let's add in our new tags.</p></p><pre><code class="html">&lt;div class=”post”&gt;
&lt;h2&gt; &lt;a href=”&lt;?php the_permalink() ?&gt;”&gt; &lt;?php the_title() ?&gt; &lt;/a&gt; &lt;/h2&gt;
&lt;p&gt; &lt;?php the_date() ?&gt; &lt;/p&gt;
&lt;?php the_content() ?&gt;
&lt;?php link_pages('&lt;p&gt;','&lt;/p&gt;') ?&gt;
&lt;/div&gt;
</code></pre><p><p>Now we have a fully functional Posts section, <a href="#ex1">Template Section 1</a>. Let's move on to <a href="#ex1">Template Section 2</a>.</p></p><h4>Template Section 2: No Posts Found</h4><p><p>For our <a href="#ex1">Template Section 2</a>, the no post found section, all we need to do is put in a message to tell the user nothing was found, to meet their criteria. Whether it was a search or a mis-typed URL. So let's use the following simple HTML:</p></p><pre><code class="html">&lt;p&gt;Sorry, no posts could be found to match your criteria.&lt;/p&gt;
</code></pre><p><p>Now let's put it all together.</p></p><h4>Complete Template</h4><p><p>Putting all we learned above together, we get a nice simple <a href="http://codex.wordpress.org/The_Loop">Loop</a> <a href="http://codex.wordpress.org/Templates">Template</a>.</p></p><pre><code class="html">&lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;
&lt;div class=”post”&gt;
&lt;h2&gt; &lt;a href=”&lt;?php the_permalink() ?&gt;”&gt; &lt;?php the_title() ?&gt; &lt;/a&gt; &lt;/h2&gt;
&lt;p&gt; &lt;?php the_date() ?&gt; &lt;/p&gt;
&lt;?php the_content() ?&gt;
&lt;?php link_pages('&lt;p&gt;','&lt;/p&gt;') ?&gt;
&lt;/div&gt;
&lt;?php endwhile; else: ?&gt;
&lt;p&gt;Sorry, no posts could be found to match your criteria.&lt;/p&gt;
&lt;?php endif; ?&gt;
</code></pre><p><p>As you can see, we have done no PHP coding, just some simple HTML with <a href="http://wordpress.org">WordPress</a> Template Tags added in.</p></p><p><p>Obviously this is not a complete template, as we have no header and footer containing all the <code class="html">&lt;html&gt;&lt;head&gt;&lt;body&gt;</code> tags. But with some simple HTML and more <a href="http://codex.wordpress.org/Template_Tags">Template Tags</a>, and no PHP, we can easily add all that is needed for a complete HTML document. That's right, an HTML document, not a PHP script.</p></p><p><p>As we can see <a href="http://wordpress.org">WordPress</a> is not PHP. <a href="http://wordpress.org">WordPress</a> is powered by PHP, but uses a simple template system, easily modified by even the most novice of users. None of that complicated Perl code like MT has ... Yes, believe it or not, MT is also powered by a complicated programming language. The only difference is marketing. MT has been marketed as having simple templates with no programming skills needed. However, somehow, and I don't know why, <a href="http://wordpress.org">WordPress</a> has gotten a rap of being complicated and only for the hardcore programmers out there. But as we can see, using the <a href="http://codex.wordpress.org/Template_Tags">Template Tags</a> is extremely easy and requires no knowledge of PHP at all.</p></p><p><p>Changing the format and style of your <a href="http://codex.wordpress.org/Templates">Template</a> is as easy as using a little HTML, CSS and Template Tags. Just like other Weblog systems out there. </p></p><p><p>However, as with any software, there is room for improvement.</p></p><h3>Improving Templates</h3><p><p>One of the problems with the <a href="http://wordpress.org">WordPress</a> <a href="http://codex.wordpress.org/Templates">Template System</a>, in my opinion, is the default <a href="http://codex.wordpress.org/Templates">Template</a>, or theme, itself. Specifically the sidebar, with all the <code class="html">is_*()</code> functions. We shouldn't expect a novice <a href="http://wordpress.org">WordPress</a> user to understand what these functions mean. I would suggest removing all the <code class="html">if(is_*())</code> statements in place of a simple sidebar with just the essentials. Say, Search, Pages, Archives, Categories, Links, Meta information and take out all the complicated if statements and includes.</p></p><p><p>Another problem I see with the default <a href="http://codex.wordpress.org/Templates">Template</a> is the CSS in the header. I think all CSS should be contained in the style sheets themselves. Again remove the if statements. When a user wants to modify the CSS it seems logical to have just the simple CSS in one place, to easily modify.</p></p><p><p>Another problem I see is with some of the <a href="http://codex.wordpress.org/Template_Tags">Template Tags</a>. Such as <code class="html">&lt;?php bloginfo() ?&gt;</code>. Instead of having one function to display some necessary information, like blog name, description, url, etc., why not have specific tags for the highly used information. Like say, <code class="html">&lt;?php blog_name() ?&gt;</code>, <code class="html">&lt;?php blog_description() ?&gt;</code>, <code class="html">&lt;?php blog_url() ?&gt;</code>, etc., to maintain consistency. For some of the less used information, charset, version, etc., the <code class="html">&lt;?php bloginfo() ?&gt;</code> tag would be fine.</p></p><p><p>And some of the other advanced <a href="http://codex.wordpress.org/Template_Tags">Template Tags</a> in use in the default <a href="http://codex.wordpress.org/Templates">Templates</a>, like <code class="html">&lt;?php list_cats(0, '', 'name', 'asc', '', 1, 0, 1, 1, 1, 1, 0,'','','','','') ?&gt;</code>, should be simplified to not contain all those arguments. Maybe use <code class="html">&lt;?php wp_list_cats() ?&gt;</code> where all those settings would be set in the admin area.</p></p><p><p>It would also be nice to try to simplify the loop, although I can't see any way of doing that now, to use as little actual PHP, like if else statements, as possible. Also take out the else, for when no posts are found, and always use the 404 template file.</p></p><p><p>The point I'm trying making is to take the PHP out of the <a href="http://codex.wordpress.org/Templates">Templates</a>, as much as possible, so users don't get confused and think they need PHP skills to modify the <a href="http://codex.wordpress.org/Templates">Templates</a>.</p></p><p><p>Those are just my thoughts on the matter.</p></p><div class="note"><p><strong>Update:</strong></p><p><p>Stuff I write doesn't usually get this much attention so I thought I should clarify some things, as I usually just write what's on my mind and do little to no editing afterwards.</p></p><p><p>The intentions of this article was not insult anyones intelligence by making something that does take time to learn, seem so simple a <a href="http://drunkenmonkey.org/">monkey</a> could do it ( I like Monkeys ). I was just trying to show that the templates can be easy if you think about it the right way and not get stuck on all the PHP. ( and please be nice to the <a href="http://drunkenmonkey.org/">monkey</a>, he's very nice and doesn't usually bite ) </p></p><p></div></p><p class="note"><strong>Update 2:</strong><p>If you need any help with your templates, or would like to learn more about the monkey, I'd be glad to help out. Just <a href="/about/contact/">drop me a line</a>.</p></p></content>
by Matt Read at July 04, 2009 01:02 AM
<p><p>One of the many exciting features of CSS 3 is the ability to create columnar text. In this article I will show you a way to fake two column text with a little Javascript. </p><!--more--></p><p><p>First off we need to stipulate that this hack will only work with textual information contained in HTML paragraph tags (&#060;p&#062;&#060;/p&#062;).</p></p><p><p>To use the script all you need to do is <a href="#download">download the script</a> and include it in the head of your document.</p></p><pre><code class="html">&#060;script type="text/javascript" src="two-col.js"&#062;&#060;/script&#062;
</code></pre><p><p>To designate which text will be columnar we will put it in a layer with an id attribute of "two-col" like below. And that's all you need to do to use the script.</p></p><pre><code class="html">&#060;div id="two-col"&#062;
&#060;p&#062;The information here will be displayed as two columns.
This will be the first of two Paragraphs&#060;/p&#062;
&#060;p&#062;Here is the second paragraph in our columnar
data.&#060;/p&#062;
&#060;/div&#062;
</code></pre><h3>The Script And The Problems</h3><p><p>The script works by grabbing all the HTML inside the "two-col" element and splitting into an array, by spaces, using javascripts built in split function. Then we loop through our new array and place half the words in the left column and the other half in the right column. Of coarse splitting the HTML in half causes a few problems. </p></p><p><p>First, if a tag is located in the middle of the data, it can split that tag in two. This is quite bad but can be overcome by formatting the content so it doesn't occur. Maybe in a latter version of the script I'll try to address this problem.</p></p><p><p>Second, because we are spiltting the content into two, we end up spiltting a paragraph into two paragraphs, creating a new paragraph out of part of the original. This is unfortunate but necessary for proper styling with CSS.</p></p><p><p>But if everything works right we get our two column text.</p></p><h3>Example of Two Column Text</h3><div id="two-col"><p><p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Suspendisse imperdiet, erat quis tempus euismod, mi quam faucibus nibh, ac ullamcorper erat velit in nisl. In eget elit. Sed pede quam, eleifend facilisis, lobortis a, sagittis non, eros. Aliquam erat volutpat.</p></p><p><p>Praesent mauris magna, laoreet id, venenatis in, suscipit vitae, nisl. Aenean rutrum convallis nunc. Suspendisse pharetra placerat felis. In eget ipsum pretium nunc dignissim aliquet. Nulla ligula. Sed nulla lorem, dapibus in, malesuada sed, ultrices id, nunc. </p></p><p><p>Proin feugiat neque a orci. In hac habitasse platea dictumst. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Integer nec dolor id neque aliquet mattis. Mauris leo eros, elementum eget, varius ultricies, vehicula non, lorem. Nam eget neque id lacus imperdiet tincidunt. Aliquam eu augue.</p><br></div></p></content>
by Matt Read at July 04, 2009 01:02 AM
<p><a href="http://pasteosaurus.com/"><img src="/user/files/pasteosaurus.com.png" style="float:right;" alt="screenshot of pasteosaurus"></a> [Jim Whimpey](http://jimwhimpey.com/ "The Jim Whimpey Weblog") and <a href="http://brisbanecreative.com.au/">Brisbane Creative</a> bring you <a href="http://pasteosaurus.com/">Pasteosaurus</a>. The new PHP pastebin on the block, based on the OSS code from <a href="pastebin.com">Pastebin.com</a>. The entire systme and codebase was almost completely rewritten by Jim, in aim of simplifying the entire system.</p><p>As <a href="http://jimwhimpey.com/blog/2007/pasteosaurus-and-an-incredible-photographic-journal/">Jim says</a> on his blog, <q cite="http://jimwhimpey.com/blog/2007/pasteosaurus-and-an-incredible-photographic-journal/">Every piece of junk I wasn’t using from pastebin has been removed, including DB fields and every file has been reorganised and rewritten in cleaner, smaller and more easily read code. This means it’s now much easier for me to add features, which I’ve already done!</q></p><p>It is quite a lovely pastebin, much faster and cleaner than most of those other big ones. The design is simple yet beautiful; I love to see red and pink in a design. And with the use of <a href="http://geshi.org/">Geshi</a>, the syntax highlighting works quite well.</p><p>Of course, being a good OSS citizen, the code available for download via the link at the bottom of every page. So let's not pastebin anymore, let's Pasteosaurus!</p></content>
by Matt Read at July 04, 2009 01:02 AM
<p><a href="http://drunkenmonkey.org"><img src="/user/files/drunkenmonkey.org.png" style="float:right;" alt="screenshot fo drunkenmonkey labs site"></a> The <a href="http://drunkenmonkey.org">Labs</a> have a brand new design. This time I went for a colourful design using the basics, red, green, blue, violet, and yellow, as you'll see in the background. I tried to carry those colours throughout the whole design. The header is a dark violet to try to dull down the "jump in your face" colours in the background.</p><p>I really wanted this design to jump of the page with colour. I tend to design very "monochromatically", so I hope I pulled it off. With a simple layout and bright colours I think I might have achieved something close to what I imagined. Stay tunned, as there will be a few more updates to the <a href="http://drunkenmonkey.org">Labs</a> this week as I go through the design and update a few things, and hopefully add even more colour.</p></content>
by Matt Read at July 04, 2009 01:02 AM
<p><img src="/user/files/mattread.com.png" style="float:right" alt="screenshot of this theme"> Well my new design, code named Oceanus, is finally (mostly) complete. It's been up for a while but I just haven't took the time to talk about it. My goal in this design was to create a simple, easy to read design without being boring, like so many "simple" designs out there.</p><p>I also went with a dark background this time, something that prooved harder than it sounds. The dark background In my opinion make it much easier to read on a computer monitor. It also looks ... "neater" ;).</p><p>My new <a href="/archives">archives</a>, well, they're just rockin. I love how they show my "seasonal" posting, and I noticed I tend to post very little in the winter months. Must the cold weather. If you like them I can make the code available, just let me know.</p><p>There are still some bugs and improvements to be made, but let me know what you think of "Version Oceanus". If you are using MSIE, I know, it all looks fubar'ed ;).</p></content>
by Matt Read at July 04, 2009 01:02 AM
<p>mod_pony has been a pretty long-standing joke on #httpd on Freenode, and has also made a number of appearances in conference presentations of mine when I wanted to refer to an imaginary module for some reason.</p><p>I'm pleased to announce that there is now actually a <a href="http://svn.rcbowen.com/svn/public/mod_pony/">mod_pony</a>. It really doesn't do anything useful. But it does build, and output a pony. And, really, what more could one possibly want?</p><p>Patches welcome.</p><p>(See mod_pony in action <a href="http://drbacchus.com/pony">HERE</a>.)</p></content>
by rbowen at July 04, 2009 01:00 AM
<p>What you see here is the cover of the new People magazine.</p><p><img src="http://drbacchus.com/user/files/bigpeople.jpg"></p><p>Other than the quote, which is sure to be a favorite of her daughter once she can read, this looks like a promotion for teen pregnancy. She's beaming, obviously very pleased with herself. Girls everywhere are going to be saying, wow, where can I get me one of those?</p><p>And, according to MSN, she's going to <a href="http://www.msnbc.msn.com/id/28424559/">make more than a quarter mil on the photos</a>. What's not to love. Better run out and get preggers as fast as you can.</p><p>It would be lying to say I'm shocked by the startlingly bad judgement of this magazine. I lost my last shred of respect for the media years ago. But surely, somewhere along the chain of command, someone has a daughter? Even one of you? Show at least a scrap of common sense, would you?</p></content>
by rbowen at July 04, 2009 01:00 AM
<p><a href="http://www.flickr.com/photos/rbowen/sets/72157620121278479/"><img src="http://farm4.static.flickr.com/3376/3650187389_c49428b44d_m.jpg" width="180" height="240" alt="Satchel"></a></p><p>I've been on a search for the perfect bag for quite some time.</p><p>I carry a lot of stuff, and I hate having my pants pockets loaded down. There's the wallet and phone and pens and ipod, for starters. But there's also the keys and knife and ... Am I becoming <a href="http://feathercast.org/?p=27">Ken Coar</a>?</p><p>I want something that's small - I already carry a backpack most places - but big enough for the stuff listed above. And it needs to be neither effeminate and <a href="http://abcnews.go.com/US/story?id=2233752">purse-like</a>, nor have the uber-geek-ness of a <a href="http://killerfannypack.wordpress.com/">fanny pack</a>.</p><p>I finally found <a href="http://store.saddlebackleather.com/categories/83-Leather-Bags-SaddleBack-Leather-Pouches">The Ultimate Bag</a>. It's awesome. It's got everything. It really has only one drawback - the price tag.</p><p>Now, with a 100 year warranty, and such an aura of awesomeness, perhaps $115 is in fact pretty reasonable. But I don't actually have it at this moment. But what I do have is an awesome brother who lives in the place where they have amazing leather artisans on every street corner. I showed him the picture, and he arrived last week with The Perfect Bag.</p><p>At first, I thought it was a little small, because my <a href="http://www.moleskineus.com/cahier-large-ruled.html">Moleskine</a> didn't fit in it, but the more I use it, the more I love it. I think it might actually be the perfect size. It's really well made. The stitches are small. The stress points are riveted. The inside has a nice lining. And the whole thing is that wonderful honey-brown color that will, I'm sure, darken with time and use. It doesn't have any zippers or snaps to break or wear out, so I think it's going to last a long time.</p><p>Whether they'll <a href="http://store.saddlebackleather.com/">fight over it when I'm dead</a>, I'm not sure, but that's a concession I'm willing to make.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p>No doubt you've heard of <a href="http://ha.ckers.org/slowloris/">Slowloris</a>, the HTTP DOS tool that will take down an Apache web server. I recommend reading the update at that site, which describes in some detail how it works.</p><p>Note that this condition is also covered in the <a href="http://httpd.apache.org/docs/trunk/misc/security_tips.html#dos">Apache documentation</a>, and, according to svn, that was put in:</p><p>r369825 | slive | 2006-01-17</p><p>So we've known about it for a *long* time.</p><p>What I can't figure out is whether it's really not that big a deal, or if I'm dismissing the importance because I've known about it for so long. I've known for a *long* time that you can take down an Apache server with nothing more than a telnet client. You telnet to port 80, issue a partial HTTP request, and then bg the process, then do it again.</p><p>The way that the attack works is that Apache then waits for the rest of the request, until it hits the timeout (configurable with the Timeout directive). This completely ties up that listener, so that it can't answer any other inbound requests. Unfortunately, by default, Timeout is set to 300. And Apache only has a finite number of available waiting processes (Configurable by MaxClients.) So you do that MaxClient times within Timeout seconds, and, viola, the server is now no longer able to respond to inbound requests.</p><p>That's exactly what the slowloris tool does, in a more automated fashion.</p><p>So, what to do about it?</p><p>Well, set Timeout lower. And use mod_evasive to limit the number of connections from one host. And use mod_security to deny requests that look like they were issued by this tool. However, that last one doesn't really help, because it's trivial to change the signature of requests from this tool.</p><p>On the other hand, this attack - or exploit, if you want to call it that - has been around for years, and hasn't been a very popular attack vector. What this tool has done is not so much discovering an attack - we already knew about it - but let the larger number of script kiddies know about it. So presumably we'll see it happen more often than we used to.</p><p>So, what to do about it longer term? Well, in Apache 3.0, or 2.4, with the event mpm and asynchronous IO, it will apparently be a non-issue. Another of the *many* compelling reasons to upgrade to 2.4 just as soon as it releases - something else that I need to write more about in the coming days.</p><p>Additional resources:</p><p><a href="http://bahumbug.wordpress.com/2009/06/21/slowloris/">Niq's response</a><br><a href="http://httpd.apache.org/docs/trunk/misc/security_tips.html#dos">Apache security documentation</a><br><a href="http://ha.ckers.org/slowloris/">Slowloris website</a><br><a href="http://www.zdziarski.com/projects/mod_evasive/">mod_evasive</a></p></content>
by rbowen at July 04, 2009 01:00 AM
<p>In addition to <a href="http://wooga.drbacchus.com/os-30-and-caldav#comment-52170">Shep's helpful comment</a>, right after I posted my last entry I discovered that the settings at m.google.com/sync apply to the Exchange sync. Apparently the Exchange sync worked in OS 2.2, so there was no reason to upgrade at all, if I had just known that.</p><p>Of course, there are some nice additional features that I got, and it was only $10, but it's rather irritating to me that I have to set up 10 different accounts to sync my 10 different Google calendars. That seems odd, to say the least.</p><p>Anyways, perhaps this is an enhancement that will come along shortly. Meanwhile, I'll probably just keep using the Exchange connector.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p>I had one single motivation for upgrading my iPod Touch to OS 3.0 - CalDAV. According to very vague reports I had read before, it would "support CalDAV", although the actual explanations of what that meant varied somewhat.</p><p>But iCal on the Mac started supporting CalDAV - actually allowing editing of CalDAV calendars - a while back, so I figured maybe the iPod/iPhone would too. And, hey, it's only $10.</p><p>I found several conflicting instructions on how to configure CalDAV for Google Calendars. The best ones were <a href="http://ktula.com/2009/03/23/iphone-30-beta-1-configure-google-calendar-caldav/">here</a> and <a href="http://www.google.com/support/mobile/bin/answer.py?answer=138740&topic=14252">here</a>, suggesting that you set it up either as an Exchange account or a CalDAV account. While CalDAV seems more probable, the one that says to do it as Exchange is at Google. Weird.</p><p>Also, if you go to <a href="http://m.google.com/sync">m.google.com/sync</a> on your iPhone, you get a thing that lets you select which of your calendars you wish to connect to.</p><p>So far, sounds pretty good.</p><p>Yes, I said "which of your calendars." I have a dozen calendars on my Google calendar account, because I share calendars with several people. It's the only way to fly. But the iPhone seems to assume that I've only got one. As far as I can tell, it is syncing quite happily with one, but the other ones are being entirely ignored, despite what I configured on m.google.com.</p><p>Is this expected? I vaguely remember reading somewhere that I'd have to create a "new account" for each calendar, but that's so completely ludicrous that I must have misunderstood, right? In that case, why would there be this tool at Google for saying what calendars I want to sync?</p><p>I *think* I have it set up right now, but now m.google.com says that my iPod hasn't sync'ed since yesterday at 15:46, so ... apparently something is still not set up right.</p><p>So. Frustrating.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p><img alt="rewrite.jpg" src="http://wooga.drbacchus.com/user/files/rewrite.jpg">I wrote a <a href="http://drbacchus.com/books/rewrite">book about mod_rewrite</a>. Perhaps you have a copy. If so, thanks.</p><p>Additionally, I spend a lot of time on IRC (freenode.org, #httpd) answering mod_rewrite questions. And I speak at various conferences, frequently on the topic of mod_rewrite.</p><p>mod_rewrite isn't in fact, terribly difficult. However, it is made more difficult by two factors.</p><p>First, regular expressions are universally perceived as being difficult. Thus, even people who haven't even tried to learn about them already *know* that they are difficult, because someone else communicated this dread to them in a weird tribal knowledge rear-brain kind of way.</p><p>Second, and perhaps more damaging, is the ENORMOUS quantity of misinformation that exists online about mod_rewrite. If you search for a rewrite recipe to do X, you'll find a hundred of them, and at least 75% of them will be Just Plain Wrong, while 20% of them will be either misleading, or confusing, or actually work, but do it in such a way that enormously obfuscates things to the point that nobody can understand what's actually going on.</p><p>The other 5% will make the observation that the task in question doesn't actually require mod_rewrite, but that there's another, more efficient and simple, configuration directive that does exactly what is being requested. Such as Redirect, or SetEnvIf, or Alias, or UseCanonicalName.</p><p>I became interested in mod_rewrite primarily because of regular expressions. Having read <a href="http://regex.info/">Jeffrey's marvelous book</a> from cover to cover back in the first edition, and using regex extensively in Perl, I figured, how hard could it really be? The secret answer is, not very hard at all. But since people go pretty far out of their way to make it hard, I've been guaranteed a speaking spot at any conference I want to submit a paper to, because people say, Oh, mod_rewrite is HARD!! Lucky me.</p><p>So, once again, a huge thank you to Ralf for creating this beast.</p><p>I will now resume my eternal quest to find and gently correct all of the bad mod_rewrite examples out there on the web.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p>Today I saw an ad for the <a href="http://www.uncf.org/">UNCF</a> that indicated that the fountain pen was invented by an African American, William Purvis. This struck me as wildly improbable, since fountain pens have been around considerably longer than there were non-native persons living on the North American continent, and certainly before there were persons of African descent here.</p><p><a href="http://www.blackinventor.com/pages/wbpurvis.html">Another website made the same claim</a>, giving a date in 1890 for the invention, but lacked any useful information to indicate what, exactly, Mr. Purvis invented. Strangely, <a href="http://en.wikipedia.org/wiki/Fountain_pen">Wikipedia</a> doesn't mention Mr. Purvis at all, and gives a date in 953 for the invention of the fountain pen, in Egypt. For the purposes of this claim, "fountain pen" is defined to be a device with an ink reservoir and some kind of gravity-fed ink delivery to a nib. And, further, there are surviving fountain pens from the 1700's, which would make an 1890 invention date impossible.</p><p>As a huge fan of fountain pens, my curiosity was piqued, and I wanted to know what in fact he did invent and patent in 1890.</p><p>After a little more poking around, I found that <a href="http://inventors.about.com/library/inventors/blwilliampurvis.htm">Mr. Purvis invented improvements to existing technology</a>, making a fountain pen that didn't leak as much, and which was more affordable to most people, ushering in an era where everybody could own one. He also invented a number of other very cool things, including self-inking hand stamps, electric railway track switchers, and machines for making paper bags.</p><p>All of this leaves me wondering why a respectable organization like the UNCF would make such a claim which is so trivially debunked. And yet, even as I write this, I know that folks will accuse me of being racist by even pointing out such a thing. If the goal here is to celebrate the accomplishments of African American inventors, there's certainly <a href="http://www.enchantedlearning.com/inventors/black.shtml">no</a> <a href="http://teacher.scholastic.com/activities/bhistory/inventors/">shortage</a> <a href="http://inventors.about.com/od/blackinventors/a/black_inventors.htm">of</a> <a href="http://inventors.about.com/od/blackinventors/a/Black_History.htm">those</a> without making any up.</p><p>Now, I'm certain that many of the inventions attributed to white men were in fact invented by someone of, shall we say, lower social class at the time of invention, either for reasons of race, nationality, or gender, and the white man in question took credit for them, because he knew that the actual inventor lacked the clout to do anything about it. I've heard this claim about Edison repeatedly. The controversy we know about is that of <a href="http://en.wikipedia.org/wiki/War_of_Currents">Nikola Tesla</a> who was Serbian. But he was white, and so he got some little recognition at the time, and a lot more since his death.</p><p>But revisionist history doesn't help anyone. We should celebrate William Purvis for what he did invent - which was some very cool stuff - without making up claims that he invented other things, which not only opens the claims up to debunking, but also undervalues the cool things he did accomplish.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p><a href="http://www.kentucky.com/179/story/824223.html"><img alt="3-090608Sidewalksacb012.embedded.prod_affiliate.79.jpg" src="http://wooga.drbacchus.com/user/files/3-090608Sidewalksacb012.embedded.prod_affiliate.79.jpg"></p><p>Once again the rich folks in Lexington are talking out of both sides of their mouths</a>, and it really irritates me.</p><p>They claim that they oppose the sidewalks on Tates Creek Road because it will spoil the grass, because it will be dangerous for people to walk there, and because the people will be exposed to exhaust fumes. But we know better, don't we?</p><p>The truth is that they don't want *that kind* of people walking in front of their million dollar homes.</p><p>Whenever there's something proposed in Lexington that benefits the low-income folks who don't drive SUVs and don't own horses, it gets shot down. And the sidewalk proposal will probably fail in the city council tonight, because the city council is a bunch of spoiled rich kids who are more interested in having direct flights to Las Vegas and Martha's Vineyard than they are about whether their less advantaged neighbors are able to walk to work without ruining their clothes.</p><p>It's not even like there's a cost involved - this is a federal grant.</p><p>The number of completely ludicrous statements made in opposition to the sidewalk would be funny if it wasn't so disgusting.</p><blockquote>"Sidewalks would destroy the greenery of the corridor and increase storm-water run off," said Steve Kesten,</blockquote><p>... leaning against the side of his Lexus SUV that gets 7 miles to the gallon, downhill.</p><blockquote> "I see no good reason for sidewalks out here, and neither do my neighbors."</blockquote><p>.... Presumably because they all have SUVs, too, and so don't need to walk anywhere.</p><blockquote>"My constituents don't see people walking along the road," Beard said, adding that when he drives along Tates Creek, "I never, I mean never, have seen anyone walking."</blockquote><p>... Presumably because he was talking on his cell phone and drinking his Starbucks at the time.</p><p>Lexington is increasingly a divided society, with a widening gap between the rich folks that run the show and the poor folks who make up the majority of the population. Here's hoping I'm wrong about the council meeting tonight. At least <a href="http://www.kentucky.com/181/story/826477.html">this is a good sign</a>.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p>I have a WRT54G, the ancient 2.2 version of the hardware, back before there was an L edition. I've been running the Sveasoft Alchemy firmware on it for years and years. I don't even remember when I installed it.</p><p>Yeah, I know, there are some folks with ideological reasons why I shouldn't run Sveasoft. Whatever. That's not the point.</p><p>Anyways, for the last few months, we've had to reset the device on a nearly daily basis, otherwise the DHCP server just stops handing out addresses.</p><p>This weekend, we got fed up, and I downloaded the latest firmware from Linksys/Cisco. It seems to have all the same features as the Sveasoft firmware I was running. Or, at least, if it's missing any, it's ones I wasn't using. Presumably I could run a ssh server on it, so that I could ssh in and ... um ... do something ... I'm not sure why I would want to do that, actually.</p><p>Anyways, we haven't had that problem since we did that, and it makes me wonder, not for the first time, how it is that software can suddenly take it into its mind, after years and years of functioning correctly, to just suddenly quit.</p><p>So strange.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p>We spent most of yesterday afternoon making dinner - tandoori chicken, chapatis, and aloo gobi. Although we usually make tandoori chicken with <a href="http://www.google.com/products?client=safari&rls=en-us&q=pataks+tandoori+paste&oe=UTF-8&um=1&ie=UTF-8&ei=pIciSsQPhcW2B9u6jcwG&sa=X&oi=product_result_group&resnum=1&ct=title">a mix</a>, yesterday we made it from scratch, which is always better, and a lot more fun.</p><p>There are <a href="http://www.google.com/search?hl=en&client=safari&rls=en-us&q=tandoori+chicken+recipe&aq=0p&oq=tandoori+chick&aqi=g10">lots of recipes online</a> for tandoori chicken, but none of them are quite what I remember from a <a href="http://www.amazon.com/365-Ways-Cook-Chicken-Anniversary/dp/006018664X">cookbook I used to have</a>, but seem to have misplaced in some dark corner.</p><p>So we took several of the recipes as inspiration, and came up with something all our own. Like all good recipes, I'm not entirely sure what I put in it. Yoghurt, fresh-pressed garlic, grated fresh ginger, cumin, cardamon, coriander, black pepper, cloves, cayenne, garam masala that we already had, and lots of chopped cilantro. As to the quantities of each, I really couldn't say. Which is a shame, because it was some of the best I've ever made.</p><p>We'll have to try that again some day. Maybe that time I'll write down the amounts. But, realistically, I doubt that I will.</p><p>The aloo gobi recipe is the one that's at the end of the "Bend it like Beckham" DVD.</p><p>The chapatis are my own interpretation of the technique that my brother taught me.</p><p>Maybe we'll make it for you next time you visit.</p></content>
by rbowen at July 04, 2009 01:00 AM
<p>And, while I'm at it, here's another teaser from The Jungle Book - <a href="http://drbacchus.com/podcasts/kipling/junglebook/maxims_of_baloo.mp3">Maxims of Baloo</a>.</p></content>
by rbowen at July 04, 2009 01:00 AM
June 28, 2009
June 25, 2009
Shaq apparently discovered that he had been traded by reading a “tweet” by a fan of his on Twitter. Crazy, if true.
by Mark at June 25, 2009 07:28 AM
June 23, 2009
If you haven’t already read Joey deVilla’s phenomenal Fast Food Apple Pies and Why Netbooks Suck, do it now. And if you have, re-read it. Joey has a followup, Like I Said, Netbooks Suck, with some statistics to back up his position on “the zone of suck.”
by Mark at June 23, 2009 05:17 PM
June 17, 2009
June 16, 2009
A man has sued the Oakland A’s for gender discrimination in handing out promotional hats only to women on Mother’s Day. Yeah, he’s probably a tool, but he’s absolutely showing how ridiculous it is to ban private discrimination.
by Mark at June 16, 2009 08:45 PM
http://www.chloespring.com/
Only a splash page up for now, full website coming soon. She might even blog!
by Jennifer at June 16, 2009 06:01 PM
June 12, 2009
June 11, 2009
WordPress 2.8 is now available for download! Read up on what has changed and enjoy the many improvements and bug fixes.
by Mark at June 11, 2009 07:04 PM
June 10, 2009
Liza Donnelly: “I think it’s high time we all started thinking like a middle-aged Hispanic woman.”
by Firas at June 10, 2009 10:46 PM
Last week I tweeted a few times because it kept raining day after day. Today, when a heavy line of storms moved through the area, we didn’t get a drop. I watched the radar loop and as the storm moved East/South-East, a line opened up parallel to the direction of movement. It was like a “dry channel” of air that sat over top of us. The storm just “split” before it got to us and then merged once it was past.
Its not the first time this has happened. Its happened plenty of times before during summer thunderstorms. I’m not sure if there’s some geographical formation that’s causing storms to “split” around us or what. Maybe its just my close proximity to Three Mile Island…


by Ryan at June 10, 2009 02:01 AM
June 08, 2009
May 31, 2009
Wikipedia:
‘Blank and White’ is censored even on uncensored versions of the album with the line “or the President of whatever” removed (replaced with a beep) from “Let’s shoot up the mall/The school/or the President of whatever/or whoever wants to fight”.
Because I’m awesome, I dug up a version that’s not beeped out:
MP3
Give me a picket sign
Make it blank and white
Like all those stupid teenage girls
We’re gonna need ‘em where we’re going tonight
Let’s make sure the music’s loud enough,
Let’s make sure the music’s loud enough,
We won’t even hear it end!
by Firas at May 31, 2009 07:10 PM
May 26, 2009
I’m looking to organize a Wordpress Meetup of sorts for all users in Central PA. I don’t care if you’re a developer, designer, or just a user… please, come on out and join the fun. It will be a great resource for everybody to learn and network. If you’re just a user and have a need, somebody should be there that can fill it for you.
As far as location, I was thinking the Abbey Bar at Appalachian Brewing Company in Harrisburg. For a time, lets say the 2nd Wednesday of the month at 7PM?
If anybody has other preferences for time and venue, please let me know and we can adjust as necessary.
With that being said… I’ll see you at the first Wordpress Harrisburg Meetup on Wednesday June 10th, at 7PM at the Abbey Bar at ABC.
P.S. As an added bonus, I’ll pick up the drink tab for the first meetup.


by Ryan at May 26, 2009 07:23 PM
One year ago today I brought Chloe home from the hospital. I remember holding her thinking, “I had no idea you could love someone so much.” As I put her to bed tonight, I was thinking the same thing again. I am so lucky to have such a beautiful young girl in my life.
by Jennifer at May 26, 2009 03:16 AM
May 19, 2009
So lately I’ve been caught up with some other projects. I’ve been trying to develop a new site which should be launching in the near future. I have a domain name and twitter account, which will be released in the near future. I’ll also release some other details as time gets close.
Besides that, it’s just been my normal workload keeping up with my garden outdoors. Speaking of which, I need to go weed it tomorrow.
The only other thing I have which has been keeping me away from what I’d rather be doing is maintaining a friend’s yard while he’s selling his house. It’s about 3/4 of an acre that needs to be cut one to two times a week until the growth slows down. I spent a few hours on that today when I would have rather been working on my new site. Oh well, he sweetened the deal with the $1000 he has invested in a commercial grade mower, blower, and trimmer. I get to keep all of those in return for mowing his grass for a few months.


by Ryan at May 19, 2009 12:11 AM
May 17, 2009
We have a stray cat that likes to hang around our house. Yes, we fed it once and so it is our fault she has taken a liking to us. But see, this cat isn’t your normal stray cat…. It’s a zombie.
First, this cat has had around 12 or 13 litters of kittens since we moved in here. Ok, I’m exaggerating, but not by much. Let’s just say she gets around. She’s the neighborhood tom cats’ favorite. During her 3-4 litters of kittens she’s had, we have only seen 2 of these kittens. I’ll come back to this.
Like your typical neighborhood stanky slut, this cat is ugly. She’s always dirty, has something wrong with her, and we have pretty much thought she was near death for the last year. But somehow she keeps on truckin’. (Yes, I had a better word picked out to finish the previous sentence but decided against it.)
Recently she had her last litter of kittens and we didn’t see her for a good week. We were certain she didn’t make it through the birthin’, how wrong we were. She shows up at our house looks like she had pretty much had her head ran over, split in half, eyes matted together, mouth wouldn’t open, skin and bones and her hair looked like she had been mud wrestling. It was so bad we started calling vets to see how much they would charge just to put her down. We hated to see the poor cat suffer. The vets were going to charge us close to $100, so we tried nursing her back to heath.
First, Mitchell fed her syringes of baby cereal and formula, he cleaned out her eyes with saline and put neosporin on her head. He continued doing this until she could open her mouth enough to eat on her own.
This morning, the cat looks almost back to normal.
Up until a few weeks ago, we have always just called the cat “Kitty”. Since coming back from the dead for the up-teenth time, we have stared calling her Zombie Cat. We are pretty sure she died months ago. She come back as a zombie kitty to keep whoring around the neighborhood. She has kittens just to eat their brains to survive.
Below is a photo of her taken today. I should have taken a picture a few weeks ago to really show how near dead this cat was.

by Jennifer at May 17, 2009 06:18 PM
I made it down to WordCamp Mid-Atlantic in Baltimore, MD yesterday to meet some old friends (Mark Jaquith and Aaron Brazell) as well as make a bunch of new contacts. As some of you already know, or learned yesterday, I was pretty involved in Wordpress back in the day. I had stepped out for a bit due to personal reasons and am now trying to get re-involved in the community as well play catch-up with all the changes.
Fact Check: I was having a rough time yesterday trying to remember exactly which version I started with. According to the earliest ryanduff.net page on archive.org dated Feb 4, 2005, I had posts in September 2004. Cross referencing with Wordpress Versions, that would mean I started with Wordpress version 1.2 since 1.2.1 was not released until October 6, 2004. Now that that’s out of the way…
Overall, there was a TON of energy and the turnout was excellent. The presentations, despite a lack of much choice were also good. And like any unconference, if you didn’t like what somebody was presenting, you can walk out and go to another session or start your own. There was even a genius bar for anybody with questions. I stopped for a while to mingle with some of the more technical people there like @sivel @onefinejay and @ericskiff. We got to reminisce over old times as well as talk about the general direction of Wordpress.
I’m still waiting for my MingleStick email to come through so I can access the contact info for the people I met. I like to keep on top of that before I start to forget things.
Don’t forget, if you’re looking for things on the net, make sure to search for the #wordcampmidatl hashtag. We have @technosailor to thank for that one!


by Ryan at May 17, 2009 12:59 PM
May 12, 2009
Why doesn’t Marty Peretz give up the ghost already. You had your fun bankrolling Eugene McCarthy with your wife’s money; now go away. It’s a crying shame that The New Republic is run by this doddering bundle of toxic grudges (half of which date before 1950!) It’s as if Caligula was running Harper’s.
His latest missive: “I’m Sick of Pelosi, Her Sanctimony and Her as Speaker; Maybe She Should Hand the Gavel Over to Jane Harman”
Jane Harman? WTF?
Somewhere along the line, influential people need to ask themselves: am I bitter and calcified? If the answer is yes, they should gracefully exit the public sphere. Stop trashing our world, man.
by Firas at May 12, 2009 05:52 AM
May 08, 2009
I love me some custom drive icons in OS X. The only ones I haven’t customized are JungleDisk (which is a “cloud” drive, so no physical representation) and the drive that came with my Mac Pro (”Backup”) because I’ve never seen what it looks like. The rest were custom icons that I made myself, from images of the drives I found on the web.
My tools for creating these images are Photoshop and Pic2Icon. In Photoshop, I use the magic select want to select the background (it helps to start with an image of the drive on a clean white background). Using that plus some manual selections, I delete the image background, leaving the drive against the checkered transparent Photoshop backdrop. Then I do Image → Trim to crop it to the minimum dimensions. Then, I resize the image to 256 pixels on the longest size. Export to PNG, maintaining transparency, and our image is ready to be converted into an icon. I simply drag the PNG onto Pic2Icon which extracts the image and adds it as an icon, to the PNG file. Last step: View Info on the PNG, click the icon, Cmd-C. View info on the drive, click the icon, Cmd-V. Done!
The “SSD” drive got a special text overlay, to convey that the two drives are striped into one, but otherwise, they’re really accurate physical representations. And yes, I’ve done the same with all of my Compact Flash and SD cards, as well as my USB thumb drives.
It’s the little things that make me happy.
by Mark at May 08, 2009 08:38 AM
May 07, 2009
Wouldn’t it be nice if your OS X bootable SuperDuper-created backup disk could be mounted right before the nightly backup and unmounted right after to reduce wear and tear?
by Mark at May 07, 2009 04:33 PM
May 06, 2009

Kate Beckinsale, Jennifer Aniston, Gwen Stefani at Vanity Fair's Oscar party 2009
by Firas at May 06, 2009 03:30 PM
May 05, 2009
Duncan Black: “The idea that for any job, especially something like Supreme Court judge, there’s one ‘most qualified’ person who can be determined is just idiotic.”
Then you’re not looking hard enough. A critical reviewer should be able to determine qualification differences between any two individuals. Giving up and picking between them based on race or gender is lazy.
by Mark at May 05, 2009 07:05 PM
May 04, 2009
This is a silly basis for a revolution: “If the Constitution is defined in such a way as to destroy the privileged position of marriage, it is that insane Constitution, not marriage, that will die.”
Saying that the point of life is reproduction is admitting that you think life is a meaningless slog.
by Mark at May 04, 2009 09:32 PM
May 02, 2009
Arlen Specter:
Senator Obama, before the Democratic primary, used to tell me, ‘Arlen, if a jewish kid from Kansas can carry Pennsylvania, how can a black kid from Kansas carry Pennsylvania?’
Jon Stewart:
That actually reminds me of a good joke:
A jew and a black kid live in Kansas. Ah, they have to move to hold elected office.
by Firas at May 02, 2009 07:01 AM
April 30, 2009
Forgive and Forget:
I did not know until the Newsweek article that young Eliot “carried a Samsonite briefcase to junior high,” and this really does help explain a lot. …
He was a great attorney general. But maybe the real lesson from the Spitzer story is that it is important to avoid electing chief executives who spent their glory days as prosecuting attorneys.
If you’re in a state as ridden with corruption and dismal political practices as this one, it often does seem that the prosecutors are the only ones who can get anything done. They’re great at going after bad guys. But they don’t seem to be good at bringing people together behind a banner of change. The public just becomes spectators to the great ongoing squabble.
Under our famous ex-prosecutor Rudy Giuliani, City Hall became a very large version of Jack Bauer’s Counter Terrorist Unit in “24” — a heavily fortified bunker where a kind of nerdy group of warriors spent their lives trying to identify the next villain.
Unlike C.T.U., however, Giuliani’s troops tended to pick the wrong targets, lobbing their missiles at the mild-mannered bureaucrats who ran the World Trade Center (and opposed Rudy’s plans for privatizing the airports) rather than the people who were actually trying to bomb it.
While Spitzer was better at picking his enemies, his reign seemed similar in many ways with people vying for glory based less on success than the intensity of their warfare. Since he has decided that his future, whatever it involves, will not include ever being quoted again by The New York Times, I can’t tell you how he reacted to this assessment. However, I think it is fair to say that he disagrees.
Maybe he’s right. There were early achievements before he became embroiled in a series of shouting matches with Republicans. But as Washington grumbles about Barack Obama being too accommodating, it’s useful to remember that unless you pick your fights very, very carefully, you’ll risk wasting your best ammunition on the wrong targets and leaving the country exhausted from all the yelling.
Meanwhile, New York appears to be facing a looming battle for the governor’s office between Attorney General Andrew Cuomo and Rudy Giuliani. Indictments at dawn.
I wonder what Caroline Kennedy’s up to these days.
by Firas at April 30, 2009 05:40 PM
April 25, 2009
Chloe already had daddy wrapped around her little finger…
Mitchell: “Chloe, just because you dance when you are doing something you aren’t supposed to doesn’t mean you are too cute to get onto.”
Me: “Then why aren’t you getting onto her?”
Mitchell: “Because she’s too cute to get onto.”
by Jennifer at April 25, 2009 10:53 PM
Matt Mullwenweg in 2006, when Automattic, the company he founded, took its first round of funding:
Automattic isn’t going to get fancy SoMA offices, throw huge parties at SxSW, or “get big fast.”
I attended a kick-ass party partially sponsored by Automattic this year at SXSW, and I dropped by their new SoMA office space a few months ago. Doh! But to be fair, their growth wasn’t fast—it seemed natural. It’s just amazing how much three years of natural growth can change things!
by Mark at April 25, 2009 06:17 AM
April 23, 2009
John McCormack of The Weekly Standard digs into the controversy regarding the cost to taxpayers for Obama’s proposed cap and trade system for taxing carbon dioxide emissions. Answer: it could cost the average family more than $3,900 a year. Ouch.
by Mark at April 23, 2009 04:40 AM