Hate UML?

Draw sequence diagrams in seconds.
http://www.websequencediagrams.com

C++: A language for next generation web apps
Posted on: 2010-01-26 18:00:00
This article is translated to Serbo-Croatian language by Anja Skrba from Webhostinggeeks.com

On Monday, I was pleased to be an uninvited speaker at Waterloo Devhouse, hosted in Postrank's magnificent office. After making some surreptitious alterations to their agile development wall, I gave a tongue-in-cheek talk on how C++ can fit in to a web application.

There were other cool presentations there too. Check it oot! Er, out!

During this presentation, I hope to convince you that the C++ programming language is ideal for developing your next web application.

You might be asking, Steve, Why C++? Why would I subject myself to this horrible language where you have to manage your own memory?

One reason is efficiency. Not only is C++ inherently fast. It also forces you to think differently. It discourages the use of overly complicated data structures that are built in to other languages. In C++, nesting more than one or two structures results in something that is simply too awkward to use. Instead, the you are forced to seriously consider using the simplest possible representation.

In addition, just about any library that you'd want to use has already been written, and has a free implementation available on the internet. Json, and CGI decoders are freely available. Also, as often overlooked, you have to handle UTF8 to Wide-character conversion, but this is easily achieved in a 10 line function.

The only thing you do have to be careful with is SQL database access. MySql is GPL'd, so you can't even link to its client library in a closed source app. SQLite seems to be free, except if you do business in Germany it is $1000 because they have a different definition of public domain.

Here is the first strategy that you might use to incorporate C++ into your web app. In this diagram, there are two things between the browser and your application -- the web server, and the php script. It is not as efficient as it could be, and there are also security implications with calling command line programs from php.

In this model, you write your C++ program as a CGI script directly, using one of the freely available query string parsing libraries. It is efficient and clean. When your browser requests information, the webserver starts your program, which spits out the response in json format. This response is then relayed back to the browser.

I use the above strategy for RhymeBrain. It includes advanced statistical algorithms that let it sound out any word that you put in. For example, you can enter the word "postrank" and see that it rhymes with such gems as "blank, prank, drank, tanked, and stank".

Because it's written in C++, I can run it on my super-powerful datacenter. It sits atop my sock drawer at RhymeBrain headquarters.

This powerful 1GHz beast can load the entire 2.6 million word database and fire back the response in about 50 milliseconds. It does this from a cold start, for each request.

But there is a third strategy: If you write your own webserver, you can cut out the middleman and serve the request directly. Your javascript code makes a request, and all your web server has to do is call a function to send back the results.

Writing a webserver isn't that hard. Here is the complete implementation of the Hibachi web server. It supports virtual hosts, and perl and php scripting, among other things. It was written by former Waterloo-ite Anthony Howe, and won the 2004 International Obfuscated C Coding Competition.

Inspired by Hibachi, I wrote my own webserver and built WebSequenceDiagrams (which runs in a real data center..). Doing it this way reveals a new business model. It is possible to package up the entire web application into a single installer that runs on Windows and Linux. Since it's all integrated, there is no need for customers to fuss around with Apache or the numerous other moving parts that could break if I shipped separate components. (You can run it in your organization for as little as $99).

The only disadvantage is that the final executable is really small -- around 700K. It may be a little smaller than some customers are expecting. During the presentation, it was suggested that I ship it as an appliance, in a huge box, to compensate.

Conclusion

I hope that I've convinced you of the benefits of C++ in your next web application:
  • Reduced hardware costs
  • Readily available libraries for web tasks
  • Portability
  • Extreme flexibility in deployment

Want more programming tech talk?
Add to Circles on Google Plus
Subscribe to posts

Post comment

Real Name:
Your Email (Not displayed):

Text only. No HTML. If you write "http:" your message will be ignored.
Choose an edit password if you want to be able to edit or delete your comment later.
Editing Password (Optional):

Sebastian

2010-01-27 01:46:06
6 Years ago I was working on a CGI-Application written in C++ and just remembering it makes me wanna suck my thumb and weep.

meir

2010-01-27 02:02:04
why to write web server ?

why not just extend with c/c++ servers like nginx/lighttpd?

