Author Archives: admin

The end of “desktop vs. web apps”

The end of “desktop vs. web apps”. Hybrid apps are no longer the future—they’re now.

In my career I’ve heard lots of predictions—Apple will go out of business; soon there will be only six or seven websites; the browser is dead; we’ll all be running “thin clients”; Java will replace C/C++ everywhere—that I haven’t believed.

The most recent is the prediction that desktop apps are dead, that soon everything will be a web app.

I actually believe that’s correct, in a way—you’re going to see fewer and fewer desktop apps that know nothing about the internet.

But the thing about software industry predictions is that they’re usually somewhere between dead wrong and partly right in a way. This particular prediction is partly right, in a way—but it misses out totally on all the fun.

A tour

What’s a web app, what’s a desktop app?

Where does the code run? What kind of code is allowed to run? What kind of resources can the code access?

In the case of web apps, some code runs on the server—and a bunch runs on the client, too. A browser—a desktop app—is implied. And that browser renders HTML, runs JavaScript, makes network requests, plays audio and video and Flash, stores some data locally, knows how to launch other apps, etc. Web apps run a bunch of code on your desktop: in fact, they don’t exist without a desktop app.

And then, of course, you can trick out your browser (depending on which one you use) by installing some cool extensions—which then run on your desktop too, even though they’re all about the web.

Well, then I think about Dashboard widgets, which are, essentially, little bits of browser chipped off and running in a special layer. They’re HTML plus JavaScript, just like web apps, but they’re like mini-web-apps stored locally.

However, widgets can also contain Cocoa code and can access local resources. They can also have nothing at all to do with the web, even though they’re made of web dust.

Then there are feed readers. They’re specialized browsers that access a certain type of structured data and display it in a structured way. (A feed is a mini-web-app with just one command: GET.) Like widgets and browsers, feed readers do their display with HTML and can run JavaScript and audio and video, whether or not the feed reader is a “desktop” or “web” app.

iPhoto is perhaps a desktop app—except that I’ve installed FlickrExport, and iPhoto itself reads and writes RSS feeds. Similarly, iCal subscribes to calendars published via Google. My Address Book syncs over the web.

Text editors know about FTP and can usually display HTML. SubEthaEdit even does collaboration over the network. VoodooPad is a wiki—a web thing, clearly—that can generate websites, yet is a Cocoa app. Skitch makes it super-easy to share locally-created images over the web.

MarsEdit gives me one interface for a bunch of different weblog systems. Adium does the same thing for chat, and uses HTML for display, even though it’s not a browser.

Delicious Library talks to Amazon. Coda is clearly a web app, in the sense that it’s entirely about the web and does HTML, networking, and so on. Google Desktop lets you search your Gmail messages on your desktop. Webmail is a special browser just for GMail. QuickSilver is web-savvy, and it’s also pretty savvy about the files and apps on my hard drive.

And then there’s iTunes. I can’t imagine wanting to store my songs anywhere but on my desktop, especially when I sync my iPod. But I also like the integration of the music store—which may not be HTML (I don’t know what it is), but it’s something conceptually similar. And of course the music store exists somewhere in the internet, even though the code to display and interact with it lives in iTunes. iTunes is a specialized web app container.

Look, it works the other direction too

If you haven’t checked out Apollo, Silverlight, Slingshot, DjangoKit, and POW, you ought to.

The idea behind these is to write web apps that run on your desktop.

Here’s what the Joyent site says about Slingshot: “Joyent Slingshot enables Rails to break free of the browser. It breaks down the wall between a Web application and a desktop application without losing what makes a Web application great…”

Well, that sounds pretty cool. I haven’t tried any of these yet, but it’s an exciting direction. (Aside: we did similar work at UserLand years ago. But that was then, and the world is slow to catch up.)

Last thing: Twitterrific

I’ve said before that I wouldn’t use Twitter were it not for Twitterrific. None of my browsers can provide the user interface that Twitterrific provides: floating window, not in widget space, doesn’t crash when my browser crashes.

The Twitter folks were smart to provide an easy-to-use API that makes apps like Twitterrific possible. And Twitter works with IM and phones, and you can put a widget on your weblog, and who knows what all else.

It’s smart because we live in a multiple-platform world—and in a world where different people have different tastes. There’s not one soda everybody drinks: there’s diet, and vanilla and cherry, and diet-vanilla-cherry, and caffeine-free. Plus root beer.

It’s a hybrid world

Rather than make a prediction—like “Look out! Hybrid apps are coming!”—I’m just recognizing what is true right now: hybrid apps are here.

Anyone who wants to do everything in just one desktop app, the browser, can—provided they don’t mind giving up protected memory and all that modern goodness.

But most folks are going to make app-by-app decisions, and developers are going to try a whole bunch of different approaches.

