Close | Link
Some recent posts at the 37signals Product Blog:
Basecamp
ProofHQ and Basecamp: Offer your project team richer review and approval tools
“ProofHQ integration with Basecamp” explains how to add ProofHQ proofs to your Basecamp projects. (ProofHQ is a web-based design collaboration, proofing and approval tool for brands, agencies, designers, print and production.)
Backpack
One of our favorite uses for Backpack: “How to” pages
One way we love to use Backpack is for “how to” pages that guide us through confusing tech waters. These tutorial pages mean we don’t have to waste time relearning processes from scratch.
CSS tip for customizing the appearance of Backpack pages
“If you use Backpack, the organizing web tool and intranet from 37signals, you may sometimes wish you could modify the text on a page to fit a little more information on it. I have a page where I collect code snippets and terminal commands and the default font seems a bit large with so much content. Turns out there’s an easy solution to this: simply add a small amount of CSS to the page in the form of a note and you can change the formatting to meet your needs.”
Highrise
Web consultant touts forwarding email into Highrise
“With Highrise, you blind-carbon copy a special drop box, something like dropbox@999999997.rkg.highrisehq.com. The app does all the hard work, determining who you are from the dropbox subdomain, parsing the email to determine where to file it it the CRM system, and associating the message with the right people and companies and dates.”
Getting Real
Getting Real reader now “living in passion and designing a product that is actually useful”
“I decided start my own software company with a friend from college. The idea we have is great (I think) and I’m finally having fun writing software again, because I’m writing it under constraints—the constraints of my day job, and of real life. Gone are my class diagrams, design documents, and long-winded e-mails. I have arrived at a happy place of producing features and code, living in passion, and designing a product that is actually useful (or will be, I hope)!”
Subscribe to the Product Blog RSS feed.
References 6 Items:
- Click to Read
3 Attached Files
Close | Link
The curriculum is intended to provide a comprehensive set of tutorials designed to raise the level of education and Web Standards awareness. The curriculum has been released under a Creative Commons license and is free to use and share.
Chris states:
We think it will be useful to anyone who wants to learn or teach client-side web design/development “the right way”, including students and teachers at schools or universities, trainers and employees inside companies, etc. It already has support from several universities and large companies, including Yahoo!
Translations and packaging of the curriculum as PDFs is on the to-do list.
Close | Link | Comments