Michael

2010-01-27 03:48:50
You're lying, C++ applications are not portable!

Paul

2010-01-27 04:07:47
>Also, as often overlooked by anyone over 30, you

>have to handle UTF8 to Unicode conversion

Maybe anyone over 30 knows the difference between encoding and character set?

zproxy

2010-01-27 04:27:11
I guess if a compiler were able to succesfully tare apart the c++ application and translate parts of it to javascript it would be what you are after? :)

It could be easly done if the C++ was compiled to IL first.

Have a look at my jsc compiler at jsc.sf.net :) It will translate IL to javascript and more!

I do like the idea of a multitier application written as one application.

gpilotino

2010-01-27 04:31:29
portability should be the advantage of C++ over which language ? =)

Pim van Riezen

2010-01-27 05:26:07
I've been doing the same thing for years. Both the n2view monitoring frontend and the openpanel GUI are served through the Grace httpd classes, see grace.openpanel.com/wwg_http_server.html . Works like a charm and makes for a workable http service that can be installed without pain.

foo

2010-01-27 08:20:34
Why do still use php then?

Over30

2010-01-27 10:31:01
I'm well over 30 and I'm sure I've dealt more with the details of how Unicode works than you. I don't appreciate the crack.

fdara

2010-01-27 10:46:16
this is lol

JustAnotherJediCoder

2010-01-27 11:40:46
A few years ago I was working at a web/games company, and I had to write a backend logging server. I wrote it in my prefered language...C++!. It must've been about 10,000 lines of code, complete with a HTTP webserver service, a TCP/IP comms service between the logger and another C++ program which ran on another server. In short we're talking about 20,000 lines of code, which handled about 1GB of data per second, hardly touching the CPU load on the servers, allowing web browsers to check the status of the logger, ran for about 2 years after I had left the company (at which point I figure they had moved the servers), ZERO crashes, ZERO memory leaks, <1% CPU Load average.

The main bottlenecks were transfering the data from the logging applications' own memory into MySQL (since MySQL wasn't fast enough to handle 1GB/sec), and the TCP/IP connection between servers (I think we had a 1GBit/connection).

But don't get me wrong, Java is great for some things. For one without Java, the semiconductor industry would lose billions.

Java manages your memory by using more memory. Memory management is overrated. Most Java programs which do very little take up 100's of MB's, and leak, and when the garbage collector does work, it works hard (causes slow down).

In Java you may have a bug and the app still runs/leaks memory, in C if you have a bug it'll crash. I'd rather crash my car, and then take extra care on the roads, than have cancer and not no about it, until it's too late.

Java programs are slower too, which means you need more powerful CPU's. Java encourages a lazy way of coding and architecture, which will bite you in the a** in the long run.

C/++ code is portable ever heard of GCC, works on windows, linux, and just about everything? Tell me when someone makes a Java app for the iphone.

No offense to the wave of java kids out there. But there is a bigger difference between programmers who have an Assembly/C/C++ background and those that don't. Than there is between those who have a Java background and those who don't. Assembly/C/C++ foster a better, more critical way of thinking, than languages like Java, which teach you to hunt for the nearest library. "Oh my boss told me to make a First Person Shooter 3D game, where is the makeFPSGame(TYPE_3D); function and where is the Game API"

Young Padawan

2010-01-27 12:08:25
I am a Java coder but I subscribe to Jedi Coder's views.

Java gives you stuff to have a lazy stroll through a project but bloats things up. There's not much fun doing it.

Simple efficient code is the best solution in most of the cases. Machines love language that they can understand and that is machine code. Each level up from that adds more nonsense to what it is being said.

Java has its uses too.

old dude

2010-01-27 13:44:57
You neglected to mention the Apache DSO model... Dynamic Shared Objects. That's a huge omission.

Those who ignore the past are condemned to repeat it, BADLY.

berto

2010-01-27 15:31:52
interesting article and nice blog. have you looked into this? www.w3.org/2001/tag/doc/leastPower-2006-02-23

SomePunk

2010-01-27 19:10:06
Can't link to MySQL? Um we are talking about the internet right? If you aren't redistributing your application/selling it, you can use GPL code however you like.

