Blog
A sip from the hydrant: Gary Hoover at the BiGBreakfast
Overheard: “Listening to Gary speak is like taking a sip from a water hydrant. I’ve heard him give this talk several times, and each time I pick up something new”. There was quite a bit of discussion after Gary’s speech, all of it overwhelmingly positive. There is something very compelling about getting a direct peak inside the mind of an actionary visionary, the kind of person who not only sees what will be, but also acts on his vision to great success. Gary Hoover revealed his “8 Keys to a Successful Business” at the BiGBreakfast event put on by BiGAUSTIN
yesterday. His talk was a very pleasant surprise for me, I had no idea I was in for such a treat.
Another look at Gary’s name reveals the level of success he’s had, since he founded and sold a company bearing his name, one that you’ve heard of. If your first thought was that his products sucked, then don’t think Hoover the vacuums, think Hoovers the business information company. You know, the one he sold to Dun and Bradstreet. Curiously, his talk didn’t mention that business except in passing. Instead, he focused on his earlier success, Bookstop, Inc, which was the first book superstore, and which he sold to Barnes & Noble in 1998.
Certainly, the story of the start of that business ties in well with his first two keys: Curiosity and History. The successful entrepreneur is curious to a fault, always seeking new knowledge, always wanting to know more, about anything and everything. This last is really the important part – he cited examples such as Michael Dell and Bill Gates, people who constantly broaden their knowledge of the world outside of their “business”. Oh, and by the way, Gary knew the person who purchased books for Gates to read, so he is familiar with his quest for knowledge – just another example of the torrent of information that spews forth from Gary’s talk that can whoosh past you if you don’t pay attention.
Something else I picked up on as I listened: Just as vision remains vapor if not implemented, the satisfaction of curiosity remains cerebral without the context of history to give shape to the information. Ok, that’s nice, but what does it mean in real terms to the person in the trenches? To quote Gary “the difference between winners and losers is that the loser spends 100% of his time on tactical issues, the winners spend 99%” with the rest spent on big-picture, step-back-and-look-around-you type activities.
As Gary gave examples to back up these two keys, to me, the bigger point seemed to be that the successful entrepreneur will actually believe the facts in front of him. When your car is slowly sinking to the bottom of the lake, it’s too late to be thinking – gee, I wonder of those big orange signs and flashing lights were something I should have paid more attention to? Or, as Gary himself put it, don’t let the train of change smack you in the back as you peer down the tracks in the wrong direction, searching for a glimpse of the future.
Closely behind curiosity and history is the third key, Geography, which also ties in with history to help shape the information you get as a result of your curiosity. “Keep in mind the spacial relationships of things” said Gary, and “keep track of space and time”. It’s all part of the theme of seeing the larger picture.
Gary spent so much time on the first three keys, that I feared the BiGBreakfast event was going to morph into the BiGBrunchAndLateAfternoonSnack seminar. Don’t get me wrong, I could have listened all day (in fact, after the talk, I just listened to him as he informally answered various people’s questions one-on-one. His approachability was refreshing, and even just watching how he handled no-particular-question, just-want-to-ramble-on-and-on type people was an education in itself). As it happens, the next four keys are closely tied together. They are Clarity, Vision, Consistency, and Purpose. Each one is important, and the successful entrepreneur will pay attention to each one individually, but in reality it is the implementation of the four as a group that propels the business, or so it seemed to me. Oh, and there is only one right answer to the purpose question: your purpose as a business is to provide a product or service. <-- note the period at the end of that sentence.
The test for the successful implementation of the next key involves closing your eyes, or better yet, using a blindfold. Ok, I guess this test is safer if done as a “thought experiment”
ala Einstein, but the idea is that you place yourself in a business sightless, and when you remove the blindfold, you should be able to tell where you are. If you can’t, the business fails the uniqueness test. If you are not Unique, there’s little reason for your customers to come back.
There was one more key, Passion, and for those of you keeping track, that makes nine keys. What can I say? Maybe my note-taking needs work, maybe I heard more than was said, maybe – who knows? Whatever, the last key was simple: love your work. ‘Nough said.
Gary’s talk was very engaging, and even better, he continued to spill valuable nuggets during the all-too-short formal Q&A afterwards. For example, responding to a question about business metrics, he mentioned the ideal way to create a business plan is to oscillate between Word and Excel. Use Word to describe your ideal business scenario several years in the future. Use Excel to crunch the numerical realities of such a dream. It is guaranteed the two will not jive, so modify both to bridge the gap. The resulting documents become part of your business plan.
After the breakfast, I attended the BiGMarketplace, a vendor exhibition of BiGAustin client companies. From solar-powered backpacks, to beef jerkey and scrapbooking, the selection was varied and interesting. The “memorable name” award should certainly go to Dancing Dingo Organic Bath & Body, makers of fragrances for both man’s best friend and his boss (or wannabe). I bought a bottle of Dog De-funkifier™ to keep both happy in my household, only to discover a $2-off coupon in my goodie bag when I got home. Oh well.
AustinMania! is now a blog, too, and you can post, too
The previous post describes my investigation into Ruby on Rails, as a framework I could use to rapidly build out the AustinMania! community portal. Alas, I was once again stymied by my web host, and for now, I cannot run RoR applications on this web site. This may change with further study, but luckily, I do not need to wait for that to significantly enhance the interactiveness of the site.
As I was pondering my next move, which included considering if I should switch web hosts, a sudden realization struck me – I already had all I needed to implement the beginnings of a user-generated community – a WordPress blog! All I had to do was to make a new, separate database, re-install WordPress with a new blog name, and presto, a new blog was created on the site! The main difference in functionality vs my regular blog is that when a new user registers, they are by default granted “contributor” level access, which means they can create new posts themselves (subject to approval by me before they are published). I also opened up commenting privileges so anyone can comment, and they appear right away without moderation. I can always go back and remove inappropriate comments if I need to, and since the initial goal is to encourage use, this should be ok for now.
I made a few changes to the sidebar from the one this blog is running to better fit the community aspect of AustinMania!, such as listing all the authors and removing the blogroll. Also, I tweaked the entire user registration and login process to “hide” the fact AustinMania! is really a blog, it’s supposed to look like just a community website. I added helpful instructions to the e-mail that sends the initial password, and to some of the registration pages, and removed certain pages or sections from the admin console to simplify it for people who have never blogged before. For example, the dashboard seemed fairly superfluous, so it’s gone. I will probably continue to tweak the admin pages over time so they better fit the theme of AustinMania!
The best part of this is that it is up and running, anyone can contribute, and I can continue to tweak it and add features. I still intend to bring to life my “grand vision” of what AustinMania! can be, but at this point I am not sure if it will evolve from this WordPress platform, or if I will build an entirely new RoR application. Perhaps in the end it will be a hybrid. Whatever the case, I am glad I was able to implement something that works today, and I didn’t let the bigger ideas get in the way of progress. I hate it when that happens, don’t you?
Ruby on Rails stalls pulling out of the station
Sometimes the grand vision can get in the way. It has always been my intent to make the AustinMania! section of this site the part of this endeavor that “captures the essence of Austin online” and to let the community shape it, rather than create the whole thing myself. As I went about building the other sections of the site, certain ideas about how I could achieve this vague goal floated around in my head, pretty much in the background.
These flights of fancy, regarding features and usability flow, soared high and far, but they always came back to earth crashing amid the realization of the amount of work required to pull them off. Now work in itself is not a bad thing, the problem is the implementation delay when the task at hand is extensive, and hard to implement piecemeal. So, as a stopgap, a static page was created for AustinMania! that asked visitors to send in contributions via e-mail. This was hardly ideal, but at least it was real.
Meanwhile, my ideas for AustinMania! went in a direction that I started to get excited about, something fairly unique (as far as I know) but still based on existing and recognizable trends in cyberspace. It was unlimited in depth, supported and expanded on the original business model, and would be pretty cool to boot – if I could ever get it done. Again, the same brick wall of feasibility sprang up and cut the fancy flights short.
By and by, at some point I decided to see what all the fuss over Ruby on Rails (RoR) was about. I watched the famous “Creating a weblog in 15 minutes” video
, and was impressed by the apparent ease of use, robustness, flexibility, and speed with which the application was created. The part when the presenter merely adds a date/time field to the underlying database, and then reloads a page in the browser that is running the application, and lo and behold, the UI automagically produces a date entry form field for user interaction shows how well all the pieces (model, viewer, and controller) are wired together, automatically, by default, with no real effort on the part of the developer. This is a serious time saver, here.
Ok, that’s all well and dandy, but I like to have ultimate control over how pages look and function, so anytime I see auto-generated code, I start to loose interest. Surely, the developers of the framework do not share my vision of how things should work, and I definitely do not want to be constrained by their views, so no thanks. But wait – this video was not yet over, they were only 7 minutes into it (and already the app was functional). Sure enough, the next thing that was done in the video was a tweak to the templates used to generate the pages, and I saw that they were made with simple, clean HTML code with a few extra tags thrown in. With a few keystrokes, the default tabular layout was replaced with a list-based layout, using regular HTML, and the UI instantly re-rendered with the new look and functionality. Wow – total control over the output, and auto-wiring to the database, and simple controller action definitions. And, um, this is open source, and free for me to use? Yep, I was SOLD!
So I downloaded the necessary pieces and very soon, I had a rudimentary working application. I also added a “UserEngine”, which I found in the rails engines repository
, and which also means that within about 5 minutes after downloading it, I had the major pieces allowing new user signup, existing user login, and account maintenance. Even better, one line of code at the top of every password protected page (or just one line in the header template) implemented this role-based access control mechanism for that page. It is no small wonder there’s a fair bit of hype surrounding this framework, the productivity gains are impressive!
But then came the final test – would this actually run on my web site, on my web host’s servers? Well, there’s the snag. Most of the articles and documentation I’ve seen that talk about deployment assume your RoR production app will be hosted on your own server, over which you have total control. There are instructions for how to deploy to the maybe 2 or 3 web hosting companies that have Ruby installed and supported, and, supposedly you can “make it work” on other Apache servers. But the documentation on that is a work in progress, and assumes the ability to edit the .htaccess and other server configuration files. As regular readers of this blog know, I have no such access on my web host. So at first glance, it would seem I cannot run RoR apps on my web site.
But then again, as is also known to those who follow my story, I created a workaround for my lack of appropriate server access by using PHP header redirects. This was done so that this blog could use custom Permalinks for individual postings. Would this technique also work with RoR? Well - no, it didn’t work, at least not right away. It’s possible I do not yet understand well enough how RoR works, so this may still be feasible, but it will take more experimenting.
So I’ll continue to explore RoR and ponder my deployment options. In the meantime, I’ve come up with a relatively simple way to enhance AustinMania!, still far short of the big vision, but at least a lot more interesting than a static page. Check out the next post for details…
Lining up for Spam
My last post had everything to do with avoiding spam, and now I am here to tell you, this weekend I witnessed people actually line up and wait just to get their own portion of SPAM - the luncheon meat! Talk about keeping it weird, there was an entire festival in central Austin just to pay homage to that denigrated meal. Well, tongue-in-cheek homage, as SPAMARAMA!
is really all about playing with the food, in every way imaginable!
Appropriately enough, this “pandemonious potted pork festival” is held every year on April Fools day - I mean, who would believe you if you said you were headed to a SPAM cook-off? Well, I went, I witnessed, and I wondered - why here, why Austin? Oh sure, it’s cool and fun and wacky - SPAMALYMPICS, anyone? - but how did this start?
According to the web site, the initial impetus was to have an alternative to the all-too-common chili cook-offs. Only in Texas do you get tired of chili cook-offs, I suppose - and only in Austin does someone come up with an alternative crazy enough that their neighbors will voluntarily be a part of it - for 28 years and counting. Jeez, what’s the shelf life of SPAM anyway?
Now, the official SPAMARAMA site says nothing of this, but I discovered there is another linkage between Austin and SPAM – and no, I don’t mean we have an overabundance of lazy-assed porno pushers and medical miracle misfits. Did you know that SPAM is produced in Austin? Yep, there’s even a SPAM Museum, right there on SPAM Boulevard. No - I’m not kidding you! Of course, I’m not talking about Austin, Texas, but Austin, Minnesota, the corporate home of Hormel Foods
. Talk about weird! Is this some kind of comedic karma? Or, more sinister-like, some machiavellian marketing?
Anyway, if you want to go ask someone at Hormel, just get on I-35, go north for oh, about 1100 miles, hang a right
at Bancroft, MN, and wait another 20 miles. You’ll find yourself smack dab in SPAM heaven. Whoopee!
The weather was pretty awesome this past Saturday afternoon, and in between dodging ham-hatted SPAMaholics and hog-nosed porky people, I had a pretty good time. I missed Nathan’s Stupid Drama
, but I did get the CD, and yes - the rumors are true - this guy can play the acoustic! I’ll have to catch his act live sometime.
In a classic “if-someone-had-told-me” moment, I did enjoy the irony of watching contestants do all they could to hold on to the stuff as they ran the SPAM Can Relay – “Can’t spill the SPAM - Can’t spill the SPAM - Can’t spill the - DAMN, I spilled the SPAM!”
And then there was the obligatory SPAM eating contest, which was probably the most obvious Hormel-driven event that day. In one masterful stroke, conclusive proof was presented that not only is the stuff in the can edible, it really is filling - the contest lasted for several minutes! If SPAM meat was as insubstantial as we have come to believe, the contestants would have chowed down in no time. Instead, the assembled masses got to witness long, agonizing moments of chomping, chewing, and strained swallowing. “Better you than I”, they must have thought, “better you than I, to find SPAM’s not naught!”
Yes, spring has sprung in Austin. The weirdness blooms and the fun beckons, and it’s time to get out and enjoy all the town has to offer. What a cool place to be!
Hiding from spammer robots with Javascript e-mail address writer
They say that within a few seconds of connecting a new computer to the internet, it will be pinged, probed, and hacked if it is unprotected. Kind of like the classic leg-in-piranha-infested-waters effect. Well, I don’t know if that’s true, but I do know some badbots have been snooping around my site, and I’ve had to take steps to keep them from impinging on my enjoyment of life.
How do I know badbots are visiting? A couple of ways: First, I am using a free service called IP2Location
, that shows the general location of a computer based on it’s IP address. According to this, I routinely get visits from the Netherlands, Germany, France, Taiwan, and other “interesting” locales that – one would assume – do not have very many people interested in an Austin specific web site. Hmm, I just got a “visitor” from China, apparently from the FUJIAN region – wherever that is. I have to assume these are robots and not humans. One giveaway is that the server logs show only certain files are requested, and not others that are necessary for human enjoyment of the site. For example, the home page is index.php, but when that page loads in a browser, as it would when a human requests it, a number of other files are required: a javascript file, a stylesheet, and several images. The Chinese visitor, as an example, only requested the root page (index.php) and the javascript file. That’s it - no images or styles. Without them the page would be meaningless.
The other way I know some of these are badbots, and not helpful search engine bots (which I also get a fair share of, btw – Google almost nightly, plus Yahoo, Inktomi, AOL, and others) is that I’ve started to get comment and e-mail spam at my brand-new site. The comment span appeared first – I received 4 comments to various blog postings at the same time, each with what seemed to be just a random collection of words strung together into something that looked kinda like sentences, but really weren’t. Intermixed with the random words were links, also with random words, but the weird thing is at least some of them seemed to point to a legitimate site like news.yahoo.com. I have to admit, I do not understand the purpose of this. Why would a spammer link to a yahoo site? Maybe if I had examined the source code I would have figured out the trick, but I just deleted the comments instead.
Getting protection from comment spam was pretty easy – all I had to do was enable the Akismet plugin, which is very effective (so far) at keeping comment spam away from me. I did have to register at WordPress to get the digital certificate to enable this plugin, but that was pretty painless and only took a few minutes. Hmm, I wonder if there were technical reasons for this, or if WP has stolen a page from the Microsoft playbook. Remember when MS tried to force everyone to get a Passport account? Supposedly you could not get anything out of MS web sites (and even some software) without a Passport. Thankfully that didn’t last very long, and although I managed to get by without a Passport, I now have an unused blog over at WordPress, just to keep spam out of my comment queue. Oh well.
Combating the other scourge, spam e-mail, took a little more doing. The primary line of defense for this is to keep the badbots from finding your addresses in the first place. I was negligent in this regard when I created the Contact Me page, and posted my 6 addresses in plain sight, both to humans and to robots. I knew I would have to come back and fix this, and now that the spam is here, it is time. Actually, it is a little late, because at least one spammer already knows the addresses. So far, I’ve received only one form of spam, so if I cross my fingers tight enough, maybe he’ll not bother to share them with anyone else.
There are a number of ways to hide e-mail addresses from robots, while making them visible to humans, each with varying levels of visitor convenience. There is a nice summary of these methods here
.
Since one of my design objectives is to make this site fun and entertaining, visitor convenience ranks pretty high in priority. This means e-mail addresses need to be actual mailto: links, with text that can be easily copied and pasted if the user prefers to do that. Thus, address hiding methods that require any user effort were not considered, such as an images that looks like text (requires users to manually type in the entire address), or text descriptions (in the form “erwin AT austinmash DOT com”), or deliberate address munging (like erwin@REMOVE.austinmash.com).
I also discounted methods that rely on replacing regular text, like “@”, with the equivalent HTML or HEX character encodings, like @. The theory here is that the badbots go hunting for @ symbols, and if they don’t find one, they go away. However, given the declining cost of bandwidth and CPU cycles, and the fact this is easy to decode, I am not about to assume spammers are not smart enough to also be on the look out for @.
There are more elaborate schemes that rely on encryption, CSS tricks, Forms, or user action before revealing the addresses (as if it was a state secret or something). Most of these have maintenance drawbacks, and are just not worth the effort. Simple yet Effective, is my motto. So, I settled on a Javascript approach.
The basic concept is to have Javascript write the text to the page in chunks, such that any one chunk is not enough for a badbot to get anything useful. The end result on the page, however, is a complete e-mail address with mailto: functionality and easy-to-copy-and-paste text. Also, it can be done in a way that is easy to maintain, and if necessary, can even be generated with server-side code.
There are a lot of examples of this technique on the web, but most take an approach that seems convoluted and inelegant to me, such as this: My e-mail address is <script>document.write(“me”);document.write(“@”); I suppose this is fine if this is the only address on the page, but I have 6 addresses on my contact page. So I came up with my own technique, which I think is more flexible and re-usable (although it’s pretty likely this has been done before, I did not run across any examples like this in my research).
document.write(“here.com”)</script>
First, I declared a number of functions to write certain portions of each address, with the intention of reusing common functions (chunks of text). Then, where I wanted the address to render to the page, I just called the functions in sequence.
This is the first part, the function definitions. I placed this in the <head> portion of the page, but it just as easily could have been in a separate .js file.
<script>
function hrf() {document.write("<a href=mailto:")}
function d() {document.write("@austin")}
function d1() {document.write("mash.com")}
function d2() {document.write(">")}
function erwin() {document.write("erwin")}
function press() {document.write("press")}
function sales() {document.write("sales")}
function h() {document.write("help")}
function s() {document.write("submit")}
function payments() {document.write("payments")}
</script>
Then, each time I need an address on the page, I do something like:
<p>Feel free to send me a note at:
<script>hrf();erwin();d();d1();d2();erwin();d();d1()</script>
Here is another part of the page. Note, I am reusing most of the same functions
<p>If you have any difficulty buying pixels, please use this address:
<script>hrf();sales();d();d1();d2();sales();d();d1()</script>
If you want to see the end result, just see my Contact page.
If at some point I create a new page that also has e-mail addresses, I will probably go ahead and put the function definitions in an external file that both pages can access, and will probably re-name the functions to make them less ambiguous and likely to collide with other functions of the same name. Also, I may go ahead and combine d() and d1() – the badbot already knows my domain name, so there’s probably little gained by trying to hide it.
The biggest drawback to this approach is that it won’t work for visitors that don’t have Javascript, or have it turned off. This was not a big issue for me, because without Javascript, the whole site is pretty useless and probably impossible to read anyway. This is a conscious decision on my part, and I’m ok with it. I mean, Disney can spend millions of dollars on Disney World and have some of the greatest rides in the world, but they can’t do anything about someone who refuses to get on because it may mess up their hair, or whatever. Hey – it’s their loss, right?
Oh OK - for the non-scripters, I added a <noscript> tag that says my address is erwin (at) austinmash (dot) com. There you go, you sit here and watch everyone else have fun.
I don’t know how long it takes for an exposed computer to be eaten up by the piranhas of the internet, but I do know a new web site will start to get nibbles in a few weeks. I hope my new boots are thick enough for the coming onslaught.









