Good results with Visual Studio 2008 so far

I installed the 90-day trial of Visual Studio 2008 Professional and have just finished getting Paint.NET to work in it. So far, here’s what I’ve run in to, good and bad:

  • The new version of the C# compiler (csc.exe) produces slightly smaller binaries in a few cases. This is good.
  • It can also understand “Vista icons”. That is, you can embed a 256×256 icon with PNG compression into an EXE. With Visual Studio 2005 you could have a 256×256 icon but not the PNG compression or you’d get a compiler error.
  • Apparently the order in which items is returned via reflection has changed. This in itself is fine, but it has exposed a logic bug in my IndirectUI code! It’s a rather subtle bug that is very obvious once you understand it. This was a case where things were accidentally working because “A” had a superset of the properties that “B” had, and my system was always taking the first item’s list of properties and using it for both (which was the bug). Now for some reason, “B” comes before “A”, so “A” is only getting the 2 properties that “B” specifies instead of the 7 that “A” is stating. Oops.
  • They fixed the build parallelism bug that was really biting me! In Visual Studio 2005, the part of the build which created MSI’s using the built-in “Setup Wizard” project type would not block the rest of your build which was properly flagged as dependeing on it, from building. This caused a major race condition for building the MSI and then building the self-extracting EXE that bundled it. To work around that I had to set the maximum build tasks to 1. Now it works great!

These are all good for me. Faster build times and smaller files to distribute.

Follow up for Slashdot and Source Code Release

First off, welcome Slashdot readers! 🙂 http://developers.slashdot.org/developers/07/12/15/1332207.shtml

I just got done approving all your comments after waking up from a nice 10 hour sleep (yay weekends). Many are supporting, some are not so kind. I’m approving any comment that is non-spam (“free casino games!”), although if there are cuss words I am redacting those portions with asterisks. I’m not trying to censor discussion that I disagree with, in other words.

Anyway, to clarify: I am not closing Paint.NET’s source code. I am still releasing the source code for Paint.NET v3.20. I have the zip file right here (well, 7z file ;)) and I just have to wake up first (not want decaf!) and do uploadings and e-mails and HTML stuff to publish it. The only thing being removed is the installer, and the translated string resource files. The license has changed to move the resource assets under a Creative Commons license. That’s all. I believe this keeps 99% of what 99% of people are interested in, while closing the doors that enable the 0.0001% jerks out there to easily exploit things (“I have to write my own installer? Wah boohoo, I’ll find another target.”) I’ve kept track of some of the “easy exploit” vectors and have found ways to either legally prevent them, or to make the work required to loophole them enough that lazy people will give up quickly. Also, please remember that this is the Internet and I can change my mind later. This isn’t the ten commandments chiseled in to stone tablets 🙂 I could very well decide it’s too much effort to do this, and find a different way to address the problem. Maybe I’m just blowing off steam.

The goal is not to prevent any open use of the source code. Some have suggested that I should sue the guy, but I’ve already dealt with him so that isn’t necessary. Some have suggested that I should have used the GPL or BSD license, but that wouldn’t be possible because first, I don’t like GPL (let’s please not start a battle about it). Second, it would restrict some of the freedoms that I do want to allow: honest incorporation of portions of Paint.NET’s code into another software without licensing stipulations (for starters). Third, I don’t have complete executive privilege here. Portions of Paint.NET are incorporated from elsewhere (with permission of course), or are even owned by Microsoft from way back in the day, and I cannot change those parts of the licensing without consent (or by doing a full rewrite). Nor do I want to chase everyone down to get this consent when I can achieve my goals easier by doing something else. So I have moved the resource assets to a CC license which means if you really want to rip-off Paint.NET then you have to rewrite all the text and redo all the graphics. At that point you have proven you are either not lazy, or that you have OCD, or something. By which time I’ve released 4.0 and you are way behind again.

There was a comment about the Mono guys and their porting efforts. I don’t believe this will hinder them, nor is it a goal of mine to do so. I’ve e-mailed with Miguel de Icaza on occasion with the specific intent of making sure that it is possible for them to port Paint.NET. They wouldn’t be able to make much use of Paint.NET’s installer code anyway because it is very Windows-specific. And they probably won’t need to edit the resource files and can just use them as-is. If/when we find problems in the licensing that impede this, then we can adjust the license for the next release. Or I can provide them with permission to do what they need to do. This is iterative development folks, isn’t that what everyone likes?

