she swears <i>geek</i> is a term of endearment

Supporting IE6 – How much does this cost?

June 30th, 2009 Rusty

While it may astound many developers that IE6 is still a popular browser, when you segment your audience with an industry heavy in compliance bureaucracy and political overhead, you find users who are not able to upgrade their office computers.  Their IT department is understaffed and conditioned to resist any innovation that might introduce more work for them.  Thus, you’re stuck supporting an ancient, inferior browser and you are forced to continue to code everything twice – once for modern, standards compliant browsers; once for IE6.  While this is an improvement over times past, its still a legacy behavior that costs real money to business.  How much?  That’s hard to quantify. 

Some deductive cost analysis

Let’s tally up the time it takes me to test a new feature against IE6.  This is an isolated development activity that does not take into account the cost of configuring and maintaining a virtual machine that hosts IE6.  It takes for granted the cost of software licensing necessary to keep an IE6 OS around and to run it.  I am using VMWare so hardware is negligible.  However, you could also include the cost of hardware for a machine that hosts IE6.  There are images available for virtual pc but these are getting harder to find and they expire regularly.  Microsoft wants us to move forward and they make it hard to hold back on upgrading IE6.  Nonetheless, businesses allow their IT departments to shackle their employees because anything that involves IT carries IT costs.  Its a viscous cycle of lock down followed by immobility but that’s outside the scope of my current point. 

I waited for 20 minutes while my IE6 Virtual Machine booted up.  In order to test against my development server, I have to run two Windows virtual machines simultaneously and that pretty much slows the system to a crawl.

To access my server from my IE6 machine, I had to reconfigure my network settings to use bridged networking.  This took another ten minutes before it would connect.  Though my settings were correct, I still couldn’t access the website on my dev server VM.  I had to close down my browsers and try again.  35 minutes into my activity, I am still trying to bring up the page to see how it displays!  Finally, the page loaded correctly. At first, I was very excited to see a perfect page.  Then I realized it was firefox.  I try to limit my risk variables when troubleshooting.  On to IE6, then.

I’ve gotten very good at fixing IE6 issues.  When I brought up the page, it was a disaster.  I quickly identified that my “overflow” was not working and Googled the solution: a fixed width on the overflow container.  jQuery then took care of the rest.  I love that library!  Finally, I had a png file that was being manipulated by the iepngfix behavior so I dumped that.  If I am going to support IE6, its buh bye to png transparency for now.  The pngfix was f’ing up the size of the img.  Sure, I could have specified a fixed height and width on the img tag but that’s so old school. 

About an hour per IE6 page

Sure, this is an isolated and unique event but I think its probably pretty close.  Today I was held up getting the environment running but the fixes were easy.  Tomorrow I won’t have to jump through hoops but the fixes may take longer.  I would be willing to bet that for each page that needs to support IE6, add an hour of work.  Have 100 pages to work through?  100 hours.  At a hip shot rate of $100/hr for average salaried developers and you see that IE6 gets expensive (that is a $10,000 non feature).  It also holds up progress and innovation and lowers moral but focus on what’s important: its expensive.  Again, I am just shooting from the hip on that cost, its most likely much, much higher.

I look forward to the day when I have a systems admin working for me who resists doing his job to keep software current and useful while at the same time refusing to let user serve themselves.  I will have years of pent up frustration to present him or her with.  I hope I am in a pleasant enough mood to find the levity in it.

SEO Class Update

June 9th, 2009 Rusty

I probably should have mentioned this before but I am no longer participating in the WinAtl SEO Training Class in Atlanta.  John and I had scheduling issues such that we could not execute the class as a team.  John Sherrod is going to handle that endeavor, solo, and I am going to pursue training in technology as well.  I will be presenting at the Microsoft Asp.Net User Group in the fall (October 5th, I believe).  The topic will be Search Engine Optimization for Dynamic Websites.

