Trying out Kontera advertising

I just signed up for Kontera’s in-text advertising program. I’ve put it on the main Paint.NET website and on the help content. It seems pretty unobtrusive, and hopefully it will help out the bottom line. Maybe it will increase revenue 5%, 10%, maybe 50%? (That would be exciting!) Who knows! I won’t know unless I try.

I’m trying to convince Terrence to try Kontera on his blog, but so far he’s resisted my manipulative logic. So I pointed him to John Chow’s sage wisdom about when you should put ads on your blog. Maybe he can make double what AdSense is sending his way, which is to say … nothin’ so far. (which is fine since he doesn’t have much traffic yet) But at least it’s greater than or equal to zero.

And don’t worry, the Paint.NET software itself is still advertising free. One directive with Paint.NET is to provide software you can use without having to feel embarrassed about it. “Hey look, your paint program has ads! Haha!” Yeah, no. Having ads inside a client application is not something that’s really been done well yet, in my opinion. I have ideas on how to do this, but so far they’re not ones that I can share.

Like I Said: Releasing Often = Success

Back in September I posted a tip stating that freeware authors should release frequent updates to their products. I claimed to be practicing this tip myself, and that it was working. A constant stream of updates creates a constant stream of press and blog coverage. Someone who sees two bits of news about Paint.NET is more likely to try it out than if they’d seen only one bit of news.* I personally don’t recommend going the uTorrent route and updating two new builds every day though – that seems a bit too much. Why should I even bother updating when a new release is just hours away? However, I’ll bet their ad revenue is higher than mine, so I’ll keep my mouth shut beyond that 🙂

For the last few weeks I have been aggressively pushing out pre-release updates to Paint.NET v3.20 (one update per week!), and so I have some new data. Today (or rather yesterday), November 20th, 2007, was my 4th highest traffic day ever as reported by Google AdSense. The #1 and #2 days were right after the huge v3.0 release at the end of January. The #3 day was at the end of March after v3.05 was released. And because of all the new ways I’ve optimized my AdSense, today’s earnings were significantly more than double the average of those 3 days’ earnings: more clicks, much higher CTR, and significantly higher eCPM. Just like John Chow says, there’s really only one secret formula: get traffic, optimize ads. It’s true, and everyone with a monetized website knows it.

As far as data I can actually share**, Google Analytics states that today there were 17,412 unique visitors to http://www.getpaint.net :

Including the help content and other areas I track separately, there were over 24,000 unique visitors. This is obviously chump change to anyone who runs big websites for a living (imagine how much traffic I’d get if I really, really tried). I’ve always wondered how much money one could make if they were able to sneak their AdSense code on to the front page of Google.com or Microsoft.com … even if just for one hour!

My prediction is that with the next beta release, which I should have out by end of next week, I’ll break this record. And we’ll be that much closer to another stable, quality Paint.NET release …

* Just another theory of mine. I could be wrong, but probably not.

** AdSense’s Terms of Service are pretty strict about not sharing most of your statistics other than gross earnings.

Terrence Follows My Advice, But Will He Double His Money?

A friend and former co-worker of mine, Terrence, has started up a new blog called Double Journey. His goal is to double his money from $20,000 to $40,000 using any legal means at his disposal. So far he’s in the hole by almost $100 because of website hosting and domain costs, although that isn’t really a big deal.

Terrence and I have talked extensively about money-related matters over the past year, usually while eating sushi. It’s no secret that I want to be able to retire* as early as possible (like most people!), and I talk a lot about how I make money with Paint.NET even though I’m giving it away for free. I talk about all the reasons why I don’t want to charge money for it. I talk about traffic levels, click-through rates, audience and user base size, ad placement and flow optimization, statistics, etc. I probably talk about it way too much, in fact – maybe I just like to hear my own voice!

Regardless, there’s a few things that I’ve realized over the last few years that I’ve managed to cram in to his head (or down his throat?) over the last year. Namely, that doing something is always better than doing nothing. Even if you don’t make any money on what you’re doing, I can guarantee you’re at least learning something (heck, universities charge thousands of dollars for that!). It may be that you’re learning what doesn’t work, which has its own value. So Terrence came up with an idea and started up this blog, and has been writing posts every day or two for the last few weeks. He recently put up a donate button of his own, and I am quite sure that’ll he’ll make at least $0 from it. This is something I did with Paint.NET in 2006 and I can assure you I’ve made much more than “at least $0” from it. It’s even my #1 tip for freeware authors. (sorry, I still don’t feel comfortable sharing my revenue numbers)

