December 2nd, 2009 Rusty
So I decided, “I’ve played guitar for more than 20 years (I’m so f-ing old), I should probably learn to read music.”My very first musical exposure (other than church choir, where I tried really hard to sing like a girl) was 7th grade required music. Before that, nada. Around 3rd grade, I whacked the hand bells during practice in the choir loft (that place has a name, I just can’t remember), once, and was severely punished - hence the end of my interest in church music. In middle school, however, I chose the violin (it was either that or choir - band was full by the time I made my selection). There were several dozen violins, 15 cellists, and zero upright bass players. Not only did my strings teacher encourage me to play the bass, she pointed out that there more than a dozen basses that I could use and I could, in fact, take one home since no one played the bass. Having something unique to play (plus the benefit of not having to beg for the money to rent a violin) helped me into something that would change my life. Several Metallica bass lines later and I was losing my pajama bottoms to get my hands on a guitar. Having to get around the guitar lick to transcribe the bass line was like asking a child to eat the green beens that were strewn around his piece of birthday cake. Point is… I learned the basics of reading music before convincing my uncle Dick to lend me his mid 70’s Gibson ES125 and his Polytone mini Brute jazz amplifier from the same year. Interestingly enough, this is the first time I’ve ever considered that in context. He lent me his first real axe and amp. Wow… (I still have and play them, 20 years later (I’m so f-ing old)).Then it was on to ACDC and Guns and Roses. You certainly don’t have to learn to read music to learn that pure vintage rock and roll treasure. C’mon, think about the intro to “you shook me all night long” and tell me a teenage boy guitarist wasn’t in absolute heaven?20 years later and I’ve got my kids (yes, ‘kids’ Oh I am so f-ing old”) in bed and I decided that I’d learn to read staff music. Why not? I figured I’d just devour what I could find and work through each piece until I made zero mistakes and then move on. I started on site #1 and I powered through the notes on the first string and it wanted to move to the second string but I hadn’t had but two plays through so I googled “notes on the first string” and found this inaccurate guitar lesson. SOMEONE please let me know if I am mistaken. However, the image below…
is E, F, A, A (nooo?)So the tab, [0,1,3,3]… is WRONG….It should be [0,1,5,5), right?just checking…
Posted in Blogging | No Comments »
October 11th, 2009 Rusty
This is going to be another short and very to the point post.
When installing Umbraco on my local development machine, I was unable to load WebResource.axd or ScriptResource.axd and asp.net ajax was dead in the water. I found several forums describing the same problem with a myriad of potential fixes including web.config settings and repairing the dotnet framework 3.5 sp1.
I finally decided that I should install the site from scratch and was successful in correcting the issue. When I compared configuration, I found one setting that was incorrect in the original installation.
I use directory urls for seo purposes so I set a wildcard mapping in IIS to allow asp.net to process all requests. There is a checkbox to "verify that file exists". Ensure that the checkbox is NOT checked. If it is, then the above files will fail.
Another several hours I cannot reclaim. Dern.
Posted in Blogging | No Comments »
July 15th, 2009 Rusty
I discovered, quite by accident, that Objective C supports a feature I have been yearning for in .net / C#. While dynamic languages such as Ruby and Python (I’m no expert and could be wrong but I believe this to be true) allow you to pass very loosely typed objects around and swap one type for another, strongly typed languages usually do not allow this. DotNet takes it a step further and won’t even allow you to inherit and override unless the author of the subclass explicitly marked the property or method as virtual. This rears its ugly head when you try to mock for unit testing, a very valuable practice, and it won’t let you because the class you intend to mock was not littered with virtual decoration. What this means to me is that I will, from now on, always mark my props and methods virtual. That’s just ugly and unnecessary. I would have preferred sealed to have been the exception and virtual to be the default. Oh well.
If it quacks like a duck…
In objective c, take the following class
@interface Lead : NSObject {
NSString *nameFirst;
}
@property (retain, nonatomic) NSString *nameFirst;
@end
The implementation is irrelevant . If I have a consumer of this class like so:
@class Lead;
@interface StateManager : NSObject {
Lead *currentLead;
}
@property (retain, nonatomic) Lead *currentLead;
…and let’s say I did something with the nameFirst method in my StateManager.
I could do this
@interface Giraffe : NSObject {
NSString *nameFirst;
}
@property (retain, nonatomic) NSString *nameFirst;
@end
and pass it in to the StateManager
Giraffe *giraffe = [Giraffe new];
[giraffe setNameFirst:[textFieldName text]];
StateManager *stateManger = [StateManager getSingleton];
[stateManger setCurrentLead:giraffe];
Other than a compiler warning, all is well. No errors will occur. Iff you want to get rid of the compiler warning, cast the giraffe
[stateManger setCurrentLead:(Lead *)giraffe];
Which, apparently, in Objective C is more of a, “yes, I know that’s supposed to be a Lead instance,” rather than any real cast.
So, in review, you have object oriented features but not strongly typed restrictions. This makes the opportunities endless and probably scares the hell out of some paranoid security software engineers but I’d rather have open frameworks and defensive programming than defensive frameworks and less power and flexibility.
Posted in Objective C, Programming | No Comments »
July 9th, 2009 Rusty
As is usually the case with javascript errors, a recent error I encountered was difficult to track down to its source. Firebug was kind enough to indicate that there was a bug, but the message and line at which it occurred was not very helpful. The exception was thrown from deep inside the minified jQuery library.
uncaught exception: [Exception… "Could not convert JavaScript argument arg 0 [nsIDOMViewCSS.getComputedStyle]" nsresult: "0×80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: "JS frame :: …/jquery-1.3.2.min.js :: anonymous :: line 12" data: no]
Not very helpful!
I’ve seen this exception before and Googling it brought me a number of exceptions related to dimensions manipulations. However, nothing concrete was evident.
I’m curious to know if there is some way to bring the stack trace forward from firebug as I see several indications that this is possible.
Another opportunity is to set FireBug to “break on all Errors” under Script > Options. This can be tricky because you’ll find it breaking on quite a number of calls inside jQuery. I found that this did, indeed, break on the line that was causing the error in MY code but it was not easy to click through the other errors to find it.
More Info please Javascript Detail in FireBug
A useful option is to increase the noise level for FireBug. A big warning indicates that you shouldn’t leave this option on all the time. However, its very useful when you need it.
Under Console, choose Options > Strict Warnings.
This will increase the information that FireBug reports on.
You can now look at the messages preceding the non-helpful message to see if, perhaps, something is leading up to the problem.
That’s more like it! Now I can see that, right before the JSFrame Exception, I had another warning in my own lobrary: reference to undefined property this.items[this.selectedIdx]
I added one short line that checked the length of a selected object so that it could exit if it was not there and my error went away.
FireBug is certainly the tool of the decade for web programming and I have no idea what this world would be like without itl
Posted in Programming | No Comments »
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.
Posted in Programming, VMWare, Windows | No Comments »
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.
Posted in SEO | 1 Comment »
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
Posted in Mac, Programming | 2 Comments »
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.
Posted in SEO | 3 Comments »
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
Posted in SEO | No Comments »
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.
Posted in SEO | No Comments »