I’ve had a number of people ask me about the class.  It is still on (I believe) and there is still space.  Meanwhile, I am considering a more generic SEO training for those people who are interested.  My concept is really a more of a technical execution training in search optimization for developers and website designers.  Website owners are also welcome if they edit their own content either via CMS or old fashioned Html code.  I may also prepare a webinar session as well.  In addition, I would like to teach iPhone development.  I will be the moderator for the Atlanta iPhone and iTouch Developers User Group and feel there is a huge need for some instructor led training in iPhone development.  With the price drop to $99, its an even more compelling platform!

If you were considering the WinAtl class, go sign up!  John is the cat’s pajamas in Search and I’ll be more than willing to help you and him in any way that I can. 

Curl beeps at me and displays binary on Mac Terminal

June 5th, 2009 Rusty

I went through the very arduous, yet somehow rewarding, experience of building MySQL from scratch on my Mac.
This article explains how and why you might want to install mysql from source on mac os x.
I then finished, went to bed, and this morning decided to use my own Mac (rather than the family mac, ie: my wife’s), and found I had no MySQL. Drat!. Alright, second time is easier, right?

Beep, beep, beep, beep… FAIL

One of the steps required is to use curl to bring down the source.  The first time through, I entered the command as instructed

curl -O http://mysql.he.net/Downloads/MySQL-5.1/mysql-5.1.33.tar.gz

Strange, alien looking glyphs flash past the green themed terminal screen while the computer beeps repeatedly.  I had a hard time finding any reference as to why this might be happening.  I finally gave up, downloaded using Safari, copied manually, and skipped curl.  Today, I was determined to discover the cause.

In reviewing the options, I found an argument to send output to a file rather than the terminal window or STOUT.  That did the trick!  In addition, I added the “progress bar” argument so I had something to watch.

curl -0 http://mysql.he.net/Downloads/MySQL-5.1/mysql-5.1.35.tar.gz -o mysql-5.1.35.tar.gz -#

curl -0 http://mysql.he.net/Downloads/MySQL-5.1/mysql-5.1.35.tar.gz -o mysql-5.1.35.tar.gz -# 

I am now dangerous with curl.  Hope this helps some other Windows defector

Google is not responding

May 14th, 2009 Rusty

While I’ve encountered the rare error while using Google, this is the first time I’ve ever been unable to access multiple Google services at all.  Right now, GMail, Google Search, Analytics, you name it, are all unavailable. 

I released a pretty large sitemap last night for OckhamResearch.com.  I hope these two events are not related.  If so, Google should be done eating my sitemap in a little while and things will be back to normal.  I, of course, apologize for any inconvenience.

Old School Website Techniques

May 14th, 2009 Rusty

For all the world, building a sitemap page for my website feels like growing a mullet might.  As websites become more complex and sophisticated, intuitive navigation and effective search seem like they would eliminate the need and diminish the value of an html sitemap.  Nonetheless, it has repeatedly been brought to my attention that a comprehensive sitemap can have measurable benefits on your website and its an easy thing to do.

The popular advice is that you don’t even need to format it for users as much as represent all your links.  I went ahead and made it pretty (as pretty as a giant web page could be).

http://www.ockhamresearch.com/sitemap.html

Announcing Search Engine Optimization (SEO) training for Small Business in Atlanta, GA

May 14th, 2009 Rusty

On June 13th, 2009, Win Atl launches a new kind of SEO training in Atlanta, GA.

The class is specifically designed for the semi-technical Small Business Owner (ie:you manage your own small business website) with emphasis on real world, cost-effective results. During the three hour course, instructors will guide you as you enhance your own website, practicing the techniques learned immediately for measurable, qualified traffic results. You leave the class with knowledge, reinforced by doing, and the tools you need to succeed in search marketing on a small business budget.

The class is $265 with a 10% discount for anyone signing up before June 1st. Sorry, but the class is only open to business owners, no marketing or other company representatives will be accepted.

The class will  be taught by myself and John Sherrod, recognized Search Guru and frequent SEO speaker both locally and abroad. He recently presented "Winning Google Local" at "Search Engines Strategies" in New York and will be expanding on that presentation to help small businesses in Atlanta. check out http://www.winatl.com for more information.

p.s. If you know a small business owner who might be interested, please pass this along.  The next class is June 13th – there’s still space available.

