Vista SP1 is coming....

I noticed tonight in the Thoughtex logs some records showing a brand-new windows version - Microsoft Windows NT 6.0.6001 Service Pack 1, v.245 (this is getting returned by System.Environment.OSVersion in .NET) AKA Vista SP1. It looks like thoughtex runs fine on the new version of Vista. I can’t wait for the proported performance improvements in SP1. »

Could you go live with less than 600 lines of code?

37signals did when they released ta-da list back in 2005. You read that right, not 60K or 600K but instead a commercial project in <600 lines of Ruby code. When I first saw this number I was incredulous – I’ve written stored procedures that are longer than that. My current project has more lines of configuration (and maybe even more configuration files..OK, maybe not) than that number. I’ve even written console apps in notepad, and compiled from the command line with more lines than that, because I thought they were so small they didn’t need a whole .sln and .proj file, and yet here are 37signals going live with a product that is just 579 lines of Ruby.
They had a number of things in their favour, which presumably allowed them to do this:

  • They wrote the rails framework, and thus presumably knew how to get the most out of it. The equivalent in the .NET world would be Scott Guthrie and Nikhil Kothari getting together to write an ASP.NET task tracking application.
  • They situated their product squarely in terms of the solution technology domain. They didn’t need (or more likely chose not to use) any custom widgets. Spitting out simple HTML is not hard. Building large and complicated controls that have to maintain state between requests, render differently on different browsers and handle complex validation is.
  • This number is just the Ruby code, not the associated CSS, JS etc.

Even considering these caveats, I think this is still an amazing accomplishment, which takes minimalism in “production” code to a whole new level. This got me thinking – I have a few interesting product ideas from time-to-time. What is the absolute minimum amount of code I could write that would make that work? If I’m prepared to operate within the constraints of the platform (whatever that is) how much effort would that save me? How many more “interesting ideas” could I turn into working products if I was prepared to follow these constraints? How many more cool/useful things could you build if you promised yourself that each one would only be 600 lines of code?

Comments

lb
Great idea!

i like to think that removing 20% of the features reduces the development time by 50%.

the other night i wrote a ‘production’ app (the world’s simplest code generator [javascript edition])[http://secretgeek.net/wscg.htm] in a few hours and published it next morning, because it was so deliverately feature-starved – maybe 20 lines of real code.

meanwhile the desktop version of this same product has been on my backburner for over two years now. it’s feature list is massive – and it will probably never get off the ground. Elephant, yes?

being proud to head for the simplest implementation possible is a real benefit.
16/08/2007 5:32:00 PM
Jarrod
I didn’t know that fact about 37signals, but Rails’ ease is why I’m trying it on my first commercial product, even with six years ASP.NET experience.


Thanks for this reminder of KISS - I think I had already designed in a kitchen sink!
24/08/2007 8:13:00 PM
Loup Vaillant
The earliest versions of Xmonad were less than 500 lines long. And it is a fully fledged window manager. As far as I am aware, the code base didn’t grow much since (at least for the core application).

As the name suggest, it is written in Haskell. Their hompage is here: http://xmonad.org/
25/01/2008 5:27:00 AM
max
It would have been shorter and faster if they had used

www.web2py.com

even taking into account that you can cheat with rails, because ruby allows to put as much code as you want in one line.

Massimo
25/01/2008 8:19:00 PM

»

Perfecting Paul's Painless Process for Preparing a Presentation

Paul’s periodic persisted perceptions, predictions, postulations and punditry have previously pertained to his patented process for perparing painless, poignant presentations. I use a slightly different version of Paul’s process, my modifications are in red below:

  1. One month away: Blog about it, generate as much hype as possible, invite everyone I know to the talk.
  2. Three weeks away: Promise myself to start preparing soon. Decide that the presentation would really rock if it wasn’t done in powerpoint, but in your own “presentation framework“, afterall - powerpoint doesn’t have a 3D video carousel widget now does it, and that is what your presentation REALLY needs.
  3. Two weeks away: Promise myself that I’ll get to it this weekend stop fscking around with the “custom framework“ and start writing slides really soon,  as it’s the last weekend I will have before the presentation.
  4. Weekend before the presentation: Convince myself that custom 3D transitions between slides are what your “presentation framework” really needs the talk is still days away, and I can prepare it on weeknights.
  5. Two days before the presentation: Convince myself that it the slides can wait until tomorrow night.
  6. Night before the presentation: Panic! Stay up until at least 3AM the next morning preparing. Promise myself to start preparing sooner next time!

See you all at Tech.Ed Australia. I’ll be the one that looks really, really tired.

Comments

lb
regarding: "custom 3D transitions between slides"

(hmmm - must state this gently…)

a caveat for future presenters:
the frame rate of the projected is different to that of your own laptop. Hence, the 3D transition generally appeared as just a kind of "glitch" between the slides. I saw them on your laptop later and thought "oh! so that’s what those weird flickers between the slides were?"

Maybe if they’d run at about 1/10th the speed it would’ve beaten the audience about the head sufficiently to see it.

11/08/2007 7:12:00 AM

»

More SmartClient PC Stats

A few months ago I listed a high-level breakdown showing what the typical client PC specifications from the users of my WPF mind-mapper thoughtex. Valve software, makers of games like half-life etc have much more detailed results from a survey of theirs, which (not surprisingly) has a lot more data points - almost 1 million. I find data like this great, because it allows you to plan more objectively around what the real world looks like, and not personal biases (I always think of that cartoon in chapter 8 of “don’t make me think“ - “People don’t like pulldown menus“). I wasn’t able to find any more information on how the data was collected (via the Steam client perhaps), and who the sample was made up of  but it provides some interesting info. For example I can’t believe only 3% of people have multi-monitor setups, or is there some kind of gaming bias there, since many games don’t work too well with multiple monitors? Nobody is moving to Vista? - not according to the Valve survey, which give vista a 7% market share. And who are the two lucky samples with 4-way SLI graphics rigs?

Comments

Alex Salamakha
I think moving to Vista numbers are reasonably accurate. Out of all the people who moved to Vista that I know, 99% are working in Microsoft development space and 1 home user has just bought a new computer from Dell and when asked about which OS was told by a .Net developer - get Vista :)
Most of other people I spoken to say either "Let’s wait for SP1 or even SP2 first" or "What does Vista give me, really, except for a new look?"
You know what, I understand them - why would a home user bother paying few hundred bucks in order to slow his computer down a bit and introduce to potential problems?
Developers in MS space (like us) need latest and greatest for the platform, but at the same time I don’t know a single Java or Ruby guy who moved to Vista. And that’s developers.
1/08/2007 3:29:00 PM

