Taking the Rob Conery Challenge

Last August, Tekpub co-founder and ex-Microsoft employee Rob Conery presented a challenge to all developers: build your own blog.  He suggested that a self-built blog engine would serve perfectly as a résumé, and that makes a lot of sense to me.

Most of the code I’ve written over the years is either:

a) proprietary, and owned by the company I was working for when I wrote it

– or –

b) embarrassing throw-away code that helped me learn some concept, but isn’t good enough for anyone else to see.

Writing a blog engine is a great idea because once it matures I can start dogfooding, migrate my existing blog to it, and build in the features I want the most.  It’s also an opportunity to practice and learn new skills.  Here are some things I haven’t tried yet, or would like to use more but haven’t had the chance:

  • Mercurial
  • TDD
  • ASP.NET MVC 2.0
  • Entity Framework 4.0
  • jQuery

Therefore, I’m announcing here and now that I’m taking the challenge.  I plan on hosting the project on bitbucket.org so anyone can see or use it.  I’ll post updates here as I make progress.

Advertisement

Spotting the International Space Station

Under the right conditions, you can see the International Space Station passing overhead, even without a telescope or binoculars.  In fact, the ISS travels so fast at 17,000 mph that magnification can make it difficult to track.

Last night we stepped outside at about 10:30pm to see if we could catch a glimpse of it, and I managed to capture a photo.  I took this, hand-held, with a Nikon D60 and the Nikkor AF-S 70-300mm lens with Vibration Reduction turned on:

International Space Station

I expected to get a featureless, round blob, but you can just start to make out the form in this image.  Maybe next time we’ll try getting some pictures with the telescope.

If you want to see the ISS, you need to look up the predicted times for visible passes in your area.  I use www.n2yo.com, but some people prefer Heavens-Above.  The station travels roughly west to east, and looks like a steady, fast-moving star.

It’s pretty cool to look up at an object in the sky without using any special equipment and realize that there are probably astronauts on board.

Goodbye Rochester, Hello Austin

It’s official: after careful consideration, my wife and I are leaving Rochester, New York in September and moving to Austin, Texas.

A few reasons for the move are:

  • The cost of living is lower.
  • The taxes are lower (including no state income tax).
  • There are more IT companies, and hopefully, more job opportunities for an experienced software developer.
  • Most of my family members are moving or have already moved to other states for better work.
Texas breakfast
My wife's hotel breakfast during our visit to the Austin area

In the past decade, there has been an exodus from Rochester.  Declining local businesses and clueless state lawmakers, who believe that raising taxes is the way out of our recession woes,  offer little incentive for anyone to stay.

I’ve read and heard so many great things about Austin that we decided to pay a visit in April.  Everyone was incredibly friendly, the city was easy to drive (I normally hate city driving), and the food was amazing.  Most Austinites seem proud of where they live, and I like that.

Here are some recent news articles contrasting New York State and Texas:

Barbecue, here we come.

Installing Mercurial on Windows 7: “abort: no username supplied”

Yesterday I installed Mercurial.  I wanted to see what the hype was over Distributed Version Control Systems (DVCS).  I was satisfied with Subversion before, but after you see “Git” and “hg” in forums and blogs enough times, curiosity gets the better of you.

I like TortoiseSVN’s Windows shell integration, but even though there is a TortoiseHg, I’ve read mixed reviews about its stability.  Also, the screenshots make it look unnecessarily complicated.  It turns out I was unjustified in my concerns, since Mercurial’s command line interface is so simple and intuitive, the lack of GUI makes no difference.

If you plan on learning Mercurial yourself, I recommend you read Joel Spolsky’s Hg Init tutorial first.  It’s well-written and interspersed with humor.  If you’re a Windows 7 user, this is almost all you need to get started.  I say “almost” because the first time you commit, you’ll see the error message:

abort: no username supplied (see “hg help config”)

There are three ways you can deal with this issue:

  1. Use the -u option to supply a username during every commit.  Trust me, you don’t want to have to do this.
  2. Create an hgrc file every time you create a new repository, and put the username there.  Again, this would get annoying fast.
  3. Create a Mercurial.ini file in the C:\Users\your_username folder (or whatever your user folder is in Windows).  The file should contain the following text with your first name, last name and email substituted:
[ui]
; editor used to enter  commit logs, etc.  Most text editors will work.
editor = notepad
username = First_name Last_name <email_address@example.com>

It’s too bad the Windows installer for Mercurial can’t handle this on its own, because it creates a negative first impression of the software.  Once you fix the problem, things should work fine and the software is easy and enjoyable to use.

Test Driving the Quplo Preview

What Quplo Is

Quplo (pronounced “CUE-plo”) is a Web prototyping tool that fits in a niche somewhere between pure visual design and building your app.  It’s completely Web-based and requires no downloads, and the results can be viewed instantly.

What It’s Not

