DevelopmentNow Blog
 Tuesday, December 09, 2008

I was reading over Raven Zachary's O'Reilly post about turning ideas into execution and found the comments as interesting as the main post. In a nutshell, Raven mentioned that there are a lot of people with ideas for iPhone apps, but that building an iPhone application is too expensive (i.e. $125/hour) for many to capitalize on their ideas, and that the demand for iPhone developer talent far outstrips the supply. In the comments, however, were a number of apparently-experienced iPhone developers without enough work and expressing frustration that they're struggling to find clients willing to pay them even $50/hour.

This gaps between supply and demand is nothing new in any service industry, including the IT/software development world. Varying rates aren't just common in the iPhone world -- for example, I have have met US-based sysadmins and web programmers, some of whom charge $125/hour and some who charge $25/hour. Normally the $125/hour people are far more experienced than the $25/hour people, but not always. I suspect that iPhone rates are already drifting down into a varying range (instead of everyone getting $125/hour), and as others have noted, the fact that you can build an iPhone app already doesn't mean you can instantly charge anyone $125/hour. I have come across a number of clients who turned us down because they found someone willing to build them an iPhone app for $3000 flat. Did they end up with a crappy, late app? Possibly, but maybe not.

Even in our experience building mobile & social apps, we've found clients who have healthy budgets for whom we're a true bargain, while also finding clients with no capital looking for a $500 application. We've even gotten a few calls from offshore firms looking to outsource mobile development to us (we're in Portland, OR).

It's my belief that you can charge a lot per hour if 1) you are good, and 2) you can find clients willing and able to afford decent rates in exchange for reliable quality development.

#1 isn't always required, although if you can explain to your client that paying an experienced developer $100/hour for 10 hours of work is more effective than paying a junior developer $30/hour for 40 hours of work, then you're halfway there. Just like if you have an important or critical plumbing problem in your house, are you going to hire the seasoned veteran for $90/hour or the CraigsList special for $25/hour? Unfortunately, some clients only see the hourly rate (and not the total cost), while others have a certain budget or rate expectation already built in.

#2 is about networking, advertising, sales, careful client selection, and offering something worth the extra fee (because you're seen as an "expert" or have specialized skills). Getting a decent influx of clients and finding the ones that fit your offering is important. For us, we try to find clients that have established budgets and for whom on-time, quality, experienced, creative execution is worth the extra expense (although honestly we're more affordable than a lot of other development shops). It's no surprise that a few of our clients found us after being "burned" by other developers who were cheaper but either didn't deliver or went AWOL. Sometimes you can find someone very cheap who's also very good, but many times you're just gambing. Plus, hiring a developer at a super-low rate opens you up to the huge risk of that developer finding a better-paying contract halfway through your project. And if that happens, guess where he's going to focus more of his/her energy?

Also, I think #2 is sometimes difficult for developers, as it's full of soft skills, so a lot of excellent coders find themselves struggling to find clients willing to pay $50/hour while reading with some amazement about other programmers turning away work at $125/hour.

December 9, 2008    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Thursday, March 06, 2008

Well, you can't really "roll back" commits per se, since Subversion remembers everything you've committed. But, if you realize that your current version of a file or directory is bad, and you need to restore that to a previous version number, you can do a svn copy like this

svn copy --revision 7  http://svn.yourdomain.com/svn/trunk/somefolder/myfile.php ./myfile.php

The above command will pull down myfile.php from version 7 of your repository and place it into your working copy. You can then check it in with

svn commit ./myfile.php -m 'rolled back to version 7'
You can also roll back directories instead of just specific files.
March 6, 2008    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Monday, February 18, 2008

Another helpful page, using the Unfuddle API. Now users can submit a ticket into an Unfuddle project without having to log in.

submitticket.zip (4.23 KB)
Other | Tools
February 18, 2008    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Wednesday, November 21, 2007
I thought about calling this entry "Don't Spend Two Hours to Save $20", but it lost out on the internal blog title poll. Both phrases are about how it's easy to end up spending hours & hours to avoid paying a nominal amount.

People who know me know that I like to talk about productivity a lot. Granted, I see the irony of me talking about productivity while I sit around writing blog posts, but anyhow.

Have you ever...

One of the things I've learned over the years is to not be afraid to spend a little money to save a lot of time. Assuming your time has value, it makes a lot of sense. So have you ever:
  • Spent hours creating a program to do something, instead of buying a $25 piece of software that does all that you need and more?
  • Used poorly-written, cumbersome free software to do your daily work, instead of paying $30 for a program that works really well?
  • Saved $20 on a new tech gadget by trolling FatWallet and TechBargains for a week, sending in multiple rebates, asking store managers to price match, and/or driving back to the store to do a return/rebuy or price guarantee?
  • Avoiding paying a $25 shipping fee on furniture or other large items by driving down to the store yourself, strapping the items to the top of your car, heading back home, unloading it, and carrying it into the room?
  • Bought a cheap piece of crap to do something (a rake, a wrench, a garden hose reel, a heatsink) that required extra time or money to get it working correctly, and/or broke after a short while and required replacement?
...and so on. It's easy to get sucked into saving a little money, but unless you enjoy the time spent saving that cash, you should make sure to be aware of how you spend your time and ensure that it's really getting you somewhere. As programmers, we love writing software, and it's really easy to say "hey I can quickly write or build my own X for free!" I've done that a lot (and heard similar sentiments from other developers), and while it's fun writing little utilities and tools, they have a habit of taking longer than expected.

A Full Price Lesson

I had a friend back in Chicago who asked me to come with him to buy some stuff for his computer. I mentioned that he could save a lot by checking out various deals, and that different stores had different prices, so that he could buy his keyboard at one vendor, his antivirus software somewhere else, a mouse on Amazon, and then send in some rebates to save even more. I mentioned that he should keep an eye on bargain-shopper sites and only buy when items go on sale, do some online research to compare price-for-performance between different items, and other price-shaving tips.

