<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.no-ip.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Flyover Blog</title><link>http://blogs.no-ip.org/flyover/default.aspx</link><description>Look mummy, there&amp;#39;s an airplane up in the sky</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>The Mosque question</title><link>http://blogs.no-ip.org/flyover/the-mosque-question.aspx</link><pubDate>Fri, 15 Oct 2010 11:53:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:5653</guid><dc:creator>Craig</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Looks like I&amp;#39;m going to be a guest poster on Chris&amp;#39; blog. I can&amp;#39;t figure out how to get back to my own blog so here goes.&lt;/p&gt;
&lt;p&gt;Quite simply this whole should they build a mosque in Manhattan or not shouldn&amp;#39;t even be a question. It shows the level of ignorance Americans have for their own constitution. It should be allowed to be built regardless if 70-80% of the population disapproves of it. The whole point of that Bill of Right was to _protect_ us from our majority opinions. It was written down as law so we wouldn&amp;#39;t use opinion to decide what religion got what rights according to the prevailing winds of the day. I don&amp;#39;t understand why we as Americans can no longer buck up and act like the proud people we are? Instead we sit around and whine about the Muslim extremists and have our pitty parties. Why not show the world that we believe in the rule of law and not the mob? This law is core to our culture and way we govern ourselves. I &lt;a target="_blank" href="http://www.youtube.com/watch?v=25uyFwWPOZg%20"&gt;watched&lt;/a&gt; doofus Bill O&amp;#39;Reilly on the View spout what most right wing morons say. Kind of ticked me off, so here&amp;#39;s my opinion.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=5653" width="1" height="1"&gt;</description></item><item><title>A day with Kenzie</title><link>http://blogs.no-ip.org/flyover/a-day-with-kenzie.aspx</link><pubDate>Sat, 27 Mar 2010 14:47:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:5437</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Recently Kenzie had her spring break. She&amp;#39;s been asking me to take her to Washington D.C. to see the &amp;quot;president&amp;#39;s house&amp;quot;. Kenzie is a smart kid but really she just doesn&amp;#39;t care to learn anything outside of school. I&amp;#39;ve tried in the past to bring history alive, try to make the operations of our government exciting in one or the other. Just doesn&amp;#39;t sink in with her and that&amp;#39;s fine. Other things do interest her and we concentrate on that. So back to D.C. I corrected her and said it&amp;#39;s called the White House. I know that! I want to go is all. So I explained to her D.C. is a lot of buildings and museums all centered around our nation&amp;#39;s history and government. So spring break came and I took a day off and figured I try a trial run and take her to the &lt;a target="_blank" href="http://mohistory.org/"&gt;Missouri History Musuem&lt;/a&gt;. They had a exhibit on the Charles Lindbergh, a famous St. Louisan. I told her this is like a mini version of D.C. So we went and I tried to tell her how excited people were in 1927, that a guy could fly an airplane to Europe non-stop. Plus he pretty much did it on his own, reduced weight everywhere on the plane, took a big risk, was really brave, etc. After 10 minutes her head was on my shoulder sleepy asking &amp;quot;when will the history be over&amp;quot;. So I said ok it&amp;#39;s your day off where do you want to go. She suggested we go to a pet store and look at kittens. So off we go. Well she decided she&amp;#39;s always wanted a hamster. I figured that&amp;#39;s fine, I had hamsters when I was growing up, they&amp;#39;re easy to keep as long as you keep their cages clean. So I made a deal with her, I&amp;#39;d buy her a cage if she bought the hamster. So she picks one out and the guy puts the hamster in the box and we head for home. Oh and she bought a clear plastic ball where you put the hamster in and he can roll around in it on your floor. Cool idea. In the car she wants to hold him. I said wait until we get home, keep him in the box. I look over later and she&amp;#39;s holding him in her hands. Put him back Kenzie. Next thing I see she&amp;#39;s got him in the plastic ball on the floor of the car rolling around. The top comes off and she freaks out and grabs him. I said keep him in the box Kenzie. She starts wondering why the top came off the ball. So like any kid who thinks the world is their oyster, she tries it again but this time the hamster gets out and runs up into my dashboard somewhere. Greeeeat. So we get home and she&amp;#39;s freaking out looking for the hamster. He&amp;#39;s not coming out, that&amp;#39;s their nature is to find hidy holes. She&amp;#39;s out in the car for an hour with peanut butter trying to draw him out. Nothing. So she comes in disappointed, Craig can you take to &lt;i&gt;different &lt;/i&gt;pet store so I can buy a new one. Sure, so she gets a new one and keeps him in the box this time. But I still have a rat in my car somewhere. Either he&amp;#39;s going to die and my car will stink or he&amp;#39;ll start chewing the wiring harness. Either way it sounds like I&amp;#39;ll need to take a trip to Honda to remove the dash. So I keep my car door open hoping maybe he&amp;#39;ll make a run for it. Later in the day I need to take Kenzie to her dance class and I decide hey lets take our dog Jake with us. Maybe he&amp;#39;ll flush the little sucker out. Well Jake immediately knows there&amp;#39;s something in the console between the front seats and is going nuts scratching at it, sniffing, generally going dog nuts. Within a few minutes Kenzie screams and jumps up on her seat and says oh my god, he&amp;#39;s under your feet Craig. Not wanting crush him I pull my feet up and the car being a stickshift starts slowing down and coughing &amp;quot;this gear is too big to turn, he-ha-elp&amp;quot;. So I have to get my feet down and keep driving. Kenzie is looking around my feet for the hamster, can&amp;#39;t see him anymore. I thought cool, the dog trick is working. Figured well we&amp;#39;ll wait until he comes out again. I ask Kenzie, hey check Jake in the back, what&amp;#39;s he doing. Another scream, Craig he&amp;#39;s eating the hamster!! So I pull into a parking lot and grab some napkins and throw him in the trash. Of course Jake is like oh yeah my first kill, somebody fist bump me! A fun filled day indeed.&lt;/p&gt;
&lt;p&gt;UPDATE 4/10/2010&lt;/p&gt;
&lt;p&gt;The hamster died today of highly unusual conditions. He somehow escaped from his cage, jumped off the top of it and right into a fish bowl. He drowned. Freedom doesn&amp;#39;t come for free Mr. Hamster. RIP.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=5437" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/Kenzie+history+day+off/default.aspx">Kenzie history day off</category></item><item><title>Windows mobile 6.1 /Thunderbird - staying in sync part 2</title><link>http://blogs.no-ip.org/flyover/windows-mobile-6-1-thunderbird-staying-in-sync-part-2.aspx</link><pubDate>Sun, 17 Jan 2010 17:06:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:5364</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Ok so the using Kerio mail server as a central syncing point failed. Luckily Google is here to save us :)&lt;/p&gt;
&lt;p&gt;Apparently in early 2009 Google started supporting Exchange ActiveSync service with it&amp;#39;s gmail and calendar apps. Great! This solution has worked out to be my solution. Here goes...&lt;/p&gt;
&lt;p&gt;On the cell phone it&amp;#39;s pretty simple. Just like in the last article fill in the ActiveSync server config --&lt;a target="_blank" href="http://www.google.com/support/mobile/bin/answer.py?answer=138636&amp;amp;topic=14299"&gt; http://www.google.com/support/mobile/bin/answer.py?answer=138636&amp;amp;topic=14299&lt;/a&gt; If this url fails, just google for &amp;quot;google mobile sync&amp;quot;.&lt;/p&gt;
&lt;p&gt;On the Thunderbird side there&amp;#39;s a little more work involved. For the calendar, download a Thunderbird addon called &lt;a target="_blank" href="https://addons.mozilla.org/en-US/thunderbird/addon/4631"&gt;gdata provider&lt;/a&gt;. Go in and create a new calendar in Thunderbird. Select Network and a new option will show up called Google Calendar, select it. For the Location field you&amp;#39;ll need to go to your&lt;a target="_blank" href="http://www.google.com/calendar/"&gt; Google calendar&lt;/a&gt; and follow these steps to get your unique url. On the left side of the calendar is your calendars. Under each calendar on the left is a Settings link, click on this link for the calendar that&amp;nbsp; you want to sync. On the Calendar tab, click on your calendar name. This will take you to a Calendar Details tab. At the bottom is a Private Address line. Select the address of the XML button. This will be your text for the Location text box.&lt;/p&gt;
&lt;p&gt;For the address book, you will need to download anotherThunderbird addon called &lt;a target="_blank" href="http://www.zindus.com/"&gt;Zindus&lt;/a&gt;. The setup with this requires some configuration.&amp;nbsp; After installing it, select Tools from the menu and then Zindus. &lt;/p&gt;
&lt;p&gt;Add a new gmail account to sync contacts with, use these settings --&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/5518.5.JPG"&gt;&lt;img src="http://blogs.no-ip.org/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/5518.5.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After you have created your account, config your settings as shown. Autosync sucks because it syncs on startup and locks down Thunderbird until it&amp;#39;s done. Forgot to multithread I guess.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/8420.4.JPG"&gt;&lt;img src="http://blogs.no-ip.org/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/8420.4.JPG" border="0" alt="" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select the Advanced Google Settings button and config the dialog box as shown&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/3630.6.JPG"&gt;&lt;img src="http://blogs.no-ip.org/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/3630.6.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The first option about Thunderbird fields in xml means you want to preserve your address, phone, notes, etc fields in Thunderbird. They will show up in your cell phone as xml data. That is the only downside really to this setup, the address fields are not clear on your phone. Select OK to exit and set your settings. In the lower right of Thunderbird is the Zindus icon, right click on it to manually sync your address book.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/3443.7.JPG"&gt;&lt;img src="http://blogs.no-ip.org/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/3443.7.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Anyway this setup works for me just fine. However I will probably migrate to an iPhone for my next cell phone. I&amp;#39;ve been using WinMo for several years and I&amp;#39;m just not impressed with it as compared to a real phone appliance like the iPhone.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="text-decoration:underline;"&gt;EDIT: 3/27/2010&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Zindus didn&amp;#39;t really work out very well. I had problems with it. I have since switched to &lt;a target="_blank" href="https://addons.mozilla.org/en-US/thunderbird/addon/8451"&gt;gContactSync&lt;/a&gt; which works much better, more stable. Very easy to set up. You&amp;#39;ll need to create it&amp;#39;s own contact folder instead of using the default Personal Contacts folder. I just created one and called it Google Contacts. Recently Google changed their api and the developer immediately jumped on it and had a fix within the day. Also I have switched to the iPhone. Oh my, what an incredible device. Why didn&amp;#39;t I switch over earlier...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=5364" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/windows+mobile+google+activesync+sync/default.aspx">windows mobile google activesync sync</category></item><item><title>Windows mobile 6.1 /Thunderbird - staying in sync part 1</title><link>http://blogs.no-ip.org/flyover/windows-mobile-6-1-thunderbird-staying-in-sync-part-1.aspx</link><pubDate>Sun, 17 Jan 2010 15:44:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:5363</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I have a Windows mobile 6.1 on an HTC Tilt. It&amp;#39;s an ok phone, little bulky but I got use to it. I have a data plan with it since I use email as a main communication platform. I stopped using Microsoft Outlook about 2 years ago. Just too heavy, confusing to use and just another Microsoft Office product I never liked using. So I switched to Thunderbird. Works great with the Lightning addon for calendar support. In order to keep my calendar and address book in sync between each instance of Thunderbird I had running I would sync with my phone using &lt;a target="_blank" href="http://www.birdiesync.com/"&gt;BirdieSync&lt;/a&gt;. For instance I would sync to my phone at home off my home desktop pc. Take the phone upstairs and sync it with my laptop and then at work sync it with my work pc. Crazy I know but it kind of worked for a couple of years. Of course I thought it would be nice to have a central server to sync everything to on the internet. Hmm... so the investigation began. This first part is a failed attempt to use my mail server which running &lt;a href="http://www.kerio.com/mailserver"&gt;Kerio Mail Server&lt;/a&gt; 6.7. Wonderful product by the way, so much easier to use than Microsoft Exchange will ever be. &lt;/p&gt;
&lt;p&gt;I began down this path thinking that Kerio had a way to share address books that made sense. To forewarn you they don&amp;#39;t, not yet anyway, version 7 is supposed to support CardDAV which will work. They currently use LDAP but that&amp;#39;s not a solution since it&amp;#39;s read only. But I didn&amp;#39;t start out with the address book, I tried to figure out how to share a calendar using CalDAV. There is a solution to that.&lt;/p&gt;
&lt;p&gt;In order for my phone to communicate with the mail server I needed to use either http or https. ActiveSync does not support any other ports other than 80 and 443. Another reason why Microsoft is losing the mobile OS battle. Anyway since I&amp;#39;m running IIS on the same server as Kerio I couldn&amp;#39;t use http, I instead chose https. I first opened up port 443 in my NAT router and then I went into Kerio admin to create an SSL certificate.&lt;/p&gt;
&lt;p&gt; &lt;a href="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/6685.1.jpg"&gt;&lt;img src="http://blogs.no-ip.org/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/6685.1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The certificate that is shown is usually the one that was automatically created when you installed the server and is usually out of date. (Kerio support &lt;a target="_blank" href="http://support.kerio.com/index.php?_m=knowledgebase&amp;amp;_a=viewarticle&amp;amp;kbarticleid=535&amp;amp;nav=0,1,37"&gt;article&lt;/a&gt; on renewing an expired SSL Certificate).&lt;/p&gt;
&lt;p&gt;Click the New button and select New certificate request...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/1376.2.jpg"&gt;&lt;img src="http://blogs.no-ip.org/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/1376.2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Fill out the fields in the dialog box and select OK. Voila you have a new server certificate. Make sure you mark this new as the active certificate. Remove the old by pressing the Remove button from below and selecting the new certificate and pressing the Set as active button. See Kerio manual for more details (&lt;a target="_blank" href="http://manuals.kerio.com/kmsag/en/sect-kmscert.html"&gt;http://manuals.kerio.com/kmsag/en/sect-kmscert.html&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Turn on the https service from the service window&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/1882.3.jpg"&gt;&lt;img src="http://blogs.no-ip.org/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover/1882.3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ok so now we&amp;#39;re all set on the Kerio side, let&amp;#39;s switch to the cell phone side.&lt;/p&gt;
&lt;p&gt;Open up ActiveSync on your cell phone and select Menu &amp;gt; Configure Server...&lt;/p&gt;
&lt;p&gt;Fill your email server address and select the checkbox that talks about requiring SSL connection. Press Next.&lt;/p&gt;
&lt;p&gt;Type in your username and password, select the checkbox that says save password. Press Next.&lt;/p&gt;
&lt;p&gt;Select what data you want to sync up with. In&amp;nbsp; this case we just want Calendar. Press Finish. &lt;/p&gt;
&lt;p&gt;In order to get your phone to accept the SSL cert go into Pocket IE and browse to your email server&amp;#39;s SSL web page. Select that you want to accept the SSL cert. (&lt;a target="_blank" href="http://manuals.kerio.com/kmsug/en/sect-mobcert.html"&gt;http://manuals.kerio.com/kmsug/en/sect-mobcert.html&lt;/a&gt;). If that does not work then go to the url and add /server.cer to it. (&lt;a target="_blank" href="http://manuals.kerio.com/kms/en/sect-activessl.html"&gt;http://manuals.kerio.com/kms/en/sect-activessl.html&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Now go back to the ActiveSync screen and press Sync to make sure it works. Although slightly out of date, the Kerio manual is correct (&lt;a target="_blank" href="http://manuals.kerio.com/kmsug/en/sect-wm5aku2.html#sect-wm5akupc"&gt;http://manuals.kerio.com/kmsug/en/sect-wm5aku2.html#sect-wm5akupc&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;On the Thunderbird side of things, open up Thunderbird, select the Calendar (Lightning addon) and create a new calendar. Select Network location and then CalDAV type. For the Location follow the Kerio manual (&lt;a target="_blank" href="http://manuals.kerio.com/kmsag/en/sect-caldavset.html"&gt;http://manuals.kerio.com/kmsag/en/sect-caldavset.html&lt;/a&gt;). Be sure to include the https since we are using SSL. Make sure the new calendar retrieves all saved dates.&lt;/p&gt;
&lt;p&gt;For sharing an address book this is where it all falls apart :( Kerio currently does not support an address book sharing technology (sorry LDAP doesn&amp;#39;t count). Hopefully soon they will in their next major release. I&amp;#39;m unclear if Windows mobile supports CardDAV or other address book syncing technology. Something tells me it doesn&amp;#39;t because the OS is somewhat antiquated and MS has shown no initiative to compete with it.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=5363" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/windows+mobile+kerio+activesync+caldav+sync/default.aspx">windows mobile kerio activesync caldav sync</category></item><item><title>Top 250 Movies?</title><link>http://blogs.no-ip.org/flyover/top-250-movies.aspx</link><pubDate>Thu, 24 Dec 2009 03:10:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:5318</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I explored the&lt;a target="_blank" href="http://www.imdb.com/chart/top"&gt; IMDB top 250&lt;/a&gt; movies as rated by users. Hmm...&amp;nbsp; some don&amp;#39;t belong anywhere near the top. &lt;/p&gt;
&lt;p&gt;I guess my top movies would be in a general order:&lt;/p&gt;
&lt;p&gt;Blade Runner&lt;br /&gt;Apocalypse Now&lt;br /&gt;Spartacus&lt;br /&gt;Citizen Kane&lt;br /&gt;Network&lt;br /&gt;The Princess Bride&lt;br /&gt;The Exorcist&lt;br /&gt;The Life of Brian&lt;/p&gt;
&lt;p&gt;Any of those I can usually stop what I&amp;#39;m doing and watch anytime, anywhere. Excellent, totally enjoyable movies.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=5318" width="1" height="1"&gt;</description></item><item><title>Office software</title><link>http://blogs.no-ip.org/flyover/office-software.aspx</link><pubDate>Fri, 18 Dec 2009 22:25:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:5309</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I started using Google Docs online about 6 months ago. I create all of my invoicing in spreadsheets there and some documentation for work. So far I give the experience a B- . There&amp;#39;s areas where it could be better but it&amp;#39;s free and on the web so I can deal. Sometimes I get doc or xls files from people and Google Docs just barfs on them. Instead of loading MS Office 2003/7 like I usually do I decided to try out Open Office 3 from Sun. It&amp;#39;s free and I&amp;#39;ve read good stuff on it. First off it took about 2 minutes and 30 seconds to install instead of the normal 15 minutes I&amp;#39;m use to with standard MS Office. I didn&amp;#39;t have to check off all of the idiot options that shouldn&amp;#39;t be installed by default anyway like I do with MS Office. I just used it to open an MS Word doc that was sent to me. Opened perfectly, no problems, no help sidebar that assumes I don&amp;#39;t know what I&amp;#39;m doing or little clippy animation eager to help me and instead annoy me enough to regret ever installing this memory hog beast. Open Office has a clean useful interface without 80% of options no one ever uses except book publishers. They didn&amp;#39;t try to reinvent the menu bar, it&amp;#39;s all very intuitive. Free and easy to use, interoperable with MS Office. Why didn&amp;#39;t I install this earlier...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=5309" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/microsoft+office+open+google+docs+online/default.aspx">microsoft office open google docs online</category></item><item><title>Keeping it real in Chicago</title><link>http://blogs.no-ip.org/flyover/keeping-it-real-in-chicago.aspx</link><pubDate>Tue, 16 Jun 2009 20:20:53 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:5066</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Yesterday was my 44th birthday. First time I’ve felt like ‘dang that seems old to me’ when looking at my age. Not sure why it sticks out to me. &lt;/p&gt;  &lt;p&gt;Over the weekend I took a trip to Chicago with my friend John who I use to work for and an older guy, Art, who currently works for John. John is one of the partners of Epic Systems Engineering, from my engineering days. Really cool guy, we share some common interests. &lt;/p&gt;  &lt;p&gt;On the way up I discovered to my surprise that John keeps his 60 foot boat anchored in Lake Michigan and well that was going to be our sleeping accommodations. How fun! We arrived, dropped our luggage off at the boat and John gave us our first work assignment.&amp;#160; He purchased rope and what looks like short highway orange cones. The idea was to tie 4 of these together in a line with a weight at the end and then hang the assembly off the boat to reduce the rocking in the boat. Lot of wind catches his boat and acts like a sail. Being engineers we measured everything out, read the instructions and went to work. First we put the rope knots in the wrong place, then messed up our measurements. Had to restart the assembly 3 times before we got it right. Then had a hell of a time trying to tie a boat knot for the weight. John asked how many engineers does it take to complete this thing? I answered, clearly the answer is more than 3. &lt;/p&gt;  &lt;p&gt;We decided to get in some clean clothes and took a cab into town. Found a nice Irish pub in Olde Town and watched the Stanley Cup final. Great game, I was rooting for the Red Wings who somehow lost at home. Can anything else go wrong for Detroit? Most of the people in the bar were still sour after the Red Wings handed the Blackhawks a semi-final defeat so there were plenty of Penguin fans in the bar. I looked around at all of the young people there. Beautiful shining happy faces, full of youth and beauty. As I gawked at the pretty girls, it just hit me I’m twice the age of most of them. Wow. Yes, they are unattainable now. Yep, I had a mini-mid-life crisis right there in the 3rd period. Thought about changing my clothes and haircut to be hipper, start exercising, etc. Ran through the gamut like a cornered rat looking for a way out. So that’s what it’s like.. hmmm. Not a pleasant experience. So the game ended and I left my “issues” at the bar. John is an adventurous person. Let me explain a little. He loves Chicago and wants to discover as much of it as he can on each trip he makes there. So he printed out a map of Chicago with red and blue dots on it indicating points of interest that he’s been to and one’s he hasn’t. The latter being blue. So he pulls the map out of his pocket and marks off the bar we just left and said hey how about this jazz bar called the Green Dolphin guys? We’re all game to follow John where ever. The cabbie drops us off at the Green Dolphin and we step out and have one of those butthole puckering “oh shit” moments. Remember in Animal House when the guys walked in on Otis at the bar he was playing at? Well that was us. So after getting John to stop laughing at the predicament he landed us in and reminding him that maybe he should at least drive through some of the “blue dot” areas before committing to them we got back into a cab and headed back to the boat to sleep off the adventure. I wish I had my camera with me to share with everyone how cool the Chicago skyline looks like from John’s boat. &lt;/p&gt;  &lt;p&gt;We woke to rain on Saturday. John pulled out his map and decided on the Siskel Film Institute, told the cabbie to head there. While John was trying to find out the exact address for the cabbie I asked him do we know what time this place opens? He calls them and no, they don’t open for a few hours. Turn around cabbie, lets head to the Broadcast Museum, John searches for the address. I ask, ok do we know if this place is open? Phone call later, no it’s closed for repairs. Massive eye roll at that point. I finally say lets just go to the Field Museum and check out what’s there. I could spend all day in there but we decide to take the L out to Oak Park and check out Frank Lloyd Wright homes he designed at the turn of the century. Art decides to visit his sister in town while John and I continue the adventure. We get on the L and head straight west towards the suburbs. Each stop gets worse and worse in terms of urban decay. One drunk guy gets on the train asking if we could drive him to the homeless shelter in Indiana. I ask John, is this going to be a repeat of the Green Dolphin. At which point he says “no, I’ve been told it gets bad then it clears up”. My confidence getting shaky I stick with him on this. We arrived in a nice suburb and headed off to find the Frank Lloyd Wright visitor center. Purchased some tickets for a walking tour of the area. Tour guide gave us a run down of the many homes he designed during his “prairie design” period. At the time Oak Park was in the prairie where the rich elite lived outside the city slums. Really cool. Once again I wish I had a camera. &lt;/p&gt;  &lt;p&gt;We met Art back at the boat and announces we are having dinner with his sister who he confides in me was married to Harry Caray for 20 years. Wow! So we meet her and her boyfriend at well Harry Caray’s steak house downtown. Fancy place with an overpriced menu. She turned out to be full of life, wonderful lady. 80 years young but looked 60. I sat next to her boyfriend, another octogenarian who had a Cardinal world series ring on. I asked him about it and he explained he’s a part owner of the team, along with several other professional teams. Cool. He’s was a star basketball player at Loyola Univ. in Chicago in the early 50s. They retired his number. Really nice old guy. I really enjoy talking to old people, full of stories and experience. Art sister asked him with a wink if he was spending the night and he motions me over and he says to me quietly “she doesn’t get it that at my age it’s like trying to play pool with a rope”. I reminded they have these wonderful little blue pills now. He waves his hand and says that’s all he needs is one more pill to take. Art’s sister, “Dutchy” told us how she met Harry. She was not interested in dating in the beginning. But he wooed her with rose deliveries and once hired three Italian tenors to show up at her work and sing a romantic song from one of her favorite Italian operas. Long story short, she was smitten :) The steak I ordered was incredible, you know the kind that just melts. Its food like that that spoils me later on when I’m forced back into the real world of chain restaurants. Art’s sister picked up the check, which I know was well over $500. We said our thank yous and goodbyes and headed to the bar where we were given carte blanche on any booze. An alcoholic&amp;#39;s dream. I was spent after that large dinner and several glasses of fine wine but John and Art were just starting. Ha! Yeah poor Craig who just wants to hit the bunk. Guys, I’m ready to ship off. But I’m not a spoil sport, I hung in there and watched ESPN on repeat loop through each of the day’s baseball games. One of the Cub outfielders that day thought he caught the third out and threw the ball into the stands as the runners tagged up and circled the bases on the second out. Yep this is why people are so loyal to the Cubs, they are lovable screw ups. &lt;/p&gt;  &lt;p&gt;Sunday we took a cruise on John’s boat up the Chicago river and then packed up and headed home. On the way back I realized the spontaneity of the trip. The whole trip was a total blank slate Friday morning and ended up having a really cool adventure. Life’s not about hanging on to a youthful look, staying hip or trying to stay in the “game”. It’s about the moment, carpe diem, live each day like it’s your last. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=5066" width="1" height="1"&gt;</description></item><item><title>Javascript IDE</title><link>http://blogs.no-ip.org/flyover/javascript-ide.aspx</link><pubDate>Wed, 29 Apr 2009 15:37:18 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4988</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Lately I’ve been writing a lot of javascript and using the jQuery framework. I have to say, the jQuery framework is a godsend. Like cellphones and microwave ovens I ask myself, how did I manage without jQuery??&lt;/p&gt;  &lt;p&gt;Visual Studio 2008 offers a half-hearted attempt in working with javascript code. Even with the jQuery addin it’s still pretty much sucks at it. Simple things like being able to collapse the code and code formatting is missing. My search for a better javascript IDE has landed on a free product called &lt;a href="http://www.activestate.com/komodo_edit/" target="_blank"&gt;Komodo Editor&lt;/a&gt;. Out of the box it handles all the simple things Visual Studio misses on, including jQuery intellisense that’s built in. It’s fairly extensible and has sort of a dev community that has been creating addons for it. Here are a few that I’ve found --&lt;/p&gt;  &lt;div style="border-right:#3b7230 1px solid;padding-right:5px;border-top:#3b7230 1px solid;padding-left:5px;padding-bottom:5px;border-left:#3b7230 1px solid;padding-top:5px;border-bottom:#3b7230 1px solid;background-color:#ddffe3;"&gt;&lt;strong&gt;JSLint      &lt;br /&gt;&lt;/strong&gt;This examines your code for errors or suggestions. Just download the JSLint executable from &lt;a href="http://www.javascriptlint.com/download.htm" target="_blank"&gt;here&lt;/a&gt;. Make a copy of js.default.conf and rename it komodo.conf. Open up the file in notepad and change the following sections to look like this --     &lt;p&gt;&lt;font face="Courier New"&gt;### Output format        &lt;br /&gt;# Customize the format of the error message.         &lt;br /&gt;# __FILE__ indicates current file path         &lt;br /&gt;# __FILENAME__ indicates current file name         &lt;br /&gt;# __LINE__ indicates current line         &lt;br /&gt;# __ERROR__ indicates error message         &lt;br /&gt;#         &lt;br /&gt;# Visual Studio syntax (default):         &lt;br /&gt;#+output-format __FILE__(__LINE__): __ERROR__         &lt;br /&gt;# Alternative syntax:         &lt;br /&gt;+output-format __FILE__:__LINE__: __ERROR__&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;### Files        &lt;br /&gt;# Specify which files to lint         &lt;br /&gt;# Use &amp;quot;+recurse&amp;quot; to enable recursion (disabled by default).         &lt;br /&gt;# To add a set of files, use &amp;quot;+process FileName&amp;quot;, &amp;quot;+process Folder\Path\*.js&amp;quot;,         &lt;br /&gt;# or &amp;quot;+process Folder\Path\*.htm&amp;quot;.         &lt;br /&gt;#         &lt;br /&gt;#+process jsl-test.js&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Arial"&gt;Start Komodo and open the Toolbox by clicking the “Show/Hide Right Pane” button in the toolbar. Click on the “Add Item to Toolbox” button and add a new command. Make your new command look like this --&lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&amp;#160;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="484" alt="image" src="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover.metablogapi/1121.image_5F00_01AF76E9.png" width="406" border="0" /&gt; &lt;font face="Courier New"&gt;       &lt;br /&gt;&lt;/font&gt;&lt;font face="Arial"&gt;       &lt;br /&gt;The parse output with command is --&lt;/font&gt;&lt;/p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ^(?P&amp;lt;file&amp;gt;.+?):(?P&amp;lt;line&amp;gt;\d+):(?P&amp;lt;content&amp;gt;.*)$ &lt;/div&gt;  &lt;br /&gt;  &lt;div style="border-right:#3b7230 1px solid;padding-right:5px;border-top:#3b7230 1px solid;padding-left:5px;padding-bottom:5px;border-left:#3b7230 1px solid;padding-top:5px;border-bottom:#3b7230 1px solid;background-color:#ddffe3;"&gt;&lt;strong&gt;JSMin&lt;/strong&gt;     &lt;br /&gt;This minifies your javascript. An internet standard. Download the executable &lt;a href="http://www.crockford.com/javascript/jsmin.zip" target="_blank"&gt;here&lt;/a&gt;. Start Komodo and open the Toolbox and a new command as before&lt;font face="Arial"&gt;. Make your new command look like this --&lt;/font&gt;     &lt;p&gt;&lt;img title="image" style="border-top-width:0px;display:inline;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="484" alt="image" src="http://blogs.no-ip.org/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/flyover.metablogapi/4760.image_5F00_10646592.png" width="406" border="0" /&gt; &lt;/p&gt; The one caveat here is that your original javascript file must have the extension .uncompressed.js in order for this to work. &lt;/div&gt;  &lt;br /&gt;  &lt;div style="border-right:#3b7230 1px solid;padding-right:5px;border-top:#3b7230 1px solid;padding-left:5px;padding-bottom:5px;border-left:#3b7230 1px solid;padding-top:5px;border-bottom:#3b7230 1px solid;background-color:#ddffe3;"&gt;&lt;strong&gt;Code Formatter&lt;/strong&gt;     &lt;p&gt;This is a macro I modified that formats your javascript code to the way you like it. I have my own personal preferences like 2 space indents, lots of spaces in parameters, etc. The original web site is &lt;a href="http://jsbeautifier.org/" target="_blank"&gt;here&lt;/a&gt; and the original code of the script I can’t seem to find anymore. In any case here is my modified version of that code --&lt;/p&gt;    &lt;div style="border-right:black 1px solid;border-top:black 1px solid;overflow:auto;border-left:black 1px solid;width:800px;border-bottom:black 1px solid;height:200px;background-color:white;"&gt;     &lt;pre&gt;&lt;code&gt;&lt;font size="2"&gt;/*
 JS Beautifier
---------------
  $Date: 2008-10-15 05:08:05 +0300 (Wed, 15 Oct 2008) $
  $Revision: 67 $

  Written by Einars &amp;quot;elfz&amp;quot; Lielmanis, 
      &lt;a href="http://elfz.laacz.lv/beautify/"&gt;http://elfz.laacz.lv/beautify/&lt;/a&gt;&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;

    &lt;pre&gt;&lt;code&gt;&lt;font size="2"&gt;  Originally converted to javascript by Vital, 
      &lt;a href="http://my.opera.com/Vital/blog/2007/11/21/javascript-beautify-on-javascript-translated"&gt;http://my.opera.com/Vital/blog/2007/11/21/javascript-beautify-on-javascript-translated

&lt;/a&gt;  You are free to use this in any way you want, in case you find this useful or working for you.

  Usage:
    js_beautify(js_source_text);
*/

function js_beautify( js_source_text, indent_size, indent_character, indent_level )
{
  var input, output, token_text, last_type, last_text, last_word, current_mode, modes, indent_string;
  var whitespace, wordchar, punct, parser_pos, line_starters, in_case;
  var prefix, token_type, do_block_just_closed, var_line, var_line_tainted, if_line_flag;

  function trim_output()
  {
    while ( output.length &amp;amp;&amp;amp; ( output[ output.length - 1 ] === &amp;#39; &amp;#39; || output[ output.length - 1 ] === indent_string ) )
    {
      output.pop();
    }
  }

  function print_newline( ignore_repeated )
  {
    ignore_repeated = typeof ignore_repeated === &amp;#39;undefined&amp;#39; ? true: ignore_repeated;

    if_line_flag = false;
    trim_output();

    if ( !output.length )
    {
      return; // no newline on start of file
    }

    if ( output[ output.length - 1 ] !== &amp;quot;\n&amp;quot; || !ignore_repeated )
    {
      output.push( &amp;quot;\n&amp;quot; );
    }
    for ( var i = 0; i &amp;lt; indent_level; i++ )
    {
      output.push( indent_string );
    }
  }

  function print_space()
  {
    var last_output = output.length ? output[ output.length - 1 ] : &amp;#39; &amp;#39;;
    if ( last_output !== &amp;#39; &amp;#39; &amp;amp;&amp;amp; last_output !== &amp;#39;\n&amp;#39; &amp;amp;&amp;amp; last_output !== indent_string )
    {
      // prevent occassional duplicate space
      output.push( &amp;#39; &amp;#39; );
    }

    var last_output2 = output.length ? output[ output.length - 2 ] + last_output: &amp;#39;&amp;#39;;
    if ( last_output2 === &amp;quot;( &amp;quot; || last_output2 === &amp;quot;[ &amp;quot; )
    {
      //alert(output[output.length - 1]);
      // prevent space inbetween empty parans
      output.splice( output.length - 1, 1, &amp;#39;&amp;#39; );
    }
  }

  function print_token()
  {
    output.push( token_text );
  }

  function indent()
  {
    indent_level++;
  }

  function unindent()
  {
    if ( indent_level )
    {
      indent_level--;
    }
  }

  function remove_indent()
  {
    if ( output.length &amp;amp;&amp;amp; output[ output.length - 1 ] === indent_string )
    {
      output.pop();
    }
  }

  function set_mode( mode )
  {
    modes.push( current_mode );
    current_mode = mode;
  }

  function restore_mode()
  {
    do_block_just_closed = current_mode === &amp;#39;DO_BLOCK&amp;#39;;
    current_mode = modes.pop();
  }

  function in_array( what, arr )
  {
    for ( var i = 0; i &amp;lt; arr.length; i++ )
    {
      if ( arr[ i ] === what )
      {
        return true;
      }
    }
    return false;
  }

  function get_next_token()
  {
    var n_newlines = 0;
    var c = &amp;#39;&amp;#39;;

    do
    {
      if ( parser_pos &amp;gt;= input.length )
      {
        return [ &amp;#39;&amp;#39;, &amp;#39;TK_EOF&amp;#39; ];
      }
      c = input.charAt( parser_pos );

      parser_pos += 1;
      if ( c === &amp;quot;\n&amp;quot; )
      {
        n_newlines += 1;
      }
    }
    while ( in_array( c, whitespace ) );

    if ( n_newlines &amp;gt; 1 )
    {
      for ( var i = 0; i &amp;lt; 2; i++ )
      {
        print_newline( i === 0 );
      }
    }
    var wanted_newline = ( n_newlines === 1 );

    if ( in_array( c, wordchar ) )
    {
      if ( parser_pos &amp;lt; input.length )
      {
        while ( in_array( input.charAt( parser_pos ), wordchar ) )
        {
          c += input.charAt( parser_pos );
          parser_pos += 1;
          if ( parser_pos === input.length )
          {
            break;
          }
        }
      }

      // small and surprisingly unugly hack for 1E-10 representation
      if ( parser_pos !== input.length &amp;amp;&amp;amp; c.match( /^[0-9]+[Ee]$/ ) &amp;amp;&amp;amp; input.charAt( parser_pos ) === &amp;#39;-&amp;#39; )
      {
        parser_pos += 1;

        var t = get_next_token( parser_pos );
        c += &amp;#39;-&amp;#39; + t[ 0 ];
        return [ c, &amp;#39;TK_WORD&amp;#39; ];
      }

      if ( c === &amp;#39;in&amp;#39; )
      {
        // hack for &amp;#39;in&amp;#39; operator
        return [ c, &amp;#39;TK_OPERATOR&amp;#39; ];
      }
      if ( wanted_newline &amp;amp;&amp;amp; last_type !== &amp;#39;TK_OPERATOR&amp;#39; &amp;amp;&amp;amp; !if_line_flag )
      {
        print_newline();
      }
      return [ c, &amp;#39;TK_WORD&amp;#39; ];
    }

    if ( c === &amp;#39;(&amp;#39; || c === &amp;#39;[&amp;#39; )
    {
      return [ c, &amp;#39;TK_START_EXPR&amp;#39; ];
    }

    if ( c === &amp;#39;{&amp;#39; )
    {
      return [ c, &amp;#39;TK_START_PARAN&amp;#39; ];
    }

    if ( c === &amp;#39;)&amp;#39; || c === &amp;#39;]&amp;#39; )
    {
      return [ c, &amp;#39;TK_END_EXPR&amp;#39; ];
    }

    if ( c === &amp;#39;{&amp;#39; )
    {
      return [ c, &amp;#39;TK_START_BLOCK&amp;#39; ];
    }

    if ( c === &amp;#39;}&amp;#39; )
    {
      return [ c, &amp;#39;TK_END_BLOCK&amp;#39; ];
    }

    if ( c === &amp;#39;;&amp;#39; )
    {
      return [ c, &amp;#39;TK_SEMICOLON&amp;#39; ];
    }

    if ( c === &amp;#39;/&amp;#39; )
    {
      var comment = &amp;#39;&amp;#39;;
      // peek for comment /* ... */
      if ( input.charAt( parser_pos ) === &amp;#39;*&amp;#39; )
      {
        parser_pos += 1;
        if ( parser_pos &amp;lt; input.length )
        {
          while ( ! ( input.charAt( parser_pos ) === &amp;#39;*&amp;#39; &amp;amp;&amp;amp; input.charAt( parser_pos + 1 ) &amp;amp;&amp;amp; input.charAt( parser_pos + 1 ) === &amp;#39;/&amp;#39; ) &amp;amp;&amp;amp; parser_pos &amp;lt; input.length )
          {
            comment += input.charAt( parser_pos );
            parser_pos += 1;
            if ( parser_pos &amp;gt;= input.length )
            {
              break;
            }
          }
        }
        parser_pos += 2;
        return [ &amp;#39;/*&amp;#39; + comment + &amp;#39;*/&amp;#39;, &amp;#39;TK_BLOCK_COMMENT&amp;#39; ];
      }
      // peek for comment // ...
      if ( input.charAt( parser_pos ) === &amp;#39;/&amp;#39; )
      {
        comment = c;
        while ( input.charAt( parser_pos ) !== &amp;quot;\x0d&amp;quot; &amp;amp;&amp;amp; input.charAt( parser_pos ) !== &amp;quot;\x0a&amp;quot; )
        {
          comment += input.charAt( parser_pos );
          parser_pos += 1;
          if ( parser_pos &amp;gt;= input.length )
          {
            break;
          }
        }
        parser_pos += 1;
        if ( wanted_newline )
        {
          print_newline();
        }
        return [ comment, &amp;#39;TK_COMMENT&amp;#39; ];
      }

    }

    if ( c === &amp;quot;&amp;#39;&amp;quot; || // string
    c === &amp;#39;&amp;quot;&amp;#39; || // string
    ( c === &amp;#39;/&amp;#39; &amp;amp;&amp;amp; ( ( last_type === &amp;#39;TK_WORD&amp;#39; &amp;amp;&amp;amp; last_text === &amp;#39;return&amp;#39; ) || ( last_type === &amp;#39;TK_START_EXPR&amp;#39; || last_type === &amp;#39;TK_END_BLOCK&amp;#39; || last_type === &amp;#39;TK_OPERATOR&amp;#39; || last_type === &amp;#39;TK_EOF&amp;#39; || last_type === &amp;#39;TK_SEMICOLON&amp;#39; ) ) ) )
    {
      // regexp
      var sep = c;
      var esc = false;
      var resulting_string = &amp;#39;&amp;#39;;

      if ( parser_pos &amp;lt; input.length )
      {

        while ( esc || input.charAt( parser_pos ) !== sep )
        {
          resulting_string += input.charAt( parser_pos );
          if ( !esc )
          {
            esc = input.charAt( parser_pos ) === &amp;#39;\\&amp;#39;;
          }
          else
          {
            esc = false;
          }
          parser_pos += 1;
          if ( parser_pos &amp;gt;= input.length )
          {
            break;
          }
        }

      }

      parser_pos += 1;

      resulting_string = sep + resulting_string + sep;

      if ( sep == &amp;#39;/&amp;#39; )
      {
        // regexps may have modifiers /regexp/MOD , so fetch those, too
        while ( parser_pos &amp;lt; input.length &amp;amp;&amp;amp; in_array( input.charAt( parser_pos ), wordchar ) )
        {
          resulting_string += input.charAt( parser_pos );
          parser_pos += 1;
        }
      }
      return [ resulting_string, &amp;#39;TK_STRING&amp;#39; ];
    }

    if ( in_array( c, punct ) )
    {
      while ( parser_pos &amp;lt; input.length &amp;amp;&amp;amp; in_array( c + input.charAt( parser_pos ), punct ) )
      {
        c += input.charAt( parser_pos );
        parser_pos += 1;
        if ( parser_pos &amp;gt;= input.length )
        {
          break;
        }
      }
      return [ c, &amp;#39;TK_OPERATOR&amp;#39; ];
    }

    return [ c, &amp;#39;TK_UNKNOWN&amp;#39; ];
  }

  //----------------------------------
  indent_character = indent_character || &amp;#39; &amp;#39;;
  indent_size = indent_size || 4;

  indent_string = &amp;#39;&amp;#39;;
  while ( indent_size-- )
  {
    indent_string += indent_character;
  }

  input = js_source_text;

  last_word = &amp;#39;&amp;#39;; // last &amp;#39;TK_WORD&amp;#39; passed
  last_type = &amp;#39;TK_START_EXPR&amp;#39;; // last token type
  last_text = &amp;#39;&amp;#39;; // last token text
  output = [];

  do_block_just_closed = false;
  var_line = false;
  var_line_tainted = false;

  whitespace = &amp;quot;\n\r\t &amp;quot;.split( &amp;#39;&amp;#39; );
  wordchar = &amp;#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_$&amp;#39;.split( &amp;#39;&amp;#39; );
  punct = &amp;#39;+ - * / % &amp;amp; ++ -- = += -= *= /= %= == === != !== &amp;gt; &amp;lt; &amp;gt;= &amp;lt;= &amp;gt;&amp;gt; &amp;lt;&amp;lt; &amp;gt;&amp;gt;&amp;gt; &amp;gt;&amp;gt;&amp;gt;= &amp;gt;&amp;gt;= &amp;lt;&amp;lt;= &amp;amp;&amp;amp; &amp;amp;= | || ! !! , : ? ^ ^= |= ::&amp;#39;.split( &amp;#39; &amp;#39; );

  // words which should always start on new line.
  line_starters = &amp;#39;continue,try,throw,return,var,else,if,switch,case,default,for,while,break,function&amp;#39;.split( &amp;#39;,&amp;#39; );

  // states showing if we are currently in expression (i.e. &amp;quot;if&amp;quot; case) - &amp;#39;EXPRESSION&amp;#39;, or in usual block (like, procedure), &amp;#39;BLOCK&amp;#39;.
  // some formatting depends on that.
  current_mode = &amp;#39;BLOCK&amp;#39;;
  modes = [ current_mode ];

  indent_level = indent_level || 0;
  parser_pos = 0; // parser position
  in_case = false; // flag for parser that case/default has been processed, and next colon needs special attention
  while ( true )
  {
    var t = get_next_token( parser_pos );
    token_text = t[ 0 ];
    token_type = t[ 1 ];
    if ( token_type === &amp;#39;TK_EOF&amp;#39; )
    {
      break;
    }

    switch ( token_type )
    {

    case &amp;#39;TK_START_PARAN&amp;#39;:
      print_newline();
      print_token();
      print_newline();
      indent();
      break;

    case &amp;#39;TK_START_EXPR&amp;#39;:
      var_line = false;
      set_mode( &amp;#39;EXPRESSION&amp;#39; );
      if ( last_type === &amp;#39;TK_END_EXPR&amp;#39; || last_type === &amp;#39;TK_START_EXPR&amp;#39; )
      {
        // do nothing on (( and )( and ][ and ]( ..
      }
      else if ( last_type !== &amp;#39;TK_WORD&amp;#39; &amp;amp;&amp;amp; last_type !== &amp;#39;TK_OPERATOR&amp;#39; )
      {
        print_space();
      }
      else if ( in_array( last_word, line_starters ) &amp;amp;&amp;amp; last_word !== &amp;#39;function&amp;#39; )
      {
        print_space();
      }
      print_token();
      print_space();
      break;

    case &amp;#39;TK_END_EXPR&amp;#39;:
      print_space();
      print_token();
      restore_mode();
      break;

    case &amp;#39;TK_START_BLOCK&amp;#39;:

      if ( last_word === &amp;#39;do&amp;#39; )
      {
        set_mode( &amp;#39;DO_BLOCK&amp;#39; );
      }
      else
      {
        set_mode( &amp;#39;BLOCK&amp;#39; );
      }
      if ( last_type !== &amp;#39;TK_OPERATOR&amp;#39; &amp;amp;&amp;amp; last_type !== &amp;#39;TK_START_EXPR&amp;#39; )
      {
        if ( last_type === &amp;#39;TK_START_BLOCK&amp;#39; )
        {
          print_newline();
        }
        else
        {
          print_space();
        }
      }
      print_token();
      indent();
      break;

    case &amp;#39;TK_END_BLOCK&amp;#39;:
      if ( last_type === &amp;#39;TK_START_BLOCK&amp;#39; )
      {
        // nothing
        trim_output();
        unindent();
      }
      else
      {
        unindent();
        print_newline();
      }
      print_token();
      restore_mode();
      break;

    case &amp;#39;TK_WORD&amp;#39;:

      if ( do_block_just_closed )
      {
        print_space();
        print_token();
        print_space();
        break;
      }

      if ( token_text === &amp;#39;case&amp;#39; || token_text === &amp;#39;default&amp;#39; )
      {
        if ( last_text === &amp;#39;:&amp;#39; )
        {
          // switch cases following one another
          remove_indent();
        }
        else
        {
          // case statement starts in the same line where switch
          unindent();
          print_newline();
          indent();
        }
        print_token();
        in_case = true;
        break;
      }

      prefix = &amp;#39;NONE&amp;#39;;
      if ( last_type === &amp;#39;TK_END_BLOCK&amp;#39; )
      {
        if ( !in_array( token_text.toLowerCase(), [ &amp;#39;else&amp;#39;, &amp;#39;catch&amp;#39;, &amp;#39;finally&amp;#39; ] ) )
        {
          prefix = &amp;#39;NEWLINE&amp;#39;;
        }
        else
        {
          prefix = &amp;#39;SPACE&amp;#39;;
          print_space();
        }
      }
      else if ( last_type === &amp;#39;TK_SEMICOLON&amp;#39; &amp;amp;&amp;amp; ( current_mode === &amp;#39;BLOCK&amp;#39; || current_mode === &amp;#39;DO_BLOCK&amp;#39; ) )
      {
        prefix = &amp;#39;NEWLINE&amp;#39;;
      }
      else if ( last_type === &amp;#39;TK_SEMICOLON&amp;#39; &amp;amp;&amp;amp; current_mode === &amp;#39;EXPRESSION&amp;#39; )
      {
        prefix = &amp;#39;SPACE&amp;#39;;
      }
      else if ( last_type === &amp;#39;TK_STRING&amp;#39; )
      {
        prefix = &amp;#39;NEWLINE&amp;#39;;
      }
      else if ( last_type === &amp;#39;TK_WORD&amp;#39; )
      {
        prefix = &amp;#39;SPACE&amp;#39;;
      }
      else if ( last_type === &amp;#39;TK_START_BLOCK&amp;#39; )
      {
        prefix = &amp;#39;NEWLINE&amp;#39;;
      }
      else if ( last_type === &amp;#39;TK_END_EXPR&amp;#39; )
      {
        print_space();
        prefix = &amp;#39;NEWLINE&amp;#39;;
      }

      if ( last_type !== &amp;#39;TK_END_BLOCK&amp;#39; &amp;amp;&amp;amp; in_array( token_text.toLowerCase(), [ &amp;#39;else&amp;#39;, &amp;#39;catch&amp;#39;, &amp;#39;finally&amp;#39; ] ) )
      {
        print_newline();
      }
      else if ( in_array( token_text, line_starters ) || prefix === &amp;#39;NEWLINE&amp;#39; )
      {
        if ( last_text === &amp;#39;else&amp;#39; )
        {
          // no need to force newline on else break
          print_space();
        }
        else if ( ( last_type === &amp;#39;TK_START_EXPR&amp;#39; || last_text === &amp;#39;=&amp;#39; ) &amp;amp;&amp;amp; token_text === &amp;#39;function&amp;#39; )
        {
          // no need to force newline on &amp;#39;function&amp;#39;: (function
          // DONOTHING
        }
        else if ( last_type === &amp;#39;TK_WORD&amp;#39; &amp;amp;&amp;amp; ( last_text === &amp;#39;return&amp;#39; || last_text === &amp;#39;throw&amp;#39; ) )
        {
          // no newline between &amp;#39;return nnn&amp;#39;
          print_space();
        }
        else if ( last_type !== &amp;#39;TK_END_EXPR&amp;#39; )
        {
          if ( ( last_type !== &amp;#39;TK_START_EXPR&amp;#39; || token_text !== &amp;#39;var&amp;#39; ) &amp;amp;&amp;amp; last_text !== &amp;#39;:&amp;#39; )
          {
            // no need to force newline on &amp;#39;var&amp;#39;: for (var x = 0...)
            if ( token_text === &amp;#39;if&amp;#39; &amp;amp;&amp;amp; last_type === &amp;#39;TK_WORD&amp;#39; &amp;amp;&amp;amp; last_word === &amp;#39;else&amp;#39; )
            {
              // no newline for } else if {
              print_space();
            }
            else
            {
              print_newline();
            }
          }
        }
        else
        {
          if ( in_array( token_text, line_starters ) &amp;amp;&amp;amp; last_text !== &amp;#39;)&amp;#39; )
          {
            print_newline();
          }
        }
      }
      else if ( prefix === &amp;#39;SPACE&amp;#39; )
      {
        print_space();
      }
      print_token();
      last_word = token_text;

      if ( token_text === &amp;#39;var&amp;#39; )
      {
        var_line = true;
        var_line_tainted = false;
      }

      if ( token_text === &amp;#39;if&amp;#39; || token_text === &amp;#39;else&amp;#39; )
      {
        if_line_flag = true;
      }

      break;

    case &amp;#39;TK_SEMICOLON&amp;#39;:

      print_token();
      var_line = false;
      break;

    case &amp;#39;TK_STRING&amp;#39;:

      if ( last_type === &amp;#39;TK_START_BLOCK&amp;#39; || last_type === &amp;#39;TK_END_BLOCK&amp;#39; || last_type == &amp;#39;TK_SEMICOLON&amp;#39; )
      {
        print_newline();
      }
      else if ( last_type === &amp;#39;TK_WORD&amp;#39; )
      {
        print_space();
      }
      print_token();
      break;

    case &amp;#39;TK_OPERATOR&amp;#39;:

      var start_delim = true;
      var end_delim = true;
      if ( var_line &amp;amp;&amp;amp; token_text !== &amp;#39;,&amp;#39; )
      {
        var_line_tainted = true;
        if ( token_text === &amp;#39;:&amp;#39; )
        {
          var_line = false;
        }
      }

      if ( token_text === &amp;#39;:&amp;#39; &amp;amp;&amp;amp; in_case )
      {
        print_token(); // colon really asks for separate treatment
        print_newline();
        break;
      }

      if ( token_text === &amp;#39;::&amp;#39; )
      {
        // no spaces around exotic namespacing syntax operator
        print_token();
        break;
      }

      in_case = false;

      if ( token_text === &amp;#39;,&amp;#39; )
      {
        if ( var_line )
        {
          if ( var_line_tainted )
          {
            print_token();
            print_newline();
            var_line_tainted = false;
          }
          else
          {
            print_token();
            print_space();
          }
        }
        else if ( last_type === &amp;#39;TK_END_BLOCK&amp;#39; )
        {
          print_token();
          print_newline();
        }
        else
        {
          if ( current_mode === &amp;#39;BLOCK&amp;#39; )
          {
            print_token();
            print_newline();
          }
          else
          {
            // EXPR od DO_BLOCK
            print_token();
            print_space();
          }
        }
        break;
      }
      else if ( token_text === &amp;#39;--&amp;#39; || token_text === &amp;#39;++&amp;#39; )
      {
        // unary operators special case
        if ( last_text === &amp;#39;;&amp;#39; )
        {
          // space for (;; ++i)
          start_delim = true;
          end_delim = false;
        }
        else
        {
          start_delim = false;
          end_delim = false;
        }
      }
      else if ( token_text === &amp;#39;!&amp;#39; &amp;amp;&amp;amp; last_type === &amp;#39;TK_START_EXPR&amp;#39; )
      {
        // special case handling: if (!a)
        start_delim = false;
        end_delim = false;
      }
      else if ( last_type === &amp;#39;TK_OPERATOR&amp;#39; )
      {
        start_delim = false;
        end_delim = false;
      }
      else if ( last_type === &amp;#39;TK_END_EXPR&amp;#39; )
      {
        start_delim = true;
        end_delim = true;
      }
      else if ( token_text === &amp;#39;.&amp;#39; )
      {
        // decimal digits or object.property
        start_delim = false;
        end_delim = false;

      }
      else if ( token_text === &amp;#39;:&amp;#39; )
      {
        // zz: xx
        // can&amp;#39;t differentiate ternary op, so for now it&amp;#39;s a ? b: c; without space before colon
        if ( last_text.match( /^\d+$/ ) )
        {
          // a little help for ternary a ? 1 : 0;
          start_delim = true;
        }
        else
        {
          start_delim = false;
        }
      }
      if ( start_delim )
      {
        print_space();
      }

      print_token();

      if ( end_delim )
      {
        print_space();
      }
      break;

    case &amp;#39;TK_BLOCK_COMMENT&amp;#39;:

      print_newline();
      print_token();
      print_newline();
      break;

    case &amp;#39;TK_COMMENT&amp;#39;:

      // print_newline();
      print_space();
      print_token();
      print_newline();
      break;

    case &amp;#39;TK_UNKNOWN&amp;#39;:
      print_token();
      break;
    }

    last_type = token_type;
    last_text = token_text;
  }

  return output.join( &amp;#39;&amp;#39; );

}

komodo.assertMacroVersion( 2 );
if ( komodo.view.scintilla )
{
  komodo.view.scintilla.focus();
} // bug 67103
var ke = ko.views.manager.currentView.scimoz;
var formatter;
var language = komodo.document.language;
var encode = &amp;#39; -utf8&amp;#39;;
switch ( language )
{
case &amp;#39;Perl&amp;#39;:
  formatter = &amp;#39;perltidy&amp;#39;;
  break;
case &amp;#39;PHP&amp;#39;:
  formatter = &amp;#39;/opt/local/bin/php_beautifier -s4 -l&amp;quot;Pear()&amp;quot;&amp;#39;;
  //formatter = &amp;#39;/opt/local/bin/php-beautify&amp;#39;;
  break;
case &amp;#39;JavaScript&amp;#39;:
  formatter = &amp;#39;internal&amp;#39;;
  break;
case &amp;#39;XML&amp;#39;:
case &amp;#39;XUL&amp;#39;:
case &amp;#39;XLST&amp;#39;:
  formatter = &amp;#39;tidy -q -xml -i -w 100&amp;#39; + encode;
  break;
case &amp;#39;HTML&amp;#39;:
  formatter = &amp;#39;tidy -q -asxhtml -i -w 100&amp;#39; + encode;
  break;
default:
  alert( &amp;quot;I don&amp;#39;t know how to tidy &amp;quot; + language );
  exit( 1 );
}

//save current cursor position
var currentPos = ke.currentPos;

try
{
  // Save the file.  After the operation you can check what changes where made by
  // File -&amp;gt; Show Unsaved Changes
  //ko.commands.doCommand(&amp;#39;cmd_save&amp;#39;);
  // Group operations into a single undo
  ke.beginUndoAction();

  // Select entire buffer &amp;amp; pipe it into formatter.
  ko.commands.doCommand( &amp;#39;cmd_selectAll&amp;#39; );

  if ( formatter === &amp;#39;internal&amp;#39; )
  {
    ke.replaceSel( js_beautify( ke.selText, 1, &amp;#39;\t&amp;#39;, 0 ) );
  }
  else
  {
    ko.run.runEncodedCommand( window, formatter + &amp;quot; {&amp;#39;insertOutput&amp;#39;: True, &amp;#39;operateOnSelection&amp;#39;: True}&amp;quot; );
  }

  // Restore cursor.  It will be close to the where it started depending on how the text was modified.
  ke.gotoPos( currentPos );
} catch( e )
{
  alert( e );
} finally
{
  // On windows, when the output of a command is inserted into an edit buffer it has unix line ends.
  ko.commands.doCommand( &amp;#39;cmd_cleanLineEndings&amp;#39; );

  // Must end undo action or may corrupt edit buffer
  ke.endUndoAction();
}&lt;/font&gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;In the toolbox select to add a macro and just dump the above code into the macro text box and that should do it.&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4988" width="1" height="1"&gt;</description></item><item><title>BSG</title><link>http://blogs.no-ip.org/flyover/bsg.aspx</link><pubDate>Sun, 22 Mar 2009 01:51:34 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4891</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Watched the finale of BSG last night. What an incredibly lame ending. They found a second Earth a million light years distant from the last one they found? It’s inhabited with proto humanoid species with uh the same DNA as the surviving humans? Oh man &amp;lt;groan&amp;gt;.. come on.. what happened to good writing. They painted themselves into a corner and just threw a half honest effort to get on to their new jobs. Is it me getting older and expecting better writing or has writing just gotten worse through the years? I think one solution is to limit these shows to mini-series formats, 3-5 shows and it’s over. Sitcoms are really the only vehicles that can handle multiple seasons. Even then it’s usually takes a herculean effort to keep those shows from getting stale after a couple of seasons. Usually those devolve into serious dramas to save the last season. &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4891" width="1" height="1"&gt;</description></item><item><title>Jon Stewart rips Jim Cramer a new one</title><link>http://blogs.no-ip.org/flyover/jon-stewart-rips-jim-cramer-a-new-one.aspx</link><pubDate>Fri, 13 Mar 2009 04:33:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4841</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Wow.. just finished watching Jon Stewart rip Jim Cramer on TV. This week Jon Stewart decided to show viewers what he thinks of CNBC and the rest of the financial &amp;quot;news&amp;quot; tv networks. It went back and forth. They claimed he was cherry picking clips from the show, Stewart explained that he likes to call it turd mining. Finally tonite he had Jim Cramer on, one of the bigger &amp;quot;stars&amp;quot; on CNBC and the one who had been the most outspoken critic of what Stewart was claiming. I thought it would be like any other show and Jon Stewart would get a few jabs in there but throw a few lighthearted deprecating jokes in there to keep things &amp;quot;comedic&amp;quot;. No nothing like that. I watched as Jon Stewart reduced Mad Cramer almost to tears as he tried to defend himself. Yes it was uncomfortable to watch but you know what it was one of the most amazing TV journalistic efforts I think I&amp;#39;ve ever seen. Not since Mike Wallace in the 1970s was able to provoke fear in wrong doers have I seen anything like it. I thought those days were long gone. Can you believe it -- the only TV journalist left is a comedian who&amp;#39;s show follows puppets that make crank calls. I hope Katie Couric was taking notes on how it&amp;#39;s suppose to be done. I may be a biased since I do watch Jon Stewart&amp;#39;s show regularly but hey bravo Jon Stewart! Keep up the good work!&lt;/p&gt;
&lt;p&gt;Also bravo to Chris for somehow keeping this complicated blog going. Took me 20 minutes to figure out how to make this post...lol.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4841" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/jon+stewart+journalism+cramer/default.aspx">jon stewart journalism cramer</category></item><item><title>Posting from Windows 7 beta</title><link>http://blogs.no-ip.org/flyover/posting-from-windows-7-beta.aspx</link><pubDate>Sun, 11 Jan 2009 22:30:48 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4769</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Just got Windows 7 beta installed on a separate partition. Downloaded it from MSDN. So far so good. Has the same look as Vista but much improved. I can’t believe how much more stable this is that crappy Vista and this is a beta build! Goes to show you I guess. Anyway the new windows taskbar is kind of fun to play with, I’m not so sure if I’d go so far as to it’s more useful because practically it’s not really. But it does look cooler. Kind of reminds of some of the linux taskbars in a way. Then again most of Windows 7/Vista has incorporated some linux UI elements. That’s ok in my mind. Best of breed is fine. &lt;/p&gt;  &lt;p&gt;I installed Firefox and WinRar without any issues. Will install MS Office, Nero and few other necessary items. I’ll leave the antivirus and firewall apps until later when I feel brave. I have a feeling those aren’t going to go smoothly since they fiddle with the OS underneath. I expect they won’t find what they are looking for and end up abending.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4769" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/windows+7+beta/default.aspx">windows 7 beta</category></item><item><title>Vista, I want to love you but I can't...</title><link>http://blogs.no-ip.org/flyover/vista-i-want-to-love-you-but-i-can-t.aspx</link><pubDate>Wed, 19 Nov 2008 01:54:13 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4706</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Well I tried Vista again. This time it came pre-installed on my Dell desktop pc I bought from them last month. It started out kind of fun, it worked like a champ in many respects. I learned where everything was, started tweaking it little by little, being careful to not do anything drastic like install beta drivers or software. Then the evil started creeping in. First MS wanted to install a Windows update a week ago, which I did like a good Windows users. It asked to reboot. Came back up and lo and behold, my onboard video driver would not load, Windows complained that it was unrecognized. Well I have a PCI video card for my video so I figured so what, not using it anyway. So I left my pc on overnight and came back the next day to use and it was in hibernation mode and I couldn&amp;#39;t recover from it. Why is a desktop set up for hibernation anyway? Nothing would bring it back, so I had to hard reboot it. I figured well I better stop that from happening. I looked and looked, nowhere could I find the setting to stop hibernation. Turns out the only way to turn it off is through an arcane command you have to enter through the command prompt. Wow. Ok, whatever. Then last Friday I worked from home and experienced 5 BSOD&amp;#39;s!! WTF?! Could it be the failed video driver causing it? I hurriedly tried to back out the MS update but there was nothing in it about a updating a video driver. So I installed the Dell driver from the CD that came with the computer. Still BSOD&amp;#39;s persisted. Also every time I came back to my pc after a few hours away, my internet connection was gone but the LAN connection was good. Geez. Did some searching on that, tried all kinds of things. Once again some arcane command line entry to turn off Windows network auto tuning. Then after that, another BSOD for good measure. Enough Vista, you maybe hot in bed but damn you are not a good friend. Goodbye forever, let me know when you sister Windows 7 is old enough to drive :D&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4706" width="1" height="1"&gt;</description></item><item><title>A million first grade teachers just cried</title><link>http://blogs.no-ip.org/flyover/a-million-first-grade-teachers-just-cried.aspx</link><pubDate>Tue, 04 Nov 2008 03:33:39 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4675</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Read the headlines of this &lt;a href="http://www.reuters.com/article/rbssFinancialServicesAndRealEstateNews/idUSN0336161920081104" target="_blank"&gt;article&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;This is a test of the Windows Live Writer that &lt;a href="http://fractalnavel.no-ip.org/" target="_blank"&gt;Chris&lt;/a&gt; has been pestering me to start using. I have to agree, this is a very nice tool. Thanks Chris!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4675" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/live+writer/default.aspx">live writer</category></item><item><title>Wall of shame</title><link>http://blogs.no-ip.org/flyover/wall-of-shame.aspx</link><pubDate>Sat, 25 Oct 2008 03:25:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4647</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Nettie and K are in Chicago tonite and tommorow. I decided to make a fire, pick up some Chinese food and watch season 2 of Secret Diary of a Call Girl. I went to pick up my hot braised chicken at Hunan Express and noticed their Wall of Shame. Basically it&amp;#39;s a list on the wall of all the people that ripped them off. I read a few of them but didn&amp;#39;t recognize any of them. What a great way to discourage people from passing bad checks. Season 2 turned out to be not as good as season 1. I guess the newness wore off. The writing kind of got stale and well Billy Piper is um British looking &lt;img src="http://blogs.no-ip.org/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4647" width="1" height="1"&gt;</description></item><item><title>TV shows sucking as of late</title><link>http://blogs.no-ip.org/flyover/tv-shows-sucking-as-of-late.aspx</link><pubDate>Mon, 13 Oct 2008 12:18:00 GMT</pubDate><guid isPermaLink="false">0511061e-8795-4252-a46c-8c82d1f16065:4614</guid><dc:creator>Craig</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I gave up on two promising tv shows this week. Heroes and Fringe. Heroes had a great first season or two. But now it&amp;#39;s obvious the writers have no idea where to take the story or the characters. Rehashing the same storyline (save the future - time travel) and turning bad characters into good and good ones into bad. Dumb.&amp;nbsp;&lt;/p&gt;&lt;p&gt;Fringe looked to be the next X-Files but I seriously can&amp;#39;t stand any of the characters in that show. The lead girl isn&amp;#39;t even that great looking.&amp;nbsp; At least give me some eye candy! :) I wish all of them, with the mad scientist&amp;#39;s son leading them, would walk into spinning helicopter blades. &lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.no-ip.org/aggbug.aspx?PostID=4614" width="1" height="1"&gt;</description><category domain="http://blogs.no-ip.org/flyover/archive/tags/tv/default.aspx">tv</category></item></channel></rss>