Could not load type ‘System.Web.Mvc.ViewTypeParserFilter’ from assembly ‘System.Web.Mvc’

April 28th, 2009 Rusty

“Could not load type ‘System.Web.Mvc.ViewTypeParserFilter’ from assembly ‘System.Web.Mvc, Version=1.0.0.0,…”

When I deployed a working and tested build from our svn repos, it threw this error when I tried to access a view that was in a directory containing  web.config with the following configuration:

<pages

     pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"

     pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"

     userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">

Asp.Net MVC installs in the GAC

Remember Com and DLL Hell?  If you don’t, you didn’t miss anything.  We used to have to register our DLL’s with windows OS in order to call them from applications.  It caused all sorts of problems and very rarely bought us any reuse at all.  Anytime you had to update a DLL, you had to regression test every application that used it before you could update the server where you needed the enhancement.  Therefore, XCOPY deployment was a god send!  Being able to share your binary at build time and deploy different versions of the assembly per application without concern for other dependent programs saves a ton of time and headache. 

Oh, there is that GAC opportunity if you want to share a single DLL across an OS and you’re certain that its stable and locked in.  It makes sense for Microsoft to register their assemblies there.  Unfortunately, MVC had a significant update from RC to release but they did not increment their version number.  Shame, shame, shame…

I installed Asp.Net MVC on our build server though did not on our production web server.  I know: shame, shame, shame…  Even though we reference our MVC DLL’s from a libraries directory, the build finds them in the GAC and does not copy to the bin directory.  I am sure there is a simple configuration in the build scripts that I could use.  My immediate solution was to manually copy the assemblies to the website’s published bin directory in SVN so our prod deployment would have the correct version of that “version” of dll. 

SEO Training in Atlanta

April 21st, 2009 Rusty

For those of you who know me, you know I have dabbled, successfully, in Search Engine Optimization for many years.  John Sherrod has been my guru, both in yoga and SEO, for something just south of 10 years.  He has been both interested in and solicited to produce training in search optimization.  He has been gracious enough to allow me to participate in this venture.  We’re not sure of the specifics, yet, but it is going to begin as a hands-on course designed to deliver results during the class.  Here are the details we have to share:

Search Engine Optimization Class Details

  • small class
    • 5 or 6 students per session
  • 1 half day commitment
    • 4 hours
    • Saturday being proposed
  • inexpensive
    • less than $300 each
  • practical results focused
    • arrive to class with a laptop and ftp access to your site
    • each topic discussed is applied to your site with the instructor’s guidance
    • YOU make the changes that get results, immediate reinforcement of the topical material
    • YOU ask questions as you apply what you’ve learned to YOUR website
    • You leave the class with some of the enhancements in place, having started to move the needle

The concept is brilliant, I think.  John has been doing this a long time and each time he teaches someone the secret sauce, they come back 3 months later having executed nothing.  If you don’t apply the techniques, they can’t work for you. 

Learn Search Fundamentals Relevant to Small Business

So John is designing a class that takes the fundamentals that he presented at SES NY and boiling it down to a practical, hands-on, effective lesson.  He’s an expert in both small and large scale implementations.  He has a passion for small businesses in America and is embarking with a class geared toward small business and local (Google Local) search. 

What’s my role?  …not sure yet.  When I was 16, I taught guitar to 17 students.  When my guitar instructor asked me to take over, he explained, “you don’t have to be as good as me, you have to be more knowledgeable than your students.  Just stay one lesson ahead.  When a student passes you by, you’ve succeeded, they don’t need you anymore.”  While John has far deeper experience and knowledge on SEO than I do, I’m rising.  He and I work together very well.  I expect this to take off pretty quickly and hope to be in a position to teach the class as well.  However, like my guitar guru, I’ll wait until he deems me ready.

First Atlanta SEO Class 2009

First class tentatively scheduled for mid June.  Please contact rustyzarse –at- gmail –dot- com for more information

Blogging gone dark – LiveWriter on Windows Server

April 21st, 2009 Rusty