If it looks like an exciting age of experimentation, that’s because it is. [inessential.com]

200th DNA exoneration tomorrow

200th DNA exoneration tomorrow.

Today’s Chicago Tribune has a remarkable article about the exoneration of Jerry Miller. Miller, an Army veteran who’d never been convicted of a crime, was identified in a police line-up by two eye-witnesses, and ended up serving 25 years in prison before being cleared by DNA collected at the scene of the crime. The Innocence Project was instrumental in his exoneration, which will be the 200th exoneration in the United States as a result of DNA evidence. (More about The Innocence Project here; here’s their blog.)

A couple of facts stood out for me after reading the Trib article:

  • In cases overturned by DNA evidence, 75% of the convictions were a result of faulty eye-witness testimony. You can read more about mistaken identification here.
  • Even more incredibly, confessions are also to blame in mistaken convictions. In more than one out of four wrongful convictions, the suspect actually confessed to the crime – even though DNA evidence later demonstrated that they did not commit the crime in question. (More about false confessions here.)

Fewer than half of the states in the United States have compensation provisions to compensate prisoners who have been wrongfully imprisoned as a result of a mistaken conviction. Think about that for a minute: in 29 states in the U.S., you can be convicted of a crime you didn’t commit, sent to prison, later found innocent and released. Without so much as an apology. In the case of Jerry Hill, the man who served 25 years for a crime he did not commit, he’s eligible for a total of $35,000.   [tins ::: Rick Klau's weblog]

The Essence of Duct Tape Marketing

The Essence of Duct Tape Marketing.

Duct tape (the tape) is simple, effective, and affordable—it’s not always the prettiest solution, but it does always work. The central theme of Duct Tape Marketing: The World's Most Practical Small Business Marketing Guide by John Jantsch is that effective small business marketing is a system—not an event—composed of simple, effective, and affordable techniques.

When you combine that with the cult-like
obsession many people have for all things duct tape
you also get a pretty good example of how something simple like the right name can do a great deal for a company, product, service, or book. I asked John to distill his marketing ideas to a top-ten list, and here is what he provided:

  1. Narrow the market focus. Create a picture of the ideal client: what they look like, how they think, what they value, and where you can find them. Start saying no to non-ideal clients.

  2. Differentiate. Strip everything you know about your product or service down to the simplest core idea. Make sure that the core idea allows you stand out.

  3. Think about strategy first. Take everything you’ve done in steps one and two and create a strategy to own a word or two in the mind of your ideal client and prospect.

  4. Create information that educates. You are in the information business, so think of your marketing materials, web sites, white papers, marketing kits as information products, not “sales” propoganda.

  5. Package the experience. Put visual elements around every aspect of the marketing strategy that you adopt. Use design to evoke the appropriate emotional response from your ideal prospect.

  6. Generate leads from many points. People learn in different ways. Your lead generation efforts must allow your prospects to experience your firm from many different angles and views.

  7. Nurture leads along the logical buying path. There’s a natural way for your prospects to come to the conclusion that you have what they need. Build the lead conversion system for before, during, and after the sale.

  8. Measure everything that matters. Certain things always matter. The secret sauce is in finding and measuring the intangibles – those things down on the shop floor that eventually add up to profit.

  9. Automate for leverage. Embrace the Internet or else. Create access, stimulate community, capture innovation, and build knowledge to automate the basic delivery elements of your information business.

  10. Commit. Resist the temptation of the marketing idea of the week. Create daily, weekly, monthly, and annual marketing calendars, make marketing your new habit, and find the money to stick with the plan.

[How to Change the World]

Scaling to multiple databases with Rails

Scaling to multiple databases with Rails.

Remember that point about Rails lacking an easy-to-use way of dealing with multiple read/write databases? Strike that. Nic Williams has released Magic Multi-Connections. It makes it dead easy to use a cluster of databases to scale read and write speeds higher than a single connection would ever allow.

That in itself is wonderful. Williams let code be his reply to the discussion of Twitter's woes on scaling the database. I would of course rather have seen this work come out of Twitter, but I'm happy that they got a free offering handed to them regardless. They didn't even have to pass step 1 in Brian McCallister's road map for getting stuff fixed in open source. And the turn-around time was within the same day of this whole thing blowing up.

Now how could this be. How could Nic fix such an apparent “critical flaw”, as others have billed the lack of this facility in Rails, in such a short time? Simple, he did it in less than 75 lines of Ruby as a plugin for Rails. Less than 75 lines.

In my mind, that's the crux of the story. That extending Rails to do what you want is often much simpler than you think. That you can't compare extending a high-level framework written in a language like Ruby to, say, patching Apache or MySQL. The barriers of entry are simply not in the same sport.

So let's use this occasion to celebrate the wonders of open source (“some times you can just ask and you will receive”), but at the same time keep the effort involved in this example as a guidance for the future (“maybe next time, I could just have a look at how hard it would be to fix myself”). And of course, a big thanks to Nic Williams to making a big fuss a non-issue.  [Loud Thinking]

The yaTimer – a very handy utility

The yaTimer – a very handy utility. If you are a freelance consultant, writer, or designer, this versatile software timer may be what you have been looking for. It makes keeping track of multitasking activities almost painless. I have been searching for a better way to keep track of how much time I spend on various client projects and in a recent article, I included a list of the must-have features I was looking for … [Making Ripples: post-corporate adventures]

Primal Issues

Primal Issues.

What few in the media (but a great many down on the street) are
saying about the Virginia Tech massacre is that law enforcement botched
the whole thing. Between the time Ho began firing in the dorm and when
he started exterminating people in Norris Hall was a gap of two hours,
during which time very little was done. The criticism is not exactly
fair, but that doesn't matter—it's the perception that the public is
taking away from the incident: The police are unable to protect me. This is a political issue with some interesting wrinkles.

Any
hoped-for momentum toward additional restrictions on firearms will be
more than balanced by the crawling fear that self-protection is the
only viable option if the police can't be trusted. (Chicago's recent
scandal of a police officer videotaped beating a female bartender
toppled the city's police chief and—again, unfairly—cemented the
conviction in many people's minds that the Chicago police are thugs.)
This is worsened by the fact that the victims were college
students—people's children, albeit legally adult children—whose parents
had entrusted them to the university and, by implication, to the local
police. People are notoriously irrational when it comes to the safety
of their children.

Gun control is one of a class of political issues I call primal,
because the passion they evoke in many people is older than and runs
deeper than reason. It's about fear, specifically fear of death, which
is about as primal a fear as they come. Primal issues easily become
political “third rails” that politicians fear to deal with, because
primal interest long outlives casual interest. (CNN has an interesting short article
on this topic.) The nation as a whole is already losing interest in the
Virginia Tech massacre, but gun rights advocates are taking notes on
who's saying what in the political realm, and those notes will be
organized, retained, and remembered next fall, and for years and years
after that. Bill Clinton himself admitted that Democratic anti-gun
activism cost the party control of Congress for twelve years. Even
Obama touches that rail at his peril.

There's
another primal third rail out there: abortion. Abortion rights
advocates are just as primal in their support of abortion rights as gun
advocates are in support of gun ownership rights. Abortion advocacy
isn't based on anything as simple as fear, but on the complex
strategies for human sexual reproduction that evolution has handed us.
I could never figure out why abortion was so primal an issue until I
read The Red Queen
by Matt Ridley. That's worth an entry or three all by itself, but if
you're interested, do read the book. The point I want to make in this
entry is simply that if you want to understand politics, you must
understand the primal nature of certain issues, including gun control,
abortion, and Social Security, which is another third rail based on the
primal fear (sometimes even the rational fear) of being put out on the
street and starving to death.

The tribalism that
infects our whole political process is energized by primal fears, most
specifically the confoundingly deep fear that if the other tribe gets
control, they will destroy my tribe and all that my tribe
stands for. Pressure groups use such primal fears to make people cough
up money and get them to vote for their tribe. Saving democracy in this
country is mostly the process of identifying our primal fears and
defusing them before they make us slaves of one tribe or another, both
of which exist solely to make the world safer for their leaders and
largest donors.

Primal emotions (fear, anger,
jealousy, and all the others) trump reason, and can be easily
manipulated to bring us into bondage. Basically, every night before you
go to bed, look in the mirror and ask, “Who owns me?”

Answering that question honestly is the most important single thing that you will ever do.  [Jeff Duntemann's ContraPositive Diary]

Cluster-like Non-Clusters


Cluster-like Non-Clusters for SMB Messaging

Regardless of size, no business can afford to be without e-mail access
these days. Combine that with the more and more services we pile on
these mail servers and you’ve got the making of a perfect SMB disaster.
Mail servers are far more than just “mail”, they drive groupware
functionality, faxing services, calendaring, mobile device security as
well as remote document and file access. We have consolidated and built
a civilization on top of a single box yet haven’t raised our budgets
and expectations to drive what used to be spread over multiple servers,
workstations and was the sole job of a few part time employees. The
following article helps you take a look at your small business
infrastructure and realize the potential in new cluster-like features
in Microsoft Exchange 2007. . . .

Clusters are Expensive!

Yes they are. Clusters generally require very expensive shared
storage devices, storage controllers to manage either SCSI or Fiber
storage arrays, high end systems, etc. However, LCR and CCR do not
require any of this high end gear. You can use the low cost Dell
PowerEdge servers (currently Dell has a PowerEdge 440 Dual Core Intel
2.8, 2GB DDR, 160GB SATA2 on sale for $580)

To give you an example, last night I built two baseline test servers
to test LCR and CCR features of Exchange 2007. Total with shipping came
to under $900 (about $400 for each system). What’s in it?

AMD Athlon 64 X2 3800 Windsor 2.0 GHz AM2 Dual Core Processor ($91)

ECS Socket AM2 Radeon Xpress 1100 MicroATX AMD Motherboard ($58)

Wintec AMPX (2 x 1GB) 240-Pin DDR DDR2 800 (PC2 6400) Dual Channel Memory ($130)

Western Digital Caviar SE WD1600 JS 160 GB SATA 2 Drive ($53)

IN WIN Black Steel MicroATX Desktop Computer Case 240W ($50)

At the first glance this system looks very basic. Let’s look at some
of the objections. First of all – no redundant storage. Easy, not
needed. The nodes replicate data back and forth, so there is no need
for a high end storage investment. If you wanted to spend extra $53 per
node you could buy an additional hard drive and create a mirror. The
motherboard supports it. Second, only 2GB of RAM? Yes, thats the
recommended amount of RAM for the mailbox role according to Microsoft.
Not the minimum, recommended. If thats not enough, the motherboard does
support up to 16GB. You can overload the primary box with 4GB for
example and keep the failover node with far less RAM because it would
only be accessed when there is a failure. Third, motherboard and case.
This is hard to overcome so let me explain my choices. I invested in a
fairly high end processor for this setup and selected a cheaper case
becasue as a test system this will sit on my workbench. The 240W power
supply and low-footprint desktop system case will make this a cool,
quiet and small setup that I can use to get things going. For roughly
$80 more per node you can also buy a 1U Racmount case from SuperMicro that would meet your data center racking needs.

Either way, even if you bumped up the RAM, mirrored the hard drives,
bought a racked case it would cost just over $1,000 total for both
systems shipped. That is far less than what most small businesses are
investing in their primary server – why? Because we’ve been trained to
buy the most expensive solution the money can buy and budget can fit.
We’ll grow into it, right? Well, no.. no.. wrong. You see, we’ve pushed
the limits of processing very far. You get far more memory and
processing power for the buck but you still have that same lingering
issue of the single point of failure. And you’re likely spending more
for that single point of failure than you would for a redundant
configuration!

The point of this article is to shift your thinking. We have the
technology. We have the resources. We can make the disaster recovery a
lot more predictable and seamless for our clients if we’re willing to
review these new techologies, implement them and get away from “more is
better” to “more independant systems are better”. If you have a small
business you have to let go of the big-iron enterprise view of having
high end monster systems to a more distributed, more replicable smaller
systems. It will cost you less and let you sleep better at night. Hey,
take one node home with you 🙂 [Vlad Mazek – Vladville Blog]

Required Reading: Microsoft Security Explained

Required Reading: Microsoft Security Explained.

This is not a joke, not a Geek Squad employee recording their customers in the shower, not a deathbed confession of who killed JFK. This is real. This is the most eloquently put illustration of Microsofts incompetence / ignorance. I wish I could write like this but unfortunately I’m the one paying for it so my points tend to become far more fiery.

http://hiltont.blogspot.com/2007/04/microsoft-patch-releases.html

Print that page, forward it to your staff, forward it to your clients and forward it to your IT peers. This blog post picks apart Microsoft’s lack of commitment to releasing solid patches and I think you’ll all agree that we have put up with enough stuff this century, to the point that most of us have labs, overhead/overtime, infrastructure/WSUS and additional software… all to do the job that Microsoft should have done prior to their releases.

We either make light of this all and demand change or we shut off our patching and let the servers fall where they may. 
[Vlad Mazek – Vladville Blog]

CentOS 5 is Out!

CentOS 5 is Out!.

Congratulations to the CentOS team. They released CentOS 5.0 today, which is the free version of the Enterprise Linux OS. Basically they take the source for Redhat Enterprise Linux 5.0 and recompile and rebuild a solution so you can install and run it.. Free vs. $3K, easy choice if you know your way around the OS.

CentOS 4.x has been a rock solid solution for us at OWN and it runs pretty much everything from ExchangeDefender, to web, mail, dns and more servers. If you need a reliable solution this is the one you go with, not to mention 5 years of support. What do I mean by reliable?

[10:57 – 0.90] [root ns1] ~]$ uptime
10:57:41 up 161 days, 2:53, 3 users, load average: 1.63, 1.00, 0.92

(that’s 161 days of uptime, fully patched and up-to-date system that hasn’t needed a reboot in 6 months. And it ran happily ever after. Sounds like a fairly tale, doesn’t it?) 
[Vlad Mazek – Vladville Blog]