To address why I didn’t publish the guy’s name, website, etc. The reason is that I honestly believe there are some extenuating circumstances that are not fully known. From what I have read, some believe the guy is disabled, or is being purposefully defamed by someone who has a grudge against him. The other possibilities that I have considered is that he is mentally deranged in some way – split personality, schizophrenia, etc. This would be congruent with the weird e-mails I’ve had with him in the past. He has been seen under or claiming different last names. In any case, there would be no benefit other than revenge for publishing this information.

Tips For Dealing With Backspaceware

Prior to my previous blog post, I had sent the “author” of the Paint.NET rip-off an e-mail asking and telling him to remove the software, and why. People suggested that I sue him, but I didn’t think it was necessary to start with that. I am happy to report that I have been successful at having the software taken down and discontinued. So as another tip for freeware authors, I am going to document how I dealt with the situation.

NOTE: This does not constitute, and should not be taken as, legal advice. I am merely documenting what I did as an example of what worked for me, and my thoughts on the matter.

1. I fumed for a few hours. Don’t underestimate the power of letting yourself cool off before sending e-mails. On a side note, I also try to avoid sending e-mail at all until I’m at least past my first cup of coffee in the morning. I am not a morning person, and I found myself sending out snappy replies!

2. I sent him the following e-mail. Notice that I did not attack or insult him, and stuck mostly to a strict “just the facts” writing style. I made no threats of legal action, nor any promise that I would not take legal action. That last part is key – you don’t want to promise yourself into a corner by way of a technicality. Maybe they remove the scam software, only to put it up the next week with a new name (“oh hey look it has an exclamation mark at the end, it’s a totally different name!”).

<Name Removed>,

So we meet again. Once again (this is the 3rd time at least) you are blatantly violating the licensing and copyright of Paint.NET, and ripping off plugins from the Paint.NET forum. The software in question is called “<Name Removed>” located here:

<URL Removed>

You have also plagiarized content from the Paint.NET website, and have removed the copyright and permission notice from what you are distributing. Not only that, but your software removes Paint.NET when you install it and also tries to use the same installation directory (C:\Program Files\Paint.NET). It incorrectly claims to be based on “PaintDotNet” which is a program that does not exist (it’s called Paint.NET). Throughout the program itself it also claims to be Paint.NET (“Choose Tool Defaults”, for instance).

I also don’t think the various plugin authors will be happy to hear that you are blatantly ripping off their plugins without their permission, and without giving them any credit. This is a blatant violation of United States copyright law, and is not just a matter of etiquette.

So, this is another cease-and-desist notice. You must remove the “<Name Removed>” software from your website immediately, and also discontinue the product. I will check back on Thursday and if this is done then I will consider the matter settled.

-Rick Brewster

Here’s the response I got the next day (which was Wednesday)

program will be removed sometime today

It actually took until the next day for it to be removed, but whatever.

3. I found various download sites that were hosting it, such as SoftPedia and Foto-Freeware, and sent them a notice about the software. In fact, I used the links on the page for “Report Spyware” and “Send us update information,” anything that I thought would end up being read by a human being and taken seriously. I informed them that it was a rip-off of Paint.NET and was violating copyright laws, etc. and that they should kindly take it down. Remember, these guys want to be on your side and they deal with a LOT of software updates every day, so it makes NO sense to let any of your anger bleed into your conversations with them. Both of the sites I just mentioned were very understanding and accommodating, and removed the software quickly (thanks!).

4. Since the software was still on download.com, I requested members of the forum to submit civil, articulate reviews stating that it was copyright violation, rip-off, etc. etc. (Yes this means that if you go dig on the forum you will indeed find out more about the culprit’s name, etc.) Thankfully, the reviews they have submitted are tasteful and do not attack download.com itself. Here’s an excerpt from one of them:

“CNET- if you do not remove this illegal and distasteful software from your servers, your reputation among the software community will forever be associated with the aid of copyright violators and warez downloads. Don’t allow your name, which has heretofore been known as a great source of software, become a synonym for theft.”