Just to be clear, Quplo is not a Balsamiq Mockups clone, nor does it try to be.  The emphasis is on interactive prototypes and not static images.  Unlike Balsamiq, Mockingbird, or Microsoft SketchFlow, Quplo has no drag-and-drop graphical designer.  At its core is a syntax-highlighting text editor that supports HTML 5, CSS, and Quplo’s own built-in language.  Quplo complements, rather than competes with, wireframe drawing tools.

Similarly, Quplo doesn’t generate wireframes in the rough, handwritten style commonly seen in prototyping.  As such, it does nothing to protect you from the false perception of completeness that customers and nontechnical managers may have when viewing your prototypes — you’ll have to deal with that yourself.  On the other hand, it gives you complete control over your prototype’s interface and behavior.

User Interface

The UI is intentionally sparse, with little more than the editor itself on the left and a syntax reference list on the right.  One nice touch is that the editor can be expanded to fill the browser window, which maximizes screen real estate when writing markup.  Presentation is clean and easy on the eyes, with soft-looking gradients throughout the site.

Quplo user interface

Compatibility and Performance

I tested Quplo in Firefox 3.6.3 on Windows 7 and XP.  Performance was good in both operating systems.  I did notice a bit of choppiness scrolling in the text editor at times, but it had no effect on the overall experience.

When I attempted to view the site in Internet Explorer, I got a rather humorous surprise:

Quplo in IE

I’m certainly no IE fan, but I’m not sure how I feel about this.  At least it fails gracefully.

Update:  Martin Kool from Quplo commented to explain the rationale behind not supporting IE at this stage, and that it will be supported before they go live.

Rich Editing Functionality

The online editor is slick and carefully tailored for editing markup.  Line numbers are shown by default.  Syntax highlighting and auto-completion are fast and don’t interfere with typing.

Quplo’s Built-In Language

Quplo supports a tag-based language that’s an unusual hybrid of declarative tags and imperative actions.  It offers simple functionality like looping, variables, and conditionals, but perhaps more importantly, it also lets you reuse sections of markup with a templating system consisting of “layouts” and “parts”.

Subscription Model

Quplo is available on a monthly subscription basis under a number of plans.  Plans vary in storage space, maximum number of users, number of prototypes, and several other bullet-point features.  Daily backups and export capability are part of each plan.  Closing your account deletes your prototypes, so make sure to export copies if you decide to end your subscription.

Support

The people at Quplo are extremely helpful and responsive when it comes to questions, and they’re active on Twitter, email, and their own blog.

Conclusion

Quplo is a promising new prototyping tool that’s currently in beta.  While most of the functionality could probably be substituted with a combination of other tools (offline text editor, JavaScript, server- or client-side includes, Google docs, etc.), Quplo distills everything you need to build interactive prototypes into a single, easy-to-use online service.  I’m considering integrating Quplo into my design workflow for my next project, and I look forward to the initial release.

Learning and Staying Current in .NET Development, Part 2

Here are more ways to build and supplement your programming knowledge.

Stack Overflow

stackoverflow.com is a free programming question and answer site.  Search the existing database or ask and answer questions to build reputation points.  Lots of talented developers commit their brainpower to making the stackoverflow community great, so it’s worth checking out.

Personal projects

Always have a personal project that you enjoy working on, and make sure to write code every day, even when your job doesn’t require it.  If you don’t like programming enough to do it outside of work, you may want to reconsider if software development is right for you.

Open source projects

Contributing to open source projects helps you demonstrate your abilities to prospective employers because it makes your work easily accessible.  It also shows that you’re self-motivated and committed to your own education.  SourceForge.net is currently the largest open source development Web site, while CodePlex is hosted by Microsoft, and freshmeat.net indexes Unix and cross-platform software.

Blogs

Read developer blogs to see what others in the industry are up to.  NOOP.NL maintains a list of the top 200 blogs for developers.  That should keep you busy for a while.

Developers on Twitter

What goes on in the minds of other programmers?  What are their daily routines like, and what do they choose to share with the world?  Much like the list of top blogs, NOOP.NL maintains a list of top developers to follow on Twitter.

Your own blog

Writing your own technical blog can make you a better developer and help you earn the respect of your peers.  Why?  Because making a good programming blog is hard.  In order to write authoritatively on any subject, you should know that subject inside and out.  Just coming up with blogging topics can be a challenge.  If you’re having trouble, read the advice of other technical bloggers.

Tweet about programming

Rather than just read about other people’s lives, open a Twitter account and try to write something programming-related every day.  It will force you to read the news and think about what’s interesting.  If you don’t want to bore your followers, that is.

Programming competitions

Programming contests help you hone your skills by pitting yourself against other developers.  It’s fun to win, but just participating can help you gauge and improve your abilities.  Check out Google Directory for all kinds of challenges.  TopCoder is one place where the competitions are going on all the time.

User groups

User group meetings are a good place to go for networking.  They can also be an opportunity to practice your public speaking skills.  Teaching others is one of the most effective ways to learn.

Magazines and journals

Magazines like MSDN Magazine and Visual Studio Magazine release monthly issues available in “dead tree format” and online.  You may be able to get subscriptions for free if you’re an industry professional.