»

Advertising-Sponsored Applications – How I learned to value my time at -24 cents per hour, and like it

Thoughtex, my mind-mapping/brainstorming application written in WPF was launched about 3 months ago. Thanks to some generous linking by the likes of FrankArr (we’ll miss you Frank) and a few others it was downloaded many thousands of times. By all accounts a great success for a free product, but that is only half the story.

The other half is the money side. Although I developed Thoughtex mostly for fun, and released it for free, I had an idea of how to commercialize it by building in contextual advertising. The idea was this – as you’re making a mind-map Thoughtex shows you links to various kinds of related things: web pages, images, books, files on your local file-system etc. If you see a book that interests you, and you buy it from Amazon I make a few dollars. After all, I reasoned, you’re clearly interested in a particular topic because you’re creating a mind map about it. Surely a few people will click on those book links and buy books? It seemed like a cool way to monetize software – users would be served useful contextual ads, and I could grow filthy* rich in the process. Also it removed a significant barrier to end-users trying out a piece of software.  They wouldn’t have to go through the rigmarole of paying for it, and I wouldn’t have to worry about collecting the money, which would be surely coming in vast amounts. No more nagware or trial versions that expire after 30 days or only let you create a really simple file or whatever. Just pure software development and revenue.

Except it didn’t work.

I should have seen the writing on the wall. I showed the app to several people, mostly developers with a bit of a commercial bend to them. All of them said I should charge money for it. The whole “perceived value” thing. “You can always lower the price later” they said. I wanted to give this alternate model a try. Certainly lots of web-sites are created to be funded by Google AdSense# revenue, but I hadn’t seen this done many times with software.

Sometimes, when everyone says you’re wrong you’re not a mogul or a visionary, you’re just wrong

Since Thoughtex went live I’ve earned exactly 66 cents from its contextual advertising, from exactly one sale of a Logitech Attack3 Joystick.

If you bought that Joystick through Thoughtex I’d love to send you a thankyou card, but at this point I probably can’t afford to. Based on my domain registration costs and hosting costs, and the time I estimate I have spent on it (roughly 100 hours) I’ve lost about 24 cents every hour I’ve been working on it.  Development on Thoughtex and feature planning continues. The dreams of earning a small income from the advertising revenue were only a fun sideline to the joys of the main event -  trying out cool stuff with WPF. Who knows – some small tweaks to the UI could make “clicking on books” more attractive, which could lead to more sales, but at this stage I’ve told my wife that unless there is a dramatic change in the mind-mapping industry I won’t be going into early retirement. I’d love to hear of other people who have tried this model to fund their application development, and also to act as a cautionary tale to others who might be contemplating the same thing.

