<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Really Smart Guy &#187; GeekSpeak</title>
	<atom:link href="http://fuery.com/cat/geekspeak/feed/" rel="self" type="application/rss+xml" />
	<link>http://fuery.com</link>
	<description>Simplifying Technology and Entrepreneurship since 2003</description>
	<pubDate>Fri, 12 Dec 2008 01:54:39 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>The Waiting Area</title>
		<link>http://fuery.com/2008/12/11/the-waiting-area/</link>
		<comments>http://fuery.com/2008/12/11/the-waiting-area/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 01:48:04 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<category><![CDATA[geek]]></category>

		<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://fuery.com/?p=578</guid>
		<description><![CDATA[You know how retailers focused at women have a nice plush waiting area for the guys to hang out at? Well, why don&#8217;t computer and video game retailers have the equivalent waiting area for gals?
Ohhhh&#8230; geeks don&#8217;t usually have girlfriends. ;-)
]]></description>
			<content:encoded><![CDATA[<p>You know how retailers focused at women have a nice plush waiting area for the guys to hang out at? Well, why don&#8217;t computer and video game retailers have the equivalent waiting area for gals?</p>
<p>Ohhhh&#8230; geeks don&#8217;t usually <em>have</em> girlfriends. ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/12/11/the-waiting-area/feed/</wfw:commentRss>
		</item>
		<item>
		<title>14 Reasons iPhone Sucks (or, Yet Another iPhone 3G Review)</title>
		<link>http://fuery.com/2008/10/26/14-reasons-iphone-sucks-or-yet-another-iphone-3g-review/</link>
		<comments>http://fuery.com/2008/10/26/14-reasons-iphone-sucks-or-yet-another-iphone-3g-review/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 07:43:50 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Featured]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<category><![CDATA[Blackberry is not dead]]></category>

		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[iPhone Flaws]]></category>

		<category><![CDATA[iPhone Sucks]]></category>

		<guid isPermaLink="false">http://fuery.com/?p=573</guid>
		<description><![CDATA[I&#8217;m a Blackberry user. I had an 850 back when &#8220;Compassion Conservatism&#8221; meant &#8220;Clinton-esque economic prosperity, only with a tax cut&#8221;, a $10 trillion debt seemed like science fiction, and no one thought that Iraq had anything to do with 9/11. 
Oh how times have changed. Here&#8217;s an old photo of the device, courtesy of [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a Blackberry user. I had an 850 back when &#8220;Compassion Conservatism&#8221; meant &#8220;Clinton-esque economic prosperity, only with a tax cut&#8221;, a $10 trillion debt seemed like science fiction, and no one thought that Iraq had anything to do with 9/11. </p>
<p>Oh how times have changed. Here&#8217;s an old photo of the device, courtesy of about.com:</p>
<p><img src="http://images.pcworld.com/news/graphics/123950-Gadget14-BlackBerry-850_b.jpg" alt="Blackberry 850" /></p>
<p>So. I&#8217;ve been carrying around a Pearl for about a year and recently purchased a shiny new iPhone 3G. It&#8217;s been reviewed all over the place, and if you read my blog, you almost certainly already know about, ahem, visual voicemail. So this article won&#8217;t mention SMS messaging and the &#8220;ooh&#8221; factor of the entire thread in view when text messaging. (Besides, my pearl does that, too, albeit with less animation.)</p>
<p>I&#8217;ll start with the cons first. Everyone and their Mom wants a friggin&#8217; iPhone, and these things are supposed to be the most innovative devices since some goofball thought selling stuff (starting with porn) on the darpanet using a simple markup language might be a good idea. (If you don&#8217;t know the lore to which I&#8217;m referring, please do comment saying so. I&#8217;ll be happy to post the appropriate Wikipedia links if it&#8217;s that unclear.)</p>
<p>In other words, everyone wants one. I&#8217;m choosing to <em>not</em> hop on that bandwagon. At least not up front.</p>
<h3>Why iPod Sucks</h3>
<ol>
<li>Calendar, schmalendar. Blackberry talks to my google calendar seamlessly. I can transfer an ical invitation in my inbox to my calendar with a single click, and before I can open 3 browser windows on my desktop, it&#8217;s already in my online google calendar and my offce manager knows about it. iPhone, on the other hand, a year after initial release, uses MobileMe, a subscription based service on top of the $40 minimum I have to pay AT&#038;T every month. And then it talks only to Exchange. How well does it work? I dunno. I&#8217;m not gonna go install Exchange just so I can get a locked-to-outlook version of my perfectly good Google calendar. Sure, there&#8217;s an <a href="http://www.nemustech.com/iPhone/NemusSync.html" target="new">alternative</a> out there, but it looks &#8212; ahem &#8212; a bit dodgy to me. Plus that ain&#8217;t gonna be free as soon as they can hire a designer for their web site.</li>
<li>I can sync contacts. To Outlook. With a Cable. Wireless? Just kidding!</li>
<li>Oh, wait, I can&#8217;t actually sync. I can DELETE EVERY CONTACT ON MY PHONE and then REWRITE them from Outlook. WTF? I&#8217;m sorry, I know that my little boutique software firm would have a hard time writing a seamless contact synchronization algorithm in less than three months. Hell, it might take four if you (gasp) asked for synchronization against more than one contact management system. But you&#8217;re Apple. You have $25 billion in the bank. C&#8217;mon, guys.</li>
<li>I can&#8217;t sync using Bluetooth. Sure, it might be slow. Sure, it&#8217;s not standard on all laptops. Heck, do MacBooks have them? Maybe <em>that&#8217;s</em> why there was this subtle omission. But what about that inevitable road trip where I forget my USB cable? Having Bluetooth-to-laptop connectivity at least as a backup would have been a nice value-add without a lot of additional engineering resources.</li>
<li>Speaking of cables, why do I need one? EVER? Let me repeat that question with a little more context. Why does my bluetooth-having, wi-fi sensing, 3G Network boasting, so cool it helps me get laid, star trek communicators are so 20th century, always-connected device EVER NEED A F***ING CABLE? You want to use one because it&#8217;s faster the first time you load up 14 Gigabytes of <em>totally legal</em> digital music on your brand new &#8220;I&#8217;m a Steve Jobs groupie&#8221; badge, sure. But a device with so many connectivity options should have an over-the-air (OTA) option for everything. EVERYTHING.</li>
<li>I can&#8217;t download a song from iTunes unless I use Wi-fi. Thanks, AT&#038;T.</li>
<li>Mail has no search function. And, yes, my crackberry does.</li>
<li>Sideways keyboard on web pages, but not in (ahem) the mail application. I don&#8217;t much like the software keyboard, anyway.</li>
<li>I can&#8217;t delete podcasts. I can&#8217;t even mark podcasts for deletion on my next cable synchronization. Insert another expletive here for the cable issue. Yes, again. This is meaning of life stuff here, Jack.</li>
<li>I can&#8217;t download podcasts. Not even from iTunes over wifi. So I have to cable synch to my laptop connected to the same stinkin&#8217; wifi network just so I can get my latest <a href="http://robertreich.blogspot.com/">Robert Reich</a> commentary and last week&#8217;s <a href="http://thislife.org">This American Life</a>. Yes, I know, I&#8217;m a bourgeouis pampered bastard, but I grew up poor and I work harder than you, so bite me. =)</li>
<li>The software keyboard, take two. On a Blackberry with a full keyboard (e.g. the Curve), I can type probably 35 words per minute. No, not the 75-90 I can blast out when blogging passionately on a full-blown keyboard, but still not too shabby. Good enough, in fact, to manage a software project completely from a blackberry, especially with solid administrative help. I can reply to an email with three paragraphs in two minutes, including the requisite backspaces. The apple predictive capabilities with the software keyboard are top-notch, but it&#8217;s still dependent on software to guess at your intention after you fat-finger your way to gobbledy-gook heaven. You will remember predictive texting, right? You know, that feature you <em>turned off</em> on your old Nokia the minute you started trying to send your third SMS ever back when too much of the country still thought W. was a good president? (I told you so, btw. Yes. I did. 5 years ago. Check my archives. =)</li>
<li>Camera &#8212; old news, yes, but there&#8217;s no light. No zoom. My Blackberry has that.</li>
<li>Camera &#8212; wish list. It&#8217;s a good camera. Good enough to replace my desire for a Canon/Sony/Nikon. I&#8217;m not a professional photographer, and I&#8217;m well aware that I don&#8217;t need more than 2 megapixels to warrant sending Shutterfly a few dollars. But there&#8217;s no video (my 5 year old Sony Walkman phone did that for crying out loud), there&#8217;s no flash, and there&#8217;s no &#8212; and this is the biggest issue I have with all camera phones &#8212; lens protection. Would it be so hard to allow us consumers the ability to protect that lens so the damn thing can take a good picture for more than 3 weeks after you unwrap the thing?</li>
<li>The software keyboard, take three. You can&#8217;t send a text with one hand. This is pretty much across the board, don&#8217;t even try. Not that I&#8217;d <em>ever</em> consider sending a text message or email while doing something <em>(cough) Holding a steering wheel (cough)</em> with my other hand. </li>
</ol>
<p>Later in the week, I&#8217;ll post an entry on what I actually like about my iPhone. Despite all of the above complaints, yes, it still has its merits&#8230; but the verdict is still out on whether or not the Blackberry gets retired.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/10/26/14-reasons-iphone-sucks-or-yet-another-iphone-3g-review/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What can big companies do now that small companies can&#8217;t currently afford?</title>
		<link>http://fuery.com/2008/09/21/what-can-big-companies-do-now-that-small-companies-cant-currently-afford/</link>
		<comments>http://fuery.com/2008/09/21/what-can-big-companies-do-now-that-small-companies-cant-currently-afford/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 04:23:22 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Entrepreneurship]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<category><![CDATA[food for thought]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[software tools]]></category>

		<guid isPermaLink="false">http://fuery.com/?p=565</guid>
		<description><![CDATA[From the Google Blog:
(It&#8217;s a thinly veiled ad for google products, but it is food for thought about (a) market opportunities for your own pursuit, and (b) what some google engineers are probably working on.)


Today, only the largest companies can afford to hire consultants and experts. In the future, even small companies will be able [...]]]></description>
			<content:encoded><![CDATA[<p>From the <a href="http://googleblog.blogspot.com/2008/09/democratization-of-data.html">Google Blog</a>:</p>
<p>(It&#8217;s a thinly veiled ad for google products, but it is food for thought about (a) market opportunities for your own pursuit, and (b) what some google engineers are probably working on.)</p>
<p><em>
<ul>
<li>Today, only the largest companies can afford to hire consultants and experts. In the future, even small companies will be able to purchase on-demand expertise and other services via the Internet.</li>
<li>Today, marketing intelligence are costly reports describing data many months or years old. In the future, small businesses will have access to real-time data on market conditions.
    </li>
<li>Today, only the largest companies can run expensive experiments with their advertising campaigns. In the future, even small business will be able to run carefully controlled marketing experiments that will enable them to better reach their potential customers.
    </li>
<li>Today, only large companies can sell products in many countries. Tomorrow, businesses of any size can use online services and outsourced logistics to buy and sell in every corner of the globe.</li>
</ul>
<p></em></p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/09/21/what-can-big-companies-do-now-that-small-companies-cant-currently-afford/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Security Checklist for Newbies.</title>
		<link>http://fuery.com/2008/08/22/a-security-checklist-for-newbies/</link>
		<comments>http://fuery.com/2008/08/22/a-security-checklist-for-newbies/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 21:30:48 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<category><![CDATA[hosting]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[security]]></category>

		<category><![CDATA[web sites]]></category>

		<guid isPermaLink="false">http://fuery.com/?p=564</guid>
		<description><![CDATA[One of my clients had their web site compromised this morning. Apparently some hacker in Russia figured out their web server’s SSH password, logged in, and replaced their root index page. (No, my firm had never performed a security audit for them – the site structure was set up by a predecessor.)
Bummer.  Here’s a [...]]]></description>
			<content:encoded><![CDATA[<p>One of my clients had their web site compromised this morning. Apparently some hacker in Russia figured out their web server’s SSH password, logged in, and replaced their root index page. (No, my firm had never performed a security audit for them – the site structure was set up by a predecessor.)</p>
<p>Bummer.  Here’s a quick refresher on some things to make sure you audit on your own site.</p>
<ul>
<li>Use a unique account for your web-originating database access. This means a unique account with its own password and credentials as limited as possible. Making your DB access credentials the same as anything SSH-capable is asking for trouble. You don&#8217;t use your ATM access code to login to your email account, do you? (You&#8217;d better not!)</li>
<li>Lockout all but the necessary functions (usually just insert, select, and update) at the database level for your new database access account. If you need to give this user &#8220;delete&#8221; access, too, maybe you need to re-think your application&#8217;s logic. (Deleted should be handled via a flag in most applications, not by actual removal of the data.)</li>
<li>Place all of your common core server-side includes outside of your root web context. So if your web server’s root is “public_html”, put all of your shared libraries, especially your core database connection library, above public_html in your directory structure. If you can’t do this on your web host and you give two craps about the security of your site, get a new host. In English, this means that no one on the web should be able to surf to any of your core libraries. Requiring authentication to get to these files might feel just as good, but it isn’t.
</li>
<li>Chmod 777 is a Very Bad Idea. </li>
</ul>
<p>This is by no means definitive, nor should it take the place of a professional audit by a skilled professional. However, if your development staff consists of your left brain, your pooch, and white board, this is a decent place to start.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/08/22/a-security-checklist-for-newbies/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Type &#8220;sleep with me&#8221; at your next command prompt</title>
		<link>http://fuery.com/2008/08/12/type-sleep-with-me-at-your-next-command-prompt/</link>
		<comments>http://fuery.com/2008/08/12/type-sleep-with-me-at-your-next-command-prompt/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 02:07:16 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<category><![CDATA[geek]]></category>

		<category><![CDATA[humor]]></category>

		<category><![CDATA[nerd]]></category>

		<category><![CDATA[nerd humor]]></category>

		<guid isPermaLink="false">http://fuery.com/?p=563</guid>
		<description><![CDATA[On some UNIX systems, the command &#8220;sleep with me&#8221; returns the error &#8220;bad character&#8221;.
]]></description>
			<content:encoded><![CDATA[<p>On some UNIX systems, the command &#8220;sleep with me&#8221; returns the error &#8220;bad character&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/08/12/type-sleep-with-me-at-your-next-command-prompt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Largest Computing Applications</title>
		<link>http://fuery.com/2008/08/12/largest-computing-applications/</link>
		<comments>http://fuery.com/2008/08/12/largest-computing-applications/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 22:36:14 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Featured]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<category><![CDATA[computing power]]></category>

		<category><![CDATA[lists]]></category>

		<category><![CDATA[scalability]]></category>

		<category><![CDATA[server farms]]></category>

		<guid isPermaLink="false">http://fuery.com/?p=562</guid>
		<description><![CDATA[While writing a SQL-based search function (the simple kind with basic string matching against ordered data) today, a question regarding the size of the google cache ensued in my lab.
After about 20 seconds of discussion, someone said, &#8220;so they have a whole lot of servers then, huh?&#8221;
I retorted that it&#8217;s probably the single biggest application [...]]]></description>
			<content:encoded><![CDATA[<p>While writing a SQL-based search function (the simple kind with basic string matching against ordered data) today, a question regarding the size of the google cache ensued in my lab.</p>
<p>After about 20 seconds of discussion, someone said, &#8220;so they have a whole lot of servers then, huh?&#8221;</p>
<p>I retorted that it&#8217;s probably the single biggest application on the planet in terms of computing power. Of course, I followed this up by silently asking said google cache about this question. Interestingly, after a half dozen tries (&#8221;largest server farms&#8221;, &#8220;largest application&#8221;, &#8220;largest global applications&#8221;, etc), I couldn&#8217;t find a definitive list. Heck, I really couldn&#8217;t find <em>any</em> list.</p>
<p>So I thought I&#8217;d put one out there for public consumption. Please debate and correct me. It&#8217;s all guesswork.</p>
<p>(This is based on total flops devoted to a single application infrastructure, not based on other trivialities, like number of CPUs, number of racks, or raw storage capacity. There&#8217;s also probably a distinction between different branches of government, but I&#8217;m way out of my league there.)</p>
<ol>
<li>Google. The www cache, youtube, picasa, and all the rest.</li>
<li>The DoD. You know, those guys that invented the internet?
<li>Amazon. S3, alexa, the wayback machine, and of course their tiny product database.</li>
<li>Microsoft. Hotmail, Live, windowsupdate, msdn.</li>
<li>Yahoo. Their tombstone aside, they&#8217;ve got a web cache and tons of services. All of that info has to be stored somewhere.</li>
<li>China&#8217;s IT Infrastructure. Suppressing all of that free speech has to take some computing power, right?</li>
</ol>
<p>Let the debate ensue&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/08/12/largest-computing-applications/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using Thunderbird as your Groupware Client without Exchange</title>
		<link>http://fuery.com/2008/04/18/using-thunderbird-as-your-groupware-client-without-exchange/</link>
		<comments>http://fuery.com/2008/04/18/using-thunderbird-as-your-groupware-client-without-exchange/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 00:22:13 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Entrepreneurship]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2008/04/18/using-thunderbird-as-your-groupware-client-without-exchange/</guid>
		<description><![CDATA[Last week I lamented about the lack of hosted Exchange alternatives. Unfortunately, I still haven&#8217;t found a solid solution. The inherent problem is the desire to use Thunderbird as the client and sync OTA with Blackberry devices.
Using Google for shared calendar, address book, and email is the avenue I&#8217;ve been exploring. I also considered installing [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I lamented about the <a href="http://fuery.com/2008/04/03/shared-calendar-and-address-book-without-exchange/" target="_blank">lack of hosted Exchange alternatives</a>. Unfortunately, I still haven&#8217;t found a solid solution. The inherent problem is the desire to use Thunderbird as the client and sync OTA with Blackberry devices.</p>
<p>Using Google for shared calendar, address book, and email is the avenue I&#8217;ve been exploring. I also considered installing Kolab, an open source groupware solution, but that seemed to me analogous to installing my own Exchange server on a hosted Windows box. The only benefit there would be the presumption that an open source solution like this would have support for a wide variety of products, including my Thunderbird and Blackberry requirements.</p>
<p>Here&#8217;s what I&#8217;ve found works in favor of the big G.</p>
<h2>Pros of Using Google as a Groupware Platform</h2>
<ul>
<li>Calendar Sync to Blackberry is solid. I can only sync on calendar at a time, so I still have the problem of merging my personal gmail account with my newer google apps account (hereafter referred to as &#8220;corporate&#8221;), but that strikes me as a relatively small problem since my schedule planning is typically only a few weeks out at the most. I can also display my own personal calendar by &#8220;sharing&#8221; it with my corporate self and then sync it down that way. I now have both calendars on my Blackberry happily syncing both ways. I do wonder if there&#8217;s a limit to the number of calendars I can share&#8230;</li>
<li>Mail is a no-brainer. Imap support means that, aside from the 5-10 minute lag, thunderbird and blackberry work just fine with both the personal and the corporate account. On the merging side of the equation, I&#8217;m still waiting for the corporate account to finish fetching my 50K messages from the personal account via POP (it&#8217;s google fetching from google, so it&#8217;s obviously throttled heavily), but I can continue to work from both accounts for the next few days.</li>
</ul>
<h2>Cons of Using Google as a GroupWare Platform</h2>
<ul>
<li>They claim ownership to you data. Sure, &#8220;do no evil&#8221; is a great edict, and sure, they&#8217;ve done nothing major (although I suppose the &#8220;caving&#8221; to China&#8217;s censorship demands is arguable) to violate the public trust, but the details in the Terms of Use are pretty alarming if you&#8217;re developing any sort of intellectual property, which I happen to do every day.</li>
<li>Contacts are a mess. Aside from my <a href="http://fuery.com/2008/04/03/shared-calendar-and-address-book-without-exchange/">earlier complaints</a>, I&#8217;ve been trying out <a href="http://zindus.com" target="_blank">Zindus</a> for Thunderbird-to-Google sync, and while I&#8217;m very impressed on their development speed (the Google Contacts API was only published 45 days ago or so), the plugin still needs some work. I attempted to move my contacts from plaxo over to my corporate gmail account, since the plaxo data set should contain all the data from my legacy personal mail account <em>plus</em> data from plaxo itself, linkedin, and my mobile phone contact list (via blackberry &#8211;&gt; outlook &#8211;&gt; plaxo manually). However, I ran into a number of issues with the Zindus merge:
<ul>
<li>The Plaxo export to Thunderbird felt a little off. I did it at about 4am last night, so I can&#8217;t recall what was wrong with it, but I ended up tossing the Thunderbird LDIF from plaxo and merging with Outlook 2007 instead. Then I imported from there from within Thunderbird. That&#8217;s fine, but it&#8217;s worth mentioning.</li>
<li>The Thunderbird-Google sync halts when google denies a contact. So my plaxo data, which contains duplicates all over the place (a single contact might be represented as a  record from the old gmail account, linkedin, <em>and </em>plaxo, and all contain the identical primary email, which google denies and Zindus pushes back on the user. So, basically, I&#8217;ll need to manually clean up my contact list in thunderbird before pushing it upstream. Good thing I have administrative help now.</li>
<li> Zindus does not &#8220;match up&#8221; contacts from my mobile phone. These contacts are generally an abbreviated name (i.e., a nickname, like &#8220;johnnyf&#8221; instead of &#8220;Johnny Fuery&#8221;) and a single number. The location of the number varies with regard to specific field (mobile, business, home, etc.), largely because I&#8217;ve migrated phone contacts several times over the years. Only 1% contain an email address at all. It would seem that Zindus relies on that email address for keying, becaues after attempting a dozen or so syncs, which all halted at various points in the process because of Google denying the contact add based on a duplicate primary email, the contacts that originated in my Blackberry are now duplicated a dozen times over.</li>
<li>Google won&#8217;t let me delete more than 20 contacts at a time. So starting over is going to be a major pain in the you-know-where. I now have 3500 contacts in my corporate gmail account when I started with 1900 or so in plaxo.</li>
</ul>
</li>
<li>The Google Apps &#8220;shared address book&#8221; is actually only intra-domain, so I can&#8217;t share my &#8220;personal&#8221; contacts. In other words, it ain&#8217;t a shared address book. I know the 8 people with accounts on my domain already and they&#8217;re IN my personal address book.</li>
<li>The workaround would be to sync multiple Thunderbird installations via Zindus against the same &#8220;personal&#8221; address book. One could conceivably setup a Google account solely for contacts, configure Thunderbird + Zindus to sync against this single account, and voila &#8212; group contacts. The scalability of this model is cause for concern, however. I&#8217;ve yet to try it on more than two desks with my personal account. Zindus does authenticate against both my personal and corporate accounts, by the way.</li>
</ul>
<p>At this point, I need quite a few utilities to make this work.</p>
<h2>Market Opportunities</h2>
<p>Please let me know (via the now-working <a href="http://fuery.com/contact">Contact Form</a> or a comment below) if you&#8217;re interested in these. Most of these I foresee being donationware and/or ad supported, but I&#8217;d also be interested in the economic value to you.</p>
<ul>
<li>Google &#8220;Delete all contacts&#8221; script. Go to a web page, enter you gmail login data, click a button, and flush your account. Google probably has some throttling on it, so it would probably be a &#8220;we&#8217;ll email you a confirmation in a few minutes&#8221; type of experience.</li>
<li>Google contact migrator. Move contacts from an old account into a new one. See previous item for proposed interface.</li>
<li>Improvements on the Zindus tool. I&#8217;d rather not write my own, but minimally, it should key against more than just the email address (the FAQ says it does, but my experience indicates otherwise) and provide a preference for skipping past problematic records. Problematic records should be outputted in a summary or log of some kind so they can be handled manually. A re-sync should not create still more duplicates (keying against more than just an email address would satisfy this).</li>
<li>Thunderbird (Lightning)-Google Sync remains unanswered. GCalDaemon can do it, but it&#8217;s an awful lot of code sitting on clients for that one feature, and I&#8217;ve yet to be able to get it to work with a non-personal (Google Apps based) calendar.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/04/18/using-thunderbird-as-your-groupware-client-without-exchange/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rest in Peace, NetGear.</title>
		<link>http://fuery.com/2008/04/03/rest-in-peace-netgear/</link>
		<comments>http://fuery.com/2008/04/03/rest-in-peace-netgear/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 05:48:09 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2008/04/03/rest-in-peace-netgear/</guid>
		<description><![CDATA[No, there was no announcement you missed today.
I&#8217;ve used their FVS318 Router/Firewall product for years, more or less standardizing on it as the platform of choice for all of my client&#8217;s offices. That backfired for me this week.
On Monday, I got a call from a brand new client from an office I&#8217;d never visited before. [...]]]></description>
			<content:encoded><![CDATA[<p>No, there was no announcement you missed today.</p>
<p>I&#8217;ve used their <a href="http://www.amazon.com/gp/redirect.html%3FASIN=B00011P9HW%26tag=johnnyworld-20%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/B00011P9HW%253FSubscriptionId=1N9AHEAQ2F6SVD97BE02" target="_blank">FVS318 Router/Firewall</a> product for years, more or less standardizing on it as the platform of choice for all of my client&#8217;s offices. That backfired for me this week.</p>
<p>On Monday, I got a call from a brand new client from an office I&#8217;d never visited before. It was an emergency. Their internet was offline. Great, an opportunity to be a hero, right?</p>
<p>Well, I diagnosed pretty quickly that their existing gateway was dead. No worries; that&#8217;s what Best Buy is for &#8212; overpriced networking gear in a hurry. After getting a little lost first, of course.</p>
<p>Everything worked fine for two days. Then, today, the Firewall would intermittently drop it&#8217;s connection to the internet. A reboot fixed it every time&#8230; for 5 minutes. I troubleshooted my happy little arse off for 90 minutes on it, then decided to take it back and exchange it. What the heck?</p>
<p>In the meantime, naturally, I grab a spare <a href="http://www.amazon.com/gp/redirect.html%3FASIN=B00007KDVI%26tag=johnnyworld-20%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/B00007KDVI%253FSubscriptionId=1N9AHEAQ2F6SVD97BE02" target="_blank">Linksys Wireless Router WRT54G</a> device and get it working in&#8230; oh, six minutes.</p>
<p>I get the second Netgear Firewall unit in, configure it identically, it works for about fifteen minutes, then ceases to route. Heck, it doesn&#8217;t even respond to a ping from the internal network any longer, let alone show me it&#8217;s own built-in web utility. Or, you know, <em>work</em>.</p>
<p>Screw it. My $35 old school Linksys device wins. I am never buying a Netgear device again.</p>
<p>I&#8217;ve been scratching my head trying to think of what went wrong with the device, and the only difference I can think of in terms of configuration is the fact that it&#8217;s using a static IP instead of PPPoE like the other dozen I&#8217;ve installed in the past few years.</p>
<p>So, sell your NetGear stock. Ditto on whomever manufactures D-Link products for the same reason. Buy Cisco.</p>
<p>P.S., Yes I&#8217;m still alive. Just been busy.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/04/03/rest-in-peace-netgear/feed/</wfw:commentRss>
		</item>
		<item>
		<title>More Thoughts on the Microsoft/Yahoo merger</title>
		<link>http://fuery.com/2008/03/13/more-thoughts-on-the-microsoftyahoo-merger/</link>
		<comments>http://fuery.com/2008/03/13/more-thoughts-on-the-microsoftyahoo-merger/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 22:41:46 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2008/03/13/more-thoughts-on-the-microsoftyahoo-merger/</guid>
		<description><![CDATA[(Courtesy of ValleyWag and my friend Sam.)

]]></description>
			<content:encoded><![CDATA[<p>(Courtesy of ValleyWag and my friend Sam.)</p>
<p><a href="http://fuery.com/wp-content/uploads/2008/03/msn_yahoo.jpg" title="MSN and Yahoo Interoperability (bitch, please!)"><img src="http://fuery.com/wp-content/uploads/2008/03/msn_yahoo.jpg" alt="MSN and Yahoo Interoperability (bitch, please!)" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/03/13/more-thoughts-on-the-microsoftyahoo-merger/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Google&#8217;s Chief Counsel Speaks Out on the Microsoft/Yahoo Marriage Proposal</title>
		<link>http://fuery.com/2008/02/04/googles-chief-counsel-speaks-out-on-the-microsoftyahoo-marriage-proposal/</link>
		<comments>http://fuery.com/2008/02/04/googles-chief-counsel-speaks-out-on-the-microsoftyahoo-marriage-proposal/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 05:27:59 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Entrepreneurship]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2008/02/04/googles-chief-counsel-speaks-out-on-the-microsoftyahoo-marriage-proposal/</guid>
		<description><![CDATA[If you&#8217;ve been living under a rock for the past few days and somehow don&#8217;t know about the proposed takeover Microsoft placed on the proverbial table to buy Yahoo last Friday (I was in bed with a fever for the last five days, and even I knew about it), here&#8217;s a quick catch-up.
I caught a [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve been living under a rock for the past few days and somehow don&#8217;t know about the proposed takeover Microsoft placed on the proverbial table to buy Yahoo last Friday (I was in bed with a fever for the last five days, and even I knew about it), here&#8217;s a quick <a href="http://www.fool.com/investing/general/2008/02/01/microsoft-or-bust-for-yahoo.aspx" target="_blank">catch-up</a>.</p>
<p>I caught a posting from the google blog earlier today that Google&#8217;s legal big shot posted on the topic. In short, he basically says that the internet is fun place, it&#8217;s fun because it&#8217;s based on open standards, google&#8217;s all about open standards, and Microsoft is bad mmmmmmKay. Actually, you can skip all the prefacing. He&#8217;s pretty bold with the damning rhetorical questions, asking &#8220;Could Microsoft now attempt to exert the same sort of inappropriate and illegal influence over the Internet that it did with the PC?&#8221; (You can read the full article <a href="http://googleblog.blogspot.com/2008/02/yahoo-and-future-of-internet.html" target="_blank">here</a>.)</p>
<p>Now, I like Google as much as the next guy, and I had fun beating up on Microsoft in the late 90s, too, even as jumped up a socioeconomic quintile by servicing Microsoft products. But the notion that poor little Google is worried about big, bad Microsoft coming in and peeing in the collective bowl of Cheerios is a pretty big stretch, even if Google really could claim that it has never done any evil (<a href="http://www.theopensourcery.com/wordp1/index.php?p=409" target="_blank">Can it?</a>). Google has $15 billion in cash, a market cap of $150 billion or so, and commands between 56% and over 77% of the internet search marketplace depending on who you ask. Oh, and if that weren&#8217;t enough, what verb do you use every day to describe the action of performing a text-based search on the internet?</p>
<p>No, sorry Google, but as much as I respect every single person I know that collects a paycheck from you (damn that&#8217;s impressive), as much as I trust the details of my life to you (email, desktop search, docs&#8230; oh wow do I feel vulnerable now), and as little as I use any of those <em>other</em> search engines, I&#8217;m gonna have to go ahead and side with Mr. Ballmer on this one.</p>
<p><em>Someone</em> needs to check Google&#8217;s power. No matter how good your king is, there is something inherently questionable about monarchy isn&#8217;t there? Unbridled, unchecked power, even if laced with good intentions, even if executed extraordinarily well, even if absolutely magnanimous, is very, very dangerous. Kings have spoiled kids. And corporations have to answer to finicky shareholders. It&#8217;s not right when the president consolidates power away from the people, and it&#8217;s not right when any one single company has the power to control the internet.</p>
<p>And if Microsoft can&#8217;t become a worth competitor, I&#8217;m not sure who can. So, c&#8217;mon, Redmond! Get your act together, harness Jerry and the Yahoo boys, and start releasing some great products! You&#8217;ve got a lot of catching up to do&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/02/04/googles-chief-counsel-speaks-out-on-the-microsoftyahoo-marriage-proposal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Another Business Idea I&#8217;m Not Going to Develop</title>
		<link>http://fuery.com/2008/01/15/another-business-idea-im-not-going-to-develop/</link>
		<comments>http://fuery.com/2008/01/15/another-business-idea-im-not-going-to-develop/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 04:53:05 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Entrepreneurship]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2008/01/15/another-business-idea-im-not-going-to-develop/</guid>
		<description><![CDATA[If you build this, tap me to help with the software. :-)
Description: 
A small (handheld or slightly larget) device that can tell where metal is in the walls of your home. It&#8217;s tuned to ignore [most] nails and other metal fastening devices, like picture hangers and staples. You walk around your home following some basic [...]]]></description>
			<content:encoded><![CDATA[<p>If you build this, tap me to help with the software. :-)</p>
<p><strong>Description: </strong><br />
A small (handheld or slightly larget) device that can tell where metal is in the walls of your home. It&#8217;s tuned to ignore [most] nails and other metal fastening devices, like picture hangers and staples. You walk around your home following some basic directions presented on an LCD screen. The device is emitting some low-level radiation that allows it to pick up conducitive materials with reasonable accuracy. It then assembles a schematic for the wiring in your house. This would be plugged in to your PC or network (via USB or ethernet) and upload the raw data to a web-based service that crunches the numbers and assembles pretty graphics.</p>
<p><strong>Pricing: </strong><br />
$400-$600 retail. Sold at Lowe&#8217;s, Home Depot, and Sears.</p>
<p><strong>Value:</strong><br />
Troubleshooting electrical problems in your house would be a cinch. You&#8217;d be more willing to cut into your walls to add desired items, too, because you could go into the job with a keen awareness of just how big a mess you&#8217;re going to make.</p>
<p>There&#8217;s also the commercial angle (probably where something like this would start). Sell the unit to electricians only at a higher price and let them offer web-based schematics to all their clients for free. The web site and software would be paid for via the add-on services and monetization methods (below).</p>
<p><strong>Add-ons:</strong><br />
Specific recommendations could be provided once data is gathered. This could be with an eye towards environmental ends (replacing something could save XX tons of carbon, for instance), financial savings (e.g., save $300 on energy this year by spending $250 now), or even simply safety (because plugging in 17 appliances and a hairdryer on your tired, old wiring could start a fire).</p>
<p>There&#8217;s certainly an angle where the uploaded data gets sold to local vendors (privacy and permission rights would have to be observed, of course). I&#8217;m certain there&#8217;s a long list of electricians that would like to get a list of 20 leads monthly that have knob-and-tube electrical wiring or are still running with old-school fuses. The list of homeowners generated, too, would be extremely valuable as a marketing tool, even without the schematic details. (Homeowners who dabble in home improvement and have disposable income&#8230; yum! Not to mention the fact that we can make certain conclusions about their net worth based on their physical address.)</p>
<p><strong>Cool Geek Factor:</strong></p>
<ul>
<li>Mash up the data with Google Maps/Earth.</li>
<li>Scanning for metal through sheetrock while ignoring other materials and packing it into a consumer device is a non-trivial engineering problem.</li>
<li>Hello? Adobe Flex based graphs of your home&#8217;s wiring? Yeah!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/01/15/another-business-idea-im-not-going-to-develop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Development is extremely quirky. (Notes from a 22 Hour Programming Session)</title>
		<link>http://fuery.com/2008/01/15/web-development-is-extremely-quirky-notes-from-a-22-hour-programming-session/</link>
		<comments>http://fuery.com/2008/01/15/web-development-is-extremely-quirky-notes-from-a-22-hour-programming-session/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 04:25:33 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2008/01/15/web-development-is-extremely-quirky-notes-from-a-22-hour-programming-session/</guid>
		<description><![CDATA[No, seriously. I know it&#8217;s somewhat rhetorical, but I&#8217;m a little punchy right now. Once you&#8217;re in your language of choice, you can count on certain consistencies, but when you&#8217;re developing UI for the web using any of the buzzwords (DOM, DHTML, CSS, Javascript, AJAX), you&#8217;re going to get inconsistencies all around.Example 1: Search on [...]]]></description>
			<content:encoded><![CDATA[<p>No, seriously. I know it&#8217;s somewhat rhetorical, but I&#8217;m a little punchy right now. Once you&#8217;re in your language of choice, you can count on certain consistencies, but when you&#8217;re developing UI for the web using any of the buzzwords (DOM, DHTML, CSS, Javascript, AJAX), you&#8217;re going to get inconsistencies all around.Example 1: Search on the internet for solutions on how to dynamically add options to a select list across both IE and Firefox, and you&#8217;ll find all kinds of esoteric remarks about DOM versioning and such.</p>
<p>Screw the &#8220;HTMLSelectElement object&#8221;. Whatever that is. ;-) Just append a text child and set the appropriate attribute.</p>
<p>This works in both IE and Firefox:</p>
<blockquote>
<pre>myOpt = document.createElement('option')myOpt.appendChild(document.createTextNode('hello');myOpt.setAttribute('value', 'hello was the choice');</pre>
</blockquote>
<p>As for these methods, don&#8217;t bother. Firefox likes this one:</p>
<blockquote>
<pre>myOpt.value = 'hello was the choice, too bad IE users cannot see it';myOpt.text  = 'hello Firefox users only';</pre>
</blockquote>
<p>&#8230;and Internet Explorer can deal with (this is the #1 Google hit, by the way! Dammit.):</p>
<blockquote>
<pre>document.forms['testform'].testselect.options[i] = new Option(&#8217;new text&#8217;,'but Firefox cannot see it!&#8217;);</pre>
</blockquote>
<p>While I&#8217;m recording notes from hours of browser battles, here&#8217;s how to get around the limitations (features?) of innerHTML and get to just the text:</p>
<blockquote>
<pre>element.firstChild.nodeValue</pre>
</blockquote>
<p>&#8230;works in both browsers.</p>
<p>If you have only one child object there, of course, if you don&#8217;t, we&#8217;ll, you&#8217;ll just have to actually program. As for the other variations that are not cross-browser compatible:</p>
<blockquote>
<pre>element.textContent</pre>
</blockquote>
<p>&#8230;works in Firefox. not IE. And</p>
<blockquote>
<pre>element.innerText</pre>
</blockquote>
<p>&#8230;works in Internet Explorer. Not FF.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2008/01/15/web-development-is-extremely-quirky-notes-from-a-22-hour-programming-session/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Host with MediaTemple? Here&#8217;s a workaround for PHP Date Constants</title>
		<link>http://fuery.com/2007/12/21/host-with-mediatemple-heres-a-workaround-for-php-date-constants/</link>
		<comments>http://fuery.com/2007/12/21/host-with-mediatemple-heres-a-workaround-for-php-date-constants/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 23:53:54 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/12/21/host-with-mediatemple-heres-a-workaround-for-php-date-constants/</guid>
		<description><![CDATA[I ran into an issue with my dedicated MediaTemple (not an affiliate link) server today.
This works on my local WAMP development server:
$timestamp = date(DATE_RFC822);
It doesn&#8217;t when I post the same code to my dedicated virtual server at MediaTemple.Â  Looks like their date constants are all disabled, and I don&#8217;t have time to wait around for [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into an issue with my dedicated <a href="http://mediatemple.net" target="_blank">MediaTemple</a> (not an affiliate link) server today.</p>
<p>This works on my local <a href="http://www.wampserver.com/en/" target="_blank">WAMP</a> development server:</p>
<p>$timestamp = date(DATE_RFC822);</p>
<p>It doesn&#8217;t when I post the same code to my dedicated virtual server at MediaTemple.Â  Looks like their date constants are all disabled, and I don&#8217;t have time to wait around for support. So, here&#8217;s the workaround:</p>
<p>// Manual translation into RFC822 format, e.g. &#8220;Mon, 15 Aug 2005 15:52:01 UTC&#8221;<br />
$timestampÂ Â Â  = gmdate(&#8221;D, d F Y H:i:s&#8221;);<br />
$timestamp .= &#8221; UTC&#8221;;</p>
<p>Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/12/21/host-with-mediatemple-heres-a-workaround-for-php-date-constants/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Project Managers vs. Developers</title>
		<link>http://fuery.com/2007/12/21/project-managers-vs-developers/</link>
		<comments>http://fuery.com/2007/12/21/project-managers-vs-developers/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 10:04:01 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/12/21/project-managers-vs-developers/</guid>
		<description><![CDATA[I&#8217;ve had writer&#8217;s block for the last several days. Well, no, I didn&#8217;t, but I try not to lament about women on this blog and I had a hard time tying in Heroes with a tenet of entrepreneurship. Well, without resorting to something cheesy, anyway.
So I&#8217;m going to talk about something else I have experience [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had writer&#8217;s block for the last several days. Well, no, I didn&#8217;t, but I try not to lament about women on this blog and I had a hard time tying in <em>Heroes</em> with a tenet of entrepreneurship. Well, without resorting to something cheesy, anyway.</p>
<p>So I&#8217;m going to talk about something else I have experience in. Having just come off a nightmare of a software development phase, it&#8217;s on the brain.</p>
<p>There&#8217;s a couple of sayings that I&#8217;ve heard tossed around in software development circles:</p>
<p>You can have it on time<em>.</em> You can have it on budget. You can have it bug free. Pick any two.</p>
<p>&#8230;and&#8230;</p>
<p>The first half of the project takes 90% of the time. The second half takes the other 90%.</p>
<p>Both are allusions to the difficulty in managing software projects. Of course, the reason software is difficult to manage has a whole lot to do with psychology.</p>
<p>Developers wear their brains on their sleeves like trophies. They are smart. They like to be reminded that they&#8217;re smart. They like to feel smart. They like you to know that their smart. Some of them even cheekily name their blogs &#8220;Smart&#8221;. ;-)</p>
<p>No matter what a developer might think of a problem, the speed at which they solve said problem is an indication of their intelligence. And so, a developer will <em>always </em>give you his best possible estimate for how quickly he can solve a problem. And, in fact, if a developer were to write bug-free code on the first pass all the time, that estimate wouldn&#8217;t be half bad.</p>
<p>But even the smartest of developers make mistakes. I bet there are even bugs in the googlebot. I know, I&#8217;m risking a lot saying that (alienation of the googlebot is a death sentence for any blog, right?), but it (gulp) must be true.</p>
<p>Those mistakes go up when the developer is under the wrong kind of pressure. I, for instance, thrive on stress. The more things you throw at me, the more productive I become. Basically, I insist on dropping 2-3 balls at all times, so if you throw 53 at me, you&#8217;ll watch a crazy man juggle with 50 items at once. But if you throw only 3, I&#8217;ll just sit around, drink beer, and play a lot of basketball. (lol)</p>
<p>Other developers are the opposite. One fellow I know handles tasks in an <em>extremely</em> serial fashion &#8212; one thing at a time, and you&#8217;ll get the best work you&#8217;ve ever seen. Throw six things at him, and he serializes the tasks, then gets his work done almost as well. 50? Well&#8230;</p>
<p>Let&#8217;s just say that spontaneous human combustion does exist. I&#8217;ve seen it.</p>
<p>But back to the psychology of developers. They don&#8217;t figure in bug fixing time by default. If they say they can write you a script in 2 minutes, they can. It just might not work! Good developers re-think their estimates real time, but they&#8217;re still optimistic. And they always forget their biology. If you&#8217;ve worked them the last 12 hours straight, it&#8217;s the red bull talking. Take whatever they say and triple the time.</p>
<p>The other major reason software is so hard is because of bad project managers. Now, developers are &#8220;programmed&#8221; to say yes to everything. Ask a software engineer to build a fully functional Apollo rocket using nothing but LISP, a rubber band, an Atari 2600, and two alligator clips and you&#8217;ll get it. It might take a billion bucks, 3 years of engineering, and some minor embezzlement, but you&#8217;ll get it.</p>
<p>Project managers, on the other hand, have to say no to everything. It&#8217;s their job to protect developers. There is a reason engineers are often not naturally &#8220;sociable&#8221;. <em>That&#8217;s how they got good.</em> Solving a good problem is, in it&#8217;s own way, more rewarding than getting laid. Well, maybe not quite <em>that</em> rewarding, but you get the picture. So don&#8217;t bother them. They&#8217;re working.</p>
<p>The thing is, because engineers like to be smart heroes, and because to an engineer <em>every</em> problem is solvable, the folks driving the development generally ask for too much. The people footing the bill on a development project commonly engage in &#8220;scope creep&#8221;, which is when they tap a developer on the shoulder and whisper a little, tiny request into his ear.</p>
<p>A good Project Manager barricades the engineer and tells said shoulder-tapper to take a hike. Yes, sure you can have that extra icon, but I&#8217;m taking this one away instead. Or, frankly, no. You can&#8217;t have it. Piss off. We release in a week. Come talk to me after that about the release planned two months from now. Furthermore, that good PM makes the stakeholder appreciate her all while letting her developers get on with their work uninterrupted.</p>
<p>But, alas, so many PMs are simply glorified secretaries&#8230; and bad ones at that. At the last big company I worked for, every project where I was a developer under another PM either suffered from scope creep at a Cheetah&#8217;s pace or never got finished because they had me attending 4 hours of meetings every day. You can&#8217;t write code if you&#8217;re in a meeting! Oh, and by the way &#8212; if I have to attend every meeting and interact with the stakeholders every step of the way, how the heck are you adding value? I&#8217;m managing the project directly!</p>
<p>In my last gig, regrettably, I was stuck wearing both hats. The developer in me wanted to say yes to everything, while the project manager in me screamed &#8220;no&#8221; every 23 seconds. One of the stakeholders on the project even called me on it, saying I was contradicting myself. And, indeed, I was. But that&#8217;s the nature of the beast. This was one place where wearing multiple hats didn&#8217;t work so well.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/12/21/project-managers-vs-developers/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JavaScript Tech Contract Announcement</title>
		<link>http://fuery.com/2007/11/19/javascript-tech-contract-announcement/</link>
		<comments>http://fuery.com/2007/11/19/javascript-tech-contract-announcement/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 17:46:22 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Entrepreneurship]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/11/19/javascript-tech-contract-announcement/</guid>
		<description><![CDATA[I have a solid lead on an on-site three month gig in the San Francisco Bay Area. If you happen to know JavaScript like the back of your hand, can walk and talk your way around the programming logic behind &#8220;ecommerce&#8221;, and can familiarize yourself with the JavaScript Dojo library in an afternoon, post a [...]]]></description>
			<content:encoded><![CDATA[<p>I have a solid lead on an on-site three month gig in the San Francisco Bay Area. If you happen to know JavaScript like the back of your hand, can walk and talk your way around the programming logic behind &#8220;ecommerce&#8221;, and can familiarize yourself with the JavaScript Dojo library in an afternoon, post a comment below and I&#8217;ll &#8220;have my people call your people&#8221;. (That&#8217;s American slang for &#8220;forwarding the contact information.&#8221; )</p>
<p>Pay is $80-100 an hour. Low end for W-2; higher end for 1099 (since you pay your own payroll taxes, of course). The ideal candidate, in addition to being a JavaScript Jedi, has the people skills to chameleon themselves nicely into an existing development team and can provide support, both in matters technical and soft, to his or her peers. In other words, you have to know how to communicate with both Star Trek jargon and the everyday business folk.</p>
<p>It&#8217;s a good gig at a solid company whose name you&#8217;d recognize. I&#8217;d take it myself, but I&#8217;m booked solid for the time being and on-site in SF is a commitment I can&#8217;t make right now.</p>
<p>It&#8217;s a contract, so the standard stuff applies &#8212; you&#8217;re on your own when it comes to having a legal right to work in the United States, etc.</p>
<p>And no, I don&#8217;t have a direct financial interest on the backside (although I may ask for a kickback if it works out). This post is simply a favor on both ends.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/11/19/javascript-tech-contract-announcement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Weekend Reading</title>
		<link>http://fuery.com/2007/11/02/weekend-reading/</link>
		<comments>http://fuery.com/2007/11/02/weekend-reading/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 23:33:11 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/11/02/weekend-reading/</guid>
		<description><![CDATA[I know a lot of you out there are interested in improving your search engine results, understanding PageRank, and in general, monetizing your content.
Well, this weekend, how about taking a breather from all of that and contemplating how Google generates those search results? Those pages you get back when you punch keywords into the search [...]]]></description>
			<content:encoded><![CDATA[<p>I know a lot of you out there are interested in improving your search engine results, understanding PageRank, and in general, monetizing your content.</p>
<p>Well, this weekend, how about taking a breather from all of that and contemplating how Google generates those search results? Those pages you get back when you punch keywords into the search engine are dynamically generated in real time. That means that every search index effectively has an <em>entire copy of the internet</em> in its data center.</p>
<p>Now, this may not have much to do with your business, but trust me, this is a pretty amazing feat of engineering. Not a Great Wall of China kinda feat or anything, but certainly a Herculean task.</p>
<p>If you&#8217;re a computer science fellow, take a look at Google&#8217;s <a href="http://209.85.163.132/papers/bigtable-osdi06.pdf" target="_blank">BigTable</a> white paper. If you&#8217;re not, but still vaguely comprehend what a pointer is and want to try to get your head around data relationships in <em>n-</em>dimensions (the visual model tends to break down for me somewhere around three, personally :-) ), enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/11/02/weekend-reading/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Quick Hack to Solve Strange IE7 Display Behavior</title>
		<link>http://fuery.com/2007/10/11/quick-hack-to-solve-strange-ie7-display-behavior/</link>
		<comments>http://fuery.com/2007/10/11/quick-hack-to-solve-strange-ie7-display-behavior/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 02:22:57 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/10/11/quick-hack-to-solve-strange-ie7-display-behavior/</guid>
		<description><![CDATA[Further to my article earlier today on the topic of checking your page design in multiple browsers, I&#8217;ve noticed quite a few strange behaviors that effect only IE7, especially related to the placement of div blocks. It seems that the the display parameter in CSS (e.g., {display: block; display: inline;}, etc.) doesn&#8217;t match either IE6 [...]]]></description>
			<content:encoded><![CDATA[<p>Further to my article earlier today on the topic of checking your page design in multiple browsers, I&#8217;ve noticed quite a few strange behaviors that effect only IE7, especially related to the placement of div blocks. It seems that the the display parameter in CSS (e.g., <code>{display: block; display: inline;}</code>, etc.) doesn&#8217;t match either IE6 or Firefox.</p>
<p>There&#8217;s a quick solution to this problem, however. In my case, I had a section of text that was positioned about 60 pixels higher in IE7 than in the other two browsers. So I just added the following to my source file:</p>
<p><code>&lt;!--[if gt IE 6]&gt;<br />
&lt;style&gt;<br />
#message_left {<br />
padding-top: 60px;<br />
}</p>
<p>#message_right {<br />
padding-top: 80px;<br />
}</p>
<p>&lt;/style&gt;<br />
&lt;![endif]&#8211;&gt;<br />
</code></p>
<p>Thanks to <a href="http://www.quirksmode.org/css/condcom.html" target="_new">quirksmode.org</a>, where I found this helpful workaround.</p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/10/11/quick-hack-to-solve-strange-ie7-display-behavior/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web Developer Tip: Use Virtual PC to Run Different Versions of IE Concurrently</title>
		<link>http://fuery.com/2007/10/11/web-developer-tip-use-virtual-pc-to-run-different-versions-of-ie-concurrently/</link>
		<comments>http://fuery.com/2007/10/11/web-developer-tip-use-virtual-pc-to-run-different-versions-of-ie-concurrently/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 01:03:55 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/10/11/web-developer-tip-use-virtual-pc-to-run-different-versions-of-ie-concurrently/</guid>
		<description><![CDATA[Do you have a need to run Internet Explorer 6 and Internet Explorer 7 (IE6 &#38; IE7) side by side? If you have ever toyed with your blog&#8217;s presentation template, if you do any sort of web development, or even if you need to run an application in a different version of Microsoft Windows, you [...]]]></description>
			<content:encoded><![CDATA[<p>Do you have a need to run Internet Explorer 6 and Internet Explorer 7 (IE6 &amp; IE7) side by side? If you have ever toyed with your blog&#8217;s presentation template, if you do any sort of web development, or even if you need to run an application in a different version of Microsoft Windows, you can use Microsoft&#8217;s free <a href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx" target="_blank">Virtual PC</a> application to do it.</p>
<p>(The reason is because no two web browsers render html and css identically. So your beautifully designed masterpiece that rivals the Mona Lisa in Firefox might be a huge mess in IE6, slightly skewed in Safari, and Martian in IE7. Not to mention the handful of browsers with even less market share.)</p>
<p>I have two Windows 2000 systems I use side-by-side on a daily basis. Both boxes are a couple of years old, but are plenty fast for my needs. I&#8217;m not a gamer, my primary development environment consists primarily of <a href="http://www.cygwin.com/">cygwin</a> and a <a href="http://textpad.com" target="_blank">text editor</a>, and my most-used application is Firefox.</p>
<p>I nevertheless need to evaluate my work on at least IE6, IE7, and Firefox 2. It would better to include Firefox 1.5 and Safari as well.</p>
<p><strong>Two Problems</strong></p>
<ol>
<li>Internet Explorer is part of Windows. So separating it, or, as I want to do, compartmentalizing so I can run both IE6 and IE7 side-by-side is a monstrous effort all by itself. There are a number of other <a href="http://fuery.com/google-search?&amp;sa=Search&amp;client=pub-5195715906523391&amp;forid=1&amp;ie=ISO-8859-1&amp;oe=ISO-8859-1&amp;cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%23003366%3BVLC%3A336699%3BAH%3Acenter%3BBGC%3Affcc99%3BLBGC%3A336699%3BALC%3A003366%3BLC%3A003366%3BT%3A000000%3BGFNT%3A003366%3BGIMP%3A003366%3BFORID%3A11&amp;hl=en&amp;&amp;q=install%20IE6%20IE7%20same%20machine" target="_blank">Smart Guys</a> out there who have discussed it in detail, but I wasn&#8217;t too interested in that solution. Besides, I have two boxes, so running IE6 on one and IE7 on the other seemed like the best approach. Except that&#8230;</li>
<li>IE7 cannot be installed on Win2K. Call it Microsoft&#8217;s encouragement to upgrade your OS. Call it a Microsoft cost-savings effort (because it&#8217;s a lot less Quality Assurance labor). Call it whatever you like&#8230; getting around it is yet another Herculean effort. And I do this sort of thing for a living.</li>
</ol>
<p><strong>A Free and Easy-to-Install Solution</strong></p>
<p>Enter Virtual PC from Microsoft. It&#8217;s a poor man&#8217;s Windows-only, less efficient implementation of <a href="http://www.vmware.com/download/ws/eval.html" target="_blank">VMWare</a>, but it&#8217;s free and it solves the problem in 30 minutes, 20 of which was downloading the &#8220;Virtual Hard Drive&#8221; from M$ containing an installation of <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=21EABB90-958F-4B64-B5F1-73D0A413C8EF&amp;displaylang=en" target="_blank">Windows XP SP2 and IE7</a>. I installed the Virtual PC package (download link is in the first paragraph, above), downloaded the Virtual Hard Drive (VHD), ran the &#8220;New Virtual Machine Wizard&#8221;, and 5 minutes later I was running IE7 on XP within a window on my Windows 2000 box.</p>
<p>Here&#8217;s a nice screen shot for you (click through to see it at full size):<a href="http://fuery.com/wp-content/uploads/2007/10/ie6_ie7_screenshot.jpg" title="IE7 running on Windows 2000 with Virtual PC Screenshot"><img src="http://fuery.com/wp-content/uploads/2007/10/ie6_ie7_screenshot.jpg" title="IE7 running on Windows 2000 with Virtual PC Screenshot" alt="IE7 running on Windows 2000 with Virtual PC Screenshot" border="0" hspace="4" vspace="4" width="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/10/11/web-developer-tip-use-virtual-pc-to-run-different-versions-of-ie-concurrently/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Your Web Site is a Software Application</title>
		<link>http://fuery.com/2007/09/05/your-web-site-is-a-software-application/</link>
		<comments>http://fuery.com/2007/09/05/your-web-site-is-a-software-application/#comments</comments>
		<pubDate>Thu, 06 Sep 2007 03:00:43 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[Entrepreneurship]]></category>

		<category><![CDATA[GeekSpeak]]></category>

		<category><![CDATA[Web Marketing]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/09/05/your-web-site-is-a-software-application/</guid>
		<description><![CDATA[I&#8217;ve recently stepped up my software development duties for clients, as you may or may not have gleamed from my posting infrequency and slightly geekier posts of late.
I&#8217;ve also been exploring the technical requirements for a bigger project while getting tapped on the virtual shoulder on a regular basis with web development questions. This led [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://craphound.com/images/suchageekphotocontest.jpg" title="Sleeping Geek from Craphound.com" alt="Sleeping Geek from Craphound.com" align="left" height="331" hspace="10" vspace="4" width="322" />I&#8217;ve recently stepped up my software development duties for clients, as you may or may not have gleamed from my posting infrequency and slightly geekier posts of late.</p>
<p>I&#8217;ve also been exploring the technical requirements for a bigger project while getting tapped on the virtual shoulder on a regular basis with web development questions. This led to the articulation of something that, as a software and support guy, comes as second nature, but seems to escape so many whom I speak to.</p>
<p><em>Your Web Site is a Software Application.</em></p>
<p>That means that the rules of software development apply. It means that where it makes sense to apply processes associated with software manufacturing, you should wholeheartedly do so. And it means that if all you&#8217;ve ever done is blog about how poor you are, you probably ought to change your mindset before going out and trying to do much with web-based businesses other than blogging.</p>
<p>If you&#8217;re using the web to extend your offline business, you don&#8217;t need to think about software. It&#8217;s perfectly ok to use a word processor to place a virtual business card on the web and place the URL on your business card. If you&#8217;re a writer, then use tools like blogger and wordpress. If you&#8217;re a broker of used goods, then yes, craigslist and ebay are web tools you should be using. If you need to do something more complicated that increases the value of your business through custom software, that&#8217;s easy! <a href="http://fuery.com/contact" target="_blank">Hire me.</a></p>
<p>But if you&#8217;ve never touched html, if you don&#8217;t know the fundamental differences &#8212; and I&#8217;m not talking about code syntax &#8212; between Java and JavaScript, and if you haven&#8217;t the foggiest what I&#8217;m referring to when I say &#8220;data abstraction&#8221; or &#8220;presentation layer&#8221;, then you&#8217;ve got some reading and studying to do before you start thinking about building Facebook plugins and online storefronts.</p>
<p>All of this being said, if you want to ignore my rant and forge ahead anyway, here are some basics you need to know about software development.</p>
<ol>
<li><strong>You need to think about your business before even considering your application.</strong> Software people &#8212; usually with a title like &#8220;Product Manager&#8221; &#8212; call this a Roadmap. The application you want to develop is serving a purpose, right? Well, like any investment, the costs associated with the application need to be weighed against the reward, both potential (optimistic) and likely (realistic). Is there a better place you should be spending your time and money? More importantly, are you interested in a given feature, application, or business simply because you&#8217;ve fallen in love with the idea? Don&#8217;t do it. The <a href="http://fuery.com/2007/06/19/dont-fall-in-love-with-business-ideas/" target="_blank">three shower rule</a> applies.</li>
<li><strong>You need to document your functional requirements before you start writing code.</strong> If you happen to be doing the development, then maybe you can take some of shortcuts here, but that amounts to shorthand notation, not skipping this step. For instance, consider a user management application. You know, those things you use every day when you need to login to something. Great, so you need some place to store the user and password, you need a form that accepts these inputs, and you need a way of providing feedback like &#8220;Sorry, bad password, stop trying to hack into your boyfriend&#8217;s account.&#8221; Anything else? No? How about security concerns? How do you reset a password? How do you register a new user? What about when a user name is already taken? What about password requirements, like length or a rule against using dictionary words? The point is this: until you start making a list (at least&#8230; what we software guys call &#8220;use cases&#8221; would be even better), you&#8217;ll forget lots of stuff that needs to be in there. Make your list first, and you won&#8217;t find yourself rewriting code you should have constructed properly the first time. Or worse, paying your $100 an hour IT guy to do it twice. Oh, and yes, there&#8217;s an acronym for this one: &#8220;FRD&#8221;.</li>
<li><strong>You need to capture your technical details.</strong> Just as I&#8217;ve described above with your features, making a list of your technical decisions &#8212; both in terms of architecture (e.g, the server operating system, the development tools used, how data is stored/cached/handled) and your details, like the type of data you need to maintain in your database, will save you a great deal of heartache later. On bigger projects, both your FRD (functional requirements document) and TRD (technical requirements document) go through several iterations before any development begins. (Aside from, perhaps, some user interface design for inclusion any these documents, which happens often with web applications, because a skilled developer can do web UI mock-ups faster than a designer can create mock-ups in Photoshop.)</li>
<li><strong>You need a guide, young padawan.</strong> It doesn&#8217;t have to be me. I&#8217;m admittedly pretty expensive. That being said, I&#8217;ll happily answer simple questions from any reader and would be delighted to critique your business plan off-the-cuff. If you want a formal evaluation or some actual development work, of course, the first thing I&#8217;ll ask for is if you&#8217;ve been through the first three points above. :-)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/09/05/your-web-site-is-a-software-application/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Handling and Validating (Not So) Well-Formed XML in PHP</title>
		<link>http://fuery.com/2007/09/05/handling-and-validating-not-so-well-formed-xml-in-php/</link>
		<comments>http://fuery.com/2007/09/05/handling-and-validating-not-so-well-formed-xml-in-php/#comments</comments>
		<pubDate>Wed, 05 Sep 2007 07:27:33 +0000</pubDate>
		<dc:creator>Johnny Fuery</dc:creator>
		
		<category><![CDATA[GeekSpeak]]></category>

		<guid isPermaLink="false">http://fuery.com/2007/09/05/handling-and-validating-not-so-well-formed-xml-in-php/</guid>
		<description><![CDATA[This post is decidedly geeky, but it took me awhile to figure out and I found no definitive resource describing this case on the web, so I feel that sharing is necessary.
Problem Description
PHP 5 has some built in functions for handling and parsing xml files. In typical PHP style, these are simple and straightforward to [...]]]></description>
			<content:encoded><![CDATA[<p>This post is decidedly geeky, but it took me awhile to figure out and I found no definitive resource describing this case on the web, so I feel that sharing is necessary.</p>
<p><strong>Problem Description</strong></p>
<p>PHP 5 has some built in functions for handling and parsing xml files. In typical PHP style, these are simple and straightforward to use. The <code>simplexml_load_file()</code> function in PHP is commonly used to load xml files and ready them for parsing using associative array (that&#8217;s a hash for your perl coders) syntax.</p>
<p>There&#8217;s a catch, though. With simplicity comes limitations. The error checking built in to the <a href="http://us2.php.net/manual/en/function.simplexml-load-file.php" target="_blank">simplexml_load_file() function</a> is difficult to use. In point of fact, I couldn&#8217;t get it to work. </p>
<p>I even found [incorrect] documentation that implied that this would do the trick:<br />
<code><br />
$xml = simplexml_load_file($url);<br />
if($xml) {<br />
  // parse it<br />
</code></p>
<p>That may work if the file doesn&#8217;t exist altogether, but it still through plenty of runtime errors with my malformed xml.</p>
<p>Digging further, I discovered that, based on the API, I should be able to supply a libxml constant as the third argument and thus gain a high level of control, but after toying with the constant <code><a href="http://us2.php.net/manual/en/ref.libxml.php#libxml.constants" target="_blank">LIBXML_DTDVALID</a> </code>without achieving the expected (or desired) results, I opted for my own methods.</p>
<p>The problem in my particular case was that my script was trying to retrieve a dynamically produced xml document that contained Java Runtime Error output instead of the expected well-formed xml. Sure, it&#8217;s the data provider&#8217;s problem to fix this sort of thing, but in the meantime, I&#8217;m the one displaying PHP errors to my customers. And, in all probability, losing them. Better to tell them the data is currently unavailable and give them a phone number to call, no?</p>
<p>Here&#8217;s the exact error message:</p>
<p><strong>Warning</strong>:  simplexml_load_file() [<a href="http://fuery.com">function.simplexml-load-file</a>]: I/O warning : failed to load external entity &#8220;../my/server/directory/structure/myfile.xml&#8221; in <strong>/my/server/directory/strcuture/xml-parsing-script.php</strong> on line <strong>34</strong></p>
<p>And yes, <em>of course</em> the file is there. I told you, it contains an html-formatted page full of Java Errors. Can&#8217;t you Java coders parse some simple data into some clean, well-formed xml? ;-)</p>
<p><strong>The Solution</strong></p>
<p>The problem arises because simplexml_load_file is trying to both retrieve and parse all at once. The solution is to read the file using  file_get_contents() first, test for validity, then parse it as xml using simplexml_load_string.  If you&#8217;re still reading, you&#8217;re probably done with the explanation and want to see the code:</p>
<p>The function below is based on some code snippet I found out in the wild somewhere. I&#8217;d credit the author, but I can&#8217;t seem to find it again. Feel free to comment if you are the proud originator and I&#8217;ll update this post accordingly.<br />
<code><br />
function isWellFormed($xmlString)<br />
{<br />
libxml_use_internal_errors(true);</p>
<p>$doc = new DOMDocument('1.0', 'utf-8');<br />
$doc->loadXML($xmlString);</p>
<p>$errors = libxml_get_errors();<br />
if (empty($errors))<br />
{<br />
return true;<br />
}</p>
<p>$error = $errors[ 0 ];<br />
if ($error->level < 3)<br />
{<br />
return true;<br />
}</p>
<p>$lines = explode("r", $xmlString);<br />
$line = $lines[($error->line)-1];</p>
<p>$message = $error->message.&#8217; at line &#8216;.$error->line.&#8217;:<br />&#8216;.htmlentities($line);</p>
<p>return $message;<br />
}<br />
</code></p>
<p>Once you have functionized the validation step, just load, test, and parse:</p>
<p><code><br />
$xmlString = file_get_contents($url);<br />
if (isWellFormed($xmlString))<br />
{<br />
	$xml = simplexml_load_string($xmlString);<br />
}<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://fuery.com/2007/09/05/handling-and-validating-not-so-well-formed-xml-in-php/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