Tomorrow is my last day at United Health Group. I thought it would be appropriate for me to write a little diddy on the things I enjoyed about working there.
10. I learned a great deal about the health insurance industry.
9. The pay was pretty good.
8. This was my first introduction to TeamTrack and other Serena Inc. tools.
7. I got a great deal of experience in evaluating different development tools.
6. I learned a fair amount about Anthill Pro, IBM Websphere, and Mercury ITG.
5. I learned a great deal more about Ant.
4. This was my first real introduction to working with Java2 Enterprise Edition.
3. I learned the ins and outs of Subversion.
2. The company was progressive in allowing it’s employees to telecommute.
1. I met allot of great people that I want to stay in contact with.
Keep an eye out tomorrow for my follow up post titled “Top Ten Things I Hated About Working at United Health Group”. I’ll probably wait until I’ve turned in my building key for that one ;)
1 Attached File
Close | Link
As I grow older and wisereven older as a programmer, I've found that my personal coding style has trended heavily toward minimalism.
I was pleased, then, to find many of the coding conventions I've settled on over the last 20 years codified in Spartan programming.
No, not that sort of Spartan, although it is historically related. The particular meaning of spartan I'm referring to is this one:
(adj) ascetic, ascetical, austere, spartan (practicing great self-denial) "Be systematically ascetic...do...something for no other reason than that you would rather not do it" - William James; "a desert nomad's austere life"; "a spartan diet"; "a spartan existence"
I've tried to code smaller, even going so far as to write no code at all when I can get away with it. Spartan programming aligns perfectly with these goals. You strive for simultaneous minimization of your code in many dimensions:
- Horizontal complexity. The depth of nesting of control structures.
- Vertical complexity. The number of lines or length of code.
- Token count.
- Character count.
- Parameters. The number of parameters to a routine or a generic structure.
- Variables.
- Looping instructions. The number of iterative instructions and their nesting level.
- Conditionals. The number of
ifand multiple branchswitchstatements.
The discipline of spartan programming means frugal use of variables:
- Minimize number of variables. Inline variables which are used only once. Take advantage of
foreachloops. - Minimize visibility of variables and other identifiers. Define variables at the smallest possible scope.
- Minimize accessibility of variables. Prefer the greater encapsulation of
privatevariables. - Minimize variability of variables. Strive to make variables
finalin Java andconstin C++. Use annotations or restrictions whenever possible. - Minimize lifetime of variables. Prefer ephemeral variables to longer lived ones. Avoid persistent variables such as files.
- Minimize names of variables. Short-lived, tightly scoped variables can use concise, terse names.
- Minimize use of array variables. Replace them with collections provided by your standard libraries.
It also means frugal use of control structures, with early return whenever possible. This is probably best illustrated with an actual example, starting with raw code and refactoring it using the spartan programming techniques:
- Applying Spartan programming techniques to a C File
- Applying Spartan programming techniques to a Java function
I don't agree with all the rules and guidelines presented here, but I was definitely nodding along with the majority of the page. Minimalism isn't always the right choice, but it's rarely the wrong choice. You could certainly do worse than to adopt the discipline of spartan programming on your next programming project.
(hat tip to Yuval Tobias for sending this link my way)
| [advertisement] Peer Code Review. No meetings. No busy-work. Customizable workflows and reports. Try Jolt Award-winning Code Collaborator. |
References 2 Items:
- Click to Read
1 Attached File
This story is hilariously, beautifully, far-fetchedly awesome and heart warming. See also the MeFi thread.
Pixar proves it’s one of those great companies that is run by unabashedly human people, and it’s no wonder why their work is so personal and touching. When you engage yourself with your customers and your audience on a level that reminds them you are the same, the experience is far greater than just using a product or just seeing a movie. Humanity is desperately missing in our age of megacorporations and big box stores.
People love robots, but they’ll love you if you’re human, too.
References 1 Item:
- Click to Read
I’m sure everyone heard that 37signals dropped support for IE6 across their entire product line. They’re a reputable company with demanding customers. Was this a foolish move?
Every now and again you’ll find a company willing to break the rules, kill the standards and set some new ones. Personally I am extremely jealous that 37s can make such a broad decision and sleep better at night for it. But in the enterprise we don’t see this kind of decision making, hardly ever. If you do, it comes at a slow pace and almost slow enough to mark it as indecision.
Who the hell cares?
That’s right. Just because it’s an enterprise does not give developers any reason to skimp on great user experiences. My not caring about IE6 is much the same as Steve Jobs not caring that OS X only runs on Apple hardware. His rule is that great software runs on great hardware. If the hardware sucks, 9 out 10 times the software will suck as well. The only company who has made good software work on a turd pool of hardware is Microsoft. Then again, they’re Microsoft, it’s what they do.
Everybody wants a chance to put a jihad on IE6, right? I believe if developers actually realized that browsers are just as much a critical component and feature as the app itself, we’d see real change in the enterprise. Yes, it takes time, money and resources to migrate all those useless intranets and proprietary IE6-based tools to a new browser version/platform, but long-term loss is much greater than short-term status quo.
Normally you’d think if expectations of the platform are low, that the expectations of the consumer are low as well. Unfortunately that is not the case. Since the grass is always greener on the other-side, what are developers required to do? Typically we kill bug after bug after bug until we get something that works, not necessarily a good experience for the user, but working nonetheless.
Stubbornness in the Web Industry
At Apple I’d be willing to believe that limitations are all but actual limitations. They’re inspirations, instigators that push to ignore the norm and actually have an opinion about what works best for the end-consumer, enterprise or not.
If several thousand users have to install a better platform to get the richest experience, then so be it. In all cases, a consumer is a consumer and how they experience your software will determine it’s success.
And your point?
Create great user experiences and spare no cost to do it. Take limitations and use them as an instigation to move forward.
I've not made it all through the entire book yet, but Byran Lawson's How Designers Think continues to impress me as I've given it an on/off reading the past few months. Though it's written with a slant towards architectural design, its content easily applies to designers of all disciplines.
Towards the end of chapter 7, "Problems, solutions, and the design process," I found myself underlining all kinds of stuff. Quoted here are a few excerpts.
There are no optimal design problems
Design almost invariably involves compromise.... Rarely can the designer simply optimise one requirement without suffering losses elsewhere.... There are no established methods for deciding just how good or bad solutions are, and still the best test of most design is to wait and see how well it works in practice. Design solutions can never be perfect and are often more easily criticised than created, and designers must accept that they will almost invariably appear wrong in some ways to some people.
Design solutions are a contribution to knowledge
Once an idea has been formed and a design completed the world has in some way changed. Each design, whether built or made, or even if just left on the drawing-board, represents progress in some way.... Thus the completion of a design solution does not just serve the client, but enables the designer to develop his or her own ideas in a public and examinable way.
The process involves finding as well as solving problems
It is clear from our analysis of the nature of design problems that the designer must inevitably expend considerable energy in identifying the problems. It is central to modern thinking about design that problems and solutions are seen as emerging together, rather than one following logically upon the other.... [B]oth problem and solution become clearer as the process goes on.
Design is a prescriptive activity
[D]esign is essentially prescriptive whereas science is predominantly descriptive. Designers do not aim to deal with questions of what is, how and why, but, rather, with what might be, could be and should be. While scientists may help us to understand the present and predict the future, designers may be seen to prescribe and to create the future, and thus their process deserves not just ethical but also moral scrutiny.
Designers work in the context of a need for action
Unlike the artist, the designer is not free to concentrate exclusively on those issues which seem most interesting. Clearly one of the central skills in design is the ability rapidly to become fascinated by problems previously unheard of.... Not only must designers face up to all the problems which emerge they must also do so in a limited time. Design is often a matter of compromise decisions made on the basis of inadequate information.... Designers, unlike scientists, do not seem to have the right to be wrong. While we accept that a disproved theory may have helped science to advance, we rarely acknowledge the similar contribution made by mistaken designs.
On that note, I vote for celebrating "mistaken designs" much more than we currently do as a community. Who's with me?
Are you exhausting all your potential revenue streams?
We stalled launching our Job Board for a while because we felt we had bigger fish to fry. Once we got around to it, we couldn’t believe we had waited so long. It was easy to set up, a great resource for our community, and has generated lots of cash for the company.
There’s more than one way to skin the revenue cat:
If you sell web software, you can also write a book. Or put on a conference.
If you’re a design firm, you can also sell jewel case packaging. Or start an ad network.
If you’re a site that collects funny videos, you can also sell tee shirts.
If you’re a popular local blog, you can operate a flea market.
If you’re a computer company, you can reinvent the music business.
Etc.
Your self-imposed limitations on how to make money are often just that: self-imposed. Seek out other routes to your destination.
It’s one of the big advantages that small, agile companies have. They can experiment and change directions quickly. Plus, multiple revenue streams help you diversify so all your eggs aren’t in one basket.
Do you have an example of a company that has come up with an interesting or unorthodox way to make money on the side? Tell us about it in the comments.
www.37signals.com%2Fsvn%2Fposts%2F1123-theres-more-than-one-way-to-skin-the-revenue-cat"/>
References 3 Items:
- Click to Read
Come across this in my feeds this morning. It’s nice to see people still innovating on older solutions. Transparent PNG’s in IE6 are still a problem for most designers (not 37s though, bastards!).
Click here to visit websiteI know the language may be slightly offensive, but I found this to be awesome. If you’re into typography at all, you understand how ballsy this statement is.
1 Attached File
What a great holiday weekend! It was mentioned that I was going off the grid, well, I guess I’m failing on my commitment to do so. I need to satisfy the itch with some thoughts from this weekend.
So I’ve been in Bertrand, NE for enough days to constitute a full week. I’ve already had moments of home-sickness and life-threatening boredom. However, being around future family has been quite pleasant. Not to mention that Becky and I are dipping below 6 weeks until the wedding. Lots of details to square away. But anyway.
Small Town Festival
The 4th brought out the best of the best in Bertrand. In the one park in Bertrand there was an outdoor event (Bertrand Days?) with live music by the Pennyshooters, tradition burgers and hotdogs and prizes. My fiancee even sang the national anthem during the event. She’s a big deal in Bertrand. There was about 100+ people who turned up for the event.
However there was an occurrence that made my heart smile. Normally I am the only African American within a 20 mile radius then in the distance I saw a fellow negro. It was quite the surprise, of course he was taking photos of the festivities and I think he’s a part of the community as well. Even better? His wife was there too! There were quite a few seniors staring me down like a deer in headlights so I opted not to introduce myself to the fellow negros.
Ethnicity is a rare occurrence here in Bertrand. But no one seems outlandishly threatened by me and this is in fact my 5th or so visit to Bertrand.
Fireworks! Oooo! Aaaahhh!
The fireworks show was nothing compared to that found in Green Bay, WI or even that of Nebraska’s larger cities and towns. I must admit it was nice to just enjoy the people around you and spend quality time together. We even had a little fireworks show of our own out on the curb. There is nothing more fun than setting off a pack of black cats inside the bowels of a frog (kidding). But I did hear about people actually doing that.
Conclusion
Now begins the work week and I am fully rested. Today I will be sealing the deal with my fiancee at the Holdredge, NE courthouse. As of today, I will be legally married. Wow. Anyway, that’s all I got.
When you join a team, it's important to bend your preferences a little to accommodate the generally accepted coding practices of that team. Not everyone has to agree on every miniscule detail of the code, of course, but it's a good idea to dicuss it with your team and decide on overall approaches and philosophy beforehand. It promotes team harmony, and more than that, it's just common courtesy. As they say, when in Rome, do as the Romans do.
I've always been wary of cowboy coders who rolled into an ongoing project on fresh horses and immediately started dictating terms. It's a very short trip indeed from there to Who Wrote This Crap, and the predictable, inevitable finger-pointing at the foolhardy programmers who came before you begins. Don't be that guy or gal. Work with your team, not against it.
Still, there are some coding preferences people may feel.. strongly.. about. If that's the case, try to clear the air and address those strong preferences up front, as early as possible. Don't let them simmer. For me, the use of #region is one of those things. I tried to make myself clear in this twitter message:
So what is #region? It's a named hint you place in C# or VB.NET code to set a code folding point. Any code placed inside that region is, by default, collapsed when you re-open it in the editor. Here's a random example from the Log4Net project:
Immediately I have a problem: I can't see anything! I have to manually expand those sections to browse any of the code in this class. It is possible to configure the Visual Studio IDE to not fold any of the regions when files are opened, but this is the out of box behavior, so that's what most developers will see. And of course there are keyboard shortcuts to deal with the regions:
| Ctrl+M, Ctrl+M | Collapse or expand the block you're currently in. |
| Ctrl+M, Ctrl+O | Collapse all blocks in the file |
| Ctrl+M, Ctrl+L | Expand all blocks in the file |
| Ctrl+M, Ctrl+P | Stop outlining mode. (Ctrl+M, Ctrl+O resumes) |
Here's the really sick part: once you expand the above log4net code there's literally three pages worth of code there! After you strip out all the massive XMLDoc comments and the dozen or so #region directives, you could have had all the code at your fingertips with a minor flick of the mouse wheel, in a simple scrollable layout.
I daresay being able to see the damn code is more important than having it meticulously segmented into six pointless little named buckets, but apparently a lot of programmers can't get enough of stuffing their code into pointless little named buckets. It's as if they've forgotten what the scroll bar -- and incremental search -- is for.
The #region directive drives me bonkers. It's not evil, per se, but I feel it is criminally overused in practice and heavily prone to abuse. I strongly urge you to think about how you're using code folding, because as I see it, there are a lot of downsides:
- Folding directives are glorified comments.
#regionhas zero meaning to the compiler; it's a hint to the editor to allow code folding. It doesn't do any namespacing or scoping. Why, exactly, are we writing code to accommodate the editor? It boggles my mind that we'd add significant lines of code to our project that do nothing but offer organizational hints to the editor. Even traditional comments are a better value for your keystroke, because they can be more expressive. And folding is certainly no substitute at all for bona-fide refactoring. - Folding is used to sweep code under the rug. Got a bunch of boring boilerplate code that makes your eyes water? A slew of ugly, gnarly code that nobody in their right mind wants to look at? Hide it in a region and fold that sucker into oblivion! Problem solved, right? Hardly. Your project is now full of crappy code that you can't see. That's worse. Much worse! Code that hides from you is code that will rot in the most putrescent and painful way possible. Your code should be front and center at all times -- exposed to as many programmers' eyes, and as much healing light, as possible.
- Folding is used to mask excessive length. The presence of folded code can lull developers into a false sense of what clean code looks like. Under the cover of folding, you can end up writing long, horrible spaghetti code blocks. If the code needs the crutch of folding to look organized, it's bad code.
- Folding can hide deficiencies in your editor. The presence of so-called "standard" boilerplate regions like "Public Constructors" and "Public Properties" and "Events" is not a feature. It's a bug. The editor should automatically offer to fold up these common structural blocks for you! I'm continually amazed that programmers spend time doing this scutwork when they could be writing useful code. Or at least demanding a smarter code editor.
I urge developers to write code that doesn't need folding to be readable, clear, and concise. I'm sure there are sane uses for code folding out there somewhere, but I rarely see them.
| [advertisement] Peer code review without meetings, paperwork, or stopwatches? No wonder Code Collaborator won the Jolt Award. |
Referenced by 1 Item:
- Click to Read
2 Attached Files
If you’ve read this blog for awhile you know that I periodically struggle to reorganize it. I just never seem to be able to find a method of structuring it that I like. I have tried combinations of all of the following:
1. Keeping this a personal blog and creating separate blogs with separate addresses for other topics.
2. Keeping frankgilroy.com a single domain with sub-domains or separate directories for blogs on other topics.
3. Using a single blog at frankgilroy.com and attempting to organize by categories or tags for lots of different topics.
None of these seems to feel comfortable to me. I’ve decided on yet another new approach coinciding with my transition into a job where I feel I’ll be blogging more professionally.
As of today I’ve removed all of the extraneous “categories” from the blog. There are now only two categories: personal and professional. I’ve converted all previous categories to “tags” that will span both categories. In other words:
1. From this point forward there will be only two categroies: personal and professional. If you’d prefer to ignore one (hopefully not both) of these categories you can do so easily by using one of the following urls:
http://frankgilroy.com/category/personal/
http://frankgilroy.com/category/professional/
2. I will continue to tag content on a variety of subjects. Examples of tags are “google”, “running”, “nascar”, “photography”, etc. Some of these tags will span both the personal and professional categories, others will be specific to my personal or professional lives.
Eventually I’ll try and make it so that you can subscribe to one category or the other. In the mean time, let me know what you think about the new approach.
So somebody else built a successful business on that idea you had three years ago. What does that mean? That if you would just have pursued that idea, you would now automatically be enjoying their spoils? Sorry to burst your bubble, but I really don’t think so.
Ideas on their own are just not that important. It’s incredibly rare that someone comes up with an idea so unique, so protectable that the success story writes itself. Most ideas are nothing without execution.
Just because you thought of a site to share photos with friends wouldn’t have made you Flickr.
But I can see how fooling yourself into thinking otherwise is attractive. When someone else is having success with an idea similar to yours, it’s almost like you’re having that success, if only you would have pulled the trigger on it. It inflates the sense that your brilliant idea really was brilliant and that success was just a binary switch away (pursue/don’t).
On the other hand, it means that you don’t need divine inspiration to start a successful business. Doing well is not restricted only to those who can have paradigm-shifting ideas. You just need to do it better, or actually merely even good enough, to please enough paying customers that income can exceed expense and you’re off to a great start.
You’re probably too young to wear nostalgia gracefully, anyway.
Referenced by 2 Items:
- Click to Read
My fellow Unitards and I have been busy with quite a few things lately, and one of them is our new Unit Interactive Labs site, which we launched today. It is to be a collection of widgets, scripts, and applications that we’re working on, free for the community. Sometimes the products are just essays in trying out something new and sometimes they’re just simpler versions of something we’re making for ourselves or for sale later.
In A Developer's Second Most Important Asset, I described how buying a quality chair may be one of the smartest investments you can make as a software developer.
In fact, after browsing chairs for the last few years of my career, I've come to one conclusion: you can't expect to get a decent chair for less than $500. If you are spending less than that on seating -- unless you are getting the deal of the century on dot-bomb bankruptcy auctions -- you're probably making a mistake.
I still believe this to be true, and I urge any programmers reading this to seriously consider the value of what you're sitting in while you're on the job. In our profession, seating matters:
- Chairs are a primary part of the programming experience. Eight hours a day, every day, for the rest of your working life -- you're sitting in one. Like it or not, the chair you're sitting in directly affects your work experience.
- Cheap chairs suck. Maybe I've become spoiled, but I have yet to sit in a single good, cheap chair. In my experience, the difference between the really great chairs and the cheap stuff is enormous. A quality chair is so comfortable and accommodating it effortlessly melts into the background, so you can focus on your work. A cheesy, cheap chair constantly reminds you how many hours of work you have left.
- Chairs last. As I write this, I'm still sitting my original Aeron chair, which I purchased in 1998. I can't think of any other piece of equipment I use in my job that has lasted me ten full years and beyond. While the initial sticker shock of a quality chair may turn you off, try to mentally amortize that cost across the next ten years or more.
Choice of seating is as fundamental and constant as it gets in a programming career otherwise marked by relentless change. They are long term investments. Why not take the same care and consideration in selecting a chair as you would with the other strategic directions that you'll carry with you for the rest of your career? Skimping yourself on a chair just doesn't make sense.
Although I've been quite happy with my Herman Miller Aeron chair over the last 10 years, I've always been a little disenchanted with the way it became associated with dot-com excess:
In the '90s, the Aeron became an emblem of the dot-com boom; it symbolized mobility, speed, efficiency, and 24/seven work weeks. The Aeron was a must-have for hot startups precisely because it looked the least like office furniture: It was more like a piece of machinery or unadorned engineering. The black Pellide webbing was durable, and hid whatever Jolt or Red Bull stains you might get on it. Held taut by an aluminum frame, the mesh allowed air to circulate and kept your body cool. What's more, the chair came in three sizes, like a personalized tool. Assorted knobs and levers allowed you to adjust the seat height, tilt tension, tilt range, forward tilt, arm height, arm width, arm angle, lumbar depth, and lumbar height. The Aeron was high-tech but sexy -- which was how the dot-commers saw themselves.But baby-faced CEOs weren't drawn to the Aeron only for the way it looked. The Aeron was a visual expression of the anti-corporate zeitgeist, a non-hierarchical philosophy about the workplace. An office full of Aerons implicitly rejected the Fortune 500, coat-and-tie, brick-and-mortar model in which the boss sinks back in an overpriced, oversized, leather dinosaur while his secretary perches on an Office Max toadstool taking notes.
I recently had the opportunity to sit in a newer Herman Miller Mirra chair on a trip, and I was surprised how much more comfortable it felt than my classic Aeron.
The Mirra chair was an excellent recliner, too. I've been disappointed by how poorly the Aeron reclines. I actually broke my Aeron's recline pin once and had to replace it myself. So I've retrained myself not to recline, which is awkward, as I'm a natural recliner.
All this made me wonder if I should retire my Aeron and upgrade to something better. I liked the Mirra, but the comments to my original chair post have a lot of other good seating suggestions, too. Here are pictures and links to the chairs that were most frequently mentioned as contenders, in addition to the Mirra and Aeron pictured above:
There were also some lesser known reccomendations, such as the Haworth Zody chair, Nightingale CXO chair, BodyBilt ergo chairs, Hag kneeling chair, NeutralPosture ergo, and something called the swopper.
Chair fit is, of course, a subjective thing. If you're investing $500+ in a chair, you'd understandably want to be sure it's "the one". The thing to do is find a local store that sells all these chairs and try them all out. Well, good luck with that. Don't even bother with your local big-box office supply chain. Your best bet seems to be back stores, as they tend to stock many of the more exotic chairs. Apparently they have a clientele of people who are willing to spend for comfort.
Reviews of individual chairs are relatively easy to find, but aren't particularly helpful in isolation. What we need is a multi-chair review roundup. The only notable review I know of is Slate's late 2005 Sit Happens: The Search for the Best Desk Chair. It's not as comprehensive as I would like, but it does have most of the main contenders. Notably, Slate's winner was the HumanScale Liberty.
If this is all a bit too much furniture porn for your tastes, I understand. As for me, I'm headed off to my local friendly neighborhood back store to figure out which of these chairs will best replace my aging Aeron. By my calculations, the Aeron cost me about $7 per month over its ten year lifetime; I figure my continued health and comfort while programming are worth at least that much.
| [advertisement] Read the largest case study ever published about lightweight peer code review in Best Kept Secrets of Peer Code Review. Free book, free shipping. |
Referenced by 3 Items:
- Click to Read
7 Attached Files
- .jpg http://www.codinghorror.com/blog/images/chair-aeron.jpg
- .jpg http://www.codinghorror.com/blog/images/chair-mirra.jpg
- .jpg http://www.codinghorror.com/blog/images/steelcase_think_chair.jpg
- .jpg http://www.codinghorror.com/blog/images/steelcase-leap.jpg
- .jpg http://www.codinghorror.com/blog/images/chair-ergohuman.jpg
- .jpg http://www.codinghorror.com/blog/images/chair-freedom-1.jpg
- .jpg http://www.codinghorror.com/blog/images/chair-liberty-1.jpg
It looks like Apple gave their wireless keyboard a redesign. I’m surprise their wasn’t a re-name. Maybe Apple Wireless iBox? lol. Someone is definitely getting fired for this. See full image here. Visit website here
2 Attached Files
Close | Link | Comments
Wow, can you beleive it? I completely freaking missed June. June is gone. I didn’t even post anything on the blog in June. It was a very busy month. I’ve been quite productive in just about every aspect of life lately other than blogging. I guess something has to suffer eh?
Anyway, I have been working pretty hard on truly embracing my inner geek. You might say I’ve had a bit of an epiphany in the past month or so. For me to be happy with what I’m doing, I need to be doing technical things. I still have quite the knack for leadership roles but I find that when I spend the bulk of my time in these roles I start to get really itchy.
The other thing I’ve learned is that there really is a different and I think better way to “build a mousetrap” when it comes to software development. I’ve been doing quite a bit of research into companies that follow an Agile or Lean software development model. I’ve always had a feeling that these ways of developing software are better but I’ve never really been able to experience them first hand with people that are doing it right.
That is all about to change. I have been looking for an Agile software company for a few years. Most of the ones I’ve found up until this point were small startups that either couldn’t afford to pay me what I’m making or that needed somebody with more depth in writing code.
I had just about given up. I started to think that the only way I was going to be able to spend more time writing code was to start my own company. That is an effort I’m still working on and still has great promise but I think I’ve found a way to attack the problem from two fronts.