Unfortunately, their policy on copyright violation is heavily weighed down, no doubt by their lawyers. I have to send an infringement notice by regular mail. It’s ridiculous. Please just let me send you an e-mail and let it escalate through your customer support staff. Or, since I have an account on upload.com so I can manage my own freeware listing, give me an e-mail or contact form for this type of stuff.

Update: The offending software has been pulled from download.com.

Since I started with a [mostly] civil tone and was patient about compliance, I probably saved at least $5,000 in legal costs (that’s a very uneducated guess, mind you). I didn’t see the need to start by threatening a lawsuit, especially because only three things can occur then: 1) they comply, or 2) they don’t comply, and successfully call your bluff and their backspaceware is still online, or 3) they don’t comply, and you have to spend lots of money on lawyer stuff and actually sue them.

By not threatening legal action up-front you leave your options open while you consult with friends and real legal advice as to what you should do. Do not assume the person you are dealing with is a mature, intelligent, respectful adult. You have to treat them like a teenager who would like nothing better than to flaunt in your face the fact that they are pissing you off and that there’s nothing you can do about it. Threatening a lawsuit will just make them more excited!

Freeware Authors: Beware of “Backspaceware”

Update, 2007-12-15 @ 1pm PST: Welcome Slashdot readers! Please see my other blog posts on the matter before jumping to make a comment: the first, second, third, and fourth.

Paint.NET’s license is very generous, and I even release the source code. All free of charge. Unfortunately it gets taken advantage of every once in awhile by scum who are trying to profit from the work of others. I like to call this backspaceware*. They download the source code for something, load it up in to Visual Studio (or whatever), hit the
backspace key over the software’s name and credits, type in a new name and author, and re-release it. They send it to all the download mirror sites, and don’t always do a good job covering up their tracks.

There is currently an individual who is doing this with Paint.NET. I won’t mention them by name or link to them in order to avoid pumping up their PageRank. Basically what they’ve done is downloaded the Paint.NET v3.10 source code, renamed it and changed the credits, removed the license and copyright notice (which violates the Paint.NET license, btw), plagiarized a bunch of content from the Paint.NET website, and bundled half the plugins from the Paint.NET forum without any of the authors’ permission.

That last one really pisses me off. It’s not enough to take advantage of my generosity, he has to backstab the altruistic community as well. “My paint program supports all sorts of cool effects and file formats!!!” Yeah jerk, because you ripped off the work of 50 people by blatantly violating United States copyright law. What’s even more entertaining is that this is the third time this guy has done this! He’s also been known to do this with all sorts of other freeware applications that are nice enough to release the source code. Oh, and did I mention when you install this guy’s backspaceware that it uninstalls Paint.NET? It also tries to use the same installation directory, %PROGRAMFILES%\Paint.NET.
(Don’t worry I used a virtual PC) He didn’t even remove the LICENSE.TXT files from the plugins he stole, which correctly cite themselves as Paint.NET plugins.

Real innovative work there, bub. I hope he puts this on his resume and someone asks him about it during an interview – that would be an entertaining conversation to watch.

Manager: “So you ripped off Paint.NET and a bunch of plugins, and re-released it with your name on it?”
Him: “Yup!”
Manager: “Cool! Welcome to your new job at Clown Burger. Make sure to ask customers if they want fries with that.”
Him: “I get free lunch right?”

I went and searched through my Inbox for his name because I wanted to find the e-mails I sent him the last two times he did this. What I also found was that awhile ago I actually gave this scumface technical support when he was having trouble installing Paint.NET! It’s so nice that he’s turned around and dumped on my face to show his appreciation.

To combat this and a few other similar instances that have happened over the years, I believe I will change the way that I release the source code for Paint.NET. As a stopgap before the v3.20 release, the version 3.10 source code is no longer available, starting immediately, while I finalize on this decision. It just feels like it’s a disaster waiting to happen with the way I’ve been releasing it so far.

Here are the changes I’m thinking of:

  1. I will no longer be releasing the source code for the installer.
  2. I will no longer be releasing the source code for PaintDotNet.Resources.dll, which has the code for loading resources as well as all the graphics (icons, logo, etc.)
  3. I will no longer be releasing the text and graphic resources in the source code distribution (RESX files, icons, logos). This includes the translations to non-English languages.
  4. I am still contemplating how much of PaintDotNet.exe I want to release. Especially parts such as the updater and core parts of the main UI that I’ve spent a lot of creative energy on.