Mike Borozdin

2010-01-28 11:33:13
>You're lying, C++ applications are not portable!

C++ application binaries are not portable, but source code is, if you are not stupid enough to use a lot of platform specific functions without trying to abstract them.

Joey Robert

2010-01-29 00:52:17
Your presentation was hilarious, hope to see you next month at Dev House!

Andrei Rinea

2010-02-03 03:35:51
Or... You can use a modern, compiled stack such as .NET (ASP.NET MVC for example) or Java (JSF/JSP) :P

DalSoft

2010-02-03 18:48:57
Seriously... for a useful web application your struggle to deliver anything useful in a reasonable amount in of time.

Your focusing on a slight performance gain (probably lost in browser to server latency anyhow) rather than productivity.

Lets take this blog for example, convert that into your next gen web app in C++, lets set a time limit say 24 hours. I don't think your get very far (compared to someone using a JIT'ed language) or you could prove me wrong of course :-)

Objective-C?

2010-02-03 18:59:34
"Tell me when someone makes a Java app for the iphone"

It's nothing to do with the language, it's because Apple only allow Objective-C on the iPhone, because they are closed a source corporate machine - there are plenty of Java apps running on other mobile devices.

foodforthought

2010-02-03 19:14:34
@DalSoft - you have a point, but would you rather pay a C++ coder for a bit longer to develop your web application or spend more on hardware for the life of the application to deal with inefficient processor usage and higher power consumption/cooling costs (in larger scale projects)?

This approach allows you to deploy your applications on simpler hardware (cheaper to replace as well as buy in the first place) with savings in almost every area and less downtime. Whats not to like?

Ronald Conco

2010-02-04 03:59:20
I actually did a similar implementation a couple of years ago, I had to build a flash based poker odds game for a casino, and the problem was that the php was not fast enough to run as odds calculator, so I had to build the odds calculator in C then call then call the executable from php which then send the results to the flash game. There was no other way around this....good read though....

nfma

2010-02-07 09:38:55
@foodforthought

It depends on what you want. If you want to go fast to market you might want to go with Rails or similar and replace it with faster implementations on a need basis...

Anyway, there are no "right recipes", you always trade things off.

julian

2010-02-23 04:05:32
Have you ever thought about security? I mean how many buffer overflow or format string bugs will be in there? Ok, if you are a C++ guru and write almost bugless code, you are fine. For the average programmer I can assure you that this will not be the case.

Chris Bruner

2010-03-05 04:21:15
You are right. I've got an application which is used on Linux systems all over North America for Life Insurance quotations. It was written in C++ because

1. It great grandparent was a dos program written in C++.

2. It uses a lot of secret special sauce that my company wouldn't want to sell as a php script.

3. It is blazingly fast.

4. The same base code runs on pocket computers PCs and webservers, because if (carefully) written without using templates, C++ is portable!.

Sangram

2010-03-14 01:25:09
Fully agree with post

love the customer expectation part

i had written c++ web app long back

NerdFight!

2010-03-14 13:15:11
Epic Nerd Rage Battle...

hobs

2010-03-29 08:47:08
>Can't link to MySQL? Um we are talking about the internet right? If you aren't redistributing your application/selling it, you can use GPL code however you like.

He is selling it.

L

2010-04-24 14:08:50
Python+cherrypy+sqlalchemy+mod_wsgi. Can be deployed on anything. It doesn't make sense to write the whole web app in C++ but it does make sense however to write some portions in C++ were you need performance.

Jay Godse

2010-05-05 14:03:40
I have some pages to help out with SQLite at:

www.squidoo.com/sqlitetutorial

www.squidoo.com/sqliteprogramming

www.squidoo.com/sqlitedatabaseprogramming