I do think his post regarding his donate button could use a little work, mostly for SEO purposes. Maybe he can get his cat featured on I Can Has Cheezburger? or Cute Overload though.

Do you really want this cat to go hungry? Do you realize by not giving money, you are killing this cat? You can help save this cat by clicking the “donate” button in the right column.”

Terrence has also crammed some important ideas into my head. Namely, that saving money is a smart thing to do! I realize this sounds obvious, but for the longest time I really didn’t have any money in savings: I’d pay rent, make my car payment, buy some DVD’s, etc. My checking account was at equilibrium and wasn’t really going anywhere. I was still in “college kid mode”: I lived, I ate, I bought toys. I didn’t think about my financial needs past the next big computer upgrade. Over the last year I’ve moved past this and finally have enough money to necessitate spending some effort in managing it. I have a large spreadsheet in Excel where I track all my major expenses and incomes. I even met with a financial planner today and he had some good advice that I’ve already started implementing (“put more money into the 401k!”).

Will Terrence double his money? I hope so, because then he’ll be obligated to buy me lunch at Sushi Land. Be sure to go and read his blog, and maybe even send him a dollar so his cat can eat more gourmet food. And then you can send me a dollar 😛 (or 10, or 20, etc… although I prefer Euros!)

* “Retire” in this case really means “have enough money to obviate the need for a day job.” For example, if you have $20 million in the bank and are earning an ultra-conservative 5%, then at the end of the year you can take 1% of that as income ($200,000) and let the remaining 4% ($800,000) stay towards keeping up with inflation. At that point you really don’t need to have a day job.

Paint.NET v3.20 Beta 1 is now available

You can get it either from the website, http://www.getpaint.net, or from within Paint.NET itself via the auto-updater. Note: Make sure you have “Also check for beta releases” enabled. You can access this option by going to Help -> Check for Updates, and then clicking on the “Options” button.

Please be sure to report any compatibility problems with plugins.

Changes:

  • Note: New features will be displayed in English through the Alpha and Beta release(s). The final release will include full translations for the other supported languages.
  • Improved: Updating performance should now be faster. It used to be the case that two system restore points were created during update (one for uninstall, and one for re-install), but now only one is created to cover the entire transaction.
  • Changed: Ctrl+Alt+0 now works for “View actual size”. This is not listed in the View menu as a shortcut, but should help those used to keyboard commands from Photoshop, etc.
  • Changed: Some plugins that were causing stability problems are now blocked from loading. They will show up in the File->View Plugin Load Errors dialog.
  • Changed: Old effect plugin DLL’s that have since been integrated into Paint.NET (Glow, Portrait, etc.) are now blocked from loading.
  • Fixed: For revamped effect configuration dialogs, the first textbox is now auto-selected instead of the OK button. This makes keyboard usage more convenient.
  • Fixed: Close/Cancel button flickering while downloading an update
  • Fixed: The floating tool windows (Tools, History, Layers, Color) will double-check that they are on-screen when they are toggled on/off
  • Fixed: If two images had the text tool active and both had active text being edited, then Backspace would not always be routed to the correct image
  • Fixed: Open/Save dialogs in Windows Vista with high-DPI would sometimes have garbled thumbnail rendering (fixed by adding “high DPI aware” flag to EXE manifest instead of using SetProcessDPIAware function)
  • Fixed: Some minor high-DPI glitches in new UI features
  • Fixed: For newly revamped effect configuration dialogs, the focus rectangle (“dotted rectangle”) for sliders is drawn only when necessary
  • Fixed: Several rare crashes

Enjoy! I’m off to play video games for once. I still haven’t passed the first level of Halo 3.

Paint.NET v3.20 Alpha 2 is now available