After a long spiel on techie thriftiness, he promptly ignored me and dragged us into Office Depot, where he asked my advice on what a good keyboard, mouse, and antivirus vendor were. I told him, and he grabbed the items, paid at the counter, and strolled out.

Initially I was shocked at his cavalier attitude at paying full price, but then I realized that he was done in 15 minutes. Done! I'd still be driving around, cutting out UPC symbols, etc. a week later.

I still remember that experience whenever I start thinking about how I can save $10 on a hard drive by comparing 4 different drives at 5 different sites over the course of 2 weeks.

If you're not working, you aren't getting paid

I'm not saying you shouldn't try to save money, nor should you throw money away. Nor should you buy things you don't need if something free will work just fine. Nor should you avoiding writing your own tools.

I'm just saying that if your time is valuable, think about how your time is spent, and just be conscious of where your hours are going vs where they'd go if you spent an extra $20-$100. Over the past two years at DevelopmentNow, that really hit home. We do 100% project work here, so if we're not working on a client's site, we don't get paid. With that in mind, I felt more comfortable paying a little to gain a lot (of time). Especially in IT, there are opportunities to spend an extra $20 to save hours.

Examples from the field

For example, I set up an Unfuddle account for the company. Unfuddle is sort of like BaseCamp+Subversion+Ticket system, but it was ready to go instead of me spending hours (days?) setting up SVN, Trac, and other stuff for free. I'm also probably going to buy phpEd or some other commerical PHP editor. Why? Because I get a lot for that $100 or so, and I buy it & I'm done. I take a lot of screenshots, too, and need more features than Cropper + Ifranview currently provide, so I'll probably buy SnagIt for $40. Plus I order most things (including furniture) online & have it delivered right to my door -- not only does it save me time, but it's better for the environment than driving my car around.

Wrapping up

So...that's how not to spend two hours to save $20. If you get paid hourly, saving $20 via two hours of unpaid work carries a real opportunity cost, which is how you go about losing 20 (or more) dollars an hour.

November 21, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Wednesday, August 08, 2007
10 good blog articles. Kudos to Colin C.
August 8, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Friday, July 27, 2007

