Another Dumb Way to Start a Business Proposal

February 14, 2008 – 12:40 am
They just keep coming in. Subject: re: advertising proposal Hi, I am a media buyer at Medios One LLC (www.mediosone.com).  I am interested in buying inventory on your site.  MediosOne is a global online advertising network.  We have offices in 5 countries and many more support offices around the world.  Our publisher network model gives us access to large amounts of high  quality inventory from all types of sites, which are targeted to users in many geographic locations. Some of the advertisers we work with include ICICI, Make My Trip, Max New York Life,  Zapak.com, Colgate, Hewlett Packard, Tata Sky, AOL, Citibank, and  India Times. We are  currently looking for publishers to add to our network. Currently, we are running a good  amount of campaigns targeted to the US, Asia, South America, UK as well ...

Paint.NET is going to get 8-bit and 24-bit PNG support

January 28, 2008 – 11:32 pm
"It's about time!!!" -- Many users who keep pestering me for this I just finished about 90% of the code for adding 8-bit and 24-bit support to Paint.NET's PNG codec. Most of the work wasn't even in the PNG codec itself, but rather in adding IndirectUI support for FileType plugins. Once that was done, the extra PNG code just tripped and fell into place. I just really didn't want to write another WinForms widget complete with obnoxious layout and data binding. (dang, I was trying to add a screenshot, but Windows Live Writer refuses to cooperate, oh well -- I'll save it for later I guess?) To be honest, it's that laborious and error-prone WinForms code that was preventing me from adding this support over the last 2 years. After you write it once you realize that you just don't want to write and debug it ever ...

Heterogeneous Catch Clauses for CPS Exception Handling

January 25, 2008 – 2:01 pm
Well, that title is certainly a brain-full and won't win me any search engine rankings for popular query terms. Anyway, Nidonocu had an important question he posted on my previous post about the "Do" class: This looks like this could be quite a useful class but I was wondering how this might work when it comes to wanting to catch specific exceptions rather than just the base Exception type? I know from using FxCop that using ‘catch (Exception)’ is something Paint.net rather a lot and while I’m sure you sleep at night doing that, its something I’m trying to avoid in my own app. ;) Are there any simple ways this code could be tweaked to not use Exception? The issue is that the various TryCatch() helper methods only take a single delegate ...

"Use Paint.NET to Photoshop it"

January 23, 2008 – 11:19 am
I guess "Photoshop" really is turning into a generic verb, something that Adobe is undoubtedly unhappy about. I found this on a Q&A website, paraphrased for readability: Question: "My friend has pictures of her eyes, a different color that really stick out. It's grey and her eyes are bright blue or neon green. Please tell me how to do that." (Note: I believe they are asking how to take a picture of someone's face and apply a grayscale effect to only the eyes.) Answer 1: "Oh yeah, I've seen that but I don't know how to do that either ... let's read what everyone else has to say, I want to know too..." Answer 2: "use paint.net to photoshop it" I won't link to it so as to preserve their anonymity, but it's easy enough to find by ...

More on C# Continuation-Passing Style: The Full "Do" class

January 22, 2008 – 11:00 am
Continuing on from yesterday's post about simplifying exception handling code by using lambdas and continuation-passing style, I'd like to show off some other examples. Another common pattern in code is to generate a value, test it against some condition, and then have an if/else block to execute two other blocks of code dependent on that test. So, let's introduce the TryIgnore() and GenerateTest() helper functions with an example (see below for the trivial implementation). I want to generate a full file path for a log file, delete it if it exists, and then enable logging into that file for the later Windows Installer stuff that will be happening. However, if any of that fails I do not want an exception to be propagated because it isn't critical to the success of what I'm doing. Here's the old code: (I'm omitting the code that initializes the tempPath, dwMsiLogMode, ...

Continuation-Passing Style Simplifies Your C# Exception Handling Code

January 21, 2008 – 3:41 pm
Many lines of code in C# and other imperative languages are seemingly wasted by dealing with overhead such as exception handling and the like. How many times have you written the following type of code? string[] fileNames; try {     fileNames = Directory.GetFiles(...); } catch (Exception) {     // There was an error, like the directory isn't there.     // This isn't an error for us, so just use a 0-length array     // to simplify our later code     fileNames = new string[0]; } ...

How NOT to start a business "partnership"

January 16, 2008 – 12:34 am
Remember how I said I keep trying to write a blog post about bundleware, but I always get annoyed and it turns into rambling junk? (I mentioned this briefly in my previous blog post) Well, I just received this email from Yazzle.net or something. Dear Getpaint, [sic] I represent Yazzle.net. My company is looking for new business partners to bundle our free bonus software. We want to pay you up to $0.80 for every download you bundle our bonus software with. We pay several of our partners over a thousand dollars a day. We offer products relevant to your site demographics. We believe that you can dramatically increase your revenue and simultaneously improve the experience of the visitors to your website. Please give me a call at (phone number removed) to discuss or contact me at (removed) on aol ...

How much is Paint.NET worth?

January 15, 2008 – 2:32 am
I was reading over at John Cow (yes, Cow, not Chow!) how he turned down an offer for $30,000 to buy his blog outright. The blog's income is about $3,500 per month from advertising sales. I think John made the right decision, as he'll easily make more than $30,000 over the next 6 months. It got me thinking though, what is Paint.NET worth? My projections for 2007 earnings at the beginning of the year were 1/5th what I actually finished the year at, so it's a good thing I didn't sell then (not that I had an offer!). Even if this year is up 5% from my year-to-date projections I'll be happy. (Yeah yeah, projecting from 2 weeks to a full 12 months is a bit of a stretch…) If you ask the individuals who've donated to Paint.NET, then it's worth anywhere from $0.01 to $250. Those are my favorite e-mails by ...

Paint.NET v3.22 is now available

January 12, 2008 – 8:22 pm
It's that time again: a new version of Paint.NET! This release fixes a few minor bugs and adds a new, much-needed Reduce Noise effect. You can download it from the website at http://www.getpaint.net, or use the built-in updater by clicking on Help -> Check for Updates within the application. Changes: New: "Reduce Noise" effect. Changed: Ctrl+W will now close Paint.NET if zero images are open. Fixed: In Windows XP, when launching web content, sometimes Internet Explorer was used instead of the user's chosen default browser. Fixed: The Unfocus effect was not handling alpha values properly. Fixed: The Brightness / Contrast adjustment was only displaying its text in English. Fixed: The /auto parameter for the installer now correctly allows for an automated installation. This was inadvertently broken in 3.20. Enjoy!

Paint.NET v3.22 Beta 2 is now available

January 4, 2008 – 4:57 pm
There weren't many changes for this update, but they're all in the installer so I felt it was very important to get wider testing before trusting the code enough for a final release. Anyway, as usual you can get the update from the website at http://www.getpaint.net/ or you can use the built-in updater from the Help -> Check for Updates menu item. You will need to make sure that "Also check for Beta releases" is enabled, by clicking on the "Options" button after clicking the "Check for Updates" menu item. Changes since Beta 1: Fixed: Some uncommon installer bugs Fixed: Very poor performance during installation or updating, sometimes causing the removal of the previous version to take 20 minutes Enjoy!