I have finally found a company where I can gain a great deal of exposure to Agile Software Development and where I can add value with my experience in Build Engineering and Configuration Management.
I have joined a software company that was recently acquired by Accenture and has been doing Agile development for 3+ years. I’ll be part of a Continuous Integration team where my responsibility will be to enhance and maintain the environment and tools developers use to develop.
I’ll be part of a Scrum team that maintains the source control, build management, and automated testing a code analysis tools. I think there will be a fair amount of coding and integration work to do and I’m really looking forward to it.
I truly beleive that an Agile environment will be much more conducive to actually learning more about writing software as opposed to learning more about writing documents about writing software. Wish me luck! If things turn out the way I hope you’ll start to see a much happier, healthier and geekier blogger in the weeks and months to come.
1 Attached File
The classic argument for enduring 80 to 100 hour work weeks for years on end — sacrificing relationships, hobbies, and anything else that doesn’t progress the mission — is that at the end of the rainbow lies early retirement. The reward for risking it all on a crazy startup idea. This wonderful place is filled with anything you want it to be. Never a dull moment again, all the flexibility and freedom in the world.
I’m Jack’s sense of utter disbelief.
Why does the idea of work have to be so bad that you want to sacrifice year’s worth of prime living to get away from it forever? The answer is that it doesn’t. Finding something you to love to work on seems to be a much more fruitful pursuit than trying to get away from the notion of work altogether.
It’s much easier too! The likelihood that you’ll strike gold after year’s of death-march living is still pretty low. The chance of finding something you love doing? So much more achievable. Millions of dollars not required.
If you come to the realization that work in itself isn’t evil, you can stop living your life as a waterfall-planned software project too. No need to divide your timeline on earth into the false dichotomies of Sucky Work Era and Blissful Retirement Era. Instead, you can just fill your life with a balanced mix of activities that you can sustain for decades.
Referenced by 1 Item:
- Click to Read
In Codeplex wastes six months reinventing wheels, Ryan Davis has a bone to pick with Microsoft:
I saw an announcement [in March, 2007] that CodePlex, Microsoft's version of Sourceforge, has released a source control client.This infuriates me. This cool thing they spent six months (six!) writing is called Subversion, and it had a 1.0.0 release [in early 2004]. Subversion had its first beta in late 2003, so the Codeplex folks are waaay behind the state of the art on this one.
As a whole, I think the state of software is abysmal. The only way to make it better is to stop writing new code. New code is always full of bugs, and its an expensive path to get from blank screen to stable program. We need to treat programming more like math, we need to build on our results. Development tools is a special market, as our needs are all very similar, and when we need a tool, we have the skills to make it.
It's a great rant -- you should read the whole thing -- but I'm not sure I entirely agree.
While I do empathize with the overall sentiment that Ryan is expressing here, I also found myself nodding along with Addy Santo, who left this comment:
Author seems to think that all software development is done in basements and dorms. The reality is that software is an industry like any other - and follows the same simple rules of economics. How many brands of sports shoes are there? How many different MP3 players? Flavors of toothpaste ? If you can walk down the soft drink isle and not be "infuriated" by Vanilla Cherry Diet Doctor Pepper then you might just be a hypocrite.
So if you think Microsoft's particular flavor of source control is redundant, you'll really hate Diet Cherry Chocolate Dr. Pepper.
(I am now required by law to link Tay Zonday's Cherry Chocolate Rain video. My apologies in advance. And if that makes no sense to you, see here.)
Are there meaningful differences between Microsoft's Team Foundation flavor of version control and Subversion? The short answer is that there aren't -- if all you're looking for is a carbonated beverage. If all you require is run of the mill, basic centralized source control duties, they're basically the same product. So why not go with the free one?
But Team Foundation is much more than just source control. Of course there are open source equivalents to much of the functionality offered in Team System, as Ryan is quick to point out.
The Codeplex staff stated they needed to write their own client in order to integrate with the TFS server infrastructure. According to an MSDN article (Get All Your Devs In A Row With Visual Studio 2005 Team System), TFS seems to be a complicated tool to help manage your developers. Reading the description, TFS is an issue tracker, unit tester, continuous integration, source control system, and Visual Studio plugin. So, basically a combination of Trac, NUnit, CruiseControl.NET, Subversion, and a Visual Studio plugin. Why not just write the Visual Studio plugin, and hook into the tools people are already using? All those tools have rich plugin-architectures that would probably support any sensible addition you'd want to make.
The answer, of course, is that Microsoft does all that painful integration work for you -- at a price.
If you have the time to look closer, you'll find more flavorful differences between Subversion and TFS source control. Differences more akin to, say, Dr. Pepper and Mr. Pibb.
I'm not going to enumerate all the subtle and not-so-subtle differences between the two here; picking a fight between two modern centralized version control systems is not my goal. They're both great. Choose whatever modern source control system you prefer, and take the time to learn it in depth. Source control is the bedrock of modern software engineering, and I've found precious few developers that truly understand how it works. All that time we were going to spend arguing whether your source control system can beat up my source control system? I've got a radical idea: let's spend it on learning the damn stuff instead.
Still, there is a much deeper, more endemic problem here that Ryan alludes to, and it deserves to be addressed.
One of Microsoft's biggest challenges in the last few years has been that its competitors are free to ship what are, by now, fairly mature open source components as parts of their operating systems. When was the last time you ever saw any open source anything shipping in a Microsoft product? On some deep, dark corporate level, Microsoft must feel compelled to rewrite everything to completely own the source code. Sometimes -- a more cynical person might say "often" -- this results in poor quality copies instead of actual innovation, such as Microsoft's much-maligned MSTest unit test framework. It's a clone of NUnit with all new bugs and no new features, but it can be included in the box with Visual Studio and integrated into the product. It's a one step forward, two steps back sort of affair.
Everybody I know -- including our own Stack Overflow team -- who has tried to use the MSTest flavor of unit tests has eventually thrown up their arms and gone back to NUnit. It's just too painful; the commercial clone lacks the simplicity, power, and community support of the original open source version. There's simply no reason for MSTest to exist except to satisfy some bizarre corporate directive that Microsoft never ship open source code in their products. Furthermore, this blind spot hampers obvious integration points. Microsoft could build first-class integration points for NUnit into Visual Studio. But they haven't, and probably never will, because so much effort is poured into maintaining the second-rate MSTest clone.
In fact, the more I think about this, the more I think Microsoft's utter inability to integrate open source software of any kind whatsoever into their products might just end up killing them. It's a huge problem, and it's only going to get worse over time. Open source seems to evolve according to a different power law than commercial software. If I worked in the upper echelons of Microsoft, I'd be looking at the graph of open source software growth from the years of 1999 to 2008 and crapping my pants right about now.
It's a shame, because the best way to "beat" open source is to join 'em -- to integrate with and ship open source components as a part of your product. Unfortunately, that's the one route that Microsoft seems hell bent on never following.
| [advertisement] Complimentary paperback book on lightweight peer code review. 10 essays from industry experts. Free shipping. Order Best Kept Secrets of Peer Code Review. |
Referenced by 1 Item:
- Click to Read
References 2 Items:
- Click to Read
2 Attached Files
“The conventional wisdom in our business is that you have to grow and keep moving to survive. We never grew, always stayed tiny, and it served us very well over the years, allowing us to pick and choose projects, and keeping our financial independence from our clients.”
-Stefan Sagmeister (link)
“Watching nonprogrammers trying to run software companies is like watching someone who doesn’t know how to surf trying to surf. Even if he has great advisers standing on the shore telling him what to do, he still falls off the board again and again.”
-Joel Spolsky (link)
“In the abstract, freedom of choice is desirable. But the arts, including the culinary arts, function more efficiently as dictatorships. Down with interactivity. Readers do not really want to decide what happens in the next chapter of a novel, and diners are happiest submitting to the iron will of a good chef.”
-William Grimes, former restaurant critic of The New York Times (link)
“I never think about the audience. If someone gives me a marketing report, I throw it away.”
-Wall-E creator Andrew Stanton (link)
“Content precedes design. Design in the absence of content is not design, it’s decoration.”
-Jeffrey Zeldman (link)
“Our sound is defined by what we left out and didn’t play, as much as by what we did. I think in a loose way the idea of keeping it minimal goes beyond just the music. It’s my whole approach to everything. Don’t say too much whenever possible. We’re just trying to get the most impact out of the least amount.”
-Glenn Mercer of The Feelies (link)
“Early unsuccessess shouldn’t bother anybody because it happens to absolutely everybody.”
-Philip Johnson, Architect (link)