You can now scroll more easily through data in Excel 2007, as told in IM chat form (inspired by 37 signals' Fireside Chat posts). BWS = me, DSM = Scott.

[08:46] BWS: heh Excel 2007 has a cool new feature
[08:46] BWS: when you're dragging a cell down
[08:46] BWS: you know how the further you move your mouse, the faster it drags & scrolls?
[08:46] DSM: yah
[08:47] DSM: and then you whizz past where you want to go
[08:47] BWS: yes
[08:47] BWS:
well in older Excel I would always end up scrolling too fast & going way beyond the last row of data
[08:47] BWS: well
[08:47] BWS: it now automatically slows down the scrolling
[08:47] BWS: when you get to the end
[08:47] DSM: nice
[08:47] BWS: kinda like how at a gas pump, if you prepay for an amount it automatically slows down
[08:47] DSM: yeah
[08:47] BWS: I think I will blog about this new scrolling thing

 

Other | Tools
July 27, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Tuesday, July 17, 2007
I've been loving Marc Andreessen's new blog lately. Lots of stuff in there about startups, productivity, etc.
July 17, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Saturday, June 02, 2007

The A-lister for dedicated servers is Rackspace, a managed hosting provider I'm always happy to recommend. Great support & service. The one "downside" is that their price reflects their quality.

For cheaper dedicated boxes, you have to sift through hundreds of hosting companies and try to find ones who meet your needs, aren't going to screw up, and support you to the level needed. Sometimes you don't need a lot of support or uptime, and so you can get away with a cheaper box. I read some good things about ServerBeach and LayeredTech -- they seem to be a popular choice for inexpensive dedicated machines.

June 2, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Thursday, May 31, 2007

A few interesting links on time and working:

I like the 1 hour solution bit ... I already time all my tasks with a project timer I wrote, but sometimes I get a tired during the day and find myself tempted to check up on forums that I like, check email accounts I don't use very often, check RSS feeds, etc. So treating those as a reward might help me avoid doing them.

Granted, I wouldn't have found the above posts if I didn't check RSS feeds, but hey ... I can appreciate irony.

May 31, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Wednesday, May 30, 2007

VPS Hunt

I've been looking into VPS hosting a bit more and found a few well-recommended providers:

ServInt especially seems to get a lot of kudos, but I know MediaTemple is very popular with the designer crowd. And by looking at my site you know I'm a developer not a designer. ;) A designer friend of mine uses and likes RimuHosting a lot.

GoDaddy Virtual Dedicated Server

Personally, I have months of hands-on experience with GoDaddy's VPS offering, which is pretty inexpensive, and clients have heard of them (or at least seen their SuperBowl commercials). Price is good, performance is ok (not great), but it's a very no-frills offering, and you have to be prepared to administer the server and manage backups yourself. Most of their VPSes are Linux, so you'll be using the shell a lot, but they also offer a Windows 2003 VPS with 10GB of space starting around $40/mo, so you can Remote Desktop into that.

You can pay for better control panels, managed backup, etc., but then the price starts to get into the $60-$100+/mo range, at which point you may want to look at one of the above VPS providers instead.

I also don't know whether they offer any kind of quick upgrade path, in case your site suddenly gets popular and you need to move your VPS to a big dedicated box pronto. I kinda doubt it.

Rolling Stones Gather No ... Mosso?

Other than VPSes, I was also intrigued by Mosso's offering -- hybrid hosting allowing you to run PHP and ASP/ASP.NET sites in the same set of files. However, I don't really care so much about running PHP & ASP side-by-side, since if I really have that kind of blend I might just get two VPSes (one LAMP, one Windows). I was more interested in their focus on making it easier for development companies to provide turnkey hosting and 24x7 tech support services for their clients.

However, they don't support ASP.NET 2.0, which for me is a dealbreaker -- I'd be doing my clients a disservice if I didn't give them the opportunity to upgrade ASP.NET 1.1 sites to 2.0 -- development is faster & easier, features are better, and performance is greater. Plus I have several .NET 2.0 sites already.

 

May 30, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Sunday, May 20, 2007

I was writing on a Startupping thread about scalability and figured I could reproduce some of what I wrote here. The topic was about planning and dealing with having to scale web sites as traffic increases. I pasted on some of my responses & added some headings that give a frame of reference to what I'm babbling about. Again, the below is personal experience and opinion, and there's a lot of information on the web to supplement (and I'm sure in some cases contradict) what I refer to, below.

Planning to Scale

In my previous life at a big dot-com, we actually started thinking about multiple servers right away, in order to provide uptime/redundancy & zero-downtime code deployment. We learned along the way, did a lot of research, and/or hired good people with experience. It's always good to have good people. We also hired a few specialty consultants for a few hours of suggestions, and worked with hosting providers who had other big clients, so that we could benefit from their experience.

We started out using software load balancing, moved to hardware load balancers, & eventually to round robin DNS between two large server farms (which had their own hardware load balancers, redundant everything, etc).

We had issues with scaling whenever we hit a specific wall, e.g. when we hit bandwidth & server limits for routers, firewalls, & data centers. We had issues when we hit certain technology limits. We also had issues if we got slashdotted, but that happens. One year we were unexpectedly linked to by a very large, prominent ad on the home page of a top 5 site, so our traffic levels went through the roof, we all got called at 4am, and we stayed pretty busy ensuring things kept running.

A few things we did

  • We used a managed hosting provider who could prep & deliver new servers quickly, to help us with scaling quickly. Managed hosting also meant the provider could help out with monitoring, troubleshooting, setup, and solving problems. So e.g. if you lose a PSU at 2am, you don't have to drive down to a colo and swap it out.
  • We did regular load & performance testing so we knew how many servers we'd need for certain traffic levels. We also did profiling to pinpoint bottlenecks, optimize certain parts of the site, etc.
  • We worked closely with our marketing team, so that we knew about upcoming media blitzes. We kept alerts on blogs & news sites to watch for links, & we kept an eye on our traffic.
  • We had monitors on our servers, so that if traffic/bandwidth/cpu started climbing unexpectedly high, we were alerted & could react before it was too late.
  • We looked at our traffic history so that we knew what times, days, & seasons were popular for our site.
  • We designed our software for easy deployment & replication, & streamlined our server setup process so that once a new server was ready, we could add it into the farm quickly.
  • We consciously built out our site to handle a certain load level, e.g. 3x last year's peak or whatever (3x is a made up example). You obviously need to handle spikes, but being ready & able to handle an "infinite" level of traffic isn't cost-effective, especially when you're young & trying to spend wisely.
  • We planned for & expected scalability & multiple boxes right away.
  • We had remote access to servers, reports, & monitoring tools, so that if a crisis occurred in the off hours, we could contact staff & not wait for them to get into the office.
  • We had names, functions, & phone numbers of key staff printed up on a laminated card (business card size) & given out to a number of staff, so that people could quickly contact others in case of an emergency.
  • We bought staff donuts or pizza or food. It was a cheap way to say thank you & made them feel appreciated & more willing to not complain (too much) when getting calls in the wee hours.

In hindsight, maybe we could have gotten away with spending less time thinking about scalability (or maybe not), but that would have increased our risk of disaster/embarrassment/etc, and potentially made for more painful & frequent firefighting. So there's the tradeoff. Just like other things in business, you can spent extra time and money up front to be more prepared for business growth, or you can wait until later and possibly pay more and feel more pain.

How do you know what load your site should handle? Should it be 3x last year's peak?

There's no magic number. We typically used 2x previous peak as a starting point only, and worked from there based on various factors. We put a good amount of thought into measuring our server performance and determining the traffic we expected and/or wanted to be able to handle, because it translated directly into how many servers we rented and thus how much money we spent on hardware. The load/server number really depends on your budget, your expected growth (including what your marketing team has up their sleeve), your risk/downtime tolerance (including SLAs or clients you have to maintain), and how fast you can scale. I mean, if you started out very small last year, and your marketing department is going to buy a superbowl ad this year, your traffic is going to be 100x last year's mark, not 3x.

So since capacity costs money (and unused capacity gets noticed), you have to plan it out a bit. If you just follow the rule of thumb and buy/rent enough equipment for twice last year's peak (or whatever), then that means most of the time your web servers are running at 1-15% capacity. And unless you have a lot of money, that means you might have management or investors asking you "hey, how come we spend so much money on servers when they're only running at 10%?" We mitigated that issue somewhat by having some servers keep busy performing "non-essential" functions (internal reports, data crunching, load testing, QA, etc) that could be curtailed during a crisis where we need every drop of CPU.

The whole "running at 10% cpu 90% of the time" issue one reason why expandable services like CDNs (content delivery networks), S3, & EC2 are intriguing, b/c in theory they allow you to scale some aspects of your service on demand without having a lot of extra horsepower & bandwidth sitting around unused. Or why VPSes are kinda interesting since you can potentially do some really quick deployments.

Another thing we planned from early on -- we planned to have our images & static files (css, js, etc) running on a separate domain, which allowed us to serve up static files using CDNs or other sources of cheap, fast bandwidth. That also helped us not max out router/datacenter bandwidth (at least not for a while), since images/css/etc are often a large portion of your outbound bandwidth.

Any must-have tools for performance analysis and dealing with traffic?

We were on a Windows platform, so it was tools like Web Application Stress Tool, LoadRunner, and Visual Studio Enterprise Architect's stress/load tool, among others. And of course you'll also want some sort of web analytics package (AWStats, google analystics, webtrends, etc) to tell you what typical user behavior is, what your most popular pages are, etc. Because your tests should mirror typical user behavior if possible. You'll also need performance monitoring tools like PerfMon, etc, so you can see how your servers perform under various loads. So you figure out the page activity levels for a given number of users, max requests per second, max/avg response time, cpu load, how high cpu/ram/disk can go before your performance & user experience starts to drop. There may be better/other tools today, and I don't know what platform you're targeting, but those can get you started. I think it's ok to start with simple tools. We used Excel a good amount, too, to map, graph, and view performance test data.

For monitoring, we used the tools that our hosting provider had (we had managed hosting), but we also had a simple script that ran every X minutes, tried downloading a page, tried executing a database query, checked cpu/ram/etc, & blasted out an email if things seemed wrong. We also wrote our web site to log errors & send out emails if for example, database queries were timing out, or if code started getting bad errors like "out of memory". There are also a number of third party apps & sites that can monitor your site or servers every X minutes & send you alerts -- some will check your serevrs remotely (e.g. Gomez, Webmetrics), while others can install on your servers. I can't think of any installed apps offhand to recommend, but I'm sure you can find something workable w/ some research.

When you start having scaling issues, does your staff spend all their time on scaling instead of development?

If you don't hire any additional staff & don't outsource any work, then yes, as your site gets bigger and your company grows, there's going to be more work to do, and your initial team will probably be spending more time on support/scalability/firefighting/misc tasks.

For us, as the site got more popular, more time needed to be spent on performance/scalability/uptime issues. But we still had features to develop. So we hired more people to keep up with increasing workload.

A supplementary route would be to go with a higher-level hosting provider (e.g. Rackspace) & pay them to help you scale out, and/or hire short term scalability consultants who can give you suggestions, etc. If your app can already scale horizontally, that helps, b/c then you have the luxury of having a choice: either spend time making your app faster, or money buying new servers. Or both.

Another suggestion: if you're starting out very small & cheap, you could start with a VPS on a single server, since you can quickly move that VPS to a bigger/faster machine before you need to scale to multiple machines. Once you go multi-server, you may even want to stick w/ VPSes, since the additional ease of backups/migrations/deployment might make up for the performance hit. Since virtualization technology is getting better all the time, the performance impact of running VPSes is smaller than you'd think (e.g. Xen is supposedly only a 5% hit). 

How quickly you can scale make a big difference in terms of the time you spend on capacity planning and actually scaling your site. Akamai also has some neat stuff (although it can be expensive) that allows them to serve up dynamic pages on their CDN, which in turn reduces the load on your main servers & prevents you from having to set up extra servers as quickly. Think of it like a front-end cache/reverse proxy type thing. Other CDNs might have similar offerings. There are also accelerators (both hardware, or software like Squid) that do similar stuff, although setting up your own front-end cache w/ stuff like Squid means you're losing one of the big benefits of CDNs, namely that they do the scaling instead of you.

 

Hosting | Other | Web
May 20, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Wednesday, April 11, 2007

I've been trying to do more meeting and networking here in Portland, OR, and I also enjoy a good cup of joe. And I need to get more anyhow since I work from home. So when I read some posts about Open Coffee Club, I thought that sounded like a great way to interact, socialize, & meet some of the other web-centric folks in PDX.

"The OpenCoffee Club was started to encourage entrepreneurs, developers and investors to organise real-world informal meetups to chat, network and grow."

Since there wasn't one listed for Portland, I decided to register an Open Coffee Club for Portland. If you're in the area, feel free to swing on by. I'm not yet sure when the best time/place to hold the meetings is, but I figure that can be ironed out.

April 11, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Monday, March 05, 2007

FYI I started a GoDaddy VDS (Virtual Dedicated Server) wiki at

http://godaddyvds.wikispaces.com/

My $0.02 on wikispaces: you can create a free, basic wiki there. It's not bad, although slow. I'd like to be able to set my preferences so that when I edit a page it starts with the text mode editor instead of the WYSIWYG editor, b/c
it takes considerably longer to edit a page using the WYSIWYG editor than the text editor. Also, the lack of any AJAX on the site is noticeable...everything you do involves a page load or page refresh (this is why the WYSIWYG editor is so slow, since it uses a number of popup windows).

So, if your audience is non-technical and/or you want a hosted solution, Wikispaces is fine. Or try StikiPad which is pretty similar (thx Scott).

Otherwise, if you have your own Linux host and/or you're more of a techie? Pick a different wiki. :) Moin Moin is easy to install, Giki is really easy to install (no search feature though), TWiki is easy enough...there are a lot of wikis you can compare. A number of hosting providers (e.g. DreamHost) offer various wikis as one-click installs, which is even easier. :)  And of course there are a few ASP.NET Wikis you can install, too.

Other | Tools
March 5, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Sunday, January 21, 2007

A question came up recently on a mailing list I'm on about virtual machines for production applications. I've used virtual servers for web & database apps before, but only for dev/qa purposes. It made it much easier to go through deployment scenarios, try out new builds & roll back if the install failed, & generally avoid the time & money sink of dealing with setting up & maintaining actual physical machines. Plus virtual machines are easier to throw onto more powerful hosts as your needs grow.

However, if your organization is considering virtual machines for their production apps, they're in growing company. Most of my experience with production apps has been to start with traditional shared hosting plans, then move up to dedicated machines. That approach works especially well if you only have a few web apps that can all run on the same machines, or if your CPU needs are high.

However, using virtual machines (aka virtual servers or virtual private servers) can be a good way to save money if you have a number of heterogenous and/or legacy applications that need their own "server" (for security, configuration, manageability, specific OS requirements, or other reasons) but don't have very high horsepower needs. In that scenario, having a separate physical machine for each app can be costly overkill, and require you to answer repeated questions from your boss like "why did we need to buy and maintain 5 new servers when they're all under 10% utilization?" 

Instead, you can have each app on its own virtual server, and put them all on one or more physical machines -- however many are needed to run the apps effectively. Costs are reduced since you have fewer machines to power, watch, store, and maintain. Scaling applications can be simplified since you can allocate more or fewer resources to specific vitual servers, and you can always move them onto other, more powerful physical machines as your needs grow. Plus, disaster recovery can be easier, since if you have a hardware failure, you can just load the virtual server onto a different machine and keep on truckin'.

VMWare has some good info on their site: http://www.vmware.com/solutions/home.html

So does XenSource (Xen is open source virtualization software) http://www.xensource.com/solutions/ 

And I might as well link to MS Virtual Server, which apparently is free(?) :) http://www.microsoft.com/windowsserversystem/virtualserver/evaluation/vsoverview.mspx

Plus there are some other links around the web if you search on "virtual server" or "virtual private server."

Hardware | Hosting | OS | Other
January 21, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Sunday, January 14, 2007

When you embark on a web redesign project, it's important to ask your client open-ended questions to get some ideas on what they want to accomplish with their new site. You want to learn about their users, their goals, and what's important to them. From there, you can start thinking about the information architecture of the new site and potential designs.

Here's a partial list of questions you can ask (mostly courtesy of Scott McMillin):

  • Why are you re-designing your Web site?
  • What goals do you have for this re-design?
  • What are your company's core values? What sets you apart in your industry?
  • What do users need from your Web site?
  • Is there any information your users are having trouble finding?
  • Describe your typical user. Do you have different types of users who need different things?
  • Can you provide any aggregate data on your users, both demographic and technical?
  • If you could only put three pieces of information on your home page, what would they be?
  • List some Web sites and/or specific pages that you feel are effective in communicating the feeling or message that you want your site to evoke. How and why are they effective for you?
  • Do you have a logo or logotype that you want to use? Do you have identity or branding standards that must be adhered to?
  • Have you gotten user feedback on your current site? If so, what have you learned from that feedback?

 

January 14, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



As I mentioned in Social Networking for Sale, I believe social networking software/sites (SNS) will become pretty commoditized in 2007. It's already pretty cheap & easy to get your own community site.

For example, there's Scuttle, open source social bookmarking software. If you need social networking software (a la MySpace), you can find it for free/open source with Alicia (aka PHPizabi) or AroundMe or osDate or Yogurt or Dolphin.

If you want a fancier MySpace clone you can spend $300 or so for phpFox or Handshakes or BuddyZone or webNetwork or Elgg Spaces or SocialEngine or a dozen others. 

There are also hosted, turnkey solutions like PeopleAggregator, Me.com, NingPringo, KickApps, and others, which offer plans ranging from free to paid.

There's also a social networking addon for vBulletin called Zoints Local -- plug it into your existing vBulletin site and bingo! instant "community."

And of course there are "community" addons for CMS+ platforms such as phpNuke, Joomla (Community Builder), Drupal, etc. allowing you to truly build your own SNS. One could also do it by hand using Rails or some other rapid dev platform.

No matter which option you choose, you have a number of customization options, not all of which require a programmer.

The point of all those links is to reinforce the fact that there's already a slew of cheap starting points for a social community site for would-be MySpace topplers. I figure there will eventually be a number of vertical social networks (VSNs) for gamers, hobbyists, flyfishermen, cheerleaders, etc. Maybe they'll be within MySpace, or maybe third party sites. Better yet would be if VSNs could integrate with people's existing social networks elsewhere on MySpace, Facebook, LinkedIn, etc, so that you don't have to abandon your friends, profile, and blog posts to tap into a more targeted community. People would be more likely to join a new social network if they didn't have to reupload all their photos, reanswer all their profile questions, etc.

PHPizabi Alicia

 

Boonex Dolphin
dolphin.png

OSDate
osdate.png

Zoints Local
Zoints Local

January 14, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [2]



 Thursday, January 04, 2007

I've been talking with different clients about building social networking sites. What I'm hearing more is the interest in specialized or vertical social networks (VSNs). Then what I hear is "so, how much would it cost to build a web 2.0 social network for <insert niche here>?" The answer is: it's getting cheaper all the time. The second, less-expected answer? That cheaper-to-build social networking sites isn't necessarily good news for would-be MySpace killers.

Interestingly, I noticed that mashable had a link indicating that ruduzu, the "anti-social networking site", is for sale. The winning bidder gets all the code, the existing community (all 273 of 'em), and one year of hosting. So far the bid is up to $3,800 with 15 days to go, so it's possible that potential MySpace killers can get their very own social site for well under $10,000!

I do think that plug & play social networking features (social widgets?) might be more popular in 2007. TechCrunch already talked about a comment system that could be quickly embedded in any site. I blogged about Plaxo's Address Book Widget making it easy to add all your buddies to a new social web site (and I wouldn't mind being able to import actual buddies from other social networks, too). So I'm sure we'll see other widgets (instant photo gallery! instant blog! instant buddy list!) this year, along with a huge crop of rapidly developed (and probably rapidly abandoned) "web 2.0" sites.

Thus comes my real point -- I think the base technology is becoming more of a commodity. I believe it's getting easier than ever to develop software and web sites, and developers are more reluctant to reinvent the wheel. Which IMO means two things

  • the barrier to entry for crappy "me too!" sites will continue to get lower
  • the differentiators will be (as in the past):
    • continual improvement & innovation
    • ability to raise and manage capital
    • ability to market and make deals
    • ability to serve up interesting content 
    • hard, continued work

So in 2007, if you wanted to knock out a quick & dirty MySpace clone in a few weeks, you probably could. You could make a Google Maps mashup in under a week. Maybe even build a deli.cio.us knockoff in a few days.

But if you want those sites to be something other than resume fodder, expect to put in some hard time. The days of "build it and they will come" are gone. If they ever existed at all.

January 4, 2007    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Thursday, December 28, 2006

It's been a bit since I last wrote, but I wanted to write a quick piece about New Year's Resolutions.

At the end of every year, many of us look back at the past year and try to come up with things we'd like to do differently in the coming annum. Dieting and exercise are probably near the top of most people's personal lists, of course, but I think setting some resolutions can also be good for your career.

Like any good goal, a resolution should be something realistic and achievable. Ideally it should be specific (e.g. "exercise at least once a week" instead of "exercise more") to allow you to measure your progress. And of course you should have a timeframe in mind. Often it's just "before the end of the year" but sometimes it's something different. But you should also allow yourself to adjust your resolutions, and give yourself a chance to redeem yourself if you mess up. Get someone else involved (friend/partner/coworker/accountant) so they can cheer/nag you on. And yes, the emphasized words above fit into that handy goal acronym -- S.M.A.R.T. -- that I discussed a while back on setting goals.

Resolutions should be something that are important to you. Think back about the missed opportunities over the past years. Think about what you wish you accomplished but didn't. Think about how good it'll feel to cross those things off your list, and look back, a year from now, feeling better about yourself and your career. Force yourself to consider the above reasons every day, and you'll be further towards making things happen.

Anyhow, in the spirit of resolutions, here are my techie resolutions for 2007:

  1. Get a multi-exam technical certification
    I've been studying on & off for the MCAD but have always been "too busy" to get it and wasn't sure if it was even necessary. Well, I want to get it done. Maybe the MCAD, maybe MCPD, maybe something else. But some sort of Microsoft certification that involves more than one exam. It's possible that during the year I may do a non-Microsoft cert instead, but we'll see.
  2. Publish something technical
    It can be as simple as publishing an article on a site like 4GuysFromRolla, or maybe authoring a column for a printed magazine. Or even being involved in a book. But I think it'll be good for my career and my personal development to push myself and publish something. Sure, blogging takes some effort, but writing a focused, clear, and useful article is a new level of contribution.
  3. Speak somewhere
    I had a chance to speak at Portland's Code Camp 2006 this year. It was fun, a lot more work than I expected, and a great learning opportunity. I want to repeat that experience again in 2007.
  4. Learn about and/or get involved in something new technology-wise
    I want to branch out and get some experience and involvement in something substantial in the technology world. Maybe it's working more closely with GData, or deeper experience with mobile development, or using Ruby on Rails for a few projects. But I'd like to spend enough time with something that you might call a niche so that I can talk intelligently about it, help others with it, and/or specialize in it if I wanted to.
  5. Get a new computer
    I love my overclocked Athlon XP 2100+ dearly, but it's time to upgrade. Visual Studio is slow enough, and I'll be doing more and running more in the year ahead. I suppose I could scrap it all and go the Notepad + Mono route, but I really like strong IDEs. Plus who knows what new games are coming out in 2007. :)