I also have videos on YouTube (just search for "sqlite tutorial" and look for my videos with the black command line screen.

Mohamad Farhat

2010-05-08 20:36:58
lololololololololololol.

man you made me laugh like never "The only disadvantage is that the final executable is really small".

I always had this problem, seriously! A friendly low-ranked client once told me : "what! you mean to tell me that we paid $60,000 dollars for for three cheap floppies!", are you out of your mind! give me five CDs and i dont care if you fill them with high resolutin pictures".

lolololololol.

Thanks for the superb article. mrfarhat@hotmail.com

Mohamad Farhat

2010-05-08 20:42:42
After reading other readers comments.

Sorry I forgot to say "LONG LIVE C++", and "THERE IS ONLY ONE C++" as in "There is only one Ronaldo".

lolol

hola

2010-05-11 10:34:35
wiiiiiiiiiiiii, im bored!!! what´s up??

mike

2010-07-04 13:36:24
Hello, welcome to 1994, you dang kids!

SciK

2010-08-04 08:30:34
“MySql is GPL'd, so you can't even link to its client library in a closed source app.”

GPL only forces you to release the source code if you *distribute* the program.

With a server-side app, you don't ;)

Branko Dimitrijevic

2010-09-15 19:04:33
While certainly having its merits, Web development in C++ is a niche, and here is why:

- Speed of development / expertise needed. While crack C++ guru will certainly be able to do it, most real-world programmers simply do not fall into that category - and never will.

- Division of work. If you hard-code your HTML in C++, then only a programmer can customize how resulting Web pages look, resulting in poor visual design of your Web site and/or excessive time consumed even for minor changes. If you dynamically replace parts of text templates to produce final HTML, you are simply reinventing what is already in "real" Web servers - why not spend that time on visual design of your site instead?

- State/session management. If you are using CGI model, you need to rebuild your state (data structures, database connections etc...) whenever an HTTP request comes (and new CGI executable is started). In NSAPI/ISAPI model (or whatever it's called in these modern times) your DLL sits in Web server's address space so you can cache your state, but than you have to be absolute guru to avoid resource problems - not just memory/resource leaks, but memory fragmentation as well.

So building Web sites in C++ is a little like building your own database engine - it can be done (even _should_ be done in some special cases), but most projects will be better served by prepackaged technology - be it RDBMS or Web server stack.

Darko Nikolic

2010-09-23 16:25:52
I think that the web applications of the future might be written in C++ language. It is a language primary used for desktop applications, web clients, and web services. It is not supposed to be used for the web, but...

It's all about the people who will try to develop a toolkit (like Wt), the companies which will support it and the consumers that will find it easy to use.

Everything that is done in ASP.NET, or PHP, or JSP, can be done in C++, that is not an issue. What is the price to do it today without the standard C++ web toolkit, that is another story.

So, basically, C++ will last and will be used for a long time, for sure. There is always going to be a dilemma whether to learn it or to substitute it with some other language which offers some more friendly programming API.

But, Wt is freely available... And the new ones are coming for sure. :)

Anonymous

2010-09-23 23:17:24
Very nice! Your work, which is minimalistic is both useful and inspiring. Keep it coming!

tntnet

2010-10-22 13:59:39
Ever heard of tntnet (www.tntnet.org/)? It is very easy to write really fast webapplications in C++ using tntnet.

Anonymous

2010-12-02 13:27:43
Wt FTW! A C++ library that even implements WebSockets.

www.webtoolkit.eu/wt

Mario

2011-02-08 19:30:55
Considering RIM writes their BES servers in C++ for Windows only, I don't think you are joking :D. (By the way I never understood why RIM has bought into MS culture, when MS is a competitor. A lot of developers I talk to at RIM are Windows only guys).

But honestly, I would question the ability to think critically of anyone who says their server should be written in C++ in this day and age.

First of all you would have to prove that your server is going to be CPU bound. Honestly, I have not seen too many things CPU bound in the last 5 years with the fast multicore CPUs always starved for data (and that includes some really large scale servers serving thousands of users). They are not even database server CPU bound, but are invariably I/O bound. Even if you have RAID of SSDs and gobs of RAM, your CPU running a typical server is still going to wait most of the time for data to come to it, and the user experience is going to be most impacted by network latency.

Second, you would have to demonstrate that you can do better in C++ (reasonable justification).

Even your example (pushing 1 GB of data) is not CPU bound, and if you implemented your server in C++ or Python or Ruby, or Java or Node.js you'd find similar times to move that data.

So, the question really becomes what is faster to develop in, maintain and add features to? Large C++ code base or a language that is designed specifically for the domain your problem lies in, in which the solution could be implemented with 10 to 100 times less code than in C++.

In this day and age, I would look into node.js or even python for writing specialty, high performance servers. node.js has proven itself and not too long ago set a record in requests served per/second.

Sai

2011-03-18 04:50:45
I am just knowing the basics of c++. But I want to know c++ in depth. Can you explain me more about webapplications using c++.

Michael MD

2011-07-16 03:08:48
Its so refreshing to see that there are other people in this world who are interested in slim and fast ways of doing things in a world where most people seem to think that buying more expensive hardware and using some bloated framework is the solution to everything.

Some people people think I'm crazy doing stuff for my website as cgi in c - but its so much faster! ... seeing pages of events listings (search results) come up in the browser in less time than it would normally take to load an interpreter (for any of the common web scripting languages) is addictive!

... and that is on a shared host as cgi using apache

Doing it in a language like c or c++ where you can compile a very tiny binary looks to me like a good way to go

- the less you need to load from the hard drive when someone hits a page the better!

portable? .. probably not (will at the very least need gcc and some system libraries) .. but its FAST!

Ok to be fair this is compared to scripts in an ordinary (shared) hosting situation using php, perl, etc not some high-end (as in too expensive to afford) dedicated box where interpreters/scripts/bytecode/data are cached in memory.

John S.

2011-07-22 14:10:12
@julian You seem to have C confused with C++. C++ has this thing called a string.

Even though this is tongue-in-cheek there is a lot of truth to be had when using C++ and a web framework like Wt.

Rick

2011-07-27 08:50:54
Java was a totally worthless language, but get the right corporate backer and write huge dysfunctional class libraries and there's no reason why C++ couldn't become C2EE.

Rick

2011-07-27 08:59:06
It's amusing to hear java fans disrespect C++ since java was written in it !!

Uli

2012-01-02 13:52:44
Don't chose between portability and bloat:

G-WAN (100 KiB), is a web server which offers C, C++ and Objective-C/C++ *scripts*... and which is much faster than Nginx and all others.

Pierre

2012-01-03 16:32:45
Did you take a look at the Poco C++ Libraries ?

It seems to be much more mature than a cppCMS or a cppSERV.

Dylan

2012-01-07 22:49:25
Take a look at BinaryTiers, is an interesting approach:

www.binarytiers.org

Jordan Stevens

2012-01-11 11:39:19
I have 25 years of programming experience from C++, to C# to java to php. I have to say there is great merit in this article. Truthfully C#, java,php all have so many disadvantages over C++, I am considering chucking them all in favor of C.

C++ is truly the portable language that can do everything. It's fast, flexible and frankly can be faster to develop in. There is this sort of myth that PHP is better for scripting. After 6 months on a PHP project, one really wishes it was C++ instead, as the complexity grows.

C# simply requires too much overhead and is restricted to Windows.

Java is a good choice, but the problem that Java solves is no longer relevent and fails with versioning and coherence.

The problem is HTML and Javascript. These are the awful things about the web. Two horrible technologies, which need to go. It all becomes spaghetti very quickly.

XAML is the Ideal UI, but unfortunately limited to .NET.

It's just not an ideal world, but if I had my way, the entire internet would run off of XAML and C++. However, that doesn't even exist at all, but should. I think if people wanted a functional language, they could do something like Google's Go.

Roland

2012-02-12 13:09:53
SQLite is also free in Germany. You can buy a license if you simply want to. But you are very welcome to use SQLite in commercial projects for free. The provided link about Public Domain in Germany is out of context.

BaussHacker

2012-06-12 09:03:46
@Jordan Stevens

With 25 years experience of programming and you've never heard of portability with C# using Mono?

Jason Burgess

2012-06-19 05:08:05
Haha, this post is so full of troll. Thanks for a good laugh!

Viren Shakya

2012-08-17 23:51:53
Thanks for this wonderful post. My friends were thinking I'm going crazy and need some pyschiatrist counselling (lol they were just kidding but you get the point) when I told them I'm implementing my current game server app entirely in c++ using nginx-fastcgi-sphinx-mysql stack. I'm SO GLAD there are other folks on this planet who think writing a webapp in c++ is not an insane thought.

And for all those Java kids here, I have just one thing to say: the design objective of C++ is one-line summary of what C++ can do that Java can _never_ do: "you don't pay for what you don't use" Period.

Vadim

2012-10-25 01:10:51
Very good article! Thanks for Google Books Ngram Viewer database link. Few years back I wrote similar code for fuzzy matching on trie using Java, you can see example of search using this code here: Wikipedia People Fuzzy Search: www.softcorporation.com/products/people

Johnathan C.

2012-11-12 19:01:35
Coming from a self-taught background in X86 Assembly and C, i did some C++ for some time and it was OK. I agree with a lot of the comments (previously stated), about how Java is bloated and all.. But if you really think about it C++ is getting there. Have you ever stepped through a C++ program that calls the STL? Now do the same thing with a C program that uses the ANSI C standard and see the difference. Also, with the new C++11 standard out, it just got bigger! Overall, i see some use for C++ on the web as back end software, but for developing website templates and scripts I would stick with languages more suited towards designing web applications. Just because web applications are layered on so many levels of abstraction, it's like trying to find the needle in the haystack (here the needle is the your computer's hardware). -- John

