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.
How much is a good idea worth? According to Derek Sivers, not much:
It's so funny when I hear people being so protective of ideas. (People who want me to sign an NDA to tell me the simplest idea.) To me, ideas are worth nothing unless executed. They are just a multiplier. Execution is worth millions.
To make a business, you need to multiply the two. The most brilliant idea, with no execution, is worth $20. The most brilliant idea takes great execution to be worth $20,000,000. That's why I don't want to hear people's ideas. I'm not interested until I see their execution.
I was reminded of Mr. Sivers article when this email made the rounds earlier this month:
I feel that this story is important to tell you because Kickstarter.com copied us. I tried for 4 years to get people to take Fundable seriously, traveling across the country, even giving a presentation to FBFund, Facebook's fund to stimulate development of new apps. It was a series of rejections for 4 years. I really felt that I presented myself professionally in every business situation and I dressed appropriately and practiced my presentations. That was not
enough. The idiots wanted us to show them charts with massive profits and widespread public acceptance so that they didn't have to take any risks.
All it took was 5 super-connected people at Kickstarter (especially Andy Baio) to take a concept we worked hard to refine, tweak it with Amazon Payments, and then take credit. You could say that that's capitalism, but I still think you should acknowledge people that you take inspiration from. I do. I owe the concept of Fundable to many things, including living in cooperative student housing and studying Political Science at Michigan. Rational choice theory, tragedy of the commons, and collective action are a few political science concepts that are relevant to Fundable.
Yes, Fundable had some technical and customer service problems. That's because we had no money to revise it. I had plans to scrap the entire CMS and start from scratch with a new design. We were just so burned out that motivation was hard to come by. What was the point if we weren't making enough money to live on after 4 years?
The disconnect between idea and execution here is so vast it's hard to understand why the author himself can't see it.
I wouldn't call ideas worthless, per se, but it's clear that ideas alone are a hollow sort of currency. Success is rarely determined by the quality of your ideas. But it is frequently determined by the quality of your execution. So instead of worrying about whether the Next Big Idea you're all working on is sufficiently brilliant, worry about how well you're executing.
The criticism that all you need is "super-connected people" to be successful was also leveled at Stack Overflow. In an email to me last year, Andy Baio -- ironically, the very person being cited in the email -- said:
I don't care how internet famous you are; nobody gets a pass on execution. Sure, you may have a few more eyeballs at the beginning, but if you don't build something useful, the world will eventually just shrug its collective shoulders and move along to more useful things.
One of my all time favorite software quotes is from Wil Shipley:
This is all your app is: a collection of tiny details.
In software development, execution is staying on top of all the tiny details that make up your app. If you're not constantly obsessing over every aspect of your application, relentlessly polishing and improving every little part of it -- no matter how trivial -- you're not executing. At least, not well.
And unless you work alone, which is a rarity these days, your ability to stay on top of the collection of tiny details that makes up your app will hinge entirely on whether or not you can build a great team. They are the building block of any successful endeavor. This talk by Ed Catmull is almost exclusively focused on how Pixar learned, through trial and error, to build teams that can execute.
It's a fascinating talk, full of some great insights, and you should watch the whole thing. In it, Mr. Catmull amplifies Mr. Sivers' sentiment:
If you give a good idea to a mediocre group, they'll screw it up. If you give a mediocre idea to a good group, they'll fix it. Or they'll throw it away and come up with something else.
Execution isn't merely a multiplier. It's far more powerful. How your team executes has the power to transform your idea from gold into lead, or from lead into gold. That's why, when building Stack Overflow, I was so fortunate to not only work with Joel Spolsky, but also to cherry-pick two of the best developers I had ever worked with in my previous jobs and drag them along with me. Kicking and screaming if necessary.
If I had to point to the one thing that made our project successful, it was not the idea behind it, our internet fame, the tools we chose, or the funding we had (precious little, for the record).
It was our team.
The value of my advice is debatable. But you would do well to heed the advice of Mr. Sivers and Mr. Catmull. If you want to be successful, stop worrying about the great ideas, and concentrate on cultivating great teams.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
The invisible problem characters in this case are newlines.
Did you ever wonder what was at the end of your lines? As a programmer, I knew there were end of line characters, but I honestly never thought much about them. They just … worked. But newlines aren't a universally accepted standard; they are different depending who you ask, and what platform they happen to be computing on:
DOS / Windows
CR LF
\r\n
0x0D 0x0A
Mac (early)
CR
\r
0x0D
Unix
LF
\n
0x0A
The Carriage Return (CR) and Line Feed (LF) terms derive from manual typewriters, and old printers based on typewriter-like mechanisms (typically referred to as "Daisywheel" printers).
On a typewriter, pressing Line Feed causes the carriage roller to push up one line -- without changing the position of the carriage itself -- while the Carriage Return lever slides the carriage back to the beginning of the line. In all honesty, I'm not quite old enough to have used electric typewriters, so I have a dim recollection, at best, of the entire process. The distinction between CR and LF does seem kind of pointless -- why would you want to move to the beginning of a line without also advancing to the next line? This is another analog artifact, as Wikipedia explains:
On printers, teletypes, and computer terminals that were not capable of displaying graphics, the carriage return was used without moving to the next line to allow characters to be placed on top of existing characters to produce character graphics, underlines, and crossed out text.
So far we've got:
Confusing terms based on archaic hardware that is no longer in use, and is confounding to new users who have no point of reference for said terms;
Completely arbitrary platform "standards" for what is exactly the same function.
The sequence CR+LF was in common use on many early computer systems that had adopted teletype machines, typically an ASR33, as a console device, because this sequence was required to position those printers at the start of a new line. On these systems, text was often routinely composed to be compatible with these printers, since the concept of device drivers hiding such hardware details from the application was not yet well developed; applications had to talk directly to the teletype machine and follow its conventions. The separation of the two functions concealed the fact that the print head could not return from the far right to the beginning of the next line in one-character time. That is why the sequence was always sent with the CR first. In fact, it was often necessary to send extra characters (extraneous CRs or NULs, which are ignored) to give the print head time to move to the left margin. Even after teletypes were replaced by computer terminals with higher baud rates, many operating systems still supported automatic sending of these fill characters, for compatibility with cheaper terminals that required multiple character times to scroll the display.
CP/M's use of CR+LF made sense for using computer terminals via serial lines. MS-DOS adopted CP/M's CR+LF, and this convention was inherited by Windows.
This exciting difference in how newlines work means you can expect to see one of three (or more, as we'll find out later) newline characters in those "simple" ASCII text files.
If you're fortunate, you'll pick a fairly intelligent editor that can detect and properly display the line endings of whatever text files you open. If you're less fortunate, you'll see onegiantunbrokenline, or a bunch of extra ^M characters in the file.
Even worse, it's possible to mix all three of these line endings in the same file. Innocently copy and paste a comment or code snippet from a file with a different set of line endings, then save it. Bam, you've got a file with multiple line endings. That you can't see. I've accidentally done it myself. (Note that this depends on your choice of text editor; some will auto-normalize line endings to match the current file's settings upon paste.)
This is complicated by the fact that some editors, even editors that should know better, like Visual Studio, have no mode that shows end of line markers. That's why, when attempting to open a file that has multiple line endings, Visual Studio will politely ask you if it can normalize the file to one set of line endings.
This Visual Studio dialog presents the following five (!) possible set of line endings for the file:
Windows (CR LF)
Macintosh (CR)
Unix (LF)
Unicode Line Separator (LS)
Unicode Paragraph Separator (PS)
The last two are new to me. I'm not sure under what circumstances you would want those Unicode newline markers.
Even if you rule out unicode and stick to old-school ASCII, like most Facebook relationships … it's complicated. I find it fascinating that the mundane ASCII newline has so much ancient computing lore behind it, and that it still regularly bites us in unexpected places.
If you work with text files in any capacity -- and what programmer doesn't -- you should know that not all newlines are created equally. The Great Newline Schism is something you need to be aware of. Make sure your tools can show you not just those pesky invisible white space characters, but line endings as well.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
he end result, to my mind, is a device that occupies an uncomfortable, middle ground between laptops and smartphones that tries to please everyone and pleases no one. Consider the factors:
Size: A bit too large to go into your pocket; a bit too small for regular day-to-day work.
Power: Slightly more capable than a smartphone; slightly less capable than a laptop.
Price: Slightly higher than a higher-end smartphone but lacking a phone's capability and portability; slightly lower than a lower-end notebook but lacking a notebook's speed and storage.
To summarize: Slightly bigger and pricier than a phone, but can't phone. Slightly smaller and cheaper than a laptop, but not that much smaller or cheaper. To adapt a phrase I used in an article I wrote yesterday, netbooks are like laptops, but lamer.
Battery life of 4+ hours. Battery can be replaced by user.
Rugged.
Built-in wifi, 3 USB ports, SD card reader.
Runs my software.
Runs any software I want; no platform vendor to decide what's appropriate.
Competition. Users have choice and can switch vendors at any time.
Netbooks are the endpoint of four decades of computing -- the final, ubiquitous manifestation of "A PC on every desk and in every home". But netbooks are more than just PCs. If the internet is the ultimate force of democratization in the world, then netbooks are the instrument by which that democracy will be achieved.
No monthly fees and contracts.
No gatekeepers.
Nobody telling you what you can and can't do with your hardware, or on their network.
To dismiss netbooks as like laptops, but lamer is to completely miss the importance of this pivotal moment in computing -- when the ubiquity of the internet, and the mass production of inexpensive portable computers finally intersected. I'm talking about unlimited access to the complete sum of human knowledge, and free, unfettered communication with anyone on earth. For everyone.
It's true that smartphones are slowly becoming little PCs, but they will never be free PCs. They will forever be locked behind an imposing series of gatekeepers and toll roads. Anyone with a $199 netbook and access to the internet can make free Skype videophone calls to anywhere on Earth, for as long as they want. Meanwhile, sending a single text message on a smartphone costs 4 times as much as transmitting data to the Hubble space telescope.
I don't care how "smart" your smartphone is, it will never escape those corporate shackles. Smartphones are simply not free enough to deliver the type of democratic transformation that netbooks -- mobile PCs cheap enough and fast enough and good enough for everyone to afford -- absolutely will.
That's why I love netbooks. In all their cheap, crappy glory. And you should too. Because they're instruments of user power.
The truly significant thing is this -- the users took over.
Let me say that again: The users took over.
I always say this is the lesson of the tech industry, but the people in the tech industry never believe it, but this is the loop. In the late 70s and early 80s the minicomputer and mainframe guys said the same kinds of things about Apple IIs and IBM PCs that Michael Dell is saying about netbooks. It happens over and over again, I've recited the loops so many times that every reader of this column can recite them from memory. All that has to be said is that it happened again.
Once out, the genie never goes back in the bottle.
Netbooks aren't an alternative to notebook computers. They are the new computers.
Cheap and crappy? Maybe those early models were, but having purchased a new netbook for $439 shipped, it is difficult for me to imagine the average user ever paying more than $500 for a laptop.
For the price, this is an astonishingly capable PC:
Dual Core 1.2 GHz Intel CULV Celeron processor
2 GB RAM
Windows 7 Home Premium
11.6" screen with 1366 x 768 resolution
Thin (1") and light (3.5 lbs)
Good battery life (5 hours)
3 USB ports, WiFi, webcam, gigabit ethernet
Windows 7 is a fine OS, but this machine would surely be cheaper without the Microsoft Tax, too.
The Acer Aspire 1410 isn't just an adequate little netbook, it's a damn good computer. At these specifications, it is a huge step up from those early netbook models in every way. But don't take my word for it; read the reviews at netbooked and Liliputing. (Caveat emptor -- there are lots of 1410 models, and the newer dual core CPU version is the one you want.)
Of particular note is the CPU. While the Intel Atom is a technological marvel, I don't feel current Atom CPUs deliver quite enough performance for a modern, JavaScript-heavy, video-intensive internet experience. It is quite clear that Intel is intentionally hobbling newer iterations of the Atom CPU in the name of market segregation, and to prevent too much netbook price erosion.
That's why the current Intel CULV CPUs are far more attractive options -- they're dramatically faster, and have become power-efficient marvels in their own right. I hooked up my watt meter to this Aspire 1410 and I was surprised to find it consume between 13 and 16 watts of power in typical use -- while my wife was browsing the web in Firefox, over a wireless connection, with multiple tabs open. I fired up Prime95 torture test to force the CPU to 100% load, and measured 21 watts with one CPU core fully loaded, and 26 watts when both were. These are wall measurements which reflect power conversion inefficiencies of at least 20%, so real consumption was between 10 and 20 watts. I was wondering why it ran so cool; now I know. It barely uses enough power to generate any heat!
Modern netbooks are not cheap and crappy. They're remarkably solid little boxes, and getting better every day. Which makes me wonder:
A recurring question among Apple watchers for decades has been, “When is Apple going to introduce a low-cost computer?
Steve Jobs answered that decades-old complaint by stating, "We don't know how to build a sub-$500 computer that is not a piece of junk."
They may be pieces of junk to Mr. Jobs, but to me, these modest little boxes are tiny marvels -- inspiring evidence of the inexorable march of powerful, open computing technology to everyman and everywhere levels.
We have produced a democracy of netbooks. And the geek in me can't wait to see what happens next.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
I'm a big fan of John Gruber's Markdown. When it comes to humane markup languages for the web, I don't think anyone's quite nailed it like Mr. Gruber. His philosophy was clear from the outset:
Markdown is intended to be as easy-to-read and easy-to-write as is feasible.
Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions. While Markdown’s syntax has been influenced by several existing text-to-HTML filters — including Setext, atx, Textile, reStructuredText, Grutatext, and EtText — the single biggest source of inspiration for Markdown’s syntax is the format of plain text email.
If you're an ASCII-head of any kind, you will feel immediately at home in Markdown. It was so obviously designed by someone who has done a lot of writing online, as it apes common plaintext conventions that we've collectively been using for decades now. It's certainly far more intuitive than the alternatives I've researched.
With a year and a half of real world Markdown experience under our belts on Stack Overflow, we've been quite happy. I'd say that Markdown is the worst form of markup except for all the other forms of markup that I've tried. Of course, tastes vary, and there are plenty of viable alternatives, but I'd promote Markdown without hesitation as one of the best -- if not the best -- humane markup options out there.
Not that Markdown is perfect, mind you. After exposing it to a large audience, both Stack Overflow and GitHub independently discovered that Markdown had three particular characteristics that confused a lot of users:
URLs are never hyperlinked without placing them in some kind of explicit markup.
The underscore [_] can be used to delimit bold and italic, but also works for intra-word emphasis. While a typical use like "_italic_" is clear, there are disturbing and unexpected side effects in phrases such as "some_file_name" and "file_one and file_two".
It is paragraph and not line oriented. Returns are not automatically converted to linebreaks. Instead, paragraphs are detected as one or more consecutive lines of text, separated by one or more blank lines.
Items #1 and #2 are so fundamental and universal that I think they deserve to be changed in the Markdown specification itself. There was so much confusion around unexpected intra-word emphasis and the failure to auto-hyperlink URLs that we changed these Markdown rules before we even came out of private beta. Item #3, the conversion of returns to linebreaks, is somewhat more debatable. I'm on the fence on that one, but I do believe it's significant enough to warrant an explicit choice either way. It should be a standard configurable option in every Markdown implementation that you can switch on or off depending on the intended audience.
Markdown was originally introduced in 2004, and since then it has gained quite a bit of traction on the web. I mean, it's no MediaWiki (thank God), but it's in active use on a bunch of websites, some of them quite popular. And for such a popular form of markup, it's a bit odd that the last official update to the specification and reference implementation was in late 2004.
Which leads me to the biggest problem with Markdown: John Gruber.
I don't mean this as a personal criticism. John's a fantastic writer and Markdown has a (mostly) solid specification, with a strong vision statement. But the fact that there has been no improvement whatsoever to the specification or reference implementation for five years is … kind of a problem.
There are some fairly severe bugs in that now-ancient 2004 Markdown 1.0.1 Perl implementation. Bugs that John has already fixed in eight 1.0.2 betas that have somehow never seen the light of day. Sure, if you know the right Google incantations you can dig up the unreleased 1.0.2b8 archive, surreptitiously posted May 2007, and start prying out the bugfixes by hand. That's what I've had to do to fix bugs in our open sourced C# Markdown implementation, which was naturally based on that fateful (and technically only) 1.0.1 release.
I'd also expect a reference implementation to come with some basic test suites or sample input/output files so I can tell if I've implemented it correctly. No such luck; the official archives from Gruber's site include the naked Perl file along with a readme and license. The word "test" does not appear in either. I had to do a ton more searching to finally dig up MDTest 1.1. I can't quite tell where the tests came from, but they seem to be maintained by Michel Fortin, the author of the primary PHP Markdown implementation.
But John Gruber created Markdown. He came up with the concept and the initial implementation. He is, in every sense of the word, the parent of Markdown. It's his baby.
As Markdown's "parent", John has a few key responsibilities in shepherding his baby to maturity. Namely, to lead. To set direction. Beyond that initial 2004 push, he's done precious little of either. John is running this particular open source project the way Steve Jobs runs Apple -- by sheer force of individual ego. And that sucks.
I despise what you've done with Text::Markdown, which is to more or less make it an alias for MultiMarkdown, almost every part of which I disagree with in terms of syntax additions.
Wow, that's pretty strong language. I'm glad I'm provoking strong opinions, and it's nice to see you actively contributing to Markdown's direction ;)
Personally, I don't actually like (or use) the MultiMarkdown extensions. As noted several times on list, I do not consider what I've done to in any way be a good solution technically / internally in it's current form, and as such
Markdown.pl is still a better 'reference' implementation.
However I find it somewhat ironic that you can criticise an active effort to actually move Markdown forwards (who's current flaws have been publicly acknowledged), when it passes more of your test suite than your effort does, and when you haven't even been bothered to update your own website about the project since 2004, despite having updated the code which can be found on your site (if you dig) much more recently than this.
I despise copy-pasted code, and forks for no (real) reason - seeing another two dead copies of the same code on CPAN made me sad, and so I've done something to take the situation forwards. Maybe if you'd put the effort into maintaining a community and taking Markdown.pl forwards at any time within the last 4 years, you wouldn't be in a situation where people have taken 'your baby' and perverted it to a point that you despise. If starting with Markdown.pl and going forwards with that had been an option, then that would have been my preferred route - but I didn't see any value in producing what would have been a fifth perl Markdown implementation.
It's almost at the point where John Gruber, the very person who brought us Markdown, is the biggest obstacle preventing Markdown from moving forward and maturing. It saddens me greatly to see such negligent open source code parenting. Why work against the community when you can work with it? It doesn't have to be this way. And it shouldn't be.
I think the most fundamental problem with Markdown, in retrospect, is that the official home of the project is a static set of web pages on John's site. Gruber could have hosted the Markdown project in a way that's more amenable to open source collaboration than a bunch of static HTML. I'm pretty sure SourceForge was around in late 2004, and there are lots of options for proper open source project hosting today -- GitHub, Google Code, CodePlex, and so forth. What's stopping him from setting up shop on any of those sites with Markdown, right now, today? Markdown is Gruber's baby, without a doubt, but it's also bigger than any one person. It's open source. It belongs to the community, too.
Right now we have the worst of both worlds. Lack of leadership from the top, and a bunch of fragmented, poorly coordinated community efforts to advance Markdown, none of which are officially canon. This isn't merely incovenient for anyone trying to find accurate information about Markdown; it's actually harming the project's future. Maybe it's true that you can't kill an open source project, but bad parenting is surely enough to cause it to grow up stunted and maybe even a little maladjusted.
I mean no disrespect. I wouldn't bring this up if I didn't care, if I didn't think the project and John Gruber were both eminently worthy. Markdown is a small but important part of the open source fabric of the web, and the project deserves better stewardship. While the community can do a lot with the (many) open source orphan code babies out there, they have a much, much brighter future when their parents take responsibility for them.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
Now, lest you think I am some kind of freakish, cave-dwelling luddite, what with my ancient two and a half year old PC, I have upgraded the CPU, upgraded the hard drive, and upgraded the video card since then. I also went from 4 GB of RAM to 8 GB of RAM, but I didn't happen to blog about that. Normal computers age in dog years -- every year they get seven years older -- but mine isn't so bad with all my upgrades! I swear!
Judge for yourself; here's a picture of it.
But seriously.
A big part of the value proposition of building your own PC is upgrading it in pieces and parts over time. When you're unafraid to pop the cover off and get your hands dirty with a little upgrading, you can spend a lot less to stay near the top of the performance heap over time. It's like the argument for buying a car versus renting it; the smart buyers keep the car for as long as possible to maximize the value of their investment. That's what we're doing here with our upgrades, and a rebuild is the ultimate upgrade.
In defense of my creaky old computer, the Core 2 series from Intel has been unusually strong over time, one of their best overall platforms in recent memory. It was almost good enough to banish the excerable Pentium 4 series from my mind. Man those were horrible! But the Core 2 series was a solid design with some serious legs; it and scaled brilliantly, from single to dual to quad core, and in frequency from 1 GHz to 3.5 GHz.
Meanwhile, back on Planet Desktop, there were some other reasons that I started thinking seriously about upgrading from my overclocked Core 2 Duo to a Core i7 upgrade:
The Core i7 platform uses triple channel DDR3 memory. While the benefits of the additional bandwidth are somewhat debatable on the desktop (as usual), one interesting side-effect is that motherboards have 6 memory slots. While 16 GB is theoretically possible on Core 2 systems, it required extremely expensive 8 GB DIMMs. But with 6 memory slots, we can achieve 12 GB without breaking the bank -- by using six 2 GB DIMMs.
The Core i7 is Intel's first "real" quad-core architecture. Intel's previous quad core CPUs were basically two dual core CPUs duct taped together on the same die. No such shortcuts were taken with the i7. While the difference is sort of academic, there are some smallish real world performance implications.
Mainstream software is finally ready for quad core CPUs. It's not uncommon today to find applications and games that can actually use two CPU cores reasonably effectively, and those that can use four or more cores are not the extreme rarity they used to be. Don't get me wrong, scaling well to four or more CPU cores is still rare, but it's no longer spit-take rare.
Intel introduced the mainstream second generation Core i5 series, so the platform is fairly mature. All the new architecture bugs are worked out. It's also less prohibitively expensive than it was when it was when it was introduced.
At this point, I had the seven year upgrade itch really bad. My 3.8 GHz Core 2 Duo with 8 GB of RAM was not exactly chopped liver, but I started fantasizing a lot about the prospect of having a next generation quad-core CPU (of similar clock speed) with hyperthreading and 12 GB of RAM.
If you're wondering why I need this, or why in fact anyone would need such an embarrassment of desktop power, then I'll refer you to my friend Loyd Case.
Don’t ask me why I need six cores and 24GB. To paraphrase a Zen master, if you have to ask, you do not know.
Loyd has indirectly brought up another reason to choose the i7 platform; it's pin-compatible with Intel's upcoming "Gulftown" high end 6-core CPU. So, your upgrade path is clear. (It's also rumored that the next iteration of the Mac Pro will have two of these brand new 6-core CPUs, before any other vendor gets access to them, which is totally plausible.)
As far as I'm concerned, until everything on my computer happens instantaneously, my computer is not nearly fast enough. Besides, relative to how much my time costs, these little $200-$500 upgrades to get amazing performance are freakin' chump change. If I save a measly 15 minutes a day, it's worth it. As I like to remind pointy-haired managers all over the world, Hardware is Cheap, and Programmers are Expensive. OK, maybe I'm biased, but the conclusion was overwhemingly clear: it's UPGRAYEDD time!
This is a more than an upgrade, though, it's a rebuild -- a platform upgrade. That means I'll be assembling the following …
new Motherboard
new RAM
new CPU
new heatsink
… and dropping that into my existing system, which is highly optimized for silence. The case, power supply, hard drives, DVD-R, etc won't change. On the outside, it'll look the same, but on the inside, it's a whole new PC. This is analogous to replacing the engine in a sports car, I suppose. On the outside, it will appear to be the same car, but there's a lot more horses under the hood.
Take your time, be careful, and go in the right order. So, first things first. Let's assemble the CPU, heatsink, and memory on the motherboard -- in that specific sequence, because modern heatsinks can be a pain to attach.
Man, check out at all that hot, sweet, PC hardware! I get a little residual thrill just cropping the picture. Love this stuff! Anyway, that gives us a mountable motherboard with all the important bits pre-installed:
XIGMATEK HDT-S1283 cooler ($35).
Direct contact between the CPU cooler heatpipes and the CPU surface is the new hotness, or rather, coolness. It really works, since all the top performing CPU coolers use it now. This one is fairly inexpensive at $35 and gets great reviews. Also, I highly recommend the optional screw mount kit ($8). Modern CPU coolers are large, and the mounting mechanism needs to be more solid than plastic pushpins.
Kingston HyperX 4GB (2 x 2GB) DDR3 2000 ($135) × 3
I've had good luck with Kingston in the past. I went with their semi-premium brand this time, as I plan to do a bit of overclocking and the price difference is fairly small. Remember, this is a 12 GB build, so we'll need three of these kits to populate all 6 memory slots on the motherboard.
Intel Core i7-960 3.2 GHz CPU ($590)
While you could make a very solid argument that the Core i7-920 CPU ($289) is a better choice because it's identical and overclocks to the same level, I was willing to spend a bit more here as "insurance" that I get to the magical 3.8 Ghz level that my old Core 2 Duo was overclocked to.
update: since a few people asked, here are my case and power supply recommendations.
Antec P183 Black Computer Case ($140)
I used the older P180/P182 Antec case in my original series; it's still one of my favorites. This version brings some much needed improvements to airflow to accommodate higher power CPUs and video cards, as documented in a recent Silent PC review article.
CORSAIR CMPSU-650HX 650W Power Supply ($120)
You don't want to skimp on the power supply, but there's no need to spend exorbitant amounts, either. Forget the wattage rating and look at the quality. Corsair is known for very high quality power supplies. The HX series is a bit more, but has modular cables, which makes for a cleaner build.
It adds up to about $1000 all told. A rebuild is definitely more expensive than one-off upgrades of CPU, memory, and hard drive. But, remember, this is a rebuild of my PC -- and a fire-breathing, top of the line performance rebuild at that. That takes spending a moderate (but not exorbitant) amount of money.
Now that we've got all that stuff assembled, the next thing to do is open my existing PC, disconnect all the cables going to the motherboard, temporarily remove any expansion cards, unscrew the motherboard and lift it out.
Once the old motherboard assembly was pulled out, I plopped in the new motherboard, screwed it down, and reattached the cables and expansion cards. Don't close up the PC at this point, though. Before powering it on, double check and make sure all the cables are reattached correctly:
Power cables from the PSU to the motherboard. There are usually at least two, on modern PCs.
Hard drive cables from the HDDs to the motherboard.
Power switch, Reset switch, Activity light cables. Without the power switch connected, good luck powering up. This motherboard happens to have built-in power and reset switches for testing, but most don't.
Fan connectors from the Heatsink and case fans to the motherboard.
Power cables from the PSU to the video card, if you have a fancy video card.
If anything is wrong, we'll just have to re-open the case again. On top of that, we need to monitor temperatures and airflow, and that's much easier with the case open.
Fortunately, my rebuild booted up on the first try. If you're not so lucky, don't fret! Disconnect the power cord, then go back and re-check everything. I get it wrong, sometimes, too; I actually forgot to reconnect the video card power connectors, and was wondering why only the secondary video card was booting up. Once I re-checked, I immediately saw my mistake, fixed it, and rebooted.
Once you have a successful boot, don't even think about booting into the operating system yet. Enter the BIOS (this is typically done by pressing F12 or Delete during bootup) and check the BIOS screens to make sure it's detecting your hard drives, memory, and any optical drives successfully. Browse around and do some basic reality checks. Then do not pass GO, do not collect $200, go straight to your motherboard manufacturer's website and download the latest BIOS. On another computer, obviously. Most modern motherboards allow updating the BIOS from a USB key, so just copy the BIOS files on the USB key, reboot, and use the BIOS menus to update. After you've updated the BIOS, set BIOS options to taste, and we're finally ready to boot into an operating system.
While this may sound like a lot of work, it really isn't. All told it was maybe an hour, tops. I'm fairly experienced at this stuff, but it's fundamentally not that complicated; it's still just a very fancy adult LEGO kit.
Courtesy of this $1000 rebuild, my ancient 2.5 year old PC is reborn as a completely new state-of-the-art PC, at least internally. That was always part of the plan! Next up -- once we've proven that it's stable in typical use -- overclocking, naturally. I'll have more on that in a future blog post, but I can tell you right now that Core i7 overclocking is … interesting.
You may notice that commenting is currently disabled, and many old Coding Horror posts are missing images. That's because, sometime early on Friday, the server this blog is hosted on suffered catastrophic data loss.
Here's what happened:
The server experienced routine hard drive failure.
Because of the hard drive failure, the virtual machine image hosting this blog was corrupted.
Because the blog was hosted in a virtual machine, the standard daily backup procedures at the host were unable to ever back it up.
Because there were no good backups, there was catastrophic data loss. Fin, draw curtain, exeunt stage left.
At first, I was upset with our provider, CrystalTech.
I am still confused how the most common, routine, predictable, and mundane of server hardware failures -- losing a mechanical hard drive -- could cause such extreme data loss carnage. What about, oh, I don't know, a RAID array? Aren't they designed to prevent this kind of single point of failure drive loss catastrophe? Isn't a multi drive RAID array sort of standard on datacenter servers? I know we have multi-drive RAID arrays on all of our Stack Overflow servers.
I also wish their routine backup procedures had greater awareness of virtual machine images. While I'll grant you that backing up a live virtual machine is somewhat complex, and typically requires special operating system support and API hooks, it is not exactly an unknown science at this point in time. Heck, at the very least, just let us know when the backup has been regularly failing each day, every day, for years.
Then I belatedly realized that this was, after all, my data. And it is irresponsible of me to leave the fate of my data entirely in someone else's hands, regardless of how reliable they may or may not be. Responsibility for my data begins with me. If I haven't taken appropriate measures, who am I to cast aspersions on others for not doing the same? Glass houses and all that.
So, I absolve CrystalTech of all responsibility in this matter. They've given us a great deal on our dedicated server, and performance and reliability (with one recent, uh... exception) have been excellent to date. It is completely my fault that I neglected to have proper backups in place for Coding Horror. Well, technically, I did have a backup but it was on the virtual machine itself. Does that count? No? Halfsies?
Apparently, I was gambling that nothing bad would ever happen at the datacenter. Because that's what you're doing when you run without your own backups. Gambling.
I'll add gambling to the long, long list of things I suck at. I don't know when to hold 'em or when to fold 'em.
Now that I've apologized, it's time to let the healing begin. And by healing, I mean the excruciatingly painful process of reconstructing Coding Horror from internet caches and the few meager offsite backups I do have. My first order of business was to ask on SuperUser what strategies people recommend for recovering a lost website with no backup. Strategies other than berating me for my obvious mistake. Also, comments are currently disabled while the site is being reconstructed from static HTML. Oh, darn!
I'll let my son Rock Hard Awesome stand in for the zinger of a comment that I know some of you were just dying to leave.
I'm not saying I don't deserve it. Consider me totally zingatized.
I mentioned my woes on Twitter and I was humbled by the outpouring of community support. Thanks to everyone who reached out with support of any kind. It is greatly appreciated.
I was able to get a static HTML version of Coding Horror up almost immediately thanks to Rich Skrenta of blekko.com. He kindly provided a tarball of every spidered page on the site. Some people have goals, and some people have big hairy audacious goals. Rich's is especially awe-inspiring: taking on Google on their home turf of search. That's why he just happened to have a complete text archive of Coding Horror at hand. Rich, have I ever told you that you're my hero? Anyway, you're viewing the static HTML version of Coding Horror right now thanks to Rich. Surprisingly, there's not a tremendous amount of difference between a static HTML version of this site and the live site. One of the benefits of being a minimalist, I suppose.
That pretty much solved all my text post recovery problems in one fell swoop. Through this process, I've learned that anything even remotely popular you put on the web will be archived as text, forever, by a dozen different web spiders. I don't think you can actually lose text you post on the web. Not in any meaningful sense; I'm not sure it's possible. As long as you're willing to spend the time digging through web spider archives in some form (and yes, I did cheat mightily), you can always get textual content back, all of it.
The blog images, however, are another matter entirely. I have learned the hard way that there are almost no organizations spidering and storing images on the web. Yes, there is archive.org, and God bless 'em for that. But they have an impossible job they're trying to do with limited resources. Beyond that, there's ... well, frankly, a whole lot of nothing. A desperate, depressing void of nothing. In fact, if you can only back up one thing on your public website, it should be the images. Because that's the thing you'll have the most difficulty recovering when catastrophe happens. I'm planning to donate $100 to archive.org, as I have a whole new appreciation for how rare an internet-wide full archive service -- one that includes images -- really is.
That said, There are some limited, painful avenues to explore for recovering lost website images. I started with an ancient complete backup from mid 2006 with full images. And then Maciej Ceglowski of the nifty full-archive bookmarking service pinboard.in generously contributed about 200 blog posts that he had images for.
I also went through a period when I was going on a bandwidth diet and experimenting with hosting Coding Horror images elsewhere on the web. I'm slowly going through and recovering images locally from there. Beyond that, several avid Coding Horror readers contributed some archived images -- so thanks to Yasushi Aoki, Marcin Gołębiowski, Peter Mortensen, and anybody else I've forgotten.
Also, I should point out that a few enterprising programmers have proposed clever schemes for automatic recovery of images, such as Niyaz with his blog post Get cached images from your visitors, and John Siracusa with his highly voted 304 idea. I haven't had time to follow up on these yet but they seem plausible to me.
I've restored all the images I have so far, but it's still woefully incomplete. The most important part of Coding Horror is definitely the text of the posts, but I do have some regrets that I've lost key images from many blog posts, including those about my son. It feels like irresponsible parenting, in the broadest possible sense of the words.
The process of image recovery is still ongoing. If you'd like to contribute lost Coding Horror images, please do. I'd be more than happy to mail stickers on my dime to anyone who contributes an image that is currently a 404 on the site. Update: That was fast. Carmine Paolino, a computer science student at the University of Bologna, somehow had a nearly complete mirror of the site backed up on his Mac! Thanks to his mirror, we've now recovered nearly 100% of the missing images and content. I've offered to donate $100 to the charity or open source project of Carmine's choice.
What can we all learn from this sad turn of events?
I suck.
No, really, I suck.
Don't rely on your host or anyone else to back up your important data. Do it yourself. If you aren't personally responsible for your own backups, they are effectively not happening.
If something really bad happens to your data, how would you recover? What's the process? What are the hard parts of recovery? I think in the back of my mind I had false confidence about Coding Horror recovery scenarios because I kept thinking of it as mostly text. Of course, the text turned out to be the easiest part. The images, which I had thought of as a "nice to have", were more essential than I realized and far more difficult to recover. Some argue that we shouldn't be talking about "backups", but recovery.
It's worth revisiting your recovery process periodically to make sure it's still alive, kicking, and fully functional.
I'm awesome! No, just kidding. I suck.
So when, exactly, is International Backup Awareness Day? Today. Yesterday. This week. This month. This year. It's a trick question. Every day is International Backup Awareness Day. And the sooner I figure that out, the better off I'll be.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
Designed for humans first and machines second, microformats are a set of simple, open data formats built upon existing and widely adopted standards.
The official microformat "elevator pitch" tells us nothing useful. That's not a good sign. It doesn't get much better on the learn more link, either.
I'm left scratching my head, wondering why I should care. What problem, exactly, do microformats solve for me as a user? As a software developer? There's lots of hand-wavy talk about data, but precious little in the way of concrete stories or real world examples.
But I have a real world example: a CV. To some human resource departments the standard web interchange format for a CV or Resume is already established -- it's called "Microsoft Word". I have no beef with Word, but certainly we'd like to pick a more simple, open data format for our personal data than Microsoft Word -- and the hResume microformat seems to fit the bill. And if your CV is published on the web in a standard(ish) format, it's easier to take it with you wherever you need to go.
I had already implemented the tag and identity microformats on Stack Overflow many months ago. I wasn't convinced of the benefits, but the implementation was so easy that it seemed like more work to argue the point than to actually get it done. Judge for yourself:
Fairly clean and simple, right? That was the extent of my experience with microformats. Limited, but positive. Then I read through the hResume microformat spec. You should read it too. Go ahead. I'll wait here.
My first impression was not positive, to put it mildly. So you want me to take the ambiguous, crappy "HTML" markup we already have and layer some ambiguous, crappy "microformat" markup on top of it? And that's … a solution? If that's what microformats are going to be about, I think I might want off the microbus.
Let's take a look at a representative slice of hResume markup:
As you can see, the crux of microformats is overloading CSS classes. When you give something the "adr" class within the "vcard" class, that means it's the address data field within the hCard, within the hResume.
While I can see the attraction, this approach makes me uneasy:
We're overloading the class attribute with two meanings. Is "adr" the name of a class that contains styling information, or the name of a data field? Or both? It's impossible to tell. The minute you introduce a microformat into your HTML, the semantics of the class attribute have been permanently altered.
The microformat css class names may overlap with existing css classes. Woe betide the poor developer who has to retrofit a microformat on an established site where "locality" or "region" have already been defined in the CSS and are associated with elements all over the site. And let me tell you, many of the microformat css field names are, uh, conveniently named what you've probably already used in your HTML somewhere. In the wrong way, inevitably.
There's no visual indication whatsoever that any given css class is a microformat. If you hire a new developer, how can they possibly be expected to know that "postal-code" isn't just an arbitrarily chosen CSS class name, it's a gosh darned officially blessed microformat? What if they decide they don't like dashes in CSS class names and rename the style "postalcode"? Wave bye bye to your valid microformat. If it seems fragile and obtuse, that's because it is.
The spec is incredibly ambiguous. I read through the hResume, hCard, and hCalendar spec multiple times, checked all the samples, viewed source on existing sites, used all the validators I could find, and I still got huge swaths of the format wrong! For a "simple" and "easy" format, it's … anything but, in my experience. The specification is full of ambiguities and requires a lot of interpretation to even get close. I'm not the world's best developer, but I'm theoretically competent, and if I can't implement hResume without wanting to cut myself and/or writing snarky blog posts like this, how can we expect everyone else to?
It doesn't handle unstructured data well. On Stack Overflow, we have a single "location" field. No city, state, zip, lat, long, and all that jazz: just an unstructured, freeform, enter-whatever-pleases-you "location" field. This was awkward to map in hCard, which practically demands that addresses be chopped up into meticulous little sub-fields. This is a bit ironic for a format supposedly designed to work with the loose, unstructured world wide web. Oh, and this goes double for dates. If you don't have an ISO datetime value, good luck.
Maybe I have a particular aversion to getting my chocolate data structure mixed up with my peanut butter layout structure, but it totally skeeves me out that the microformat folks actually want us to design our CSS and HTML around these specific, ambiguous and non-namespaced microformat CSS class names. It feels like a hacky overload. While you could argue this is no different than the web and HTML in general -- a giant wobbly teetering tower of nasty, patched-together hacks -- something about it fundamentally bothers me.
Now, all that said, I still think microformats are useful and worth implementing, if for no other reason than it's too easy not to. If you have semi-structured data, and it maps well to an existing microformat, why not? Yes, it is kind of a hack, but it might even be a useful hack if Google starts indexing your microformats and presenting them in search results. While I'm unclear on the general benefits of microformats for end users or developers, seeing stuff like this in search results …
… is enough to convince me that microformats are a step in the right direction. Warts and all. While we're waiting for HTML5 and its mythical data attributes to ship sometime this century, it's better than nothing.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
I've been unhappy with every single piece of software I've ever released. Partly because, like many software developers, I'm a perfectionist. And then, there are inevitably … problems:
The schedule was too aggressive and too short. We need more time!
We ran into unforeseen technical problems that forced us to make compromises we are uncomfortable with.
We had the wrong design, and needed to change it in the middle of development.
Our team experienced internal friction between team members that we didn't anticipate.
The customers weren't who we thought they were.
Communication between the designers, developers, and project team wasn't as efficient as we thought it would be.
We overestimated how quickly we could learn a new technology.
The list goes on and on. Reasons for failure on a software project are legion.
At the end of the development cycle, you end up with software that is a pale shadow of the shining, glorious monument to software engineering that you envisioned when you started.
It's tempting, at this point, to throw in the towel -- to add more time to the schedule so you can get it right before shipping your software. Because, after all, real developers ship.
I'm here to tell you that this is a mistake.
Yes, you did a ton of things wrong on this project. But you also did a ton of things wrong that you don't know about yet. And there's no other way to find out what those things are until you ship this version and get it in front of users and customers. I think Donald Rumsfeld put it best:
As we know,
There are known knowns.
There are things we know we know.
We also know
There are known unknowns.
That is to say
We know there are some things
We do not know.
But there are also unknown unknowns,
The ones we don't know
We don't know.
In the face of the inevitable end-of-project blues -- rife with compromises and totally unsatisfying quick fixes and partial soutions -- you could hunker down and lick your wounds. You could regroup and spend a few extra months fixing up this version before releasing it. You might even feel good about yourself for making the hard call to get the engineering right before unleashing yet another buggy, incomplete chunk of software on the world.
Unfortunately, this is an even bigger mistake than shipping a flawed version.
Instead of spending three months fixing up this version in a sterile, isolated lab, you could be spending that same three month period listening to feedback from real live, honest-to-god, annoyingdedicated users of your software. Not the software as you imagined it, and the users as you imagined them, but as they exist in the real world. You can turn around and use that directed, real world feedback to not only fix all the sucky parts of version 1, but spend your whole development budget more efficiently, predicated on hard usage data from your users.
Now, I'm not saying you should release crap. Believe me, we're all perfectionists here. But the real world can be a cruel, unforgiving place for us perfectionists. It's saner to let go and realize that when your software crashes on the rocky shore of the real world, disappointment is inevitable … but fixable! What's important isn't so much the initial state of the software -- in fact, some say if you aren't embarrassed by v1.0 you didn't release it early enough -- but what you do after releasing the software.
The velocity and responsiveness of your team to user feedback will set the tone for your software, far more than any single release ever could. That's what you need to get good at. Not the platonic ideal of shipping mythical, perfect software, but being responsive to your users, to your customers, and demonstrating that through the act of continually improving and refining your software based on their feedback. So to the extent that you're optimizing for near-perfect software releases, you're optimizing for the wrong thing.
There's no question that, for whatever time budget you have, you will end up with better software by releasing as early as practically possible, and then spending the rest of your time iterating rapidly based on real world feedback.
So trust me on this one: even if version 1 sucks, ship it anyway.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
But not every programmer does something about the bad code they're polluting the world with, day in and day out. There's a whole universe of possibilities:
But that's a lot of work. Really freaking hard work! Wouldn't it be nice if you could do something a bit simpler and easier to, just … say … offset the bad code you're producing?
We envision a world where software runs cleanly and correctly as it simplifies, enhances and enriches our day to day work and home lives. Mitigating the scope and negative impact of bad code on our jobs, our lives and our world is our all-consuming passion. We foresee a time when bad coding practices and their rotten fruits have been eliminated from this earth and its server farms thereby heralding a new age of software brilliance and efficacy.
Nettlesome bugs and poorly written code have been constant impediments towards realizing our full potential as programmers and engineers. Bad Code Offsets provides the vehicle for balancing the scales of poor past practice while freeing us to pursue current excellence in code development. Until the dawn of the worldwide, bug free code base, each of us can take steps towards reducing our bad code footprint and remediate the bad code that we have each individually and collectively left behind on the desktops, servers and mainframes at school, at work and at home.
Yes, this is partly tongue in cheek, but we aren't just doing it for the lulz. Bad code offsets cost real money, because the Alliance has a goal:
Q: Where does my money go?
A: The proceeds from the sale of Bad Code Offsets are donated to various worthy Open Source initiatives that are carrying the fight against bad code on a daily basis. These organizations include:
This is the awesome part: the money you spend on Bad Code Offsets really does offset bad code!
All the money spent on bad code offsets goes directly to open source projects that actively make programmers' lives better. For every ten thousand lines of mind-bendingly bad code produced, we hope to subsidize a thousand lines of quality open source code.
So, please -- buy bad code offsets today. It is, quite literally, the least you could do.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
Among programmers of any experience, it is generally regarded as A Bad Ideatm to attempt to parse HTML with regular expressions. How bad of an idea? It apparently drove one Stack Overflow user to the brink of madness:
You can't parse [X]HTML with regex. Because HTML can't be parsed by regex. Regex is not a tool that can be used to correctly parse HTML. As I have answered in HTML-and-regex questions here so many times before, the use of regex will not allow you to consume HTML.
Regular expressions are a tool that is insufficiently sophisticated to understand the constructs employed by HTML. HTML is not a regular language and hence cannot be parsed by regular expressions. Regex queries are not equipped to break down HTML into its meaningful parts. so many times but it is not getting to me. Even enhanced irregular regular expressions as used by Perl are not up to the task of parsing HTML. You will never make me crack. HTML is a language of sufficient complexity that it cannot be parsed by regular expressions.
Even Jon Skeet cannot parse HTML using regular expressions. Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide. The <center> cannot hold it is too late. The force of regex and HTML together in the same conceptual space will destroy your mind like so much watery putty. If you parse HTML with regex you are giving in to Them and their blasphemous ways which doom us all to inhuman toil for the One whose Name cannot be expressed in the Basic Multilingual Plane, he comes.
That's right, if you attempt to parse HTML with regular expressions, you're succumbing to the temptations of the dark god Cthulhu's … er … code.
This is all good fun, but the warning here is only partially tongue in cheek, and it is born of a very real frustration.
I have heard this argument before. Usually, I hear it as justification for seeing something like the following code:
# pull out data between <td> tags
($table_data) = $html =~ /<td>(.*?)<\/td>/gis;
"But, it works!" they say.
"It's easy!"
"It's quick!"
"It will do the job just fine!"
I berate them for not being lazy. You need to be lazy as a programmer. Parsing HTML is a solved problem. You do not need to solve it. You just need to be lazy. Be lazy, use CPAN and use HTML::Sanitizer. It will make your coding easier. It will leave your code more maintainable. You won't have to sit there hand-coding regular expressions. Your code will be more robust. You won't have to bug fix every time the HTML breaks your crappy regex
For many novice programmers, there's something unusually seductive about parsing HTML the Cthulhu way instead of, y'know, using a library like a sane person. Which means this discussion gets reopened almost every single day on Stack Overflow. The above post from five years ago could be a discussion from yesterday. I think we can forgive a momentary lapse of reason under the circumstances.
Like I said, this is a well understood phenomenon in most programming circles. However, I was surprised to see a few experienced programmers in metafilter comments actually defend the use of regular expressions to parse HTML. I mean, they've heeded the Call of Cthulhu … and liked it.
Many programs will neither need to, nor should, anticipate the entire universe of HTML when parsing. In fact, designing a program to do so may well be a completely wrong-headed approach, if it changes a program from a few-line script to a bullet-proof commercial-grade program which takes orders of magnitude more time to properly code and support. Resource expenditure should always (oops, make that very frequently, I about overgeneralized, too) be considered when creating a programmatic solution.
In addition, hard boundaries need not always be an HTML-oriented limitation. They can be as simple as "work with these sets of web pages", "work with this data from these web pages", "work for 98% users 98% of the time", or even "OMG, we have to make this work in the next hour, do the best you can".
We live in a world full of newbie PHP developers doing the first thing that pops into their collective heads, with more born every day. What we have here is an ongoing education problem. The real enemy isn't regular expressions (or, for that matter, goto), but ignorance. The only crime being perpetrated is not knowing what the alternatives are.
So, while I may attempt to parse HTML using regular expressions in certain situations, I go in knowing that:
It's generally a bad idea.
Unless you have discipline and put very strict conditions on what you're doing, matching HTML with regular expressions rapidly devolves into madness, just how Cthulhu likes it.
I had what I thought to be good, rational, (semi) defensible reasons for choosing regular expressions in this specific scenario.
It's considered good form to demand that regular expressions be considered verboten, totally off limits for processing HTML, but I think that's just as wrongheaded as demanding every trivial HTML processing task be handled by a full-blown parsing engine. It's more important to understand the tools, and their strengths and weaknesses, than it is to knuckle under to knee-jerk dogmatism.
So, yes, generally speaking, it is a bad idea to use regular expressions when parsing HTML. We should be teaching neophyte developers that, absolutely. Even though it's an apparently neverending job. But we should also be teaching them the very real difference between parsing HTML and the simple expedience of processing a few strings. And how to tell which is the right approach for the task at hand.
Whatever method you choose -- just don't leave the <cthulhu> tag open, for humanity's sake.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
Ever have one of those days where everything you check into source control is wrong?
Also, how exactly is that day is different from any other? But seriously.
Code that is visible is code that can be wrong. No surprise there. But did you know that even the code you can't see may be wrong, too?
These are the questions that drive young programmers to madness. Take this perfectly innocent code, for example.
Looks fine, doesn't it? But hold on. Wait a second. Let's take another, closer look.
OH. MY. GOD!
If you're not a programmer, you may be looking at these two images and wondering what the big deal is. That's fine. But I humbly submit that, well, you're not one of us. You don't appreciate what it's like to spend every freaking minute of every freaking day agonizing over the tiniest details of the programs you write. Not because we want to, you understand, but because the world explodes when we don't.
I mean that literally. Well, almost. If one semicolon is out of place, everything goes sideways. That's how programming works. It's fun! Sometimes! I swear!
We got into this industry because, quite frankly, we are control freaks. It's who we are. It's what we do. Now to imagine, to our dismay, that there's all this stupid, useless whitespace at the ends of our lines. Stuff that's there, but we can't see it. Well, those are the nightmares OCD horror movies are made of. I have a full-body itchiness just talking about it.
Depending on how far down the rabbit-hole you want to go, there's any number of things you could do here:
Have a post-build step, perhaps something with a regular expression like \s*?$ in it, that auto-cleans extra spaces checked into source control
Execute a local macro which removes whitespace from ends of lines
Have a special rule to highlight extra spaces
Run your IDE in whitespace-always-visible mode, or toggle it frequently
OK, fine, so maybe the world won't explode if there are a few extra bits of whitespace in my code.
But all the same, I think I'll go back and make extra double plus sure no more of that pesky whitespace has accumulated in my code when I wasn't looking. Just because I can't see it doesn't mean it's not out to get me.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
I've spent a significant part of my life online. Not just on the internet, I mean, but on modems and early, primitive online communities. Today's internet is everything we couldn't have possibly dared to imagine twenty-five years ago, but there is a real risk of these early, tentative digital artifacts -- and for some, the beginnings of our Hacker Odyssey -- being lost forever in the relentless deluge of online progress. Sure, every single thing that happened in 2004 is documented exhaustively online. But 1994? 1984? Not so much.
You may know Jason Scott from BBS The Documentary. Or, perhaps you're familiar with textfiles.com, his massive (and growing) archive of what passed for blogs and forums in the earliest online era.
A wonderful thing happened in the 1980s: Life started to go online. And as the world continues this trend, everyone finding themselves drawn online should know what happened before, to see where it all really started to come together and to know what went on, before it's forgotten.
When a historian or reporter tries to capture the feelings and themes that proliferated through the BBS Scene of the early 1980's, the reader nearly always experiences a mere glimpse of what went on. This is probably true of most any third-party reporting, but when the culture is your own, and when the experiences were your own, the gap between story and reality is that much wider, and it's that much harder to sit back and let the cliche-filled summary become "The Way It Was." You want to do something, anything so that the people who stumble onto the part of history that was yours know what it was like to grow up through it, to meet the people you did, to do the things you enjoyed doing. Maybe, you hope, they might even see the broader picture and the conclusions that you yourself couldn't see at the time. This is history the way the chronicled want it to be.
BBS: The Documentary was a major milestone in his ongoing effort to document our digital pre-history. But it's only the beginning; there's also a huge documentary on text adventures, Get Lamp, that's been in the works for a few years now. Unfortunately, progress has been slow. Because while being a digital historian is great, it's not exactly something you get paid to do.
Throughout all this, I had a day job - computer administration. It paid well, but I paid for it with my health. When my most recent employer and I parted ways, I decided I'd take this time finish some of the bigger projects I've been working on.
I suddenly thought back to Kickstarter and got this crazy idea - what if I simply asked the world and fans to contribute a bit of money towards keeping me somewhat solvent, and give me the opportunity to go full-time with computer history? If I was able to get all these things done over the years, what if I just asked people to subscribe or give me some patronage and in return I fill their free time with cool stuff to look at, learn from, and enjoy?
There are so many people whose online presences I greatly admire. But very few of them will go on to become part of the permanent written history of this era. I have no doubt whatsoever that Jason Scott is one of those people who will, thanks to his tireless efforts to preserve the flotsam and jetsam of our digital past, stuff that would otherwise be overlooked by the mainstream and lost forever.
I've pledged $100. It is an honor to support his ongoing work of preserving our shared digital pre-history. His history, is my history, is our history. A history of geeks, dorks, dweebs, nerds, and generally computer-obsessed misfits, but nonetheless -- it's something we all share.
Of course, everyone knows you could code Stack Overflow in a long weekend. It's trivial. Assembling a worldwide community of smart, engaged software developers? That's a whole different ball of wax. Stack Overflow is a site by programmers, for programmers; it's only as good as the programmers who choose to participate.
Stack Overflow isn't about me. Or anybody else on the Stack Overflow team for that matter.
Stack Overflow is you.
This is the scary part, the great leap of faith that Stack Overflow is predicated on: trusting your fellow programmers. The programmers who choose to participate in Stack Overflow are the "secret sauce" that makes it work. You are the reason I continue to believe in developer community as the greatest source of learning and growth. You are the reason I continue to get so many positive emails and testimonials about Stack Overflow. I can't take credit for that. But you can.
I learned the collective power of my fellow programmers long ago writing on Coding Horror. The community is far, far smarter than I will ever be. All I can ask – all any of us can ask – is to help each other along the path.
I am continually humbled by the skill and expertise of the programmers who volunteer time to Stack Overflow. These programmers graciously donate tiny slivers of their day to help us -- and themselves -- become better programmers. These 5 and 10 minute slices of effort, across hundreds of thousands of questions and answers, become a permanently archived (and creative commons wiki licensed) bread crumb content trail for future programmers to follow, edit, and contribute to themselves over time.
I'm thrilled to see Stack Overflow working so well for both askers and answerers; the "pay it forward" model of programmers helping their peers is exactly what we were shooting for. We'll never change the world, but it sure is nice to be able to improve our small corner of it just a little bit. Remember: bad code that isn't written, is bad code that another poor programmer won't have to debug. If we don't reach out to slaphelp new programmers and teach them the lessons we learned the hard way, who will? I'm only exaggerating a little when I say that the future of our entire profession depends on it.
If you're actively participating on Stack Overflow, we now have another way to convert those slices of effort into something that actively furthers your professional goals – Stack Overflow Careers.
a completely free, public CV hosting service for programmers, to share the cool stuff you've coded and created with the world.
a way to explicitly link your Stack Overflow profile with your CV, to provide concrete examples of your communication skills and individual expertise to anyone who is interested.
a better way to connect great programmers with the best programming jobs, for those who opt into the small annual listing fee.
In short, Stack Overflow Careers amplifies your awesome.
I won't lie to you. This is also a business. That's why there are nominal opt-in listing fees for those programmers interested in seeking employment, and substantial fees for hiring managers who want to tap into the smart developers who grok Stack Overflow.
update: I apologize if I wasn't clear. It is 100% free, forever, to create a public CV, put whatever HTML content you want in it, and link it to your Stack Overflow profile. Like so:
These are of course freely indexable and searchable on the web.
Beyond the free public component, there is a private (and completely optional) subscription component. For those programmers actively seeking employment, a small annual subscription fee allows inclusion in a private employer search UI. This is also explained in the faq and about.
That said, we're also trying to do something a bit different here. Something better than the endless, mind-numbing acronym sea of monster.com, dice.com, et al. Joel and I believe current hiring practices for programmers are incredibly broken. We think we can do better.
We love our work, and so should you. Our goal isn't to put warm bodies in front of interviewers. Our goal is to create love connections. Instead of avid programmers pursuing disinterested and distracted companies, it's the other way around -- savvy companies who understand the competitive advantages of having the best programmers will pursue you. We connect smart, engaged hiring managers who "get it" with top programmers who love to code.
If you love to code, too, I encourage you to create your own Stack Overflow CV. Keep it private, or make it public via the URL of your choice -- it's completely free either way. If you think you might be actively looking for a job in the next 3 years, take advantage of our outrageously low promotional pricing of $29 for a 3 year filing. That way, at any point in those 3 years, you can flip a switch and become visible to hiring managers. Or not. It's totally up to you.
(also, if you're hiring, and your company appreciates top software engineers -- and you think you can convince our tough audience of that -- email us)
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
After I posted my blog entry on Treating User Myopia I got a lot of advice. Some useful, some not so useful. But the one bit of advice I hadn't anticipated was that we were not making good use of the area "above the fold". This surprised me. Does the fold still matter?
The fold refers to the border at the bottom of the browser window at the user's default screen resolution. Like so:
On the Web, the inverted pyramid becomes even more important since we know from several user studies that users don't scroll, so they will very frequently be left to read only the top part of an article.
Thus, it was critically important to cram in as much content in as possible above that fold, as anything below it was invisible to a huge number of users. They didn't know how to scroll, so they would never find it. Jacob Neilsen, renowned usability expert, is the author of the above quote. But he recanted his position in 2003:
In 1996, I said that "users don't scroll." This was true at the time: many, if not most, users only looked at the visible part of the page and rarely scrolled below the fold. The evolution of the Web has changed this conclusion. As users got more experience with scrolling pages, many of them started scrolling.
Scrolling is an example usability versus learnability. It was always my belief that users quickly learned to scroll, otherwise they were permanently crippled as web citizens. If you can't learn to scroll within an hour or so of using the web, you're going to have an awfully stunted experience -- so much so that you're probably better off not using it at all. In short, if you use the web, you know how to scroll, almost by definition. It is a fundamental skill.
Even today, people will cite the ancient, irrelevant rule of The Fold as if it's still law. In fact, I was just talking to a friend of mine who expressed his frustration at dealing with a middle manager who was using the "content must be above the fold" rule as a weapon, and demanding that all page content appear above the fold. It's terribly misguided.
Although thoroughly debunked, there are still some hidden dangers from the fold, and subtlety to how users react to it. As documented by a recent usability study on the fold, there are three specific pitfalls to watch out for:
Don't cram everything in above the fold. Users will explore and find your content -- as long as the page "looks" scrollable.
Watch out for stark, horizontal lines that happen to line up with the fold. This is the only factor that causes users to stop scrolling, because the page looks done and complete. Instead, have a small amount of content just visible, poking up above the fold. This encourages scrolling.
Avoid in-page scroll bars. The standard browser scrollbar is an indicator of the amount of content on the page that users learn to rely on. Placing <iframe> and other elements with scroll bars on the page can break this convention -- and may lead to users not scrolling.
These are excellent guidelines, backed by actual eye tracking and experimental results. You know, science! But how do they apply to me? First, I established where the fold actually was. Per Google Analytics, about 25% of our users are using screen resolutions where the page fold is at about 700 or 800 pixels of height. And remember, browsers have a lot of horizontal chrome that tends to squander that height -- toolbars, status bars, tabs, etcetera. The fold is probably much closer than you think it is.
Next, I looked at the advice I had been given regarding the top of the page. Sure enough, we had a bunch of irrelevant UI at the top that didn't really matter: things like redundant page titles, and two line title entry. We were wasting critical real estate at the top of the page! For the 25% of users who have a 700 or 800 pixel fold, items were pushed down far enough that they might not actually be visible. Worse still, the strong bottom border of the text entry area with the drag slider could possibly align with the page fold itself -- leading the user to believe that nothing is below there and failing to scroll.
It's not only a basic rule of writing, it's also a basic rule of the web: put the most important content at as close to the top of the page as you can. This isn't new advice, but it's so important that it never hurts to revisit it periodically in your own designs.
In treating user myopia, it's not enough to place important stuff directly in the user's eyepoint. You also need to ensure that you've placed the absolute most important stuff at the top of the page -- and haven't created any accidental barriers to scrolling, so they can find the rest of it. The fold is far less important than it used to be, but it isn't quite as mythical as Bigfoot and the Loch Ness Monster quite yet.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
I try not to talk too much about the trilogy here, because there's a whole other blog for that stuff. But some of the lessons I've learned in the last year while working on them really put into bold relief some of my earlier blog entries on usability and user behavior.
One entry in particular that I keep coming back to is Teaching Users to Read. That was specific to dialog boxes, which not only stop the proceedings with idiocy, but are their own delightful brand of user interface poison. Fortunately, you don't see dialogs in web apps much, but this sort of modal dialog lunacy is, sadly, becoming more popular in today's AJAX-y world of web 2.5. Those who can't learn from history are doomed to repeat it, I guess.
Having five more years of development experience under my belt, I no longer believe that classic Larson strip is specific to dialog boxes.
The plain fact is users will not read anything you put on the screen.
What we're doing with the trilogy is not exactly rocket surgery. At its core, we run Q&A websites. And the most basic operation of any Q&A website is … asking a question. Something any two year old child knows how to do.
When we launched superuser.com, that was our thirdfourth Q&A website. This one is for power users, and it's the broadest to date, topic-wise: anything dealing with computer software or hardware (that isn't gaming) is allowed.
We've been at this for over a year now, doing nothing but relentlessly polishing and improving our Q&A engine based on community feedback. We're not particularly good, but we do try very, very hard not to suck. I thought surely, surely we must have something as simple as the ask question form down by now.
How foolish I was.
Let's take a look at one recent superuser question. I'm presenting it here as it would have been seen by the user who asked the question, while they were entering it on the ask question form.
Immediately, there's a problem. The question formatting is completely wrong! It's one big jumble of text.
Our formatting rules aren't complicated. You can get a lot done with a bunch of simple paragraphs. We use Markdown, which offers basic formatting conventions that ape ASCII conventions. On top of that, we offer a real-time preview of how your question will look once submitted, directly under the question entry area. But none of that seemed to work for this particular asker, who, apparently, was totally satisfied with obviously broken formatting -- even though a few choice carriage returns would have worked wonders, and been immediately visible in the live preview.
Yes, yes, it inevitably gets whipped into shape through the collective efforts of our legions of community editors -- but that's not the point. It's best if the original asker gets the question formatted right to start with, and it is our job as UI designers to make that outcome as statistically likely as we can.
To that end, we've put a bunch of helpful tools on the ask question page to help users get the formatting right. As UI designers, here's how we see the ask question page:
We've provided a toolbar with a neon pink help button above the question body, and to the right of the question body, we've provided a handy formatting quick reference with a link to the full formatting reference (which opens in a tab / new window by default).
But none of that matters, because here's how the user sees the ask question page:
Or rather, here's everything the user doesn't see.
When I said users don't read anything you put on the screen, I was lying. Users do read. But users will only read the absolute minimum amount of text on the screen necessary to complete their task. I can't quite explain it, but this kind of user myopia is epidemic. It's the same problem, everywhere I turn.
How do we treat user myopia? How do we reach these users? The ask question page is already dangerously close to cluttered with helpful tips, but apparently these helpful buttons, links, and text are all but invisible to a large segment of the user population. Sure, you could argue that Super User tends to attract less sophisticated users, but I see the exact same problem with programmers on Stack Overflow. As new users, a significant percentage of them can't figure out how to format code, even though there's not only a toolbar button that does it for you, but help text on the right explicitly describing how to do it manually. (Just indent 4 spaces. Spoiler alert!)
More and more, I'm thinking we need to put the formatting help -- for new users only -- directly in their line of sight. That is, pre-populate the question entry area with some example formatting that is typical of the average question. Nothing complicated. But at least then it'd be in the one -- and apparently the only one -- place myopic users are willing to look. Right in front of their freakin' faces.
The next time you're designing a UI, consider user myopia. You might be surprised just how myopic your users can be. Think long and hard about placing things directly in front of them, where they are not just visible, but unavoidable. Otherwise they might not be seen at all.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
If the internet has perfected anything, it's the art of the crappy, phoned-in, half-assed email "interview". For all those who have bemoaned the often pathetic state of internet journalism, when it comes to interviews, you're largely correct. The purpose of most of these interviews is quick and dirty content filler with semi-famous folk spouting off whatever random thoughts they happen to have in their head at that exact moment. The Nixon Interviews, it ain't.
That's why I'm normally not a huge fan of interview books, because interviews take an enormous amount of time and an enormous amount of legitimate, skilled journalistic effort to get right. Almost nobody does.
Imagine my surprise when Coders at Work: Reflections on the Craft of Programming turns out to be that wonderfully rare intersection of uncommonly skilled interviewing and 15 of the most influential programmers to ever touch a keyboard.
Yes, this is the same book Joel recently recommended in his controversial Duct Tape Programmer entry, which is why I was all the more skeptical. But he's dead on. I could (and probably will, knowing me) fill a year worth of blog posts just with the thought provoking quotes and two-paragraph insights revealed in these interviews. It's astonishingly good. If, after reading what these brilliant programmers have to say, you aren't motivated to research some programming topic mentioned inside, pack it in, because you aren't even trying any more.
I also realized Coders at Work can potentially serve as a job interview filter. If the next programmer you interview can't identify at least one of the programmers interviewed in Coders at Work and tell you roughly what they're famous for …
Frances Allen
Joe Armstrong
Joshua Bloch
Bernie Cosell
Douglas Crockford
L. Peter Deutsch
Brendan Eich
Brad Fitzpatrick
Dan Ingalls
Simon Peyton Jones
Donald Knuth
Peter Norvig
Guy Steele
Ken Thompson
Jamie Zawinski
… I'd say that's an immediate no-hire.
Incidentally, I saw the first Stack Overflow user reference on page 265, in the interview with Simon Peyton Jones, who mentions one Norman Ramsey. Hmm, I thought, that name sounds awfully familiar. And indeed it was!
This is one of my absolute favorite musty old computer books for many of the same reasons. As sources of inspiration go, this one is particularly … er, inspired. Programmers at Work isn't just the archetypal programmer interview book -- it also holds up amazingly well for a book that is over twenty years old. It is a testament to the timelessness of not just code, but the art of coding, as exemplified by these 19 programmers. I believe Peter has legitimately crafted a modern remake that will be relevant for another twenty years. And I hope I don't have to tell you how extraordinarily rare that is among technical books.
(Some -- but not all from what I can tell -- key interviews from Programmers at Work were placed online last year by the author. So if you want to get a flavor of the book, check it out.)
Although I definitely enjoyed this book, there's something about the focus on programming languages and interview style that didn't quite grab me as forcefully as Coders at Work did. Also, if we're going to do languages, I'd like to see a bit broader representation -- perhaps a Volume II with Smalltalk, Ada, Pascal and so on?
These books are a potent reminder that computers are mostly a reflection of the people using them. In the art of software development, studying code isn't enough: you have to study the people behind the software, too.
[advertisement] JIRA 4 - Simplify issue tracking for everyone involved. Get started from $10 for 10 users.
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.
Here is a collected personal experience of job hunting throughout the years. This guide is to help those in need of finding a job and how to come out on top.
After being out of a job for an allotted time of almost 2 years throughout my career and since the economy is slowly starting to come back (SLOWLY!), I thought this would be a great time to offer tips and tricks on how to actually perform a job search.
Initial Shock
After finding out the first time that I was laid off, I was completely devastated and upset with myself. I started thinking that everything I did was for naught. Not so!
Don't take it personally, it's just business.
When working for someone, keep in mind that they have an agenda and a business to run. I know, I know, they let a lot of talented people go and it's a bitter pill to swallow, but they are doing it for the better of the company. Remember, They can't take your experience away from you.
Do NOT burn any bridges!
I have talked to a number of managers who at one point had to release a consultant/employee and it was out of their control. The manager felt horrible about letting that person go...until that person opened their mouth. Needless to say, the consultant was extremely upset and took it personally. The consultant made it abundantly clear that he would never work for them again.
The manager calmly agreed.
Dust off your resume!
In your career, your resume is your secret weapon. Have it ready at all times, including on-line. You never know who you'll be talking to next. I currently have my resume on Google Docs. The great thing about Google Docs is that they can download it in PDF, MS Word, or any other format.
NOTE: Make sure you have a text version of your resume and cover letter for email deliveries.
It's all about choices!
Now, stand up, dust yourself off, hold your head high, and get ready to make your next move. You have two choices:
If you have enough money in your account to sustain a lifestyle for a 3-6 month period of time, by all means, go for it!
If not, well...continue reading. :-)
Create your resume portfolio.
Let's focus on your resume. As I said, your resume is your greatest weapon when looking for an opportunity so you need to make your resume look outstanding.
"Blah" Resumes
Don't just print out an updated resume on plain ink-jet paper and hand it to someone. Not a good thing to do. Again, THIS IS A JOB. I can't stress that enough. Your image should shine through when you hand them your resume. Look for example resumes on the Internet and tailor them to fit your personality or image.
Make a trip to Staples, OfficeMax, or Office Depot
Purchase the following items for your resume:
Exceptional Resume Paper
10" x 13" Clasp Envelopes
GOLD Paper clips
Portfolio-Style folders with two pockets on the inside.
These are your tools to create a solid resume that looks professional. The gold paper clips are for your multiple attachments (I go with gold because they look better and are more attractive than the silver paper clips).
How to organize your "resume portfolio."
Include recommendation letters, actual photo or graphic images (if applicable for design work), and cover letters (placing your cover letter first) on the left-hand side of the portfolio and place your resume on the right-hand side.
Then place each "resume portfolio" into the 10x13 Clasp Envelope.
You are now ready to start marketing yourself!
Network, Network, Network!
Let's get cracking! You have to find a job!
Prepare your Job Search Journal/Log
Open Microsoft Word or OpenOffice Writer and save a blank document as Job Search Journal - 2009. Your Job Search Journal should look like this.
3/16/2009 ------------- 8:00p - Contacted Mrs. Doe from recruiting company @ 999-999-9999 regarding position at Marketing, Inc.
9:30p - Received call from Jeff about an interview for Friday
.
.
3/17/2009
-------------
* Found a new job posting on Indeed.com for a CIO position.
.
.
I know this sounds like a pain in the @$$, but trust me, your contact list is very valuable.
Make yourself visible to recruiters
One thing that recruiters look for are people who show some initiative and are in constant contact with them. As my father used to say, "the squeaky wheel gets the grease."
My job search site of choice is LinkedIn.com. Over the years, I have accumulated a large number of recruiters in my address book so this was a great place to start.
LinkedIn.com makes this a VERY simple process. Since you can tag all of your contacts with a particular keyword, I've tagged certain contacts with the "recruiter" keyword and sent an email to all of them with the click of a button.
After sending out an email to these recruiters, 80% of the recruiters wrote back within 30 minutes telling me about opportunities and wanted to schedule an interview to get a better "feel" for my skills. This entry would be added to my Job Search Journal as:
Sent emails out to my list of recruiters from LinkedIn.com
Joe at blah blah
Phil at blah, blah
No vacation time on this job.
Just because it's called "Job Search" doesn't mean you stop now and wait for people to call you. It should be called the Job Search "Job."
Understand that this is a JOB in itself. You wake up in the morning, you sit at your computer, (or go out) and you start networking through email, phone, and setting up interviews.
Don't forget the Job Classifieds section
Your job search should also include newspaper classifieds. Even though we live in a digital world, that doesn't mean that we need to disconnect ourselves from people.
At one point on a Sunday, I gathered all of the possible jobs that fit my skills from the Sunday paper. I looked through my contacts and tried to find any name that was inside that company (here is where LinkedIn.com comes in handy) and wrote a personalized cover letter to that particular person and included it with the resume portfolio. I woke up the next morning and went out with a stack of "resume portfolios" and MapQuest maps. I went the quickest route to hit all of the companies on my list, walked into the company, and handed my resume to the person responsible for hiring individuals.
Yeah, I hear you, "Oh, that is soooooo old school."
I say, "The street ain't that harsh."
The funny thing about doing this, half of the people I met that day remembered me and kept me in mind for future positions or opportunities. They noticed I got off my @$$ and wanted to make an effort of helping them to fill positions instead of projecting an image that I was at home waiting for people to come to me.
And of course, each company I stopped at would be entered into your Job Search Journal/Log.
The Digital Job Search
Of course, we couldn't have a complete job search without Internet activities. Here are some possibilities for a thorough job search on the Internet:
Indeed (http://www.indeed.com/)
Another one of my personal favorites. Indeed.com has the ability to create a search agent in the form of an RSS feed. So every morning you can check your feed reader for positions that meet your criteria.
I'm sorry, but I have to mention this. One other quick note about LinkedIn.com, they have a utility offered on their site called the Jobs insider.
This extension is absolutely amazing. It's offered as either an Internet Explorer or Firefox extension. It's free, so download and install it.
Let me give you an example of how it works.
I was on a job site looking through a list of jobs and found one that was really interesting. I clicked on it for additional details.
Immediately, the LinkedIn.com Jobs insider Sidebar appeared and notified me that the company on the job detail page that I was looking at had 6 contacts connected to that job and they could help me get that particular position. I clicked on the number 6 and it immediately took me to LinkedIn.com's web site with people I could contact to help me with this position. Amazing!
Job Search Schedule
Now that you have a general understanding of how a REAL job search works, here is an overview of my schedule that I wrote while looking back over my Job Search Journal:
Sunday
Wake up and check the Sunday newspaper. Look over the classifieds and cut out what interests you.
Research the companies and see if you have any contacts from those companies who could help you out with a name or recommendation.
Spend the rest of the day printing out resumes for those particular job positions. If you got a contact or name, print out a cover letter with the contact name and include it in your resume.
Monday, Wednesday, and Friday.
Mornings were analog activities
Distribute my resume portfolio's to the companies that I was interested in by driving to their locations. This had an additional benefit of getting the "stink blown off of me" during the week (translation: it got me out of the house and moving).
Afternoons were digital activities
Check my email for possible opportunities
Check the job boards for positions that fit my skills and submit resume's as well.
Even though it's analog, return any phone calls or start calling recruiters to find out the status of jobs mentioned previously.
Since Friday is heading into the weekend, most recruiters will or won't call back after 3:00p or 4:00p.
Tuesday and Thursday
According to a number of job recruiting places, Tuesday and Thursdays are the best times to schedule interviews, so it's best to keep these days open. The best thing to do if no interviews are scheduled is to proceed with the digital activities in the afternoon as discussed above.
Saturday
Review your Job Search Journal
Schedule activities for next week.
Get more resume supplies. :-)
Conclusion
I've covered everything in this guide from initially knowing about losing your job to making an actual job out of it. In this economy, you need to have a creative side of finding work, whether it's freelance or full-time.
Two other pieces of advice I have to offer. One is a product. A book actually. A book called What Color is Your Parachute? This book is definitely the handbook for determining what you want to do with your life, whether it's working for someone or working for yourself (an entire chapter is dedicated to that). By all means, pick up a copy to expand your job search abilities.
The other piece of advice I have is don't be hard on yourself and don't wallow in self-pity. You literally have a job to do. Start networking and prepare yourself for a career, regardless of what you decide. You control your life. No one else does.
I hope this guide gave you an idea of how much work goes into a job search. This guide was primarily for people who are out of a job for the first time and need some guidance and help. I hope I've provided that assistance.
If anyone has other suggestions for other job seekers out there, please post them in the 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.
When a developer is brought in to a project, most managers believe that since that person is a developer, they should automatically understand the system. Not so.
Most businesses believe that if they lack a programmer with a certain skillset, they outsource the job to a programmer or programmers. It doesn't matter if it's in or out of the country, consultants or new employees.
When a new developer is brought in and introduced to a new system and asked to maintain it, they struggle. With the amount of "creative coding" applied across the hundreds of thousands of systems, managers expect a developer to pick up where the other developer left off.
As I've said before, all programmers "paint" a different image on their digital canvas. Writing code is no different than painting for artists. It may be more abstract than what another programmer is used to, but their creativity sometimes makes other programmers tilt their head and start twitching because it's not what they're used to seeing in code.
The amount of knowledge or skill for one developer may not be the same for another. As a matter of fact, if a new programmer is introduced to a new system, the amount of work is based on four criteria:
How much does the developer know about the system?
Joe Schmoe is considered an entry-level developer and cannot provide the same value that Joe Elite just gave to the project because he just designed the entire application.
How much business knowledge can the developer apply to the system?
Does the developer have previous knowledge in this line of work? Did he/she/they work on a similar system somewhere else? If not, there needs to be a ramp-up period for the new recruit to understand what the client is looking for and how the system works.
Can the developer get along with team members?
If a new employee/contractor is added to the team and the team starts to bicker instead of being productive, it may lead to a disaster for the project down the road. As the old saying goes, "Too many chiefs and not enough indians."
Is the developer a novice, intermediate, or advanced programmer?
If someone doesn't know the difference between a flyweight and singleton pattern and the project uses patterns, I think Joe Schmoe may seem a little overwhelmed with the project. This criteria should be addressed when interviewing individuals.
Even though one developer is replacing another developer, it does not mean the project will be successful or fail miserably, but it does mean that it may extend the length of the project. Usually, the amount of work required by one developer multiplies by at least 2 when a brand new developer is introduced into a new system.
I've seen companies take this route and they expect the developer to hit the ground running. Give the developer ample amount of time to absorb the requirements, design, and technology of the system before expecting the developer to perform the assigned tasks.
One developer does not equal one developer.
Jonathan Danylko
Have you experienced other criteria when outsourcing a project or brought in a new developer? Did I miss one? Tell me about it below in the comments section.
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.
Are you trying to find ideas to start your business? Keep your eyes (and ears) open.
It's been a while since I posted a business lesson and over the Easter weekend, I heard a joke that relates to even the smallest entrepreneur.
Here's the joke:
It is pouring rain in the flood plain of the Mississippi Valley, and the rising river begins to threaten homes, including that of a local preacher.
When water floods into the ground floor, a rowboat with police comes by, and the officer shouts, "Let us evacuate you! The water level is getting dangerous."
The preacher replies, "No, thank you, I am a righteous man who trusts in the Almighty, and I am confident he will deliver me."
Three hours go by, and the rains intensify, at which point the preacher is forced up to the second floor of his house. A second police rowboat comes by, and the officer shouts, "Now let us evacuate you! The water level is getting dangerous!"
The preacher replies, "No, thank you, I am a righteous man who trusts in the Almighty, and I am confident he will deliver me."
The rain keeps coming, and the preacher is forced up onto the roof of his house. A helicopter flies over, and the officer shouts down, " Please, grab the rope and we'll pull you up! You're in terrible danger!"
The preacher replies, "No, thank you, I am a righteous man who trusts in the Almighty, and I am confident he will deliver me."
The deluge continues. The preacher is swept off the roof, carried away in the current, and drowns. He goes up to heaven, and at the pearly gates he is admitted and comes before God.
The preacher asks, "Dear Lord, I don't understand. I've been righteous and observant my whole life, and I depended on you to save me in my hour of need. Where were you?"
And the Lord answers, "I sent you two boats and a helicopter. What more do you want?"
What does this have to do with being an entrepreneur?
Well, most people take things for granted or are blind to see opportunities around them. If you hear two or three people around you start a sentence with "I wish there was a/an <object>", "You know what I'd like to see?", or "Do they make something like <object>?", you are probably in a position to take action.
That last sentence is important. The key is to sit up, notice what people are missing, and take action. Don't let your ideas sit and ferment. Move on them!
Idea Generators
However, if you are coming up empty with ideas or opportunities, where can you find these opportunities?
Go Shopping (but keep your ears and eyes open) - Everyone is out purchasing products and this is a prime area of where to overhear someone asking where these items or products are located. If they are hard to find, they may head home and resort to the Internet for locating these type of niche products.
Social Networking Event - Gather your business cards and head out to a networking event. People love to put a face with the name and love to talk about their ideas with everyone. I had one person introduce themselves to me and I returned the introduction with what I do. They immediately said, "Hey, I've been looking for someone to do this <project>. Could you help me out or do you know of someone who could do this?" They've been a client of mine ever since.
Revisit what you've built - If you've built something for someone and there is a huge demand for this type of product or service, tweak it a little bit and reuse it. You may find out that you may be sitting on a goldmine when you release your revamped product or service.
Build a better mousetrap - If you have an idea, don't get upset because someone built one already. Two things to think about: 1). If no one improved on the wheel, we'd all have concrete wheels instead of rubber tires; and 2). Google didn't build a new search engine, they just improved it and made it better.
These are just a couple of ideas to generate opportunities, but there are many, many more. You just need to be aware of them.
Know when an opportunity comes your way and act on it.
Jonathan Danylko
Does anybody have other ideas on how to generate opportunities?
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?"
Tired of your Roxio burning software? Need to document your network? Check out these free utilities.
Over time, if you continue to pay for burning software or hire a contractor to document your network, the amount of money spent can become costly.
Fortunately, there are companies out there providing exceptional software that accomplishes both of these tasks.
First up is the site called MakeUseOf.com where they list all of The Best, Free Alternatives to Nero CD/DVD Burner software. One of the products on the list that I use the most is ImgBurn and loaded that on my portable USB drive.
The other list is comprised of network utilities thanks to PCWorld. The top 10 utilities for your network contains quality software for little or no cost.
I've used the Network Notepad to document some networks so I definitely recommend this utility. I'm currently testing out the rest of the utilities.
Are there any other top quality networking or burning utilities for little to no cost?
Here's some advice for freelancers on what to do and what not to do: John Rambo style.
After watching Rambo this weekend, I couldn't help but realize that John Rambo was a freelancer.
I'm not talking about the type of freelancer that goes crazy on clients the way Rambo attacked the enemy, but the way he handled himself before all of the fighting is what I'm referring to. Check out these similarities I noticed in the movie that relates to freelancers.
When a job comes along, you don't HAVE to take it. Rambo has been through a lot in war and even the hint of gunpowder can make the man go crazy. Even though the crusade was trying to save lives and had good intentions, they didn't realize what they were getting into, but Rambo kept telling them to go home. He was going to be paid handsomely, but still declined the offer. Analyze the jobs that appear on your radar. You're a freelancer. Decide whether you want it or not.
Always keep your cool. During the entire movie, John Rambo kept his cool and knew every situation he went into. If a client get out of hand, always remember to think about a situation before you speak. Possibly even diffuse the problem before it even becomes a problem.
Don't let a loudmouth intimidate you. This continues down the path of number 2. Lewis was pretty fierce in the movie and kept egging on John Rambo. But John Rambo didn't do anything. Heck, these were the guys who were going to help him even though Lewis kept pushing him. If someone is pressuring you or forcing you to get fired up, just keep this in mind: Most leaders keep their cool in hot situations and stay level-headed to make the right decisions. Don't let someone push you into making a rash decision. You may not like the outcome.
Step up and take action! As residents of Burma were being forced to run across a water landmine-ridden field, most of the mercenaries were worried that they would be found out if they started attacking. This was the fear factor setting in. They were there to do a job and, in my eyes, they failed at that point. If you are there to do a job or have a project that you even think will start making you money, don't sit around and wish the problems away or think you can't do it. You attack and start the ball rolling (even if the loudmouth doesn't start doing anything). Remember, action speaks louder than words.
Know when to pull out the big guns. Near the end of the movie, John Rambo got out the big guns. He saved the mercenaries who were near the boat because he knew he needed help. When you are knee-deep in bad guys or projects, know when to ask for assistance instead of trying to take on everything yourself. If you need help, pull out your big guns (your contacts in your network) and see if anyone can help with your projects.
I watched the movie last night (Sunday) and I thought it was pretty good. A LOT of killing, so make sure you don't take your 10 year old to go see the movie (which I saw a couple bring their 9-10 year old to watch it).
What disaster recovery steps did I take to make sure this disaster doesn't happen again?
I recently had a business client of mine call me and tell me that their hard drive on their server crashed and their business was currently losing money. Fortunately, it was just the operating system that went South, so a reinstall of Windows Small Business Server 2003 was in order.
After recovering their OS, all of their data was retrieved and everything was back to normal. They felt relieved that their critical data was backed up, but they asked me two questions:
What are our backup options in regards to the server and our critical data?
How can we recover quickly from a server meltdown?
Based on the experiences of when a company loses their data because of a faulty hard drive or server meltdown, users go into a panic mode and become reactive instead of proactive. Immediately, they start to implement disaster recovery plans, purchase the necessary hardware and software, and start to document their server settings.
It's amazing that all it takes is one time to become a creature of habit. Since they didn't like their existing backup plan, they asked if I could recommend a solid alternative plan for backing up their server and critical data.
A while ago before the hard drive crash, I recommended the setup of two physically separate drives: one being an OS drive and the other for their important data. This was definitely a smart move, because as I look back, they were properly backing up their critical data to an external drive on a daily basis, which was awesome. The operating system wasn't backed up at all. You can always reload an OS, but you can't re-key all of your data.
With that said, an OS drive that dies off still slows down, if not completely shuts down, a business for a day or two. So where to start?
First, the data...
No one likes losing their vital data whether its home photos and videos, accounting records, or even source code (gasp!).
My first recommendation in the backup plan was to order a USB External Enclosure and a hard drive for their critical data. The USB External Enclosures are around $20-$40 and the hard drive would be an appropriate size that would be able to hold all of their data.
The backup software I recommended was Cobian Backup. I've been using Cobian Backup 8 for a long time and I'm very impressed with it's reliability.
There are five reasons I love this software:
Cobian Backup doesn't have any malware, adware, or spyware.
It installs itself as a windows service, so if the power goes out and your server reboots, you don't have to login to the server for the service to start the backup process.
It allows you to set a schedule of when to backup the files (you pick the directory and files to backup).
There is an awesome feature of downloading files from an FTP site, archive them, and then send them somewhere else, possibly offsite.
This quality piece of software is FREE.
After installing the software and the USB external hard drive, their data was on a backup schedule of every day for six days, create an incremental backup of their critical data.
...then, the OS
I recommended two options for the OS backup:
With the hardware available today, you can easily create a RAID setup with an additional hard drive.
After the server is completely finalized and running for business to start up again, create an image of that server and archive it for later.
Instead of going with one solution, they decided to run with both.
If you aren't familiar with RAID, a RAID system has one primary drive that holds your data and one or more hard drives are connected to a RAID controller that creates a mirror of that primary hard drive. When a primary hard drive fails, the other hard drive picks up the slack and notifies the user that a hard drive was corrupted and needs replaced. The secondary (or additional drive) continues with daily operations until the primary hard drive is replaced.
After purchasing the hardware for the RAID system and installing the two hard drives and RAID controller, it was time to install the imaging software.
Lifehacker reported on a software package called DriveImage XML and I definitely recommend this software for home office/small businesses.
This excellent imaging software accomplishes the following tasks (feature excerpt taken from their website):
Oh, and the software is FREE as well.
Another option which wasn't used here, but I may be using at home is CloneZilla. According to the SourceForge site,
Clonezilla, based on DRBL, Partition Image, ntfsclone, and udpcast, allows you can massively clone many (40 plus!) computers simultaneously. Clonezilla saves and restores only used blocks in the harddisk. This increases the clone effiency. At the NCHC's Classroom C, Clonezilla was used to clone 41 computers simultaneously. It took about 50 minutes to clone a 5.6 GBytes system image to all 41 computers via unicasting and only about 10 minutes via multicasting!
After reading this description, I will definitely be looking into this for later. Having experience with this, I feel that I have a feeling a training class or company may have a desperate need for this type of utility.
Conclusion
These methods in backing up the server and critical data may seem excessive, but determining your disaster recovery plan should be in place now when your server crashes. Be proactive, not reactive.
It's your business and your data should be protected. Determine how to recover from a disaster so your business can continue without falter.
Do you think this is the best plan for a home office/small business? No? Write a comment below.
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.
Nokia's N-Series is fast becoming a road warrior's companion.
Recently, I purchased a Nokia N800 for my mobile needs and found that there is an entire family of mobile devices. But after playing around with my Nokia N800, I'm beginning to realize that even though the hardware is there, the software isn't.
What I mean by the software is that it's not the operating system. It's the third-party community. There needs to be more software developed for the Maemo operating system. Heck, I'm still waiting for an MS Office package on the N800 (isn't OpenOffice available?)
Earlier this year, I owned a Palm T3 and being a truly committed individual to Palm, I waited to see which direction Palm was taking. It seems Palm is heading towards a smartphone mentality. A smartphone just wasn't practical for my needs (I like my devices separate).
But after six months of research and waiting, I took the plunge and purchased the Nokia N800. That opened my eyes and I started seeing other Nokia devices popping up that focus on mobility and functionality, such as the Nokia N95 with the Mobile Journalism Toolkit (Ref: CNet as well) or the new Nokia N810 with the attached keyboard.
In the grand scheme of things, I know Nokia is trying to compete with Apple and the iPhone/iTouch and they are doing an exceptional job with the N-Series of devices, but I also think they are focusing on someone else at this point.
If they can take out another mobile competitor along the way, they just might do it.
Anyone have additional thoughts on this particular direction Nokia is taking?
UPDATE: Even thought this is not a PDA or an iPhone copy, it is considered primarily as an portable Internet Tablet device.
If there was ever a great time to start a business, now is that time with two great contests!
Over the past month, I've been seeing a lot of people talking about preparing your ideas and building a business. Now, even the big names are getting in on the action.
Sometimes reaching out and examining how startup businesses arrive at their ideas is stimulating and invigorating. There may be some ideas that spring up from the creativity pool, but there are some that spring a leak and drain the pool completely.
Where am I going with this? It seems large companies are looking for creative ideas...and are willing to pay for them.
Intuit recently announced the JustStart contest where they are looking for the best idea for a startup and are willing to pay you close to $50,000 for your story. According to their site:
The best idea could score $40K in cash and over $10K in expert resources. Plus, two first prize winners walk away with $5K.
Enter the contest, it's easy. Tell us what you'll Just Start. Fact, fiction or fantasy. What have you always dreamed of doing? What are you resigning from and moving towards? And, how will the Just Start grant ($50k) help you strike out on your own?
So if you have a fantastic idea, by all means share it with the world. Who knows, you may be $40,000 closer to your dream job.
Wait...there's more
For all of you programmers out there, there is another opportunity for you to make more money.
Amazon's Web Services group are giving away $50,000 cash with another $50,000 of free web services to a lucky company or entrepreneur with a great start-up idea as well.
Amazon Web Services Start Up Challenge allows not only a programmer, but a non-programmer to come up with web site ideas. The entry form includes how everything would be defined in your business plan (provided you have one).
So, if you could create your own web site that incorporates Amazon's web services and it's creative enough, why not submit to both contests. Who knows...you may win both.
UPDATE: Oct-18-2007 - Entrepreneur.com JUST added this little gem regarding another site called IdeaBlob that is giving away $10,000 for great ideas.
Today's post is geared towards an energy-efficient Blog Action Day.
It's Blog Action Day and the topic is about how to make the world a "greener" place. On this blog, it deals with making a "greener" difference with your business.
A lot of large companies like Adobe, Hewlett-Packard, Palm, and Honda have taken the initiative to move towards a greener company. All it takes is one step to move towards a cleaner world.
If you are a Micro-ISV/small/home business, you can definitely make a difference by showing other large companies how green you can be. Start with one action below and move on to another.
1. Work towards a paperless or virtual office.
This is probably the biggest way to make an impact in your office. If your office is service-based, the paper you accumulate could be scanned and saved in a customer folder on your PC. Just make sure you backup your data.
2. Recycle your aluminum cans.
...or you'll have the "office linebacker" visiting your office. Also recycle glass, aluminum, and plastic.
3. Look for the Energy Star symbol on products.
Such as computers and laptops to save energy.
4. Save the energy by turning off the lights and your PC at night. Besides the server, I always turn off the PC's and lights at night to conserve energy.
5. Monitor your power consumption with Local Cooling.com.
This desktop application automatically optimizes your PC's power consumption by using a more effective power save mode.
These 5 steps are just the beginning. To continue your path to make you business more energy efficient, head over to the Blog Action Day or visit these other sites to help with saving more energy.
DCS has contributed $30 for the day to the National Wildlife Federation. It may seem small, but if enough people contribute to their own charity of choice, we can make a big difference.
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.
Everyone has a credit card, but does everyone know what the creditors do behind the scenes?
When you start up your small business, you look for cash in the most interesting places: banks, relatives, and maxed out credit cards.
Whoa, Whoa, Whoa!
NO CREDIT CARDS! I keep telling people that credit cards are evil. They definitely have their place, but be aware of how much you will inevitably be paying.
Using a cash advance on a personal credit card is bad enough, but financing a business using credit cards? Not a smart move. I understand that small businesses take risks all of the time, but there is a fine line between risk and stupidity, which may be a reason why some small businesses never get off the ground.
CareOne Credit discusses The Dirty Dozen Credit Card Traps and just proves my philosophy on how credit cards take more of your hard earned money for themselves. Prepare yourself for an informative article.
Look for other ways to make money for your small business besides charging!
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.