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!

dotPDN LLC and Paint.NET now have a mailing address

One request I get on occasion is if I have a way for Paint.NET to receive donations without having to use PayPal. Not wanting to give out my home address, I have always had to apologetically say “no.” But, finally there was a PO box that was available at the local post office, and now the Paint.NET Donate page has been updated with the mailing address:

It will also be interesting to see what affect this has on donation revenue, if any.

Aunt asks, “Have you ever heard of paint dot net?”

I was recently talking to my friend Jake online, when he mentioned this:

So my 62-year-old aunt calls me up about two hours ago: “Hey, Jake, have you ever heard of paint dot net [sic]? Is that a good program? I’ve got a bunch of pictures from polo and I need something to work with them with.”

Apparently his aunt loves Paint.NET 🙂

Paint.NET begets dotPDN LLC

I recently created an LLC for Paint.NET. I named it “dotPDN”, which is what you get if you say out loud the file extension for Paint.NET’s native file format, “.PDN”. After some quick iterating with a friend and some people on the forum, I even have a nice logo made completely in Paint.NET:

The “corporate website” (if you can call it that J) is at http://www.dotpdn.com. The text on the site, “our current projects include…” may seem to imply that I have other projects in the works. This isn’t the case, although I may resuscitate ListXP in order to have more than 1 project in that list J Which might be painful seeing as how the code sort of fell apart the last time I tried to compile it in Visual Studio 2005 … dang, I could really use that utility again in x64 land. Right click, List!

Some people might see this “dotPDN LLC” addition and think, “Oh my gosh! Did Paint.NET get bought out!? What’s going to happen?! Is it going to cost money now! Onoz!” Well, Paint.NET was not “bought out”, and I did not “sell out” to anyone. dotPDN LLC is my own Limited Liability Company and there will be no changes to how Paint.NET is distributed or developed. I’m still the one doing the coding, and I’m still the one calling the shots. The purpose of the LLC is mostly to serve as a legal shield for me: if someone wants to “sue Paint.NET” then they have to target the LLC and they can’t go after my personal assets (like my liquor!). I think it also has some tax benefits, but I’m going to let QuickBooks help me figure that part out.

Next up I need to set up various e-mail accounts, get a PO Box, and a new code signing certificate. Hopefully the next Paint.NET update you install will say that it’s digitally signed by “dotPDN LLC” instead of “Eric Brewster” J Total cost to set up the LLC was less than $1,000 USD, which includes going to http://www.mycorporation.com and checking the boxes to have them basically do all of the grunt work for filing and paperwork. I also had to buy a bunch of domain names for “dotpdn” and “dotpdnllc”.

Paint.NET is now reachable from www.paint.net

Ever since before the Paint.NET software project began in early 2004, the paint.net domain was redirecting to http://www.warrenpaint.com. This is the website for Warren Paint & Color Co., a paint manufacturer in Tennessee. That’s a pretty good domain to own for that type of business, eh? It’d be like owning “bikes.com” for a bicycle shop or something.

Fast forward to yesterday, and a lot of people are still typing in “paint.net” into their address bar in hopes of finding the Paint.NET software. Unfortunately for them, they have always been getting redirected to the Warren Paint & Color Co. website. This has brought some extra traffic to the Warrant Paint & Color Co. website, but the problem is that they’re also getting daily e-mails from people either asking where the Paint.NET software is, or saying mean things and accusing them of cybersquatting or search hijacking. It’s been a bit frustrating for them.

Next, fast forward to today. In order to reduce confusion around the domain and to cut the guys at Warren Paint & Color Co. a break from answering e-mails that should be sent to me, we’ve worked together to set up a simple redirect page. If you go to http://www.paint.net/ right now, you’ll see this in place now. It basically just presents the logos for both websites and says, “Why don’t you just tell me where you want me to go!” *

So from now on, when people ask you where to get Paint.NET, just tell them to type it into their browsers! No matter which box they type into (URL, search), they’ll find it.

Thanks to Jeff for setting up the redirect over to the disambiguation page. Also, thanks to Graham Laing for facilitating the matter.

* Seinfield reference.

Quad Core is finally affordable

I just noticed that the price has fallen to $299 for the Intel Core 2 Quad Q6600 (2.4 GHz) processor at newegg. If you’re looking for the best system to run Paint.NET on right now, this is a great place to start! I’ve personally been using the Intel Core 2 Extreme QX6700 for my development system since December, and it’s awesome for those of us who are writing and optimizing multithreaded code. If you’re a developer then I highly recommend getting one.

P.S. I just finished up the integration of the DDS plugin for Paint.NET v3.10. And then I used OpenMP to optimize it for multiple threads: it is much faster on a dual- or quad-core system now! I’m still shooting to have a beta out by the end of the month.

Disclaimer: This is not a paid endorsement or advertisement or anything. I’m not receiving any money from newegg, Intel, or anyone for that matter, for this post.

Don’t get me wrong though — the iPhone is very good

