Friday, August 27, 2010

When a Plan Comes Together

I've worked for TechInsurance.com for about 6 years now. I've been their sole web developer all this time and it has been a big job. Since I've been there I've learned a tremendous amount about providing good support and creating highly usable interfaces. And I've worked with people with a vast pool of experience. Their technical infrastructure combined with a really good & dedicated group of people is what sets them apart from other insurance agencies. It's been a great company to work for and I just know they'll continue to thrive.

But my desire to work for BucketSoft has taken over and I gave my notice a couple weeks ago. My final day at TechInsurance will be September 24th. And my plan that I talked about in April is about to be set in motion.

My first priority will be moving to Colorado. Once I'm settled in up there I will be once again coding every day. Only this time 100% of my computer time will be spent on BucketSoft products. I can hardly wait to finally act on some of my ideas. It's going to be an exciting time for me, and an exciting time for BucketSoft. Stay tuned.

Monday, April 19, 2010

My Future Plans: Full-Time, Colorado, and a Dog

As I devote more and more time to BucketSoft and BucketSoft products, I can't help but think of my future plans.

MalamuteI expect a few key things will happen in the next 12 to 16 months:
  1. I'll quit my day job so that I may work on BucketSoft full-time. This is a big deal that'll mark a new chapter in my life. I look forward to it with a nervousness that's hard to explain. This is everything I've worked towards. And after this BucketSoft will be my livelihood.
  2. I'll move to Colorado (most likely Colorado Springs). I've been to Colorado on five separate occasions and I love it up there. The snowy winters, mild summers, beautiful mountains... what is there to complain about? I'm a young single guy so if I'm going to make the move then now is the time to do it. Nearly all of my family lives in Texas so this is a big deal too. They will be sorely missed, but I'm hoping they'll visit often.
  3. Next fall when I get an Alaskan Malamute I will name him "Burrito" in honor of Joel Spolsky.
Anyway, if two out of three of those things happen I'll be pretty happy about it.

Saturday, August 29, 2009

Upgraded to a Virtual Dedicated Server from Orcs Web

So for the past several months I've been running BucketSoft.com, RegexHero.net, SilverlightShaders.net, and 060calculator.com all on a shared server with GoDaddy. It's actually served me well for the most part. But there are some limitations with shared servers. I couldn't set up things like content expiration and gzip compression for js and css files. And I couldn't easily set up dynamic gzip compression for aspx files either. And then there were some severe limitations on SQL databases which I decided wasn't going to work for me.

So I shopped around and eventually decided that a virtual dedicated server from Orcs Web was the thing for me. The idea with virtual dedicated hosting is that multiple virtual machines run on a single physical server, and then the hosting company configures and sells each virtual dedicated server to individual customers at a monthly rate. Orcs Web is able to sell this service significantly cheaper than a true dedicated server.

The nice thing for me is that I have full control of this virtual server, including Remote Desktop support. And I was able to configure the server just how I wanted it. So now I'm using gzip compression and content expiration extensively on every site. And then when you combine that with the fact that Orcs Web provides triple redundant OC12 connections, I think you'll notice that the site really screams right now. ;)

Thursday, August 27, 2009

Attribute-Driven Search Engines to Prevent Dead Ends

Dead Ends and Searching
Dead ends occur whenever you search only to see that dreaded page that says "0 results." It can be a poor user experience to be limited to refining your search with a single textbox, not knowing if your search will return any results. Web search engines like Google can get away with this because they have billions of results to be found and dead ends are few and far between. That, and the wild wild web is so unpredictable and inconsistent that they can't easily implement more advanced features with any real benefit.


Attribute-Driven Search Engines
I've made up the term "Attribute-Driven Search Engine" because I don't know what else to call it. The idea is to display the attributes for the current search results and allow the user to click an attribute to further filter the results. As you filter the results, the new attribute list is also filtered. As a result, you'll never reach a dead end. This characteristic is what makes this type of search engine so awesome. NewEgg, Amazon, StackOverflow -- these are just some of the sites that have adopted this type of search engine.

An attribute-driven search engine can be implemented in any database-driven site where you have some level of control over your content. If you have a site like NewEgg with a wide variety of products then you'll probably need a combination of categories and attributes. For example, when searching for processors you'll need categories for the brand (AMD, Intel), number of cores (1, 2, 3, 4), socket type (AM2, AM3), etc.

But if you're dealing with content more like StackOverflow you can get away with simply using tags. You can assign a variable number of tags to a given article, product, or whatever it is, and the search engine will treat the tags as the attributes. This greatly simplifies things from a management point of view as you don't have to continually modify your categories as your site grows. You can see this in action at stackoverflow.com/questions if you start clicking the tags on the right hand side under "Related Tags." If you'd like you can keep clicking tags to add to the filter until you're down to just 1 result.


The SilverlightShaders.net Search Engine
So I've been giving all of this a lot of thought. I think having a good search engine can be very important for a website. Maybe it's not such a big deal when it's small. But once you have accumulated 500+ items to search through, then it quickly becomes more difficult to navigate the site.