Get it either from the website (http://www.getpaint.net), or from within Paint.NET itself. Note: Make sure you have “Also check for beta releases” enabled. You can access this option by going to Help -> Check for Updates, then clicking on the “Options” button.

Please be sure to report any compatibility problems with plugins! Note: The new plugin system is still subject to change. Plugins written for this alpha are not guaranteed to work with the Beta or Final releases (although I will of course do my best to avoid breaking things).

  • Note: New features will be displayed in English through the Alpha and Beta release(s). The final release will include full translations for the other supported languages.
  • Fixed: Paint.NET would crash if you clicked on the “start cap” or “end cap” buttons for the Line/Curve tool*
  • Fixed: Using Sepia would produce a result identical to Black & White, and would also mess up the undo history
  • Changed: Tolerance slider control is now 25% wider as per request on the forum
  • Changed: Improved the Magic Wand cursor
  • Changed: Improved the Paint Bucket cursor
  • Fixed: OnSetRenderInfo() was being called twice for effects that use the new property system
  • Fixed: Soften Portrait allows “0” for the Softness value again
  • Fixed: Tweaked some of the slider controls in some of the revamped effects
  • Fixed: Compatibility with several plugins

* You would not believe how many e-mails I got about this crash! Good thing it was just an alpha relase!

Sepia is broken in 3.20 Alpha

A forum member who goes by the name Myrddin was quick to point out that the Sepia adjustment has a bug. It does two things … one, it seems to produce a result equivalent to the Black & White adjustment. And two, if you undo it, it doesn’t produce the right result. It breaks the history system, essentially.

So, just to warn everyone. The 3.20 Alpha is way cool (not that I’m biased), but stay away from Sepia for now. I’ve found the bug, and the fix will be in the next update. Thanks for your patience.

Paint.NET v3.20 *ALPHA* is now available

Get it either from the website (http://www.getpaint.net), or from within Paint.NET itself. Note: Make sure you have “Also check for beta releases” enabled. You can access this option by going to Help -> Check for Updates, then clicking on the “Options” button.

Please be sure to report any compatibility problems with plugins!

Change log:

  • Note: New features will be displayed in English through the Alpha and Beta release(s). The final release will include full translations for the other supported languages.
  • New: Ability to do ‘Fixed Size’ and ‘Fixed Ratio’ selection drawing with the Rectangle Select tool
  • New: Added selection ‘combine mode’ (replace, add, subtract, xor) to the toolbar. This makes this feature much more discoverable.
  • New: Added magic wand / paint bucket ‘flood mode’ (contiguous, global) to the toolbar. This makes this feature much more discoverable.
  • New: Mandelbrot and Julia fractal render effects.
  • New: Implemented new property and UI systems that makes it much easier to develop effect plugins. Authors may now specify properties with default, min, and max values and the UI for this will be dynamically generated. (instead of the author having to spend hours writing WinForms code)
  • New: Better error handling for plugin effects. They will no longer crash Paint.NET, and will provide easier access to the diagnostic and support information.
  • New: If a plugin fails to load, then a “View Plugin Load Errors” item will be added to the File menu.
  • New: Added ‘Coverage’ property to the Add Noise effect.
  • New: Added ‘Center’ (offset) property to Radial Blur, Zoom Blur, Bulge, and Twist effects. This allows you to set the center of rendering, complete with an image underlay preview.
  • New: Added ability to do counter-clockwise rotation in the Twist effect. Also added ability to change the size of the twisted area in the Twist effect.
  • Changed: In Frosted Glass effect, the performance was highly optimized. Increased max radius to 200 (instead of 10), and added ‘minimum scatter radius’ and ‘smoothness’ properties.
  • Changed: Enhanced all built-in effects and adjustments (except for Layers, Curves, and Rotate/Zoom) to use the new effect UI system.
  • Changed: Reorganized Effects menu into categories: Artistic, Blurs, Distort, Noise, Photo, Render, Stylize.
  • Changed: Command link buttons now look better in Windows Vista.
  • Changed: Moved ‘Median’ from the Blurs menu to the Noise menu.
  • Changed: Rendering for the ‘angle chooser’ control is nicer now.
  • Fixed: Header label flickering in some parts of the UI.
  • Fixed: Some window activation issues with the Save Configuration Dialog if you switched to another program and back while it was open.
  • Fixed: Some buttons and checkboxes were not honoring the theme animations in Windows Vista.
  • New: Added text to installer to remind people that Paint.NET is free of charge, and if they paid for it (other than to donate), then they should ask for a refund (e.g. eBay swindlers).

Note: The new plugin system is still subject to change. Plugins written for this alpha are not guaranteed to work with the Beta or Final releases (although I will of course do my best to avoid breaking things).

Update on Suspicious Donations

Earlier I wrote that I was receiving many small, suspicious donations. I notified PayPal about the issue, but unfortunately I only got a form-letter response back (and it took a week to get it). I refunded every single suspicious donation, and was getting worried that the refunding would then flag me as some participant. So I started including comments in the refunds to notify the individual that I had reported the activity to PayPal and to STOP IT. There was no “please” or politeness in my wording, but there were also no accusations or anything.

Finally, today I got an e-mail directly from the individual.

    Subject: Sorry

    Definitely no more such donations.

Hopefully that means it is done. I don’t know if the individual was actually trying to send me small donations and did not understand that PayPal takes 100% until you reach about 35 cents, or if it was an attempt at gaming or fraudulent activity. As long as this is the end of it, I consider this case to be closed.

Money Making Tip: Accept Euros

Yes, for goodness sake.

This may seem obvious to anyone who’s been following the financial market in the slightest, but if your bank accounts are in USD$ then it is to your advantage to also find a way to directly accept EUR€ (euros). Case in point: the other day I received a donation for 20 USD$. After PayPal’s cut, this worked out to a net of $19.12 (4.4% in fees). I also received a donation for 20 EUR€ recently, which was 18.87 EUR€ after PayPal’s 5.65% cut , but $26.59 after currency conversion – a 32.95% gain (sort of). PayPal will always convert currencies when necessary, but you’d rather have them do the conversion as part of depositing into your account, instead of as part of withdrawing from someone else’s account.

For the individual who sent this donation, it is psychologically equivalent as it was for the other person who donated in USD$ (I claim no proof here, merely hunch and insight that could be proven wrong). In other words, twenty is twenty.

I currently ask for a donation of 10 USD$ on the Paint.NET donation page, which is a nice round number. If you only set up your PayPal buttons for receiving USD$, then individuals whose PayPal accounts are in EUR€ will still type in “10” and then be pleased that they are, in effect, getting a discount after the currency conversion. They generally will not go to the trouble of looking up the conversion and typing in $14.45 instead.

However, this convenience holds for the converse as well: if they are presented with the opportunity to type a value in EUR€, then they will type in 10 instead of doing the back-conversion from 10 USD$ to 6.92 EUR€. This is a gain of $6+ for you! (well, for me in this case) This isn’t cheating users at all! They know full well that they are donating in EUR€! And people who are donating are people who are already happy with your product or service, and they’re generally more than happy to help you out.

On my Paint.NET donations page I put up buttons for USD$, EUR€ (in 4 separate languages), Yen¥, and CAD$. I don’t receive many donations in Yen¥, and it certainly makes it exciting to open my inbox and read that I have received a donation for 1,000 ….. Yen¥. D’oh 🙂 It works out to be less than 10 USD$, if I remember correctly.

Anyway, so that’s my theory. Nice round numbers are still nice round numbers, even if they get mangled after the currency conversion. If you directly accept EUR€, then you will make more money. Plus it’s just convenient for the users.

Lastly, thanks to everyone who has sent in donations for Paint.NET. They really do make a difference, and I appreciate them all!

Paint.NET finally gets error handling for plugins

For the longest time, any unhandled exception in Paint.NET caused a generic “Oops sorry, go check the crash log on your desktop” error dialog. It’s not really that helpful, and it always points the blame in my direction even when it’s a plugin’s fault.

So, for v3.20 there is a real error dialog for this! If you’re running an effect or adjustment plugin and it doesn’t handle an exception, you’ll get the following dialog instead.

(quick digression: yes, command link buttons in v3.20 now look more like “real” command link buttons in Vista)

Clicking on the Error Details button will show the user details such as the file name of the plugin, its name, and the exception text. If the author implements a [PluginSupportInfo] attribute tag on the effect type and/or assembly, then additional information will be displayed such as author, copyright, and website URL.

If a plugin fails to load, you’ll get this:

Clicking on it reveals the reason why, although this text is really meant to serve as diagnostic information for the plugin author. I don’t expect non-developers to care about most of this except for maybe the file name.

In this case, Ed’s Surface Blur effect was deriving from a class in PaintDotNet.Effects.dll that was really only supposed to be used internally, and that is now using a different base class in v3.20. So his code is all confused and he will need to release an update. The other 10+ effects in his DLL’s still work fine though 🙂

Anyway, hopefully this will relieve my inbox a little and I won’t receive crash reports for plugins anymore.