That's all for now. There are other things I'd like to do next year, but they're smaller, less important (to me), and I don't want a huge list. You'll notice my resolutions are a bit on the generic side, partly because technology moves so quickly and I haven't 100% decided how I'd like to fulfill them yet.

Hopefully I've encouraged a few people to make some 2007 techie resolutions for themselves, and provided some ideas on some fun and useful things to resolve to. In case my list isn't for everyone's taste, here are some other good (IMO) techie resolutions that people might choose:

  • Update your resume
  • Start a blog and/or personal web site
  • If you're not ready to write articles, post some code samples up on CodeProject.
  • Attend a conference or trade show. See some presentations, talk to a few people, and hand out your business cards. Code Camps are good because they're informal and free, but anything that exposes you to people, ideas, and sunlight is good.
  • Join (or start!) a local users' group and attend some meetings. It's a great way to network with others, get ideas and feedback, and snarf some pizza.
  • Share your technical knowledge with others in need. Volunteer your services for a school, church, or non-profit. Tutor kids on computer skills. Teach or help out with a YMCA class.
  • Clean out your basement and donate all those older computers, monitors, cables, and whatnot to groups that can refurbish them and put them to use. Check out Microsoft's Computer Donation Tips page for ideas and places to donate. You'll be helping others and getting a tax writeoff at the same time.
  • Get involved with something technical outside of work, e.g. make your own mashup, contribute regularly to technical newsgroups, or help out with open source projects on SourceForge or CodePlex.
  • Implement a backup scheme so your pictures, documents, and code don't get lost in case something happens to your computer or home.
  • Be proactive about your career by learning a new system, using a new tool, or maybe even transitioning to a new position and/or company.
  • Replace your ugly, power-hungry, eye-hurting CRT monitor with a nice LCD. You can find a 19 incher on NewEgg for $200 or less, and believe me, you and the environment will be glad you did it.