So what I'm implementing for SilverlightShaders.net takes aspects of sites I've done before and combines them with features of StackOverflow. Every pixel shader will have tags assigned to it, and combined with full-text searching this should allow you to find what you're looking for.

Oh, and there's one other thing. Since I still allow you to search using a textbox, there's still the possibility of reaching dead ends. So I've implemented a simple feature to prevent this. I've added some AJAX which searches as you type and tells you how many results there will be before you actually click "Search."

This is all working with my sample data. And I think this combination of features should allow this search engine to scale well. But only time will tell. I'm just about to move from shared hosting to a virtual dedicated server. After that's done I'll try to get a beta site out there where you guys can check this out. I'd love to hear some feedback.

Friday, July 31, 2009

SilverlightShaders.net Coming Soon

I'm really excited about this site. It'll be a place where Silverlight & WPF developers can go to find specialized pixel shader effects. Every shader will have an instant online preview to make it easy to find what you're looking for.

The idea is to open up the site to pixel shader developers everywhere. If everything goes well it'll quickly become the largest Silverlight & WPF pixel shader collection on the web.

I've been working on developing some pixel shaders of my own to add to the site. And this weekend I'll begin building out the site to make it functional. I'll keep you posted.

Thursday, May 14, 2009

A Little Progress Report

It's always exciting during the early days of launching your website and releasing your first products. I remember 10 years ago with gldomain.com I released my Nebula screensaver. It was a simple OpenGL screensaver that didn't take me long to create, but it was somewhat unique and perhaps cooler to look at than any of the default Windows screensavers at the time. One night I decided to send an email to 3dfiles.com about it. And to my surprise, the next morning it had been posted on their front page and had over 5,000 downloads overnight. It would go on to be downloaded over 100,000 times across the web. That was a really cool experience for me even if I didn't make a dime from it. It was the first time I had gotten my work out into the world on such a massive scale.

Fast forward 10 years, I've since learned that my success with gldomain.com really was something special. You really have to hit a niche to make that kind of overnight impression on the internet these days. So I don't have those gldomain numbers from the early days, but BucketSoft is coming along.

Since its inception almost 4 months ago, BucketSoft.com has had over 1,600 visits. Data Comparisons Express has been downloaded 46 times from the site, and a combined total of over 250 downloads from other download sites on the web. That's decent but I really need to focus on getting Data Comparisons to version 1.0 to improve its web presence. I have several improvements to make to get it there. Then hopefully this fall I'll have Data Comparisons Professional ready and for sale.

Then there's RegexHero.com, which I launched just 2 weeks ago as another BucketSoft product. As it turns out it's doing even better than I expected. I've had over 550 visits in those 2 weeks, and my search engine placement is already pretty good. I think this site has a lot of potential and I have some cool things planned for it. The nice part about it is that it promotes itself. In other words, other people are starting to link to it on the web because it's a good resource for their readers.

Friday, May 1, 2009

WPF is Like a Fat Super Hero

It's slow to start up, but once it gets going it really moves.

For those that don't know, WPF stands for Windows Presentation Foundation. It is Microsoft's latest and greatest .NET Windows user interface development architecture, aimed to replace Windows Forms. Having built a fairly large Windows Forms app in .NET 2.0 Windows Forms before, I thought WPF would be an easy transition for me. That hasn't exactly been the case -- a lot has changed.

However, now that I'm a little more comfortable with WPF, I've come to certain conclusions about it. First of all, I'm loving the flexibility. In some ways it's like Flash development and I loved Flash development when I did it for a bunch of projects between 2001 and 2005. Being able to apply custom gradients, draw custom shapes and buttons, and animate objects all in vector form is pretty cool.

But to me the best thing about WPF, and the thing that I think often goes under-appreciated, is how it takes advantage of the GPU in your video card to off-load some of the UI processing from your CPU. As a former OpenGL 3D programming hobbyist, I can really appreciate the power of the GPU. My $100 video card at home has 112 cores each running at 1.5 GHz. That's essentially like 112 processors that (when I'm not playing a video game) are never used to their potential. So Microsoft has finally recognized how much processing power are in these massively powerful video cards that are now commonplace in even the most basic new PC's and they've made WPF take advantage of that. As a result, I can build an application with thousands and thousands of UI elements in large grids or whatever you can imagine and the computer can actually handle it while simultaneously ripping CD's. Parallel processing is sweet.

Of course, there is one little problem. It is slow to start up a WPF application after a fresh reboot. It's faster after subsequent launches, but on the first launch Windows typically has to start the font cache service because by default it is not configured to start automatically. I know that plays a big part in the slow start up but I'm sure there are other factors. To give you some idea of what I mean by slow, I'd say Data Comparisons Express typically takes around 5-7 seconds to start up after a fresh reboot on the computers I've tested it with. That may not sound like a terribly long time. But when you're a speed freak like me, it's an eternity. Especially considering the entire application fits into a 315 KB installer.

Apparently Microsoft has been working on this and made some big improvements in .NET 3.5 SP1. But it's still not fast enough. I hope they can improve it more, and improve it soon because other than that WPF really is a beautiful thing.