Even though it doesn’t work in 64-bit Windows and I have to use another computer to sync it, I honestly really like the iPhone. Having just upgraded from a staple RAZR, this thing is incredible. The first few days I had it I couldn’t take it out of my pocket without people asking me about it. Whether I was at work, on the beach, or at the bar, everyone wanted to look at it, touch it, and play with it. It’s easy to use, it’s sexy, and everyone wants one. Even the people I hang out at the bars with, most of whom don’t use a computer for anything other than MySpace, know about and desperately want an iPhone.

I was going to compile a top 5 list of the questions that people ask me about the phone, but really there are just two questions people ask when confronted with My Amazing iPhone:

  1. Can I play with it? / Can I touch it? Sure, go ahead J Everyone wants to play with it! And not just my coworkers or other tech aficionados, either. I’m talking about another market that is much harder to appeal to: 20-something, bar-hopping women (I hang out at the bars around here, I tend to run in to them). They all know what it is, they all want one, and none of them can afford it. I predict a huge Christmas market for Apple with this device. (Yes Cassandra, I can load up the beat-boxing flute player video from YouTube on this thing. Yes, it’s awesome. No, you can’t have it! Yes, I agree, it’s time for another round of rum ‘n cokes.)
  2. How long did you stand in line for it? I didn’t. I went in around 3pm last Saturday, walked right up to the counter and said, “Give me an iPhone.” The gentleman at the counter said, “Ok, how would you like to pay for that?” There were a ton of people in the store, most of the playing with iPhones, but only a few up at the counter actually buying stuff. I probably just got in at a lucky time.

After having used this thing for over a week, I do have my top list of feature requests:

  1. Flash. Dang it, I want to play Desktop Tower Defense on this thing. And all those embedded YouTube clips on celebrity gossip websites are completely inaccessible!
  2. Auto-Login / Password Saving for Safari. I wish I could load up my “web apps” without having to type in my login and password every time. It’s extremely tedious to load up sites like Facebook, Google AdSense, MySpace, Hotmail, PayPal, etc. on the iPhone because you have to type in your user name and password every time. The passwords that I use aren’t in the dictionary, with randomized casing, numbers, and special symbols. I usually type them from muscle memory and it’s very difficult to touch-type them on this thing. So please, Apple, let me just add a bookmark with a login so that I can just push Bookmarks, and then push Facebook, and then have it log in for me. Maybe force me to type in a 4-digit PIN first to get access to the password repository, similar to what Firefox allows you to do.
  3. GPS. How cool would it be if the built-in Google Maps was tied to a GPS chip in the device? It would also be nice to have for when you’re walking to a destination (“where the **** is EMP?!”), something that car navigation systems just can’t do. Why pay $5000 for car navigation on a $60,000 BMW when you can just rest your iPhone near the dashboard? Goodbye iDrive, hello iPhone. (2008 E92 M3, I’m also talking to you.)
  4. Make all apps rotate-aware. Sometimes I want to access the Maps app in widescreen. Or I want to lay the phone at the sideways angle while I’m in my car so that it won’t be as likely to fall over. Right now only Safari is rotate-aware, and it’s just inconsistent. Also, the YouTube app forces you to switch between landscape and portrait depending on whether you’re browsing or watching, and it’s clumsy.
  5. 64-bit Windows compatibility. Duh. Although, in Apple’s defense, this has been a major failing of the entire industry. I can’t believe how many people have told me, “Why should I install 64-bit? There’s no advantage, and my printers won’t work!” Argh! Heck, Microsoft doesn’t even ship 64-bit DVD’s with most editions of Windows Vista. The latest Photoshop CS3 isn’t 64-bit native, albeit because of sound engineering and scheduling tradeoffs (I have even written in their defense). But hey, that’s another blog post (question: anyone interested in some 64-bit ranting? J)

This is a version 1 product and it shows. However, unlike other v1 products, the features that are there do truly rock. Instead of 100 features that suck, we have 10 features that are rock solid. It’s like they took the Paint.NET philosophy and applied it to a phone. (Actually, it’s more like I took the Apple philosophy and applied it to Paint.NET. Shh, don’t tell anyone.)

Anyway it’s Sunday. Time for some weekend stuff, like … not doing any work. Where is the beer.

iPhone + 64-bit = Nope

There I was, hoping to get my new iPhone set up and to replace my RAZR which can’t even keep up with my typing, and then …

I’m using the x64 version of Windows Vista Ultimate. A small amount of digging online highlights the fact that the iPhone doesn’t work on 64-bit Windows. This fact is not listed on the box, nor on their website (oh woops, apparently it’s hidden deep within some random support document).

Way to go Apple! How hard could 64-bit support possibly be for a launch as big as this? Especially when Mac OS X Leopard has 64-bit trumpeted as one of its big new features, you’d think their engineers would spend the time to add support for it on the Windows side.

The Accidental Success of Paint.NET Plugins