Certifications

Although this is a controversial topic, I do see at least some value in studying for and taking certification exams.  Doing so helps you round out your knowledge, and if nothing else it gives structure to your learning and a goal to accomplish.
Whatever you do, don’t delude yourself into thinking that certifications are all you need.  At best they are a supplement to the coding and reading you should already be doing.

Social news sites

“Social” news sites are news sites with a reader-participation element, such as voting on articles.  Digg, Reddit, and Slashdot fall into this category.  While some of the material appearing on these sites is legitimate tech news, there is often a lot of noise to filter through.  It’s up to you whether it’s worth it.

And finally, the #1 most important resource for developers

When in doubt, Google.  The search engine is such an essential tool that we often take it for granted.  There’s even a site, “let me google that for you“, that pokes fun at those who refuse to perform their own searches.  Don’t underestimate the value of good search skills.  Nobody knows everything, but finding new information efficiently is fundamental to job performance.  Take a look at Google’s search tips if you haven’t already.

Learning and Staying Current in .NET Development, Part 1

This series lists some of the resources I use to educate myself and stay informed about new technologies.  Take a look if you’re a fledgling developer just starting out, or if you’re simply looking for a new way to keep up-to-date.

These are mainly aimed at the Microsoft development stack, but many are transferable to other platforms.

Microsoft resources

MSDN Flash Developer Newsletter

You can subscribe to MSDN Flash if you want to get news delivered directly to your inbox, or you can just go to the Web site and view the latest issue in your browser.

MSDN Events and Webcasts

Check to see if Microsoft has any in-person events near you.  The presentations are informative and you’ll get the opportunity to network with other local developers.  Sometimes they even give out free stuff like books or software licenses.

The event portal also links to various Webcasts in case there aren’t any live events in your region.

Channel 9

Channel 9 is a community for learning, and a place to get videos, podcasts, and screencasts. You can also watch shows and participate in the forums. There is a ton of content here, and there’s always something new.

DreamSpark

If you’re a student, DreamSpark will get you free access to all sorts of developer tools that would otherwise be prohibitively expensive.  Visual Studio, SQL Server, and Expression Studio are just some of the products offered.

Beta software

Don’t underestimate the value of downloading software while it’s still in beta.  Visual Studio in particular is known for it’s very high-quality pre-release versions.  A good way to guarantee you don’t fall behind is to become an early adopter.

Books

Even in an increasingly online world, books are ideal for assimilating large amounts of information at once.  Do yourself a favor: take a break from clicking and start flipping pages for a while instead.

The Pragmatic Bookshelf

Pragmatic books are concise, well-written, and authored by people who are clearly passionate about the subject matter.

O’Reilly

O’Reilly has historically published some of the best technology books available, although their consistency has declined somewhat in recent years.

Classics

The Mythical Man-Month

Provides several insightful essays like “The Mythical Man-Month”, “The Second-System Effect”, and “No Silver Bullet”.  A must-read, even if it is showing its age in some parts.

Design Patterns: Elements of Reusable Object-Oriented Software

Also known as the “Gang of Four” (GoF) book, Design Patterns is full of elegant solutions to commonly occurring problems in software design.

Other books I’ve read and recommend

C# in Depth: What you need to master C# 2 and 3 by Jon Skeet
This is for serious C# developers who already have a background in the language.  Skeet’s thorough coverage, attention to detail and precise wording make this an awesome learning tool and reference.  The second edition is due out in August.

The Passionate Programmer: Creating a Remarkable Career in Software Development by Chad Fowler

More inspirational than technical, this book offers numerous tips for becoming a great developer.

Coders at Work by Peter Seibel
Peter Seibel interviews 15 notable programmers.  I’m only a few chapters into this one so far, but it’s fascinating to probe the minds of those who have been so influential in our industry.

Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity by Joel Spolsky

Joel is known in part for his widely read blog posts, several of which have been bound together here in book form.  And yes, that really is the subtitle.

Hackers and Painters: Big Ideas from the Computer Age by Paul Graham

It’s interesting to note Graham’s support for Lisp, and the increased adoption of Lisp-like features into new languages since this was written.

The Cathedral and the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary by Eric S. Raymond

If you struggle to find anything new while reading this book, it’s only because it’s been such an enormous influence over the past decade.

Just for Fun: The Story of an Accidental Revolutionary by Linus Torvalds

Any developer who remembers tinkering with code at a very young age will relate with nostalgia to Torvalds’ geekiness.  This story is indeed fun.

Hackers: Heroes of the Computer Revolution by Steven Levy

Ever wonder how hacking began?  Real, true hacking that started around the 1950’s?  Hackers offers a peek inside the world of those who lived it.

Gödel, Escher, Bach: An Eternal Golden Braid by Douglas R. Hofstadter

This is not a programming book, but a clever, philosophical work of art.  It’s not for everyone, but if you have a curious and analytical mind you might enjoy it.