The goal is to dramatically increase the amount of work required to release a backspaceware version of Paint.NET. The first one clearly does this. The 2nd and 3rd make it much harder to change names, credits, and logos. The 4th one makes it much more difficult to rip off the UI or “shell” of Paint.NET.

Plugin authors often need something to debug with, and I still want to ensure that people can study the source code for educational or honestly innovative purposes. These consumers of the source code don’t need access to the resource files: you can just use the PaintDotNet.Resources.dll and PaintDotNet.Strings.3.resources that ship with the regular download. However, by making it more difficult to commit a “backspace violation”, I am hoping to put an end to this and other lazy copycat schmucks.

A lot of software implements copy protection to save profits, but I’ve never really believed in the stuff. It’s unfortunate that I have to investigate these measures in order to help protect myself and others from lazy ripoff jerks.

* Someone else suggested “thief-ware”, but I think that implies at least a little planning and cunning. I believe that “backspace”-ware correctly infers the level of simple laziness and lack of any real skill.

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.

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.

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.

Lots of small donations = Suspicious?

Over the last several weeks I’ve been receiving a barrage of very small donations from a single person. They range in size from $0.01 USD to $0.05 USD, and the PayPal transaction fee results in a net of $0.00 for me. It’s obviously very suspicious, and my bet is that this individual is trying to artificially inflate their PayPal or eBay reputation. What better way to get a very high reputation than to have a lot of successful payments? Or, maybe they’re trying to inflate my reputation? I don’t get it.

Has anyone else seen similar activity?

Epica – A Winamp Visualization Plugin from 2001, by Me

This post is completely unrelated to Paint.NET. Well, sort of.

Back in college I spent a lot of time working on a graphics library in C++, which I used to write a visualization plugin for Winamp. It was known by the name “Quasar” until I released it publicly and renamed it to “Epica” and bumped the version tag to 2.0. The second and last release was version 2.10 and it accumulated about 250,000 downloads on Winamp.com before I took it down in 2002.

Well, the other day I tracked down the Epica installer from my old college-hosted website. I installed the latest version of Winamp, which I think is 5.6789 or something weird, and to my surprise, my plugin still worked! It looks great on the media center PC at 1920 x 1080 on my new Samsung LN-T4671F TV (46″ LCD, absolutely beautiful thing).

The official requirements are Winamp 2.xx or newer, a few extra megabytes of memory, and a Pentium with MMX. I recommend you have at least a Pentium III, which these days shouldn’t really be a problem. By default it will probably try to run at 800×600 so I recommend going into the configuration settings and cranking up the resolution! I’ve posted a download link at the bottom of this blog post.

One of the cool things about Epica is that it gives you a lot of interactive control over the visuals. Press F1 while the thing is running and you’ll get a full page listing of all the keyboard controls. Oh, and you can even use a joystick for some of the stuff which I believe is documented in the README.TXT file. The idea is that it will try to do a good job automatically reacting to the music, but if you really want to put on a show then you can call the shots in real-time.

I actually used this for visuals at a student-body sponsored rave at WSU, called “Fusion II”, in 2001. This thing was projected up on a huge wall powered by my 800 MHz Pentium III and the awesome live music being performed by the likes of DJ Dan and Donald Glaude. There were a lot of people in the CUB Ballroom that night, and the plugin, as well as the other visuals I was doing, was a hit. They asked me to do the visuals the next year at Fusion 3 but I had to decline so I would have time to finish my junior-year Computer Science 360 project (“File Systems”). So that means I finished up Epica when I was a sophomore at WSU.

In total, the plugin comprised over 30,000 lines of C++ and inline assembly code. I learned a lot about computer graphics and performance programming, as well as software development and usability. I used assembly language so I could get at MMX and SSE where I was able to eek out 75% to 150% performance gains over regular C code. They don’t teach you this stuff in class, folks. I exercised a lot of my experience from Epica while writing Paint.NET. Nowadays I don’t do any assembly language but prefer instead to use multiple threads and parallelizable algorithms.

Oh yeah, you can download it here: http://www.dotpdn.com/files/Epica210.zip . Remember, you must have Winamp installed. The latest version works, and the whole thing is Vista compatible as well. Have fun!