December 28, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Monday, December 04, 2006
I just posted an article up on CodeProject about ASP.NET's machineKey. Feel free to check it out & comment.
December 4, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



Development is switched over to a new web server, so if you see this post, you're on the new box. Lucky you!
December 4, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Thursday, November 30, 2006

In the past I blogged about cheap easy offsite backups. Back then I wasn't really looking at Amazon's S3 (Simple Storage Service), but now I realize that it might make for a nice additional backup. I'm still using Mozy for images and videos, but I'd like a better place to store my database dumps, etc than uploading them via FTP to an ISP.

Joseph Scott has an interesting post on comparing storing files on Dreamhost vs S3. One thing I think he's leaving out is the chance that if you fill up your 200gb account at Dreamhost, they might not like that. Jeremy Zawodny has a list of S3 backup tools -- be sure to read the comments for other suggestions, too.

November 30, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [3]



 Tuesday, November 21, 2006

When developing a web site for screen readers and other accessible browsers, you often have to wrestle with the demands of Section 508 compliance and a nice design.

One WCAG guideline is to provide a "skip navigation" link near the top of the pages. Since you want this link to be available for screen readers, but hidden for normal browsers, your first instinct would be to do something like this:

<div style="display:none"><a href="#content">skip to main content</a></div>

... a bunch of navigation here ...