I haven’t blogged for a very long time.  I’ve had lots to say.  Unfortunately, when I finally threw in the towel on Vista and went back to Windows XP, I recalled just how crippled that OS was for serious development.  So I upgraded to Server 2003, a very stable, functional and reliable OS (except for a weekly corrupt lock issue form VM and tortoiseSvn but that is besides the point). 

No LiveWriter on any stable OS’s. period.

I can do everything I need to in Server, at least for Windows development, except blog.  Windows LiveWriter installer, in their product team’s infinite wisdom, will prevent installation on Windows Server OS.  It works FINE if you can get around the c0ck-block and install a hacked version of Windows LiveWriter but then plug-ins won’t find the install.  That is a huge problem because most of what I blog is code.   That nifty code plug-in that formats gorgeous c#?  …sorry,  doesn’t work if you back door LiveWriter.

What about that sweet Mac you carry around with you?

I decided it was time to blog again and looked into Ecto, once again.  Unfortunately, it remembers that I once launched it (never actually tried it) and will not allow me to launch it now.  That’s foolish, illuminex, really.  I think it would be sufficient to just irritate me with a launch screen reminding (begging) me to pay the measly $20 every time I launch it.  Or allow one blog post and then close the app with a “please buy” notice.  Anything except preventing launch.  You must be taking lessons from Microsoft.

Just buy it, dood, you say?  Well, I’m sort of “not able to use credit cards” if you know what I mean.  :-/

Solution – VM with XP

I read the Ecto vs LiveWriter smackdown and I realized I had all I needed.  It seems so silly but, in reality, its why I switched to Mac in the first place. 

When I code, I code.  If its Windows, its Server.  I don’t want extra software installed unless it directly applies to the art of coding. 

When I blog, I am blogging.  I might download photos and try software and exhibit all kinds of consumer behavior that will very likely introduce spinning icons and the inevitable need to rebuild the OS.  I only need about 500MB to blog with so fire up an isolated VM for blogging and be over it.  That XP machine I configured to try to code on?  Its now my blogging computer.  Yes, I fire up an entire computer just to blog.  Well, a virtual computer.  Nonetheless, how beautiful is that.  Its like having a house to live in with your family that stays clean and fresh and a second house where you keep your exercise equipment and your old beer signs. 

For the Adventurous

I’d gotten spoiled with my Mac because it hasn’t hiccupped in more than a year.  I’ve been able to reduce to just one instance of Windows Server for my Windows programming duties and everything else works on the Mac.  If that were a real goal of mine, I’d try Msi Install for Windows LiveWriter.  Actually, I WILL try to install that and see if plug-ins work after that.  I have Visual Studio ad everything I need on my XP instance so I can pull a quick bug fix without firing up my fat behemoth of a server VM.  I should have the same convenience the other way around.  However, this XP Instance boots in less than 30 seconds.  LiveWriter will be in my startup items from now on.

Animate a UIView with Children into view

April 13th, 2009 Rusty

To make a custom View appear following a button click, I was trying to animate the appearance of a UIView using the following code.

    CGRect tempFrame = portfolioAddView.frame; // Get the current frame.
    tempFrame.size.height = 0.0f; // Hide the view by collapsing height
    portfolioAddView.frame = tempFrame; // set the new frame
   
    [UIView beginAnimations:nil context: @”some-identifier-used-by-a-delegate-if-set” ]; // Tell UIView we’re ready to start animations.
    [UIView setAnimationDelegate: self ]; // Set the delegate (Only needed if you need to use the animationDid… selectors)
    [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut ];
    [UIView setAnimationDuration: 0.4f ]; // Set the duration to 4/10ths of a second.
   
    tempFrame = portfolioAddView.frame; // Get the current frame.
    tempFrame.size.height = 120.0f; // open up the height
    portfolioAddView.frame = tempFrame; // set the new frame
   
    [UIView commitAnimations]; // Animate!

It worked fine for showing the view but when I tried the reverse, animate the height collapse, the child UIViews remained visible.

I found a property that solved that problem

[portfolioAddView setClipsToBounds:YES];

Now, when I animate the height to 0 (zero), the children are hidden by the collapsed view.