* For very small values of filthy rich.

#AdSense can’t be used in rich-client applications. It violates the Terms of Service. Opera came to some kind of special arrangement.

Comments

Michael McKee
I like your approach very much. I have been mind - mapping using Inspiration for about 15 years and love the process. A clos friend Mr. Lev Kacnelson (Russian born Israeli) has a dynamic web services firm that I think you should talk to about your invention/software/concept. If you are interested please email me at [email protected]
11/07/2007 6:15:00 AM
lb
ah, it’s good that you lived to tell the tale though. Lots of learnings in this old business!
24/07/2007 11:18:00 PM
mcgurk
I have it, and have used it a couple times. The problem is that mind mapping software stinks. You have to come up with those friggen thoughts in order to map them.


Tho, I still have it installed on my work machine. Lemme run it. (load load load where’s the loading screen?) Aaah, new mind map. K.


I need to do some research on the Provider pattern for a rewrite coming up. Let’s start a new map for research.

Already have three new subtopics as I tend to click on UI like a retard. Damnit, how do you delete these things? Agh! another new subtopic! Delete, shift-delete… do I drag it to the trash bin? Oh, jeez. Lemme check the help. PWNED! No help. Screw it, new mind map.

K, research. Worked. Now, add a subtopic for Providers. Great. Huh, related… Health care providers. Sucks to be me. Guess its an OR search. And only the title is searched for.

Let’s add the Application Block Software Factory as a subtopic of provider pattern implementations. Anything worth while related? Nope. Not even one hit with the P&P group. How about if we surround the title with quotes? Aha! No, wait… what’s that??? A T-Shirt with TUX ON IT???? Aaah, screw it.
20/08/2007 10:42:00 AM

»

It’s Been a Big Week – ReMix in Melbourne and WPF training in Brisbane

This week has been a big one for me – I flew down to Melbourne last Sunday for rehearsals for ReMix 07. My rehearsal stank, and I was pretty worried about how my talk was going to go. I spent most of Sunday refactoring and practicing before going to the speaker’s dinner, where I spent most of the evening listening to Frankarr and Cameron Reilly talk about a bunch of start-ups and industry pundits I hadn’t heard of, people in the local industry I didn’t know, and television shows I hadn’t seen. »

Seattle P-I Reader Installation Woes

I’m doing a presentation on WPF at remix07 in a few weeks (YIKES!). I wanted to download one of the “reader“ family of WPF applications (NYT reader, Seattle P-I reader) to show the great reading experiences that can be created using WPF. I chose the Seattle P-I reader, since the NYT one is nolonger free and I thought I would have less head-aches with the Seattle P-I one. Unfortunately this was not the case. »

This is how REAL programmers patch systems

I was investigating an OutOfMemoryException today that occurred in a production intranet system. Fortunately by leveraging smart people like Joel Pobar the cause didn’t stay a mystery for very long (and we didn’t have to resort to the usual vadump and ADPlus route), and luckily the fix was as simple as changing a single Boolean parameter from true to false on one framework method call. We had a good repro in one of our test environments, but because of the vagaries of the build and deployment process it looked like it was going to be a bigger-than-expected deal to patch and re-deploy to verify the fix in the test environment. “But it’s just ONE assembly” I protested “surely we could just ILDASM , modify and then ILASM it”. So that is just what I did. It took a little longer than expected because I was a little disconcerted by the fact that the ILASM’d assembly was a few KB different in size to the original one. After reading this post by Kenny Kerr I felt relieved, and was ready to deploy my patched dll for testing, which went off smoothly.
Next came discussions of production – we didn’t have a scheduled outage where a properly build and patched version could be deployed for a few days. Joel, possibly mildly impressed with my ILASM bravado cooked up this proof-of-concept “zero downtime” approach involving WinDBG and modifying the JIT’d x86 code on-the-fly to show me how a REAL programmer does it. Yup - attach WinDBG, trace through a few memory addresses, modify one memory location and you’re good to go. Just to be clear, we never actually DID this (the WinDBG stuff), not even in testing, but I think Joel has shown us the way forward next time one of our managers asks how much downtime is required to patch a system.  Thank goodness for clusters and NLB, otherwise we all might have to actually know how to do this.

Comments

Steve Loughran
Apache ant has the <ildasm> <ilasm> tasks so you can decompile, patch and recompile as part of your automated build process. Sometimes even if you do have your build under control, you can’t stop tlbimport from screwing up the import, so patching is all you have left…
4/06/2007 1:44:00 PM
Paul Glavich
If you just compiled straight to production, and didn’t worry about all that testing/uat garbage, you wouldn’t have to resort to that black art voodoo … ;-)
5/06/2007 6:13:00 AM

»