<a name="content" />
Main content here ...

However, you'd be wrong. I found this screen reader test at Access Matters that indicates that many screen readers try to obey CSS commands, and so many "hidden CSS tricks" like display:none or a 1x1 blank pixel with ALT text end up not getting read aloud by browsers.

It seems like the best solution, if you need to hide the "skip to content" link, is to use something like this

<div style="position:absolute;top:-100px;"><a href="#content">skip to main content</a></div>

Edit: FYI, Jaws and Window-Eyes are the first & second most popular screen readers, at least in 2003 when they commanded 65 & 35 percent of the market, respectively. But more recent articles imply the same thing -- those are the two to support.

 

November 21, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Monday, November 20, 2006

I was reading about NewsHutch, yet another web-based RSS aggregator. Although it looks nice.

Anyhow, their blog post about looking for a new services yielded some suggestions on hosting plans. You can skim through the comments and see.

I've personally worked with Hostway and Rackspace in terms of hosting. Rackspace is expensive but has IMO great support and service. Hostway has a decent array of plans but I've had issues with their responsiveness.

Railsmachine seems interesting for RoR shops. SuperbServers seems like it has great prices (2gb Conroe with RAID for $200/mo) -- the question would be how good their service is. I guess at those prices maybe you just buy two web servers & load balance them. There were also a few kudos for ThePlanet, whose prices also seemed decent. 

