I haven't kept this as up to date as I'd like but the stuff that is here is good to know. I'm going to modify it so other people can add sections to it and it can be a living document, but until then this is all you get.
A question that comes up again and again in web development companies is:
"Should the developers have access to the production environment, and if they do, to what extent?"
My view on this is that as a whole they should have limited access to production. A little
disclaimer before I attempt to justify this view is that this standpoint is in no way based on the perceived quality or attitude of the developers -- so please don't take it this way.
He had the audacity to write about this issue on the Server Fault blog.
From my perspective, the whole point of the company is to talk about what we're doing. Getting things done is important, of course, but we have to stop occasionally to write up what we're doing, how we're doing it, and why we're even doing it in the first place -- including all our doubts and misgivings and concerns. If we don't, we're cheating ourselves, and you guys, out of something much deeper. Yes, writing about what we're doing and explaining it to the community helps us focus. It lets our peers give us feedback. But most importantly of all, it lets anyone have the opportunity to learn from our many, many mistakes … and who knows, perhaps even the occasional success.
That's basically the entire philosophy behind our Stack Exchange Q&A network, too. Let's all talk about this stuff in public, so that we can teach each other how to get better at whatever the heck it is we love to do.
(Sometimes I get the feeling this idea makes my co-founder nervous, which I continually struggle to understand. If we don't walk the walk, why are we even doing this? But I digress.)
The saga of System Administrators versus Programmers is not a new one; I don't think I've ever worked at any company where these two factions weren't continually battling with each other in some form. It's truly an epic struggle, but to understand it, you have to appreciate that both System Administrators and Programmers have different, and perhaps complementary, supernatural powers.
Programmers are like vampires. They're frequently up all night, paler than death itself, and generally afraid of being exposed to daylight. Oh yes, and they tend think of themselves (or at least their code) as immortal.
System Administrators are like werewolves. They may look outwardly ordinary, but are incredibly strong, mostly invulnerable to stuff that would kill regular people -- and prone to strange transformations during a moon "outage".
Although there is certainly some crossover, we believe that the programming community and the IT/sysadmin community are different beasts. Just because you're a hotshot programmer doesn't mean you have mastered networking and server configuration. And I've met a few sysadmins who could script circles around my code. That's why Server Fault gets its own domain, user profiles, and reputation system.
Different "beasts" indeed.
Anyway, if you're looking for a one size fits all answer to the question of how much access programmers should have to production environments, I'm sorry, I can't give you one. Every company is different, every team is different. I know, it's a sucky answer, but it depends.
However, as anyone who has watched the latest season of True Blood (or, God help us all, the Twilight Eclipse movie) can attest, there are ways for vampires and werewolves to work together. In a healthy team, everyone feels their abilities are being used and not squandered.
On our team, we're all fair-to-middling sysadmins. But there are a million things to do, and having a professional sysadmin means we can focus on the programming while the networking, hardware, and operational stuff gets a whole lot more TLC and far better (read: non-hacky) processes put in place. We're happy to refocus our efforts on what we're expert at, and let Kyle put his skills to work in areas that he's expert at. Now, that said, we don't want to cede full access to the production servers -- but there's a happy middle ground where our access becomes infrequent and minor over time, except in the hopefully rare event of an all hands on deck emergency.
The art of managing vampires and werewolves, I think, is to ensure that they spend their time not fighting amongst themselves, but instead, using those supernatural powers together to achieve a common goal they could not otherwise. In my experience, when programmers and system administrators fight, it's because they're bored. You haven't given them a sufficiently daunting task, one that requires the full combined use of their unique skills to achieve.
Remember, it's not vampires versus werewolves. It's vampires and werewolves.
[advertisement] JIRA Studio - SVN hosting, issue tracking, CI and Google Apps integration. Free trial »
But on those unfortunate occasions when I am compelled -- for reasons entirely beyond my control -- to leave the house, I do so fully armed with my crucial utility belt items. Yes, you heard me, I transform from the geeky Bruce Wayne to the gosh-darned Batman!
At least, that's how I like to think of it.
I've been talking about this every-day carry stuff for quite a while now. The 2010 edition of my personal utility belt is mostly subtle tweaks, but I daresay it's the best one yet.
The art of every-day carry must go on. What you see here is the contents of my pocket:
Now you can have a whole freakin' hard drive worth of files in your pocket. Just in case, you know, you have an emergency need to upload a virus to an alien mothership, or something. Beware the many cheap, slow USB flash drives out there; this one is a real gem. It's inexpensive, and per my measurements, about as fast as they get. This is important because the larger the flash drive, the more important speed becomes. Hard to believe I've gone from carrying a 512 megabyte flash drive in 2005 to a 32 gigabyte flashdrive in 2010.
Ounce for ounce, nothing beats the utility of the Leatherman Squirt. This time I opted for the plier (P) version instead of the scissors (S), and after seeing how much more generally useful the pliers are, I am now a little ashamed to admit I ever carried the wussy scissors version. Pliers all the way, baby. And yes, that is a Pulp Fiction joke you see on it.
Since I've been carrying them in 2005, the average LED flashlight has gone from bright, to very bright, to amazingly bright, to ridiculously blinding laser-like bright. It's scary how bright these fancy milled aluminum AAA LED flashlights get now. What I like about this one is that it lets you trade off stupid-brightness for something practical, like greater runtime: you can twist the top to switch levels: 9 Lumens for 11 hours, 28 Lumens for 3.5 hours, or 85 Lumens for 1 hour.
These little nite-ize carabiners are awesome for quick attachment and detachment of your EDC items, but I'll warn you: resist the urge to put everything you carry on a carabiner, because if you do, the weight and "jangliness" goes up a lot -- and this way lies madness. Consider how many items you actually remove from your keychain regularly. For me, the only item I frequently removed to work with was the Squirt, so that's the only one I put on a carabiner.
Rest assured, everything here is carefully selected with the appropriate levels of monomaniacal attention to detail. For this weight and size, I don't think you can do better. (And don't think I've forgotten about optimizing my wallet, either. Oh no. Quite the contrary.)
However, I have to add a special category this year for the other must-have EDC utility belt item: the smartphone. What self-respecting superhero would leave the house these days without their smartphone? I'm not religious about it, but I use and rather like the iPhone 4, and I'm continually amazed how many things it does that I used to carry separate items for:
cell phone (obviously)
"Nintendo DSwhatever" for portable gaming
GPS
point and shoot digital camera
near-desktop quality mobile web browser and email client
mp3 player with speakers
audio and hi-def video recorder
DVD player
ebook reader
watch, alarm
emergency flashlight (via front facing LED flash control)
scanner
level and ruler
Smartphones really are the ultimate gadget. The list of functions is already enormous, and I'm sure I'm leaving out a few other things that you can do with a modern smartphone.
In a pinch, I could conceivably drop the AAA LED flashlight and the USB flash drive from my EDC kit and substitute the smartphone. Not exactly, mind you, but it's getting closer every year. At this rate, Apple could introduce a flip-out blade on the iPhone 7 and reduce my entire EDC kit to one item.
Anyway, that's what's on my utility belt in 2010. What's on yours?
[advertisement] JIRA Studio - Hosted software development suite. Build better software. Faster. Free trial »
On a recent airplane flight, I happened to catch the movie Groundhog Day. Again.
If you aren't familiar with this classic film, the premise is simple: Bill Murray, somehow, gets stuck reliving the same day over and over.
It's been at least 5 years since I've seen Groundhog Day. I don't know if it's my advanced age, or what, but it really struck me on this particular viewing: this is no comedy. There's a veneer of broad comedy, yes, but lurking just under that veneer is a deep, dark existential conundrum.
It might be amusing to relive the same day a few times, maybe even a few dozen times. But an entire year of the same day -- an entire decade of the same day -- everything happening in precisely, exactly the same way? My back of the envelope calculation easily ran to a decade. But I was wrong. The director, Harold Ramis thinks it was actually 30 or 40 years.
I think the 10-year estimate is too short. It takes at least 10 years to get good at anything, and alloting for the down time and misguided years [Phil] spent, it had to be more like 30 or 40 years [spent reliving the same day].
We only see bits and pieces of the full experience in the movie, but this time my mind began filling in the gaps. Repeating the same day for decades plays to our secret collective fear that our lives are irrelevant and ultimately pointless. None of our actions -- even suicide, in endless grisly permutations -- ever change anything. What's the point? Why bother? How many of us are trapped in here, and how can we escape?
This is some dark, scary stuff when you really think about it.
You want a prediction about the weather, you're asking the wrong Phil.
I'll give you a winter prediction.
It's gonna be cold,
it's gonna be gray,
and it's gonna last you for the rest of your life.
Comedy, my ass. I wanted to cry.
But there is a way out: redemption through repetition. If you have to watch Groundhog Day a few times to appreciate it, you're not alone. Indeed, that seems to be the whole point. Just ask Roger Ebert:
"Groundhog Day" is a film that finds its note and purpose so precisely that its genius may not be immediately noticeable. It unfolds so inevitably, is so entertaining, so apparently effortless, that you have to stand back and slap yourself before you see how good it really is.
Certainly I underrated it in my original review; I enjoyed it so easily that I was seduced into cheerful moderation. But there are a few films, and this is one of them, that burrow into our memories and become reference points. When you find yourself needing the phrase This is like "Groundhog Day" to explain how you feel, a movie has accomplished something.
There's something delightfully Ouroboros about the epiphanies and layered revelations in repeated viewings of a movie that is itself about (nearly) endless repetition.
Which, naturally, brings me to A/B testing. That's what Phil spends most of those thirty years doing. He spends it pursuing a woman, technically, but it's how he does it that is interesting:
Rita: This whole day has just been one long setup.
Phil: It hasn't.
Rita: And I hate fudge!
Phil: [making a mental list] No white chocolate. No fudge.
Rita: What are you doing? Are you making some kind of list? Did you call my friends and ask what I like and what I don't like? Is this what love is for you?
Phil: This is real. This is love.
Rita: Stop saying that! You must be crazy.
Phil doesn't just go on one date with Rita, he goes on thousands of dates. During each date, he makes note of what she likes and responds to, and drops everything she doesn't. At the end he arrives at -- quite literally -- the perfect date. Everything that happens is the most ideal, most desirable version of all possible outcomes on that date on that particular day. Such are the luxuries afforded to a man repeating the same day forever.
This is the purest form of A/B testing imaginable. Given two choices, pick the one that "wins", and keep repeating this ad infinitum until you arrive at the ultimate, most scientifically desirable choice. Your marketing weasels would probably collapse in an ecstatic, religious fervor if they could achieve anything even remotely close to the level of perfect A/B testing depicted in Groundhog Day.
But at the end of this perfect date, something impossible happens: Rita rejects Phil.
Phil wasn't making these choices because he honestly believed in them. He was making these choices because he wanted a specific outcome -- winning over Rita -- and the experimental data told him which path he should take. Although the date was technically perfect, it didn't ring true to Rita, and that made all the difference.
That's the problem with A/B testing. It's empty. It has no feeling, no empathy, and at worst, it's dishonest. As my friend Nathan Bowers said:
A/B testing is like sandpaper. You can use it to smooth out details, but you can't actually create anything with it.
The next time you reach for A/B testing tools, remember what happened to Phil. You can achieve a shallow local maximum with A/B testing -- but you'll never win hearts and minds. If you, or anyone on your team, is still having trouble figuring that out, well, the solution is simple.
Just watch Groundhog Day again.
[advertisement] JIRA Studio - Hosted software development suite. Build better software. Faster. Free trial »
Remember that Scene in Star Trek IV where Scotty tried to use a Mac Plus?
Using a mouse or keyboard to control a computer? Don't be silly. In the future, clearly there's only one way computers will be controlled: by speaking to them.
There's only one teeny-tiny problem with this magical future world of computers we control with our voices.
It doesn't work.
Despite ridiculous, order of magnitude increases in computing power over the last decade, we can't figure out how to get speech recognition accuracy above 80% -- when the baseline human voice transcription accuracy rate is anywhere from 96% to 98%!
In 2001 recognition accuracy topped out at 80%, far short of HAL-like levels of comprehension. Adding data or computing power made no difference. Researchers at Carnegie Mellon University checked again in 2006 and found the situation unchanged. With human discrimination as high as 98%, the unclosed gap left little basis for conversation. But sticking to a few topics, like numbers, helped. Saying “one” into the phone works about as well as pressing a button, approaching 100% accuracy. But loosen the vocabulary constraint and recognition begins to drift, turning to vertigo in the wide-open vastness of linguistic space.
Now, we do have to clarify that we're talking about universal recognition: saying anything to a computer, and having it reliably convert that into a valid, accurate text representation. When you constrain the voice input to a more limited vocabulary -- say, just numbers, or only the names that happen to be in your telephone's address book -- it's not unreasonable to expect a high level of accuracy. I tend to think of this as "voice control" rather than "voice recognition".
Still, I think we're avoiding the real question: is voice control, even hypothetically perfect voice control, more effective than the lower tech alternatives? In my experience, speech is one of the least effective, inefficient forms of communicating with other human beings. By that, I mean ...
typical spoken communication tends to be off-the-cuff and ad-hoc. Unless you're extremely disciplined, on average you will be unclear, rambling, and excessively verbose.
people tend to hear about half of what you say at any given time. If you're lucky.
spoken communication puts a highly disproportionate burden on the listener. Compare the time it takes to process a voicemail versus the time it takes to read an email.
I am by no means against talking with my fellow human beings. I have a very deep respect for those rare few who are great communicators in the challenging medium of conversational speech. Though we've all been trained literally from birth how to use our voices to communicate, voice communication remains filled with pitfalls and misunderstandings. Even in the best of conditions.
So why in the world -- outside of a disability -- would I want to extend the creaky, rickety old bridge of voice communication to controlling my computer? Isn't there a better way?
Robert's post contains some examples in the comments from voice control enthusiasts:
in addition to extremely accurate voice dictation, there are those really cool commands, like being able to say something like "search Google for Balloon Boy" or something like that and having it automatically open up your browser and enter the search term -- something like this is accomplished many times faster than a human could do it. Or, being able to total up a column of numbers in Microsoft Excel by saying simply "total this column" and seeing the results in a blink of an eye, literally.
That's funny, because I just fired up the Google app on my iPhone, said "balloon boy" into it, and got .. a search for "blue boy". I am not making this up. As for the Excel example, total which column? Let's assume you've dealt with the tricky problem of selecting what column you're talking about with only your voice. (I'm sorry, was it D5? B5?) Wouldn't it be many times faster to click the toolbar icon with your mouse, or press the keyboard command equivalent, to sum the column -- rather than methodically and tediously saying the words "sum this column" out loud?
I'm also trying to imagine a room full of people controlling their computers or phones using their voices. It's difficult enough to get work done in today's chatty work environments without the added burden of a floor full of people saying "zoom ... enhance" to their computers all day long. Wouldn't we all end up hoarse and deaf?
"Light exerts force on matter". But according to Google's automatic speech recognition, it's "like the search for some matter". Unsurprisingly, it does not get better from there. You'd be way more confused than educated if you had to learn this lecture from the automatic transcription.
Back when Joel Spolsky and I had a podcast together, a helpful listener suggested using speech recognition to get a basic podcast transcript going. Everything I knew about voice recognition told me this wouldn't help, but harm. What's worse: transcribing everything by hand, from scratch -- or correcting every third or fourth word in an auto-generated machine transcript? Maybe it's just me, but the friction of the huge error rate inherent in the machine transcript seems far more intimidating than a blank slate human transcription. The humans may not be particularly efficient, but they all add value along the way -- collective human judgment can editorially improve the transcript, by removing all the duplication, repetition, and "ums" of a literal, by-the-book transcription.
like a baby, it listens
it can't discriminate
it tries to understand
it reflects what it thinks you say
it gets it wrong... sometimes
sometimes it gets it right.
One day it will grow up,
like a baby, it has potential
will it go to work?
will it turn to crime?
you look at it indulgently.
you can't help loving it, can you?
a poem by like myth
like a baby, it nuisance
it can't discriminate
it tries to oven
it reflects lot it things you say
it gets it run sometimes
sometimes it gets it right
won't day it will grow bop
Ninth a baby, it has provincial
will it both to look?
will it the two crime?
you move at it inevitably
you can't help loving it, cannot you?
The real punchline here is that Mike re-ran the experiment in 2008, and after 5 minutes of voice training, the voice recognition got all but 2 words of the original poem correct!
I suspect that's still not good enough in the face of the existing simpler alternatives. Remember handwriting recognition? It was all the rage in the era of the Apple Newton.
It wasn't as bad as Doonesbury made it out to be. I learned Palm's Graffiti handwriting recognition language and got fairly proficient with it. More than ten years later, you'd expect to see massively improved handwriting recognition of some sort in today's iPads and iPhones and iOthers, right? Well, maybe, if by "massively improved" you mean "nonexistent".
While it still surely has its niche uses, I personally don't miss handwriting recognition. Not even a little. And I can't help wondering if voice recognition will go the same way.
[advertisement] JIRA 4 - Simplify bug tracking for everyone involved. Get started from $10 for 10 users »
After we created Stack Overflow, some people were convinced we had built a marginally better mousetrap for asking and answering questions. The inevitable speculation began: can we use your engine to build a Q&A site about {topic}? Our answer was Stack Exchange. Pay us $129 a month (and up), and you too can create a hosted Q&A community on our engine -- for whatever topic you like!
Well, I have a confession to make: my heart was never in Stack Exchange. It was a parallel effort in a parallel universe only tangentially related to my own. There's a whole host of reasons why, but if I had to summarize it in a sentence, I'd say that money is poisonous to communities. That $129/month doesn't sound like much -- and it isn't -- but the commercial nature of the enterprise permeated and distorted everything from the get-go.
(fortunately, the model is changing with Stack Exchange 2.0, but that's a topic for another blog post.)
Nobody is participating in Stack Overflow to make money. We're participating in Stack Overflow because …
We love programming
We want to leave breadcrumb trails for other programmers to follow so they can avoid making the same dumb mistakes we did
Teaching peers is one of the best ways to develop mastery
We can follow our own interests wherever they lead
We want to collectively build something great for the community with our tiny slices of effort
I don't care how much you pay me, you'll never be able to recreate the incredibly satisfying feeling I get when demonstrating mastery within my community of peers. That's what we do on Stack Overflow: have fun, while making the internet one infinitesimally tiny bit better every day.
If this all seems like a bunch of communist hippie bullcrap to you, I understand. It's hard to explain. But there is quite a bit of science documenting these strange motivations. Let's start with Dan Pink's 2009 TED talk.
Dan's talk centers on the candle problem. Given the following three items …
A candle
A box of thumbtacks
A book of matches
… how can you attach the candle to the wall?
It's not a very interesting problem on its own -- that is, until you try to incentivize teams to solve it:
Now I want to tell you about an experiment using the candle problem by a scientist from Princeton named Sam Glucksberg. Here's what he did.
To the first group, he said, "I'm going to time you to establish norms, averages for how long it typically takes someone to solve this sort of problem."
To the second group, he said, "If you're in the top 25 percent of the fastest times you get five dollars. If you're the fastest of everyone we're testing here today you get 20 dollars." (This was many years ago. Adjusted for inflation, it's a decent sum of money for a few minutes of work.)
Question: How much faster did this group solve the problem?
Answer: It took them, on average, three and a half minutes longer. Three and a half minutes longer. Now this makes no sense, right? I mean, I'm an American. I believe in free markets. That's not how it's supposed to work. If you want people to perform better, you reward them. Give them bonuses, commissions, their own reality show. Incentivize them. That's how business works. But that's not happening here. You've got a monetary incentive designed to sharpen thinking and accelerate creativity -- and it does just the opposite. It dulls thinking and blocks creativity.
It turns out that traditional carrot-and-stick incentives are only useful for repetitive, mechanical tasks. The minute you have to do anything even slightly complex that requires even a little problem solving without a clear solution or rules -- those incentives not only don't work, they make things worse!
There's no need to read the book; this clever ten minute whiteboard animation will walk you through the main points. If you view only one video today, view this one.
The concept of intrinsic motivation may not be a new one, but I find that very few companies are brave enough to actually implement them.
I've tried mightily to live up to the ideals that Stack Overflow was founded on when building out my team. I don't care when you come to work or what your schedule is. I don't care where in the world you live (provided you have a great internet connection). I don't care how you do the work. I'm not going to micromanage you and assign you a queue of task items. There's no need.
If you want to build a ship, don't drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea.
– Antoine de Saint Exupéry
Because I know you yearn for the vast and endless sea, just like we do.
[advertisement] JIRA 4 - Simplify bug tracking for everyone involved. Get started from $10 for 10 users »
When I first chose my own adventure, I didn't know what working remotely from home was going to be like. I had never done it before. As programmers go, I'm fairly social. Which still means I'm a borderline sociopath by normal standards. All the same, I was worried that I'd go stir-crazy with no division between my work life and my home life.
Well, I haven't gone stir-crazy yet. I think. But in building Stack Overflow, I have learned a few things about what it means to work remotely -- at least when it comes to programming. Our current team encompasses 5 people, distributed all over the USA, along with the team in NYC.
My first mistake was attempting to program alone. I had weekly calls with my business partner, Joel Spolsky, which were quite productive in terms of figuring out what it was we were trying to do together -- but he wasn't writing code. I was coding alone. Really alone. One guy working all by yourself alone. This didn't work at all for me. I was unmoored, directionless, suffering from analysis paralysis, and barely able to get motivated enough to write even a few lines of code. I rapidly realized that I'd made a huge mistake in not having a coding buddy to work with.
That situation rectified itself soon enough, as I was fortunate enough to find one of my favorite old coding buddies was available. Even though Jarrod was in North Carolina and I was in California, the shared source code was the mutual glue that stuck us together, motivated us, and kept us moving forward. To be fair, we also had the considerable advantage of prior history, because we had worked together at a previous job. But the minimum bar to work remotely is to find someone who loves code as much as you do. It's … enough. Anything else on top of that -- old friendships, new friendships, a good working relationship -- is icing that makes working together all the sweeter. I eventually expanded the team in the same way by adding another old coding buddy, Geoff, who lives in Oregon. And again by adding Kevin, who I didn't know, but had built amazing stuff for us without even being asked to, from Texas. And again by adding Robert, in Florida, who I also didn't know, but spent so much time on every single part of our sites that I felt he had been running alongside our team the whole way, there all along.
The reason remote development worked for us, in retrospect, wasn't just shared love of code. I picked developers who I knew -- I had incontrovertible proof -- were amazing programmers. I'm not saying they're perfect, far from it, merely that they were top programmers by any metric you'd care to measure. That's why they were able to work remotely. Newbie programmers, or competent programmers who are phoning it in, are absolutely not going to have the moxie necessary to get things done remotely -- at least, not without a pointy haired manager, or grumpy old team lead, breathing down their neck. Don't even think about working remotely with anyone who doesn't freakin' bleed ones and zeros, and has a proven track record of getting things done.
While Joel certainly had a lot of high level input into what Stack Overflow eventually became, I only talked to him once a week, at best (these calls were the genesis of our weekly podcast series). I had a strong, clear vision of what I wanted Stack Overflow to be, and how I wanted it to work. Whenever there was a question about functionality or implementation, my team was able to rally around me and collectively make decisions we liked, and that I personally felt were in tune with this vision. And if you know me at all, you know I'm not shy about saying no, either. We were able to build exactly what we wanted, exactly how we wanted.
So, there are a few basic ground rules for remote development, at least as I've seen it work:
The minimum remote team size is two. Always have a buddy, even if your buddy is on another continent halfway across the world.
Only grizzled veterans who absolutely love to code need apply for remote development positions. Mentoring of newbies or casual programmers simply doesn't work at all remotely.
To be effective, remote teams need full autonomy and a leader (PM, if you will) who has a strong vision and the power to fully execute on that vision.
This is all well and good when you have a remote team size of three, as we did for the bulk of Stack Overflow development. And all in the same country. Now we need to grow the company, and I'd like to grow it in distributed fashion, by hiring other amazing developers from around the world, many of whom I have met through Stack Overflow itself.
But how do you scale remote development? Joel had some deep seated concerns about this, so I tapped one of my heroes, Miguel de Icaza -- who I'm proud to note is on our all-star board of advisors -- and he was generous enough to give us some personal advice based on his experience running the Mono project, which has dozens of developers distributed all over the world.
At the risk of summarizing mercilessly (and perhaps too much), I'll boil down Miguel's advice the best I can. There are three tools you'll need in place if you plan to grow a large-ish and still functional remote team:
Real time chat
When your team member lives in Brazil, you can't exactly walk by his desk to ask him a quick question, or bug him about something in his recent checkin. Nope. You need a way to casually ping your fellow remote team members and get a response back quickly. This should be low friction and available to all remote developers at all times. IM, IRC, some web based tool, laser beams, smoke signals, carrier pigeon, two tin cans and a string: whatever. As long as everyone really uses it.
We're currently experimenting with Campfire, but whatever floats your boat and you can get your team to consistently use, will work. Chat is the most essential and omnipresent form of communication you have when working remotely, so you need to make absolutely sure it's functioning before going any further.
Persistent mailing list
Sure, your remote team may know the details of their project, but what about all the other work going on? How do they find out about that stuff or even know it exists in the first place? You need a virtual bulletin board: a place for announcements, weekly team reports, and meeting summaries. This is where a classic old-school mailing list comes in handy.
We're using Google Groups and although it's old school in spades, it works plenty well for this. You can get the emails as they arrive, or view the archived list via the web interface. One word of caution, however. Every time you see something arrive in your inbox from the mailing list you better believe, in your heart of hearts, that it contains useful information. The minute the mailing list becomes just another "whenever I have time to read that stuff", noise engine, or distraction from work … you've let someone cry wolf too much, and ruined it. So be very careful. Noisy, argumentative, or useless things posted to the mailing list should be punishable by death. Or noogies.
Voice and video chat
As much as I love ASCII, sometimes faceless ASCII characters just aren't enough to capture the full intentions and feelings of the human being behind them. When you find yourself sending kilobytes of ASCII back and forth, and still are unsatisfied that you're communicating, you should instill a reflexive habit of "going voice" on your team.
Never underestimate the power of actually talking to another human being. I know, I know, the whole reason we got into this programming thing was to avoid talking to other people, but bear with me here. You can't be face to face on a remote team without flying 6 plus hours, and who the heck has that kind of time? I've got work I need to get done! Well, the next best thing to hopping on a plane is to fire up Skype and have a little voice chat. Easy peasy. All that human nuance which is totally lost in faceless ASCII characters (yes, even with our old pal *<:-)) will come roaring back if you regularly schedule voice chats. I recommend at least once a week at an absolute minimum; they don't have to be long meetings, but it sure helps in understanding the human being behind all those awesome checkins.
Nobody hates meetings and process claptrap more than I do, but there is a certain amount of process you'll need to keep a bunch of loosely connected remote teams and developers in sync.
Anything that is blocking us or we are concerned about
This doesn't have to be (and in fact shouldn't be) a long report. The briefer the better, but do try to capture all the useful highlights. Mail this to the mailing list every Monday like clockwork. Now, how many "teams" you have is up to you; I don't think this needs to be done at the individual developer level, but you could.
Meeting minutes
Any time you conduct what you would consider to be a "meeting" with someone else, take minutes! That is, write down what happened in bullet point form, so those remote team members who couldn't be there can benefit from -- or at least hear about -- whatever happened.
Again, this doesn't have to be long, and if you find taking meeting minutes onerous then you're probably doing it wrong. A simple bulleted list of sentences should suffice. We don't need to know every little detail, just the big picture stuff: who was there? What topics were discussed? What decisions were made? What are the next steps?
Both of the above should, of course, be mailed out to the mailing list as they are completed so everyone can be notified. You do have a mailing list, right? Of course you do!
If this seems like a lot of jibba-jabba, well, that's because remote development is hard. It takes discipline to make it all work, certainly more discipline than piling a bunch of programmers into the same cubicle farm. But when you imagine what this kind of intellectual work -- not just programming, but anything where you're working in mostly thought-stuff -- will be like in ten, twenty, even thirty years … don't you think it will look a lot like what happens every day right now on Stack Overflow? That is, a programmer in Brazil helping a programmer in New Jersey solve a problem?
If I have learned anything from Stack Overflow it is that the world of programming is truly global. I am honored to meet these brilliant programmers from every corner of the world, even if only in a small way through a website. Nothing is more exciting for me than the prospect of adding international members to the Stack Overflow team. The development of Stack Overflow should be reflective of what Stack Overflow is: an international effort of like-minded -- and dare I say totally awesome -- programmers. I wish I could hire each and every one of you. OK, maybe I'm a little biased. But to me, that's how awesome the Stack Overflow community is.
I believe remote development represents the future of work. If we have to spend a little time figuring out how this stuff works, and maybe even make some mistakes along the way, it's worth it. As far as I'm concerned, the future is now. Why wait?
These sites all run the same core engine, but the logo, domain, and CSS "skin" that lies over the HTML skeleton is different in each case:
They are not terribly different looking, it's true, but we also want them to be recognizable as a family of sites.
We're working with two amazing designers, Jin Yang and Nathan Bowers, who are helping us whip the CSS and HTML into shape so they can produce a set of about 10 different Zen Garden designs. As new sites in our network get democracied into being, these designs will be used as a palette for the community to choose from. (And, later, the community will decide on a domain name and logo as well.)
Anyway, I bring this up not because my pokemans, let me show you them, but because I have to personally maintain four different CSS files. And that number is only going to get larger. Much larger. That scares me a little.
Most of all, what I've learned from this exercise in site theming is that CSS is kind of painful. I fully support CSS as a (mostly) functional user interface Model-View-Controller. But even if you have extreme HTML hygiene and Austrian levels of discipline, CSS has some serious limitations in practice.
Things in particular that bite us a lot:
Vertical alignment is a giant, hacky PITA. (Tables work great for this though!)
Lack of variables so we have to repeat colors all over the place.
Lack of nesting so we have to repeat huge blocks of CSS all over the place.
In short, CSS violates the living crap out of the DRY principle. You are constantly and unavoidably repeating yourself.
That's why I'm so intrigued by two Ruby gems that attempt to directly address the deficiencies of CSS.
As you can see, in both cases we're transmogrifying CSS into a bit more of a programming language, rather than the static set of layout rules it currently exists as. Behind the scenes, we're generating plain vanilla CSS using these little dynamic languages. This could be done at project build time, or even dynamically on every page load if you have a good caching strategy.
I'm not sure how many of these improvements CSS3 will bring, never mind when the bulk of browsers in the world will support it. But I definitely feel that the core changes identified in both Less CSS and SASS address very real pain points in practical CSS use. It's worth checking them out to understand why they exist, what they bring to the table, and how you could possibly adopt some of these strategies in your own CSS and your favorite programming language.
I have what I would charitably describe as a hate-hate relationship with email. I desperately try to avoid sending email, not just for myself, but also in the code I write.
Despite my misgivings, email is the cockroach of communication mediums: you just can't kill it. Email is the one method of online contact that almost everyone -- at least for that subset of "everyone" which includes people who can bear to touch a computer at all -- is guaranteed to have, and use. Yes, you can make a fairly compelling case that email is for old stupid people, but let's table that discussion for now.
So, reluctantly, we come to the issue of sending email through code. It's easy! Let's send some email through oh, I don't know, let's say ... Ruby, courtesy of some sample code I found while browsing the Ruby tag on Stack Overflow.
require 'net/smtp'
def send_email(to, subject = "", body = "")
from = "my@email.com"
body= "From: #{from}\r\nTo: #{to}\r\nSubject: #{subject}\r\n\r\n#{body}\r\n"
Net::SMTP.start('192.168.10.213', 25, '192.168.0.218') do |smtp|
smtp.send_message body, from, to
end
end
send_email "foo@example.com", "title", "body goes here"
There's a bug in this code, though. Do you see it?
Just because you send an email doesn't mean it will arrive. Not by a long shot. Bear in mind this is email we're talking about. It was never designed to survive a bitter onslaught of criminals and spam, not to mention the explosive, exponential growth it has seen over the last twenty years. Email is a well that has been truly and thoroughly poisoned -- the digital equivalent of a superfund cleanup site. The ecosystem around email is a dank miasma of half-implemented, incompletely supported anti-spam hacks and workarounds.
Which means the odds of that random email your code just sent getting to its specific destination is .. spotty. At best.
If you want email your code sends to actually arrive in someone's AOL mailbox, to the dulcet tones of "You've Got Mail!", there are a few things you must do first. And most of them are only peripherally related to writing code.
1. Make sure the computer sending the email has a Reverse PTR record
What's a reverse PTR record? It's something your ISP has to configure for you -- a way of verifying that the email you send from a particular IP address actually belongs to the domain it is purportedly from.
Not every IP address has a corresponding PTR record. In fact, if you took a random sampling of addresses your firewall blocked because they were up to no good, you'd probably find most have no PTR record - a dig -x gets you no information. That's also apt to be true for mail spammers, or their PTR doesn't match up: if you do a dig -x on their IP you get a result, but if you look up that result you might not get the same IP you started with.
That's why PTR records have become important. Originally, PTR records were just intended as a convenience, and perhaps as a way to be neat and complete. There still are no requirements that you have a PTR record or that it be accurate, but because of the abuse of the internet by spammers, certain conventions have grown up. For example, you may not be able to send email to some sites if you don't have a valid PTR record, or if your pointer is "generic".
How do you get a PTR record? You might think that this is done by your domain registrar - after all, they point your domain to an IP address. Or you might think whoever handles your DNS would do this. But the PTR record isn't up to them, it's up to the ISP that "owns" the IP block it came from. They are the ones who need to create the PTR record.
A reverse PTR record is critical. How critical? Don't even bother reading any further until you've verified that your ISP has correctly configured the reverse PTR record for the server that will be sending email. It is absolutely the most common check done by mail servers these days. Fail the reverse PTR check, and I guarantee that a huge percentage of the emails you send will end up in the great bit bucket in the sky -- and not in the email inboxes you intended.
2. Configure DomainKeys Identified Mail in your DNS and code
What's DomainKeys Identified Mail? With DKIM, you "sign" every email you send with your private key, a key only you could possibly know. And this can be verified by attempting to decrypt the email using the public key stored in your public DNS records. It's really quite clever!
The first thing you need to do is generate some public-private key pairs (one for every domain you want to send email from) via OpenSSL. I used a win32 version I found. Issue these commands to produce the keys in the below files:
These public and private keys are just big ol' Base64 encoded strings, so plop them in your code as configuration string resources that you can retrieve later.
Next, add some DNS records. You'll need two new TXT records.
The first TXT DNS record is the global DomainKeys policy and contact email.
The second TXT DNS record is the public base64 key you generated earlier, as one giant unbroken string. Note that the "selector" part of this record can be anything you want; it's basically just a disambiguating string.
Almost done. One last thing -- we need to sign our emails before sending them. In any rational world this would be handled by an email library of some kind. We use Mailbee.NET which makes this fairly painless:
To be honest, SenderID is a bit of a "nice to have" compared to the above two. But if you've gone this far, you might as well go the distance. SenderID, while a little antiquated and kind of.. Microsoft/Hotmail centric.. doesn't take much additional effort.
SenderID isn't complicated. It's another TXT DNS record at the root of, say, example.com, which contains a specially formatted string documenting all the allowed IP addresses that mail can be expected to come from. Here's an example:
That sucked. How do I know all this junk is working?
I agree, it sucked. Email sucks; what did you expect? I used two methods to verify that all the above was working:
Test emails sent to a GMail account.
Use the "show original" menu on the arriving email to see the raw message content as seen by the email server. You want to verify that the headers definitely contain the following:
If you see that, then the Reverse PTR and DKIM signing you set up is working. Google provides excellent diagnostic feedback in their email server headers, so if something isn't working, you can usually discover enough of a hint there to figure out why.
Test emails sent to the Port25 email verifier
Port25 offers a really nifty public service -- you can send email to check-auth@verifier.port25.com and it will reply to the from: address with an extensive diagnostic! Here's an example summary result from a test email I just sent to it:
You want to pass SPF, DKIM, and Sender-ID. Don't worry about the DomainKeys failure, as I believe it is spurious -- DKIM is the "newer" version of that same protocol.
Yes, the above three steps are quite a bit of work just to send a lousy email. But I don't send email lightly. By the time I've reached the point where I am forced to write code to send out email, I really, really want those damn emails to arrive. By any means necessary.
And for those who are the unfortunate recipients of these emails: my condolences.
[advertisement] JIRA Studio - SVN hosting, issue tracking, CI and Google Apps integration. Free trial »
As far as I'm concerned, you can never be too rich, too thin, or have too much screen space. By "screen", I mean not just large monitors, but multiple large monitors. I've been evangelizing multiple monitors since the dark days of Windows Millennium Edition:
If you're a long time reader you're probably sick of hearing about this stuff by now, but something rather wonderful has happened since I last wrote about it:
If you're only using one monitor, you are cheating yourself out of potential productivity. Two monitors is a no-brainer. It's so fundamental that I included it as a part of the Programmer's Bill of Rights.
But you can do better.
As good as two monitors is, three monitors is even better. With three monitors, there's a "center" to focus on. And 50% more display area. While there's certainly a point of diminishing returns for additional monitors, I think three is the sweet spot. Even Edward Tufte, in the class I recently attended, explicitly mentioned multiple monitors. I don't care how large a single display can be; you can never have enough desktop space.
Normally, to achieve three monitors, you have to either:
Buy an exotic video card that has more than 2 monitor connections.
Install a second video card.
Fortunately, that is no longer true. I was excited to learn that the latest ATI video cards have gone from two to three video outputs. Which means you can now achieve triple monitors with a single video card upgrade! They call this "eyefinity", but it's really just shorthand for "raising the standard from two display outputs to three".
But, there is a (small) catch. The PC ecosystem is in the middle of shifting display output standards. For evidence of this, you need look no further than the back panel of one of these newfangled triple display capable ATI video cards:
I suspect part of this odd connector layout is due to space restrictions (DVI is awfully chunky), but I've always understood DisplayPort to be the new, improved DVI connector for computer monitors, and HDMI to be the new, improved s-video/component connector for televisions. Of course these worlds are blurring, as modern high-definition TVs make surprisingly effective computer monitors, too.
Anyway, since all my monitors have only DVI inputs, I wasn't sure what to do with the other output. So I asked on Super User. The helpful answers led me to discover that, as I suspected, the third output has to be DisplayPort. So to connect my third monitor, I needed to convert DisplayPort to DVI, and there are two ways:
I ended up going with the active converter, which has mixed reviews, but it's worked well for me over the last few weeks.
Note that this adapter requires USB power, and given the spotty results others have had with it, some theorize that it needs quite a bit of juice to work reliably. I plugged it into my system's nearby rear USB ports which do tend to deliver more power (they're closer to the power supply, and have short cable paths). Now, I have gotten the occasional very momentary black screen with it, but nothing severe enough to be a problem or frequent enough to become a pattern. If you have DisplayPort compatible monitors, of course, this whole conversion conundrum is a complete non-issue. But DisplayPort is fairly new, and even my new-ish LCD monitors don't support it yet.
The cool thing about this upgrade, besides feeding my video card addiction, is that I was able to simplify my hardware configuration. That's always good. I went from two video cards to one, which means less power consumption, simpler system configuration, and fewer overall driver oddities. Basically, it makes triple monitors -- dare I say it -- almost a mainstream desktop configuration. How could I not be excited about that?
I was also hoping that Nvidia would follow ATI's lead here and make three display outputs the standard for all their new video cards, too, but sadly that's not the case. It turns out their new GTX 480 fails in other ways, in that it's basically the Pentium 4 of video cards -- generating ridiculous amounts of heat for very little performance gain. Based on those two facts, I am comfortable endorsing ATI wholeheartedly at this point. But, do be careful, because not all ATI cards support triple display outputs (aka "eyefinity"). These are the ones that I know do:
Unless you're a gamer, there's no reason to care about anything other than the least expensive model here, which will handily crush any 2D or 3D desktop GUI acceleration needs you might have. As an addict, of course I bought the high end model and it absolutely did not disappoint -- more than doubling my framerates in the excellent game Battlefield: Bad Company 2 over the GTX 280 I had before.
I'm excited that a triple monitor setup is now, thanks to ATI, so easily attainable for desktop users -- as long as you're aware of the DisplayPort caveat I discussed above. I'd encourage anyone who is even remotely interested in the (many) productivity benefits of a triple monitor setup to seriously consider an ATI video card upgrade.
[advertisement] JIRA Studio - Hosted software development suite. Build better software. Faster. Free trial »
I've been a long time fan of Krug's book Don't Make Me Think. Not just because it's a quick, easy read (and it is!) -- but because it's the most concise and most approachable book I've ever found to teach the fundamental importance of usability. As far as I'm concerned, if you want to help us make the software industry a saner place, the first step is getting Don't Make Me Think in the hands of as many of your coworkers as you can. If you don't have people that care about usability on your project, your project is doomed.
Beyond getting people over the hurdle of at least paging through the Krug book, and perhaps begrudgingly conceding that this usability stuff matters, the next challenge is figuring out how to integrate usability testing into your project. It's easy to say "Usability is Important!", but you have to walk the walk, too. I touched on some low friction ways to get started in Low-Fi Usability Testing. That rough outline is now available in handy, more complete book form -- Rocket Surgery Made Easy: The Do-It-Yourself Guide to Finding and Fixing Usability Problems.
Don't worry, Krug's book is just as usable as his advice. It's yet another quick, easy read. Take it from the man himself:
Usability testing is one of the best things people can do to improve Web sites (or almost anything they’re creating that people have to interact with).
Since most organizations can’t afford to hire someone to do testing for them
on a regular basis, everyone should learn to do it themselves. And …
I could probably write a pretty good book explaining how to do it.
If you're wondering what the beginner's "how do I boil water?" recipe for software project usability is, stop reading this post and get a copy of Rocket Surgery Made Easy. Now.
One of the holy grails of usability testing is eyetracking -- measuring where people's eyes look as they use software and web pages. Yes, there are clever JavaScript tools that can measure where users move their pointers, but that's only a small part of the story. Where the eye wanders, the pointer may not, and vice-versa. But, who has the time and equipment necessary to conduct an actual eyetracking study? Almost nobody.
Eyetracking Web Usability is chock full of incredibly detailed eyetracking data for dozens of websites. Even though you (probably) can't afford to do real eyetracking, you can certainly use this book as a reference. There is enough variety in UI and data that you can map the results, observations, and explanations found here to what your project is doing.
This particular book is rather eyetracking specific, but it's just the latest entry in a whole series on usability, and I recommend them all highly. These books are a fount of worthwhile data for anyone who works on software and cares about usability, from one of the most preeminent usability experts on the web.
Usability isn't really cheap or easy. It's an endless war, with innumerable battlegrounds, stretching all the way back to the dawn of computing. But these books, at least, are cheap and easy in the sense that they give you some basic training in fighting the good (usability) fight. That's the best I can do, and it's all I'd ask from anyone else I work with.
[advertisement] JIRA Studio - Hosted software development suite. Build better software. Faster. Free trial »
The Columbus IT Martini is heading out. Sign up to head from Columbus to Cincinnati with us.
The IT Martini is an IT Community formed by John Bishop and Aladin Gohar in Columbus, Ohio. I've gone to a couple of IT Martinis and they definitely provide the IT community with an exciting network experience every time I go.
This time around, John and Aladin set up a round-trip bus to take everyone from Columbus to Cincinnati. We will be arriving in Cincinnati at the Havana Martini Club and watching what IT Professionals have contributed to the world.
If you are in the Columbus area and interested in going on Thursday, July 30, 2009, there is a special code you can enter when signing up. I'm sure you'll agree that it was worth signing up. ;-)
If you are in Columbus and want to go, enter in the code: DANYLKO1 when asked for a promo code.
However, if you are a Cincinnati local, you don't have to go far. There is a special code for local Cincy people as well. Enter in the code: CINCY-DANYLKO1 when asked for a promo code.
As I said before, you won't be disappointed. If you are interested in finding out more about the event, head over to the IT Martini web site and add it to you calendar.
Most corporations are still using IE6. Why? It's old technology! Move forward!
If you've been developing web sites for a while and keep up with the web, you may have noticed a recent upheaval with the IT industry regarding updating browsers...specifically Internet Explorer 6 (IE6).
Heck, I thought Microsoft had this taken care of with their updating process through Windows.
Yes, I can hear everyone screaming at their workplace that it's the "man" holding them down from updating their browser. Certain companies control what a user can and can't install on their computers which is understandable. But, because of that, we now have a ton of web developers supporting every frickin' IE browser out there.
A note to corporations...PLEASE kick IE6 to the side of the road of the information superhighway! It's roadkill. Please upgrade your users!
What?!?!?
You're saying you don't want to? Is your IT guy Milton from Office Space? He doesn't want to update the entire company's browser?
Oh boy...Ok, let me let you in on a little secret: The Internet is evolving! You need to update your browser to keep up with the Internet technologies for your company to survive.
Here's comes the hard part to understand...these new browsers (even the old ones) are FREE. Why wouldn't companies upgrade to at least IE7? Am I missing something here? PICK ONE! Firefox, Opera, Safari, Chrome, and yes, even IE.
Need more proof? Well, it's getting pretty bad when people are building sites to convert IE6 users to a newer browser. It doesn't matter what browser...just upgrade!
The resistance from companies to remove IE6 is really beginning to scare me. Are we at a point where if IE6 was removed from all computers in corporations and replaced with IE7/IE8 that the economy would dip even lower because all web sites and applications using the IE6 engine would just up and die? Do we really have that many corporations still running IE6?
Right now, if you're still with me, you probably are looking for a reason to upgrade. I'm sorry, but I think I've given you just about every reason to upgrade to a decent browser that I can think of.
If someone is still clinging to IE6, it must be a religion or cult thing.
Twitter is tweeting...sorry...talking to a lot of companies!
Is everyone starting to talk like Elmer Fudd or what? Sheesh! :-)
Just a quick post about everything going on with Twitter. It doesn't surprise me that Twitter is talking to a number of different companies. Twitter's growth rate is downright scary.
And the big boys are taking notice.
The companies interested in purchasing Twitter see a lot of potential in such a tiny function. Twitter provides a ton of features that any company would love to acquire, such as:
What company wouldn't want these features? Lately, it seems that the bird is the word....
Sorry, I couldn't resist. :-)
Along with the possible acquisition of Twitter, everyone wants to keep up with the Jones with the latest trends. Here are some sites that utilize Twitter to track trends on the Internet. You could even use them to track the Twitter acquisition?
Bob Bakh discusses how to connect a FreeNAS (Networked Attached Storage) to a TiVo.
Recently, I had someone send me a question from a previous post about how to hook up a FreeNAS to a TiVo. Bob Bakh was generous enough to provide a description of how he hooked everything together.
Take it away, Bob!
I configured a box to run FreeNAS on my network to manage storing Media, and backing up vital information in my home.
It was a great tool, however I wanted more, mainly the ability to simply play media stored on the FreeNAS box on my home TV without the use of a general purpose computer. One way was to use my AppleTV, hack it and use an AFP mount, or an NFS mount directly to the AppleTV, this worked well, but was a pain, and a hacked AppleTV is not a happy AppleTV. So I gave up on that plan.
I looked at my TiVo and realized I had the makings of a decent setup there, so I started to Google around for some solutions. I stumbled across a simple one in my world, which was to TiVo Desktop with the GoBack feature enabled. I used the free TiVo desktop from TiVo. And the GoBack function allowed by a hack from Visual Hub, however that hack is no longer available. A PC version is available.
You will need to buy the TiVo desktop plus to accomplish this, but it does take some manual setting of what video files you want to transfer.
Okay, so this worked, and my computer showed up in the TiVo now playing menu and allowed me to see videos that were in a mounted directory from the FreeNAS. I would select the video and it would transfer to the TiVo, and life was good, it was a bit slow, but it worked.
Now my issue with FreeNAS and other software based NAS systems was that I had to manage the hardware, and it got to be a little warm in my home office where I stored the system, so I made a few changes.
I now run a QNAP TS-509 , a 5 disk raid 5 self contained NAS system. It runs on a micro Linux kernel, has redundant network connections, and runs really cool, so my office is no longer 10 degrees hotter than the rest of my house, and it’s a whole lot quieter.
I originally had it configured the same way as the FreeNAS system, and it worked fine, but I was on the hunt for a better solution. The QNAP has a little thing called ipkg, which allows me to install UNIX utilities written and packaged for its kernel.
I installed the following
binutils - 2.17-2 - The GNU assembler and linker and related tools
bzip2 - 1.0.5-1 - Very high-quality data compression program
confuse - 2.6-2 - a configuration file parser library
ffmpeg - 0.svn20080409-2 - FFmpeg is an audio/video conversion tool.
flip - 20050821-1 - Utility program to convert text files between UNIX or Mac newlines and DOS linefeed + newlines.
grep - 2.5.3-1 - Global regular expression parser
libc-dev - 2.6.1-3 - libc development files.
libdb - 4.2.52-3 - Berkeley DB Libraries
libnsl - 2.6.1-4 - Network Services Library
libstdc++ - 6.0.9-6 - Standard C++ library, needed for dynamically linked C++ programs
ncurses - 5.7-1 - NCurses libraries
ncursesw - 5.7-1 - NCurses libraries with wide char support.
openssl - 0.9.8i-1 - Openssl provides the ssl implementation in libraries libcrypto and libssl, and is needed by many other applications and librari
python - 2.5-1 - This is a package that sets up the default python.
python24 - 2.4.5-1 - Python is an interpreted, interactive, object-oriented programming language.
python25 - 2.5.2-2 - Python is an interpreted, interactive, object-oriented programming language.
python26 - 2.6-1 - Python is an interpreted, interactive, object-oriented programming language.
python30 - 3.0-1 - Python is an interpreted, interactive, object-oriented programming language.
readline - 5.2-2 - The GNU Readline library provides a set of functions for use by applications that allow users to edit command lines as they are
ruby - 1.8.7-1 - An interpreted scripting language for quick and easy object-oriented programming.
sqlite - 3.6.4-1 - SQLite is a small C library that implements a self-contained, embeddable, zero-configuration SQL database engine.
zlib - 1.2.3-3 - zlib is a library implementing the 'deflate' compression system
Then I visited pyTiVo. This is the home of pyTivo, a python script that emulates a TiVo server on your network.
This allowed me to configure a directory on the system as my TiVo directory, and now I serve up videos straight from my QNAP to my TiVo, much more efficient, and no more gateway box.
I used the pyTiVo installation instructions. What this gave me is a great way to manage my videos, and with a workflow based on handbrake and visual hub, I’m able to convert my children’s DVD collection to MPEG-2 and have them view it on the TiVo, and able to keep months of their TV shows stored offline for their viewing.
It has been a great solution.
I think you may be able to install pyTivo directly on the FreeNAS system, but I never tried it.
I hope this answers some questions for you, and I can help if there are any others.
Wow! I wrote that. But so much HAS changed since March 2007.
I recently received a comment post from a reader about how awful a past post was. I read the post over and started thinking about my question, "When to use AJAX programming?"
After thinking about the question and reading it over yet again, I realized something about the reader's opinion:
He was right!
In that post, I mentioned when would be an ideal time to use AJAX: Only use AJAX in Intranet applications.
What a load of malarky! Who wrote that!
Oh.
Well, some of my points are flawed and some are right on. However, I've learned a lot since that time and found better techniques on how to write AJAX applications.
I do stand corrected. The usability aspect of AJAX would not only enhance the application, but could off-load entire web pages of HTML from the server and transition it to a simple data transfer of JSON and/or XML back to the client without an entire page refresh.
What's your take on AJAX?
So much has changed since AJAX was introduced, but how many people are currently using AJAX in their applications? I know this is just one question, but there are many more that people should be asking.
Are developers worried about security regarding AJAX and what safeguards should you add to secure your AJAX application?
Should there be a limit as to how much AJAX is added to an application? What are the guidelines for too much or too little?
Does it skew the web analytics of your web site?
I leave these questions to my audience.
What do you think about these questions and the advantages/disadvantages in my past post? Post your comments below.
Lately, Firefox has been climbing in the browser ranks...and for good reason.
With the continuing growth of Firefox spreading throughout the web, Firefox's architecture to allow add-ons, themes, and plug-ins provides users with an absolute easy way to assist you in your travels on the information super-highway.
The Mozilla Foundation created a section on their site called Fashion your Firefox. They've organized some of their web-worthy extensions into categories for people who want to accessorize their Firefox browser.
The categories include:
Finder and Seeker
Social Butterfly
Shutterbug
Digital Pack Rat
Rock Star
Decorator
Shopaholic
News Junkie
Executive Assistant
Select the Extensions that you think will assist you and you're on your way.
It's amazing to see how far Mozilla has gone with their extension architecture. Firefox extensions even provide a way to replace applications with Super Extensions.
Are their other extensions that you think are better than this list? Post something below to start a discussion.
How do you survive this sort of thing? There are a number of things you can do in this time of crisis.
Create your own business
What better time than now to start your own business. Nothing like trial by fire.
If you have a hobby on the side, now may be a great time to think about dedicating your time to starting up a business based on that hobby. Talk to your friends and see if they would be willing to work with you as well. Who knows...You may find a fellow business partner who shared your same hobby or dream.
Start writing
There are a lot of great opportunities out there since the web spawned blogging and journalism. Determine what your expertise is and either start blogging on a regular schedule or write an eBook and sell it through ClickBank or other digital product site.
Learn a new skillset
Of course, you can always learn a new skillset if your existing skillset becomes either old or obsolete. Recently, Computerworld just came out with a report on the 9 hottest skills for 2009. Check out the list and see if you can apply or enhance your existing skills based on the list. Oh...and make sure you live in a city that has growth potential.
Join LinkedIn.com
The old adage "It's not what you know, it's who you know" holds true on LinkedIn. Make sure you register and start requesting recommendations/endorsements from your fellow co-workers. Then start focusing on the jobs portion of the site and start apply for jobs that fit you. Who knows, you may find that ideal, dream job through one of your friends.
Create a small widget and sell it
Nowadays, someone can create the smallest application and make a million dollars at it. Find a small widget that is cute, ridiculous, funny, or just plain gross and market it through the right channels. You might find out that a little idea can go a long way.
This list provides only five ways to tackle this economy, but there are definitely more.
Did I miss any? Post a comment below to further the discussion.
T-Mobile releases the G1, Google exposes two existing services, helps the world, and takes part in the Election 2008.
Wow, what a week for Google!
T-Mobile G1/GPhone
Of course, the G1 was released this week. I was waiting for the dust to settle down to find out if this was an iPhone killer or not. From what I've seen on CrunchGear with their roundup, it's pretty close, but not quite an iPhone. There are some features missing that may sway a consumer one way or another.
I'm still wrestling with paying $179 for the phone with a $25/$35 a month bill.
Google Contact Manager
The Contact Manager has been screaming to be built and released to the public since GMail was created. As you would expect, this manages your contacts throughout every Google service that deals with users.
It has a nice clean interface, allows you to set up groups, and add pictures to your contacts as well.
Google Moderator (apps engine)
Ok, it really isn't an existing service to the public, but according to Matt Cutts, Google Moderator existed internally at Google and was used for teams asking questions.
Google Moderator lets anyone ask a question and letting the users vote the questions either up or down as to which are the most important they want answered.
This moderator would also be an excellent way for companies to conduct feature matrixes for future products (i.e. Submit a feature for this future product.)
Google 10 to the 100
10 to the 100 is a call for ideas that help as many people as possible on this planet. Your one idea may even be worth $1 million dollars. Maybe even more.
Google has committed $10 million to implement your ideas and projects submitted through Google.
If you wanted to make a difference in the world, this would be the place to start.
Google InQuotes
Ok, let's cut through the poltical horse hockey! Since the Election 2008 is upon us, the media is feeding us so much information on candidates, we don't know what is right or wrong.
So, Google has created Google InQuotes. This takes all of the people running for office and collects all of their quotes regarding political issues. So if you want to see what Obama said about Iraq as opposed to what McCain said, check out this site.
My parents came back into town because of a recent death in the family and brought, of course, both laptops. For a recap of what happened before, check my past laptop experience with my parents.
The laptop my father was using was the Acer Aspire 5315. He didn't want all of the software on the computer. I found the OS disk, backed up his data, reformatted his hard drive, and voila! He had a clean machine.
The one piece of software I didn't install was the most critical piece of software he needed: The Acer ePower Management Utility.
Here's what the problem was: The Acer required the ePower Management Utility to control the fan. When the machine was used for an extended period of time, it would overheat. When the laptop overheated, the laptop would shut down to save the computer from melting down or damaging the processor. With the ePower Management Utility installed, the software would identify that the laptop was overheating and activate the fan.
Since then, we (*I*) have been benchmarking it by leaving it on, putting it into suspend/hibernate mode and everything seems to be working fine.
Now, it seems my parents are grateful because they each have a laptop.
How did I figure this out? Research. :-)
There was a whole post on this at the Ubuntu forums. It seems some other techno-geeks like me reformatted the hard drive and wanted to install Linux on the machine.
For those who own other Acer machine models, I imagine this would pertain to you as well if your laptop continues to shut down after 10-13 minutes of heating up.
The new Acer Aspire One is definitely small enough for the road, but is it good enough for my parents?
I recently had a visit from my parents. They were having problems with their laptop because it kept shutting down right in the middle of doing something important: email.
After they were here for a couple of days, I noticed first hand when the Acer laptop would shut down. I couldn't explain why it was happening. Possibly the battery pack or the power cord.
Eventually, I couldn't take anymore and started looking for a replacement for my parents while they were here. Because they sure weren't getting mine. :-)
I was starting to look over the Sunday ads and noticed that Best Buy had the Acer for $349. This was not the one that had a Solid-State Drive (SSD). This one actually had a 120GB hard drive inside. This was fantastic that at least one model had an internal hard drive.
MicroCenter also had the same Acer Aspire One on sale for the same price, but we went with Best Buy because of location, location, location.
We purchased it from Best Buy and got it home. Heck, I was more excited about it than my parents.
After cracking it open, I started installing (and removing) all the software from the hard drive. It came installed with Windows XP Home, which was what my mother and father were already used to and my mother kept asking me, "Can I use it now? How about now? Can I use it?" Ahhh...parents.
There were two drawbacks with this Acer: One, Bluetooth was not included, and two, I needed to install something from CD. Since the NetBook was so tiny, Acer couldn't install a CD/DVD drive would work with the NetBook.
The solution? First problem was easy: since the Acer Aspire One had three USB ports, I gave my parents a USB Bluetooth adapter just in case they had a need for it.
The second problem? I copied to CD to my server and added it from the wireless network. If I had a USB CD/DVD Drive, you could easily hook that up as well.
Overall, I liked it. I think they will be happy with it as well.
However, my father doesn't like the size of the screen, so it becomes the property of my mother. :-\
If you want some additional information and reviews on the Acer Aspire One, check out the following links:
Randy Pausch passed away recently (Oct. 23, 1960 - July 25, 2008)
For those who haven't heard of this fantastic speaker, Randy Pausch was a Carnegie Mellon Professor and was diagnosed with pancreatic cancer. His doctor said that he was expected to live around 3-6 months.
When he gave his "Last Lecture" on September 18, 2007, he focused on Achieving your Childhood Dreams instead of talking about his cancer.
His lecture is nothing short of monumental and is something everyone should watch and absorb. If you take his perspective on life, I guarantee you will be successful.
Google posted a YouTube video in memory of this extremely charismatic and enthusiastic man. The video is 1hr 16min and 27 seconds...
Since I've been working at my full-time job (with overtime), working on two products, four websites, and continuing to work with my existing 15 clients, I've been trying to make time for DCS Media.
Unfortunately, there is only so much time in a day.
I will be taking a short hiatus from blogging. This includes Fireday as well.
MS Outlook has been around for a long time, but maybe it's time for a little change.
Outlook is one of the best known PIM's around because it comes with and integrates nicely into MS Office. However, since Google has taken MS Office online with their Google Docs, maybe it's time to move from Outlook to Thunderbird.
But isn't Thunderbird an email client? Yes, but so is Outlook. As well as email, Outlook also includes a contact list, a to-do list, and a calendar for your appointments.
Thunderbird doesn't have these innate abilities that Outlook does. But you forget, Thunderbird has the same extension architecture as Firefox. If you search, you'll find some handy extensions that push Thunderbird past Outlook's functionality.
Here are some additional reasons why I'm moving from Outlook to Thunderbird:
Outlook is not portable - Besides Pocket PC devices, Outlook is not as portable as Thunderbird. I've never seen Outlook on a USB Flash Drive yet.
Outlook is a little top-heavy - Outlook contains hard-wired connections to the Windows APIs. I don't think (to my knowledge) that you can take the assemblys (or DLLs for the old-schoolers) with you without breaking a EULA.
Outlook is strictly Windows-based - If you moved to another PC that was Linux-based, you are out of luck.
Thunderbird is FREE - I know Outlook Express exists, but the difference between Outlook and Outlook Express is like night and day and to get the professional version of Outlook, I need to purchase MS Office.
Let's get started on moving over to Thunderbird from Outlook!
Assess your existing Outlook PST file
Since we are so close to Spring, it may be a good idea to look over your PST file and do a little "Spring Cleaning."
First, check to see if your Outlook PST is in need of repair. If so, the How-To Geek shows you how to fix your broken Outlook PST file.
If your Outlook PST file is huge (I've seen them at 2-3gb), see where you can trim it down a little.
Clean out your Trash - Next to your Inbox, this is the biggest storage hog you have. Clean it up!
Move your important "Sent" messages somewhere - In your business, you may need them. Delete ones that are completely irrelevant ("Hi, Mom, How are you?").
Archive your messages - Since it is the start of the year (or close to it), archive your 2007 software subscriptions and newsletters to another folder so it's not taking up any space in your Inbox.
There. Now that you've trimmed the fat, let's move on to the next step.
Installing Thunderbird (with some add-ons)
If you don't have Thunderbird, download and install it.
There are two additional downloads you need to make your transition to Thunderbird successful: Sunbird and Lightning.
Sunbird is a standalone calendar application similar to Thunderbird and Firefox, but is geared specifically towards managing your schedule. There is a nice Provider for Google Calendar extension that synchronizes your schedule with Google Calendar, so you can look at your schedule on the road.
Lightning is a Thunderbird extension that welds Sunbird's calendar into Thunderbird allowing your calendar and email to exist in one application.
After installing Sunbird and Lightning, the only thing left is to import your PST into Thunderbird.
Import your PST file into Thunderbird
As I mentioned above, Thunderbird's extension architecture is based on Firefox's architecture. This is awesome for extension authors because you can actually turn Firefox and/or Thunderbird into a completely different application.
Kevin Purdy over at LifeHacker.com found a great Thunderbird extension that imports an Outlook PST into Thunderbird. According to the site, this extension works in Windows and Linux. More reason to make yourself platform-independant. The extension is 1mb in size.
As soon as you install this extension, you are able to import your PST into Thunderbird using the Tools/Import... pulldown menu.
For my audience, are there any other extensions that make Thunderbird "Outlook-like?"
I want to thank everyone for a fantastic 2007 and I definitely look forward to an even more prosperous 2008.
I remember when I first started DCS Media back in 2006 that I couldn't sleep the night before launch. I was so excited to kick off this site.
To this day, I still have that same feeling with DCS Media as I did before. It was a passion of mine to always learn about the latest and newest technology and to provide quality reviews of software and services to small businesses and startups through the eyes of a professional computer technician/architect/programmer/technologist.
Re-Introduction
The primary goal of DCS Media in 2006 was to provide a site to my clients for viewing new technology available to help them with their startup or small business goals. This worked in conjunction with my love of technology and programming.
So a morphing began.
A combining of the two would be ideal for the startup/small business owner to know what type of technologies and ideas would be required for their business to succeed.
A Micro-ISV is a 1 or 2 person company that provides software and/or services to larger companies and it seems this term is becoming more and more well-known in the technology industry.
As DCS Media has grown over the past two years, I seem to be moving more towards a Micro-ISV profile. The site may change a little over the next year, but the categories will stay the same.
The primary categories that DCS Media focuses on are:
General News (WebWorthy)
Web 2.0 technologies
Small Business news
General Technology
Designer and Developer techniques
With the addition of tags over this last year to work in harmony with the categories, the site has been going strong ever since.
Upcoming features
For the startups and small businesses reading this, go for it! Make 2008 your year to shine. We hope that DCS Media will be a part of that.
For the existing (veteran) Micro-ISV's out there, I will be trying to make DCS Media more of a destination instead of a conduit by providing some new features on the site that will help you complete your projects on time, provide you with a better understanding of your clients, and provide the tools and technology to help you in making your business more profitable and maintainable.
In the next week, I'll be introducing new sections on DCS Media:
Five-Fix Award - A Firefox award that is given to the authors of Firefox extensions that receive a 5 out of 5 rating from the Fireday reviews.
Fireday Listings - Complete listing of all Fireday reviews in hReview format.
Online Tools for the Micro-ISV - An ongoing compilation of online tools for Micro-ISVs.
...and more throughout the year.
As you can see, 2008 is going to be quite a year for DCS Media and I want to make sure my audience is part of that success by further expanding the site with new toolsets and techniques to further your business success.
Happy New Year everyone, and here's to a great 2008!
Don't go completely crazy with AJAX. Use good judgment on how and when to use it.
Since my last post of when to use AJAX, a lot has changed in the ways of AJAX programming. New tools, ideas, and techniques are constantly being developed to support this latest and greatest craze.
Some developers just want use the latest buzzwords and technologies in their applications just to prove that they can build such a beast. Sort of like an "I climbed Mt. Everest" battle cry.
However, most applications shouldn't be built completely with AJAX from the ground up. Of course, AJAX and DHTML are two completely different animals. But that's another post altogether.
Just a Pinch
AJAX should be used sparingly like pepper on food. Just "sprinkle" it on some applications, don't dump an entire load of AJAX into your application. The more you add to it, the more complex it will become to maintain. Keep it simple and use it with good judgment.
My advice of where to put AJAX or how to learn AJAX?
Write your application with your favorite server model (ASP.NET, PHP, ColdFusion, etc.). Make sure it's functional before you even think of adding AJAX or you'll muddy the waters even more.
Then look your application over. Where would AJAX benefit your users? Here are a couple of suggestions:
Do you have an OnChange event on a dropdown list that completely refreshes the page? Instead of refreshing the page, make an AJAX call, return JSON, and fill in the proper fields.
Speaking of onChange JavaScript events, do you have cascading dropdowns? This is a perfect case of when to use AJAX. Selecting one item from dropdown A affects the list in dropdown B. Streamlining this process provides a better experience for the user (and they don't forget where they last left off).
Have a huge table/grid? Consider using AJAX or one of the many AJAX Frameworks out there. Instead of writing your own, may I recommend the Dojo JavaScript Framework. They just included the newly TurboGrid which is just plain awesome!
Waiting for a large page to load? Load the main page and then load the subcomponents through AJAX.
As you keep building web applications, you'll start to see places where AJAX does make sense.
I know I'm a little bit late on the Google paid links shakeup party, but I'm stating a case regarding my site with paid reviews or services.
Everyone is up in arms about the pay-per-post or paid links available and Google demoting sites because of paid links (Thanks for the update, Shoemoney). Personally, I'm in total agreement about what SEO experts are saying regarding the PageRank philosophy. Ignore PageRank and continue building your site with great content.
It boils down to your site having great content and your passion for that content. Period. If you don't have great content, then yes, you won't have much of a PageRank.
Now, my stand on paid posts.
Since my audience is geared towards the technology and small business crowd (a.k.a. a Micro-ISV), I always try to create quality posts that pertain to small business web devigners. So if I receive a request from a paid posting service (i.e. Pay-Per-Post, ReviewMe, etc.) and that opportunity is relevant to my audience and they could benefit from it, I will review it.
If there is an opportunity to review a site about curtains or mechanical equipment, chances are it won't be reviewed on this site. If there are more technology or small business campaigns, then yes, I may accept the review and a posting of a review will appear so long as it benefits my audience.
I'm trying to understand why Google would penalize a site for posting relevant review geared towards my site and audience. Because I'm being compensated for reviewing a site or service to benefit my audience? Or it's not "organic?" Hmmm...
The bottom line of paid links, in my opinion, are judgement calls to the authors of the site on where they'd appear. There is nothing wrong with getting a little compensation for doing a paid post so long as it meets this criteria:
The post should contain content that your audience will love and benefit from.
The review should be related to the primary subject of your site.
It has to be a well-written quality post that definitely portrays your site is meant to give a solid review of a service or site.
Ah yes, Black Friday. After everyone stuffs themselves on Thursday and rests, Friday comes along and everyone goes shopping...at 5:00a in the morning. :-)
The most popular Black Friday sites are listed below:
It's been over 3 years and today the final product is released along with the famous grid widget.
This is one of those days that is quite memorable for Dojo users: Dojo 1.0 is available today.
One of the greatest widgets included in the release is the grid widget. For those who haven't seen it before, TurboGrid examples can be seen on the TurboAJAX group's website.
In addition to the release of Dojo 1.0, Shane O’Sullivan has released three widgets designed for image-related sites built in Dojo 1.0.
The image widgets include Thumbnail Picker, Slideshow, and Gallery. For more details, check out his site for demos as well.
These three widgets show what can be accomplished with Dojo's JavaScript framework.
The TurboAJAX Group is taking the TurboGrid (written entirely in Dojo) and incorporating it into Dojo JavaScript Framework 1.0 release.
This is absolutely great news for Dojo users.
Everyone has been asking "Where's the grid widget?" since Dojo 0.9 was first released (I was one of them). That question has been answered through a press release declaring that the TurboGrid will be released in the 1.0 version of Dojo.
One question I had answered was is it going to be the professional version or the free version? And then I came across this blog post where the press release was posted as well.
According to the blog post, they are including the buffed up version (I'll call it the professional version).
Since it's not the TurboGrid Classic, there are tons of features included. You have GOT to see this grid in action.
One of the primary concerns that AJAX faces are security issues.
When you start building your web application from the ground up, it's best to think about security immediately.
Aleksey Shevchenko, over at Developer.com, submitted an article called AJAX Security, which talks about the different types of AJAX attacks and provides tips on how to programatically prepare yourself for such attacks.
Programmer's rejoice! Take existing web services and build your own online software.
Ok, Ok, Ok. Who still thinks Web 2.0 doesn't exist?
If you are still one of those skeptics who think there still isn't a Web 2.0, you're right.
Kind of.
Sort of.
Some sites aren't even considered Web 2.0 because of their site architecture.
For example, mention web services to someone and see if you get a blank stare. Being a programmer, I'm starting to realize that web services are becoming the hinge pins of Web 2.0 and for the coming of Web 3.0.
Let me explain.
When the Internet first became popular, everyone started building their piece of the information superhighway. After the web sites were built (Web 1.0), web services were introduced and added to the mix.
If your site included a collaborative effort, web services, and, optionally, all of the visual bells and whistles, then you had a verifiable Web 2.0 site (Reflective buttons and rounded corners need not apply).
Web 2.0 is currently where most sites build off of old media sources with a new and modern look and feel with social efforts. Developers took old sites and made their news publicly available through RSS feeds and programmable open APIs. Granted, there are some sites that haven't even moved forward with a 2.0-based mentality.
If you don't have the back end infrastructure or any web services available to the public, you may have a difficult time convincing people that your site has a Web 3.0 "personality" (Yes, yes, which isn't here yet, I hear ya).
in my opinion, Web 3.0 will be defined as a web site that builds on top of existing Web 2.0 web services if certain web sites provide that particular functionality. For example, if Site A uses web services from Site B and Site B goes down, Site A better have a backup plan for providing content or services to their audience or customers.
The reason everyone keeps calling it Web 2.0-this and Web 3.0-that is because of the versioning aspect of it. You're building off of what already exists. You're leveraging the Internet and it's vast resources at your disposal.
Web 2.0 is not about the big red candy-like buttons, the rounded corners, or the reflective images in your title (although sometimes it does help). It's a combination of two things: a technological progression of how the Internet is growing up and becoming a "program" itself and for the general community consensus to provide a name for the versioning that is occurring every single day.
Over the weekend, I came across a site that hosts a lot of AJAX techniques that are quite useful, I particularly like the charting feature.
The site is called AJAXDaddy and showcases some really outstanding techniques such as various table utilities (TableKit, Sortable Table, etc.), a 35mm Photo View (very nice widget), a Javascript carousel, a Fisheye interface, and many others.
Have a manager wanting to know why you would want to use the latest technology and says it's too new? Forward this to them.
I've been using AJAX since I saw the first post from Jesse James Garrett and I've never looked back. It's a technology that is definitely here to stay.
Being a programmer is great, but trying to convince upper management as to why AJAX should be used on the next project is a bigger undertaking than writing an application.
If you are still looking for that reason to implement AJAX into your project, Agile AJAX provides 10 business reasons to use AJAX in your application.
I use the Google Notebook on a daily basis and this is definitely a welcome addition.
Every day, I look through my RSS feeds, check my email, and start jotting down my ideas for future posts and thoughts into the Google Notebook.
This morning, Google Notebook put on a new face. I opened my set number of tabs and was frantically looking for the "Google Notebook" title. Ahh...Found it. Google now sets the title to your current notebook you were previously working on. Nice.
Two things were bothering me that they fixed:
The caret wouldn't disappear when typing. Big thanks to the Google Notebook team for fixing that one.
The content of your notebook is now inside a frame where the toolbar is visible all the time as opposed to just at the topic of a journal entry. It was tough when you had a long entry and wanted to create a link. Another big thank you to the Google Notebook team.
While I typed in a couple entries into a notebook, I was starting to get that feeling again. You know...the feeling when a programmer just knows when a program is stable and the coding works just as it should.
I don't hear a lot of press about the Google Notebook and I think it's one of the most important tools in a blogger/programmer/entrepreneur's arsenal.