The effects system in Paint.NET is generally a well thought-out system and great for someone like myself to develop against (hey I wrote it, so I know all the rules!). It was designed to give all effects the same support and workflow for selection clipping, user cancellation, multiprocessor/multicore scaling, and preview rendering.

However, when extended for plugins, it has not held up to the test of time.

“But just wait a second!” you might yell. “There are tons of plugins on the forum, and some of them are really good!” You’re probably referring to things like the EdHarvey Effects pack, or the DirectX Surface (.DDS) plugin by Dean Ashton. These are the types of plugins that really extend Paint.NET’s usefulness and cause developer envy in myself … but I digress! J

This effects system is definitely a case of something that was written by one developer (me), for two developers (myself and Tom Jackson). However, for a very long time, it didn’t matter because there were no plugins! Paint.NET wasn’t popular enough for anyone to have really written any of them, and the community was small – maybe 1 or 2 posts to the forum on any given day. In fact, between version 2.5 and 2.6, I made changes to the system that completely broke all plugins written for 2.5 and before. This was back in February 2006, and I didn’t get any grief e-mails about it. Nowadays if I make the slightest change, such as moving a class between DLL’s, I get e-mails from many users whose plugins are now causing crashes! (Which brings to light another problem, that of robustness, but that’s another topic.)

Some people have so many plugins installed that they are crying out for a way to organize them in to sub-menus of their choosing. Their Effects menu gets so big that they have to scroll around to find their effects!

As a developer and publisher of software, this is the absolute best kind of problem you can have. Think about it: people wouldn’t be asking for an “organize effects” feature unless there were lots of effect plugins!

Wow, what a difference one year makes! So right now there are a number of problems that I’m hoping to solve in the next release:

  1. Make it easier for casual plugin developers. Not all plugin developers have a computer science degree and a day job as a software engineer. Nor would they want to! (Heck, most professional software engineers would rather be doing something else, to be brutally honest.) A lot of people right now are making plugins by using CodeLab which was originally only intended to provide a rapid prototyping environment – turns out people are perfectly happy using the DLL’s it spits out!

    On the forums, BoltBait has even extended CodeLab so that it will automatically generate a user interface by adding a small amount of metadata to your script file. However, it is limited to the very basic UI dialogs that are built in to Paint.NET. BoltBait doesn’t exactly have time to pour in to CodeLab to turn it into Visual-Studio-inside-Paint.NET, complete with syntax highlighting and a UI designer. I think he’d rather spend time with his family, for instance, and I don’t blame him.

    I’d like to make it so that you can tell Paint.NET to automatically generate a user interface based on some schema that defines the properties for your effect. Maybe you can throw some XML at the effect system, like <Property Name=”Blurriness” Minimum=”1″ Maximum=”100″ Type=”Int32″ /> and it will figure it out.

  2. Make it easier for plugin users. Right now you have to download the DLL … or the ZIP … and then figure out that you need to extract it to C:\Program Files\Paint.NET\Effects. Oh, and don’t forget to close Paint.NET and restart it. Also, if you downloaded a DLL then Internet Explorer will tag the file as “blocked” so you have to right click it, hit Properties, and unblock it. Etc., etc., argh! It’s no problem for myself, or other developers. File system acrobatics are second nature. But if I were to tell my mom how to do this, she’d be lost.

    I like to call this the “I have a dll, now what?” problem:


    (image from: http://icanhascheezburger.com/2007/05/30/i-has-a-money/)

    This is not to disparage the many users who have asked about this. It simply highlights that, to most users, a DLL is a weird foreign object much like the quarter is for the kitten.

    So, like I mentioned in an earlier blog post, I want to make this a lot easier! Right now the idea is to have a container format, maybe using the extension “.pdnmod” (Paint.NET Mod) that would basically be a renamed ZIP file. Once that extension is associated with Paint.NET, installing a plugin will be as simple as linking to a .pdnmod on a web page and then clicking the appropriate approval dialogs.

    This container format will also simplify, standardize, and/or facilitate things like attribution (“copyright so-and-so”), localization, and automatic generation of UI based on a schema for property values (as mentioned above).

  3. Extend what the Effect system is useful for. Right now there is some confusion about the effect system and how it works. “Why is my Render method called hundreds of times!?” Some people are trying to use it for image analysis (“analyze pixels, write data to text file”), which it is just not intended for. There is also the really big problem that implementing multi-pass rendering algorithms isn’t really feasible right now. Some people are, to be honest, horribly abusing the effect system and going outside the rules just to get it to do what they want. To that end, I’d like to make the workflow a little more customizable so that they don’t have to do these terrible things.
  4. Provide documentation. This is where the title of this post comes in to play. People are writing effects even in the absence of any real documentation! So … I think I will write some, finally.

Anyway, that’s about all I have to say right now. I’m taking this week off from my day job, so I’ve got plenty of time to catch up on things and go enjoy the sunshine here in downtown Kirkland.