If you're in the market for a dedicated server, I would highly suggest getting a RAID setup.

November 20, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Wednesday, October 18, 2006

Last year I enrolled in Microsoft's Empower for ISVs program, which for $375 allows small businesses to get an MSDN Universal subscription & other benefits in order to help them build a software product. In exchange for getting MSDN so affordably, you must be a real business (sole proprietor is ok) and be committed to producing at least one Windows-compatible product during your one-year enrollment period.

Now, if you aren't able to get your product produced in time (which I wasn't due to my upheaving move to the pacific Northwest), you're allowed to renew your Empower for ISVs members for an additional year (only), whereupon you have to get your product out within 18 months of your original signup date.

Signing up the first time was easy, but renewing my membership was much harder. I didn't see anything specifically for renewals other than a link to the main enrollment form, which is only for first-time signups. After emailing the Microsoft Empower group, I received this reply:

Thank you for your email regarding your re-enrollment in the Microsoft Empower for ISV Program.

We apologize for any inconvenience this may have caused you. In order to re-enroll in the Empower for ISV Program, you will need to fax in the form to us. There is a fax number on the order form, and you will have the option of paying by credit card or check. We apologize that there is no option to pay online.

No link to said fax form, and I didn't see it anywhere. Finally after some googling I found a link to the Empower Community site and eventually found a link to the Empower for ISVs re-enrollment fax form. So there you go ... print out that form, fill it out, fax it in, and you're re-enrolled. I decided to pay by check (I don't like the idea of my credit card number lying on a fax machine somewhere), so they'll be sending me an invoice in the mail.

October 18, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Friday, September 08, 2006
So that my blog shows up on Technorati. Funny, it seems like I did this before. Hmm. Technorati Profile
September 8, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Wednesday, August 09, 2006

Had a few issues running a 1.1 site on Windows 2003. Things I did to resolve the issues:

  • Made sure v1.1 was selected in the ASP.NET tab in IIS Manager for that site. That fixed the issue with ASP.NET not sending the aspnet_client files to the browser.
  • Made sure the \aspnet_client\system_web\1_1_4322 files were in the wwwroot directory for that site. Also copied the latest versions of the js files from C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\ASP.NETClientFiles into the \aspnet_client\system_web\1_1_4322 wwwroot folder. That resolved the issue where no postbacks were occurring due to an old bug w/ client side validation, discussed on Thomas Freudenberg's blog.
  • Was getting a weird error "CS0016: Could not write to output file 'c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\xxxxx'. The directory name is invalid." Turns out the TEMP & TMP environment values were set to a user-specific account. KB825791 gives the fix .. basically changing the environment values and ensuring that the ASPNET and NETWORK SERVICE accounts have full rights to the temp directory.

Now it works. :)

August 9, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Wednesday, August 02, 2006

AKA "working virtual, or virtually working?"

My friend Griffin Caprio blogged about the virtues of being a virtual worker and finding wifi hotspots. I thought I'd chime in with a few tips of my own.

Insure your stuff

Make sure your computer equipment is covered. Many homeowner policies DON'T cover computers at all, or not if they're used for business. You may want to get a small umbrella business insurance policy to cover your equipment at home & on the road (think dropped laptop at the airport). Ask around for referrals, or pick a few insurance agents out of the phone book.

Host a Web Server

If you have a static IP address from your ISP, then you can configure DNS to point to a web server on your network, and host away. If you have a dynamic IP, however, then you need to use dynamic DNS to ensure that when your IP address changes, your DNS entry (www.yourcooldomain.com) points to the right IP. There are several providers. I've used DNSExit for years and it works well, but you can also check out No-IP, TZO, or DynDNS. Or others. Some routers come with built-in support for certain dynamic DNS providers, meaning a simple config change in your router is all that's needed to keep your DNS up to date.

Back up your stuff

What would you do if your computer crashed or your hard drive blew out? Would you lose any work? How long would it take you to recover? Backups are important for any IT professional, and I'd suggest an automated approach. You can go with a service like Mozy that runs on your PC and backs stuff up in the background. Or, if you have a place you can FTP files to (e.g. your ISP or an inexpensive host like e-rice or dreamhost) you can pick up a copy of WinZip 10 Pro which can regularly zip up & upload files via FTP. Remember to not only back up documents, but emails, code, and database dumps. Having an organized directory structure where your important files are makes it easier. Then, if disaster strikes, you'll be in a better position to recover. And the silver lining is maybe you'll now have a reason to get a shiny new PC.

August 2, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Thursday, July 06, 2006