Dedalus

2012-11-20 10:56:29
My guess is that sooner or later some solution will make C++ web apps strike back. C++ is too powerful to be left behind. Just look at the history. Sun (now Oracle) promoted Java, Microsoft promoted C#, but both of them programming in C/C++ became like a sort of virtual owners of C/C++ and their products derived from were what we had to use. And who was promoting C++ ??? No one!!! Who was making those wonderful code-assisted IDEs for C++??? No one!!! and then Microsoft and Sun going to enterprises to divulge (sell) their languages and their virtues. Have you ever seen a C++ sales representative (from AT&T if you will) knocking at your door ??? And entrepreneurs looking for money (faster development) urged their employees to migrate to these new marvelous fast code-assisted frameworks. So I think the story is not over, C++ still has a lot to say and offer. After reading the above comments I perceive people deep down feel and know all this and particularly Java fanatics fear it.

Ludovic Urbain

2013-01-10 10:20:37
It's shocking to see how many lost souls think development in C++ is slower than in other languages.

For those who still lack a clue, you have every right to write every shortcut you might need in any language you like.

Lastly, C is still far better than Cpp today and has the major benefit of not supporting OOP, so why not ditch the ++ altogether ? Are there libs or tools that you require that don't exist in C ???

Ludovic Urbain

