Last Saturday was the one year anniversary of my Image Resizer Powertoy Clone for Windows project. I thought it would be fun to talk about some of the project's highlights of the past year.
A few years ago, my mother asked me if there was an easier way to resize photos. My dad had walked her through the steps of doing it one picture at a time through Photoshop, but that was such a tedious process. I, being the wonderful sun that I am, introduced her to Microsoft's Image Resizer Powertoy for Windows XP. A few years later however, she decided to get a new laptop with Windows Vista. She, like myself and so many others, was disappointed to find that the Powertoy would no longer work. Thus, I set off to change the world (or at least the world of image resizing).
The first step, as any great developer knows, was to see if it had already been done. There were a few other tools out there, but none of them really stood up to the original. I decided to develop it in C#/.NET (mostly I was just curious to see if it was even possible). I immediately hit a dead end. After a few weeks of searching however, I found an article that talked about Windows Shell Extension in C#. The article was bit dated, but using the MSDN articles I was able to get it working.
I decided to post the project on SourceForge.net because of the hard time I had finding examples of .NET Shell Extensions. Well, that and I knew that if I had any chance of it becoming popular, I would need a big name like SourceForge to help. I also knew that to succeed, people had to be able to find the thing. The name, I decided, needed to be as close to the original's as possible. So I took the original, "Image Resizer Powertoy for Windows XP," dropped the "XP" (as it no longer applied), and added the word "Clone" (to avoid getting sued by Microsoft). The final step of the release was getting it to show up on search engines. I posted a Digg article titled Image Resizer PowerToy for Windows Vista to hopefully spark some online gossip. Sure enough, the download counts started growing, and I slowly moved up the page on search results.
A couple months after the initial release, I got my first user-submitted issue. Earthclimate asked me to please maintain metadata. He discovered that, after resizing an image, all the metadata (e.g. date taken, tags, rating, camera type, f-stop, ISO settings, etc.) disappeared. I immediately fixed this and released the bits. Isn't open source wonderful?
The next major spike in downloads, I attribute to a blog post and YouTube upload about my project by PCWizKid. The month Windows Vista - Free Image Resizer was posted, I saw a 200% jump in downloads.
With more popularity comes more scrutiny. Rshelq submitted an issue regarding the application's poor image quality. Together, we optimized the resizing process to produce an image that was, according to rshelq, better than the software which I set out to clone. With the new changes came another 25% jump in downloads. The biggest jump in downloads, however, came in December. From November to December, there was a 100% jump (I know, 100 is smaller than 200 but these are increases in the number of downloads per month, not just increases in the number of downloads). Since December, the project has averaged about one download every six minutes!
One of the most frequent complaints I received was that my application didn't work on 64-bit editions of Windows. After seven months, I decided it was time to tackle the beast. After days and days of digging and hundreds of dollars later (What, I'm not going to blog that I pirated my copy of Windows Vista 64-bit), I decided that Windows Shell Extensions, written in .NET, don't work on 64-bit editions of Windows simply because: the coding gods forbid it. Yes, this is the most logical explanation I have. Despite everything being in place so that it should work, it just doesn't. So I did what I always do when I get stuck on a project: I started over from scratch. For the second version, I decided to listen when they said to never write Shell Extensions in .NET, and I did it the right way -- in good ol' C++. This was a fun experience; it had been nearly three years since I last touched C++, and I had to relearn pretty much everything about the language. I had also never done WIN32 or COM development (cryptic technologies that have been around for ages). However, using my amazing ability to learn new things (or maybe just my amazing ability to sift through pages and pages of dry technical documentation), I was able to get it working. There are still a few things left to do before I consider version 2.0 done (like proper error handling, and scrapping the dependency on MFC which adds nearly 12 MB to the download), but the Beta seems to be flourishing well with over 16,000 downloads (2,500 of which are for the 64-bit edition).
So, in celebration of a great first year, I want to thank everyone who has helped contribute to the success of this little project. So far, the project has been downloaded over 50,000 times! If you're interested in contributing, you can do so by spreading the word (like all those awesome bloggers out there who make my project look sexy), submitting a feature request or bug report, or simply by downloading and using it. The project, which was migrated to CodePlex due to the degrading quality of SourceForge's services, can be found at PhotoToysClone.CodePlex.com. Enjoy, and happy resizing!
Wednesday, April 15, 2009
Tuesday, February 17, 2009
Image Resizer 2.0 Beta
It's finally here -- the moment you've all been waiting for. Last night, I released version 2.0 beta of my Image Resizer Powertoy Clone for Windows. The most notable new feature is 64-bit support.
This project was a lot of fun because it was my first production-quality C++ application. The code could still use a lot of optimization and error handling, but I'm happy with my work.
I have tested this version on Windows XP, Windows Vista x64, and yes, even Windows 7 x64. Support for pre-XP versions will be coming in the 2.0 final version, but if you actually need it for versions of Windows that old, I suggest upgrading!
The new version can be downloaded from here.
This project was a lot of fun because it was my first production-quality C++ application. The code could still use a lot of optimization and error handling, but I'm happy with my work.
I have tested this version on Windows XP, Windows Vista x64, and yes, even Windows 7 x64. Support for pre-XP versions will be coming in the 2.0 final version, but if you actually need it for versions of Windows that old, I suggest upgrading!
The new version can be downloaded from here.
Thursday, January 08, 2009
Image Resizer Powertoy Clone 2.0 in the Works
Over this past week, I have been working hard to get my Image Resizer Powertoy Clone for Windows working on Vista x64. I have tried every tweak I could think of to get the current version working, but to no avail.
I believe that the problem is due to the fact that the project is written in C#/.NET. When a .NET Assembly is registered as a COM object, it uses mscoree.dll as the in-process server to handle communication between COM clients and the .NET Assembly. I suspect thatthis file is a 32-bit DLL and, thus, cannot be loaded into the 64-bit explorer.exe. (EDIT: That statement was not true.) ...or at least that's my theory.
I have taken this opportunity to dust off my C++/WIN32 skills. I am rewriting the entire application in C++ (the way it should have been done in the first place). In a few weeks, I expect to have a working 64-bit version of the shell extension. I am also going to further investigate problems people have had with it not working in versions of Windows prior to XP (I know what the problem is, but I never could get it resolved).
Along with these new upgrades, I am playing with the idea of moving the project to CodePlex. It's kind of ironic that I would let Microsoft host a project I stole from them, but SourceForge is a nightmare to deal with these days.
I believe that the problem is due to the fact that the project is written in C#/.NET. When a .NET Assembly is registered as a COM object, it uses mscoree.dll as the in-process server to handle communication between COM clients and the .NET Assembly. I suspect that
I have taken this opportunity to dust off my C++/WIN32 skills. I am rewriting the entire application in C++ (the way it should have been done in the first place). In a few weeks, I expect to have a working 64-bit version of the shell extension. I am also going to further investigate problems people have had with it not working in versions of Windows prior to XP (I know what the problem is, but I never could get it resolved).
Along with these new upgrades, I am playing with the idea of moving the project to CodePlex. It's kind of ironic that I would let Microsoft host a project I stole from them, but SourceForge is a nightmare to deal with these days.
Thursday, November 06, 2008
Image Resizer PowerToy Clone for Windows 1.1
I just released another version of my Image Resizer PowerToy Clone for Windows. Thanks to a feature request by rshelq, the quality of images has been drastically improved. Would you believe it, that little tool is up to 10,209 total downloads. It's popularity just keeps growing; it has averaged 90 downloads per day in the past three months. It'll be exciting to see where it goes from here.
Rshelq also stated that the quality is, "now better than the software which you set out to clone!"
Friday, October 31, 2008
Server Project Ideas
About a month ago, I switched my server from Gentoo Linux to Windows Home Server. I have quite enjoyed the new platform. I love how tightly it integrates with my other Windows desktops (and my XBox ...if I had one). I can pull up Windows Media Player and access any media on the server directly. There is also an external web page that allows me to connect to the server or other desktops on the network remotely. I have even found a plugin (Whiist) that enables easy configuration of the web server. All in all, I am verry happy with the switch.
There are only a few things that are missing now. I would like a way to schedule tasks from the remote console, a way to download torrents remotly, and a way to add code repositories. So, I am proposing three projects.
The scheduled tasks add in should be fairly straight forward. Any administrator can log into the remote console, see a list of scheduled tasks, configure them, or add new ones. I don't think that non-administrative users need to be able to do this as it is an advanced feature. My main uses for this would be capture snapshots of external databases or code repositories for back-up purposes, but it could also be useful to push things to other servers or just perform periodic maintainence.
The torrent add in would be the bigest project of the three, you would need to be able to configure the torrent client from the administrative console, and perhaps add permissions for which users can use it. An authenticated web application is also needed. This would allow users to manage thier torrents, add new ones, or just download the completed torrent. I believe that a windows service may also be necessary so the two can properly communicate, but I guess you could just have the ASP.NET application start and manage the torrent client and have a way to restart it from the console when settings are changed.
Finally, the code repositories. It would be easy enough to set up a Subversion server on the machine, but I would also want an easy way to add new repositories, and manage user permissions.
I was also going to add a database management plugin to the list, but after I thought about it, most DBMS are already meant to be managed remotly, so it would just be a matter of installing it.
Anywho, these are just my thoughts. I'm sure I'll play around a bit in my spare time and see how far I can get, if I'm proud of my work, you can expect them to be posted somewhere (probably CodePlex because it rocks).
There are only a few things that are missing now. I would like a way to schedule tasks from the remote console, a way to download torrents remotly, and a way to add code repositories. So, I am proposing three projects.
The scheduled tasks add in should be fairly straight forward. Any administrator can log into the remote console, see a list of scheduled tasks, configure them, or add new ones. I don't think that non-administrative users need to be able to do this as it is an advanced feature. My main uses for this would be capture snapshots of external databases or code repositories for back-up purposes, but it could also be useful to push things to other servers or just perform periodic maintainence.
The torrent add in would be the bigest project of the three, you would need to be able to configure the torrent client from the administrative console, and perhaps add permissions for which users can use it. An authenticated web application is also needed. This would allow users to manage thier torrents, add new ones, or just download the completed torrent. I believe that a windows service may also be necessary so the two can properly communicate, but I guess you could just have the ASP.NET application start and manage the torrent client and have a way to restart it from the console when settings are changed.
Finally, the code repositories. It would be easy enough to set up a Subversion server on the machine, but I would also want an easy way to add new repositories, and manage user permissions.
I was also going to add a database management plugin to the list, but after I thought about it, most DBMS are already meant to be managed remotly, so it would just be a matter of installing it.
Anywho, these are just my thoughts. I'm sure I'll play around a bit in my spare time and see how far I can get, if I'm proud of my work, you can expect them to be posted somewhere (probably CodePlex because it rocks).
Saturday, April 12, 2008
Image Resizer PowerToy for Windows Vista
Remember that wonderful Image Resizer PowerToy Microsoft released for Windows XP? I have recreated it and now it will also work on Windows Visa! This is an incredibly useful tool that allows you to mass-resize images just by right-clicking on them. Click here to download Image Resizer PowerToy for Windows Vista. Enjoy!
read more | digg story
read more | digg story
Saturday, May 05, 2007
Doug's Journal
I have been thinking of a project that would be beneficial to everyone, and worth my time to develop. I think I have come up with it. Anyone remember Doug? Doug was one of my favorite Saturday morning cartoons. Every episode begins and ends with him writing in his journal.
We have been counseled many times by various people to keep a journal. Psychiatrist say that it helps us organize our lives so we can more plainly see our situation and more easily find ways to improve our lives. Family historians see them as invaluable resources to the writer's posterity. Over the last break, I decided that I wanted to start keeping a journal. I've tried the old pen and paper journals before, but it never seems to get anywhere. I usually end up tearing out pages that I don't like, and often am too lazy to take the time to write it all out. So I decided I'd try keeping an electronic journal. After all, most of my life is already recorded on my computer in calendars, emails, pictures, etc.
I looked all over online, but could not find a free solution that was both intuitive and comprehensive. That is when I decided I would make my own. I want to include things like journal entries (of course), how you feel about your day, (e.g. best day ever, worst day ever, just another day, etc.) goals made, goals accomplished, resolutions made, events, profiles of people you know, linking so that you can link to the profiles of people or pictures or other entries, photographs. (like the day they were taken, what they were taken of, and who was in them, etc.) I think my overall goal could best be described as a wiki of your brain! I'm thinking about naming it after Doug's best "non-human" friend -- his dog "Porkchop".
I would enjoy any feedback you have on this such as comments, feature requests, or what you may want to contribute to this project. Thank you.
Subscribe to:
Posts (Atom)