FYI, I'll be speaking at Portland Code Camp 2.0 this year, talking about incorporating AJAX functionality into ASP.NET applications. July 22nd & 23rd at WSU's Vancouver campus. It's free for everyone, so go ahead and get registered. Code Camp is a very informal, code-centric (as opposed to yak-centric) conference put on by developers, for developers.

I was tempted to also speak about O/R Mappers & code generators, but I think one presentation is enough this time around. :)

Edit: Code Camp is down to one day, July 22nd. Registration is free & starts at 8am.

July 6, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Thursday, February 16, 2006
Robert Scoble, blogger-under-notice from Microsoft, posted an interesting blurb about search ranking and secret blogger cliques. He suggested sticking the word brrreeeport in your blog to prove his point about tagging on Technorati. Wonder if it will work?
February 16, 2006    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Friday, December 02, 2005
I haven't blogged for a while because I'm in the middle of moving cross country to Portland, and my computer is packed. ;/ But I found a laptop & will write a quick blurb about some basic search engine optimization techniques and web marketing. In my case, I was asked by my dad to soup up countrysidemanor.net, the web site of Countryside Manor, a retirement home our family runs. I haven't started yet (oops) but here's the basic plan...

Make the site useful

If the site isn't useful then your other marketing efforts are wasted. Some basic tips:
  • Keep the page size small. Don't clutter it (especially the home page) with huge graphics, flash movies, etc.
  • Make it easy for people to contact you. A prominent "Contact Us" link that takes the user to a page with address, phone number, business hours, and a link to maps & directions (e.g. mapquest.com) is helpful. To get a maps & directions link, go to your favorite map site, enter in the address, copy the URL from the browser address bar, & link to that from your site in a new window.
  • Have a site menu with easy to understand links. Don't make people scroll over icons or colored boxes or otherwise have to guess how to navigate your site. Clearly labeled links and sections work best.
  • Don't leave "under construction" or "coming soon" lying around. If you don't have time to build a page, don't link to it. Also, get rid of broken links.
  • Spend some time thinking about what information you want to provide and how it should be organized. You can start with a bulleted outline (just like you might have done for high school essays) to organize your ideas. Your web site shouldn't look messy or cluttered.

Optimize for spiders

Next you'll want to ensure that spiders and search engines are able to crawl your site and understand what it's about. Some suggestions:
  • Make sure that you can reach every page on your site just by clicking links. A good test is to turn off javascript on your browser, and just use your mouse to get around your site. If you can't reach a page without filling in a form or using javascript, then spiders can't either.
  • Don't use querystrings if possible. Spiders a less likely to go to pages wuth querystring information. You can read up on mod_rewrite or "url rewriting" if you want to use querystrings but not have them appear in your URLs.
  • Make sure the HTML in your pages accurately reflects what's in the page. Specifically
    • Ensure each page has a descriptive TITLE tag
    • Add a META Keywords and META Description tag to the HEAD section of your page
    • Make proper use of header tags (H1, H2, etc.) to group the information on your page.
    • Your title, headers, and meta tags should contain action verbs, nouns, and other relevant words that people may search on.
    • The more content (aka text, not images) that's on your pages, the more likely spiders are to index it.
    • All images should have ALT tags.
  • Make sure your domain name isn't going to expire. ;) That happened with the Countryside Manor retirement home site ... a squatter grabbed the .com domain name when it expired (the expiration notices got lost in the mail during a registrar transfer snafu). Unfortunately, the squatter wanted $3000 to give it back, so we bought the .net domain name instead, and paid it up for 10 years.

Help spiders find your site

Lastly, you'll want to help spiders find your site, usually by getting other sites to link to it. Some ways to do that are
  • Submt your site to search engines directly. For example, you can submit to Yahoo, or submit your site to MSN.
  • Add your site to web directories. DMOZ (the Open Directory Project) is a large, free directory you can list your site with. Also try Yahoo Directory. Plus, do a web search on relevant sites (e.g. "retirement home directory") to get a list of other sites you can submit your web site to. In my case I found 5-10 different sites that I could get countrysidemanor.net listed on. Some of them cost money, but many were free.
  • Contact other web masters and ask them to link to you. This is called a "link exchange." Look for related web sites and contact the web master, asking if they'd be willing to link to your site and in exchange you'll update your site to link to theirs.
  • Start a blog. You can sign up on Blogger, Typepad, Wordpress, or some other blogging service, and have the blog hosted on your web site. Your blog will usually have a RSS URL, which you can then submit to numerous blog directories such as those listed by Robin Good at the RSS Top 55. If you write something interesting or useful in your blog, you might even get people to link to it for free and say something nice about you. :)
So, the above is a basic strategy you can employ when someone asks you "Hey, can you put my site on Google?" I didn't bother going into paid placement like with Google's AdWords, because you can get a lot of mileage out of good ol' SEO. Remember, there's more to SEO than keywords and META tags ... it's about getting lots links to your site from other sites, and then making your site a place worth visiting in the first place.
December 2, 2005    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [1]



 Thursday, August 04, 2005
Bah, got some blog comment spam the other day. Or at least I think it was spam. Even though dasBlog has a CAPTCHA control on the comment field (to prevent most comment-spam-bots), people can still manually add comments that have no relevance & link to their sites filled with affiliate links. Bujarf.
August 4, 2005    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]



 Saturday, July 16, 2005

Submitted my blog to a few different places, including popdex, technorati, bloguniverse, and yahoo. The trick with Yahoo is to create a MyYahoo page and add your own RSS feed to it. Then it'll get crawled.

Check out http://www.masternewmedia.org/rss/top55/ for a list of many (many) places to submit your RSS feeds. I made it to number 95 before I got tired. ;) Also, http://www.blog-connection.com/submit-blogs.htm is another smaller blog submission list.

So far I'm pretty happy with dasBlog, although it could use a few improvements. And obviously I need to update the design. But anyhow.

July 16, 2005    Bookmark to Digg or other social bookmarking
#    Disclaimer  |  Comments [0]