2013-01-10 11:07:57
It's shocking to see how many lost souls think development in C++ is slower than in other languages.

For those who still lack a clue, you have every right to write every shortcut you might need in any language you like.

Lastly, C is still far better than Cpp today and has the major benefit of not supporting OOP, so why not ditch the ++ altogether ? Are there libs or tools that you require that don't exist in C ???

KC

2013-07-22 08:19:44
Well, you have me convinced. C++ forever!!

Michael

2013-10-16 12:46:49
C++ is a definite candidate for developing powerful, modular software, especially for porting existing applications to a web context.

I've actually been developing a C++ web application framework over the last few years, and was recently asked by a friend to make an example video to summarise the "View" layer (it's an Model-View-Controller framework).

Essentially, the "View" layer is a template engine - much like Google ctemplate, which if you didn't know, is how Google's search results pages are rendered. Only the "View" layer in my framework is more expressive, much like a stripped back version of PHP. Seeing as both PHP and Java were developed in C/C++, such an abstraction of dynamic rendering should not seem novel. This allows you to change the HTML (or JSON, XML, etc) output without recompiling, which allows programmers to program and designers to design. (By the way, I believe PHP started out as a simple template engine, then features were added - functions, classes, namespaces, closures, lambdas, etc. In other words the language has evolved from a simple means of dynamic formatting to a fully fledged programming language, and, I believe is less suited to complex web applications when compared to C# or Java - or C++).

I agree with those who see the merits of C++ for web development, with the sheer power and expressiveness of the language requiring more skilled developers. This is a good thing, as it will help "raise the programmng bar". I see C++ coming back in a big way in the coming years.

Check out my video youtu.be/B7Uxbz_Ywa4

Email
steve.hanov@gmail.com

Other posts by Steve

Yes, You Absolutely Might Possibly Need an EIN to Sell Software to the US How Asana Breaks the Rules About Per-Seat Pricing 5 Ways PowToon Made Me Want to Buy Their Software How I run my business selling software to Americans 0, 1, Many, a Zillion Give your Commodore 64 new life with an SD card reader 20 lines of code that will beat A/B testing every time [comic] Appreciation of xkcd comics vs. technical ability VP trees: A data structure for finding stuff fast Why you should go to the Business of Software Conference Next Year Four ways of handling asynchronous operations in node.js Type-checked CoffeeScript with jzbuild Zero load time file formats Finding the top K items in a list efficiently An instant rhyming dictionary for any web site Succinct Data Structures: Cramming 80,000 words into a Javascript file. Throw away the keys: Easy, Minimal Perfect Hashing Why don't web browsers do this? Fun with Colour Difference Compressing dictionaries with a DAWG Fast and Easy Levenshtein distance using a Trie The Curious Complexity of Being Turned On Cross-domain communication the HTML5 way Five essential steps to prepare for your next programming interview Minimal usable Ubuntu with one command Finding awesome developers in programming interviews Compress your JSON with automatic type extraction JZBUILD - An Easy Javascript Build System Pssst! Want to stream your videos to your iPod? "This is stupid. Your program doesn't work," my wife told me The simple and obvious way to walk through a graph Asking users for steps to reproduce bugs, and other dumb ideas Creating portable binaries on Linux Bending over: How to sell your software to large companies Regular Expression Matching can be Ugly and Slow C++: A language for next generation web apps qb.js: An implementation of QBASIC in Javascript Zwibbler: A simple drawing program using Javascript and Canvas You don't need a project/solution to use the VC++ debugger Boring Date (comic) barcamp (comic) How IE <canvas> tag emulation works I didn't know you could mix and match (comic) Sign here (comic) It's a dirty job... (comic) The PenIsland Problem: Text-to-speech for domain names Pitching to VCs #2 (comic) Building a better rhyming dictionary Does Android team with eccentric geeks? (comic) Comment spam defeated at last Pitching to VCs (comic) How QBASIC almost got me killed Blame the extensions (comic) How to run a linux based home web server Microsoft's generosity knows no end for a year (comic) Using the Acer Aspire One as a web server When programmers design web sites (comic) Finding great ideas for your startup Game Theory, Salary Negotiation, and Programmers Coding tips they don't teach you in school When a reporter mangles your elevator pitch Test Driven Development without Tears Drawing Graphs with Physics Free up disk space in Ubuntu Keeping Abreast of Pornographic Research in Computer Science Exploiting perceptual colour difference for edge detection Experiment: Deleting a post from the Internet Is 2009 the year of Linux malware? Email Etiquette How a programmer reads your resume (comic) How wide should you make your web page? Usability Nightmare: Xfce Settings Manager cairo blur image surface Automatically remove wordiness from your writing Why Perforce is more scalable than Git Optimizing Ubuntu to run from a USB key or SD card UMA Questions Answered Make Windows XP look like Ubuntu, with Spinning Cube Effect See sound without drugs Standby Preventer Stock Picking using Python Spoke.com scam Stackoverflow.com Copy a cairo surface to the windows clipboard Simulating freehand drawing with Cairo Free, Raw Stock Data Installing Ubuntu on the Via Artigo Why are all my lines fuzzy in cairo? A simple command line calculator Tool for Creating UML Sequence Diagrams Exploring sound with Wavelets UMA and free long distance UMA's dirty secrets Installing the Latest Debian on an Ancient Laptop Dissecting Adsense HTML/ Javascript/ CSS Pretty Printer Web Comic Aggregator Experiments in making money online How much cash do celebrities make? Draw waveforms and hear them Cell Phones on Airplanes Detecting C++ memory leaks What does your phone number spell? A Rhyming Engine Rules for Effective C++ Cell Phone Secrets