The Digital Photography Junkpile

Ahh yes, Digital Photography, the best invention since… well, since photography. No more long waiting for photos to be developed, no expensive cost to pay, and no more hesitation to make snapshots.

So I also got a digital camera about 3 years ago, and I made quite a few Photos with it. Since it’s a 1 Gigabyte Card, and since it’s possible to just delete pictures, I made hundreds of Photos. But I also encountered one common issue: Most of my pictures are crap. No, I don’t mean stuff like “the picture is not good”, I mean stuff like “I have 25 Photos of exactly the same thing”.

I have started to upload my public photos to Picasa now, and also I have started adding them to Facebook. Now, Facebook has a limitation of 60 Photos per Album. At first, that sounded like an ancient relic in todays “Everything unlimited for free” Internet, but this limitation actually made me think which images to upload. I see soo many photo albums with hundreds of pictures, of which only 20 or so are really good, while the others are all just useless clutter. So I started to actually LOOK at my photos and decide which ones to upload.

picasastar

The Web 2.0 is a gigantic pile of junk, which is especially a problem with Videos and Photos, because even in 2008, they can still not be properly indexed. And with sometimes 150 or 200 Photos shot in a single evening, managing them all is a lot of work. (Geo-)Tagging, Staring, Adding Captions and Descriptions… That takes time. But in the end, I think it’s worth it, simply because it adds a lot of value to the Album, and it allows search engines to properly index it, which means that you can actually find photos in a big pile.

I just do not know if the Picasa 3 Desktop Application is the optimum solution yet. The timeline is a Full-screen application and not something that allows me to easily filter by date (i.e. show me the pictures made on February 15, 2008). Also, the fact that I can not star/unstar photos with the keyboard is a bit annoying. Well, time to look around for some other Applications, but the ease of Uploading to Picasa and Facebook is obviously a big plus on that app.

Oh, and to all the analogue photographers: You are right when you say that Photography used to be an experience in the past. The careful setup and adjustment of the Camera, Tripod, working with Lightning, making sure that the motive is nice and that the Background is good… That may be mostly lost now (and the fact that Polaroid is bankrupt just underlines that), but previously, it was near impossible or at least impractical to capture some unexpected moments in life. For a wedding, I would still hire a professional photographer, but for a party I prefer my own digital snapshots. Just like that motto “Digital for now, Analog for ever” from some microfilm company.

Disabling the annoying notice when new e-Mail arrives in Outlook 2007

Just for my own reference, here is how to disable the annoying sound and desktop alert in Outlook 2007 when new e-Mail arrives (Hint: e-Mail is not Instant Messaging, there is no need to be interrupted immediately by new mail, if it is important, people can just use IM):

Tools => Options => Preferences => E-mail Options => Advanced E-mail Options => When new items arrive in my Inbox => Untick all 4 options

Rick Version 02 – Building a custom ActionResult to perform a HTTP 301 redirect

Yesterday I’ve made the very first version of Rick, a URL Shortening Service in ASP.net MVC, and today I’ve made the first addition.

In Version 02 of Rick, I have added a custom ActionResult to perform a HTTP 301 redirect instead of the default HTTP 302 one. You can get the Source Code on http://www.codeplex.com/rick, and you can watch the tutorial video on Vimeo. Topics include a short overview of HTTP 301 vs. 302 and how to actually create a custom ActionResult.


Rick Version 02 – Building a custom ActionResult to perform a HTTP 301 redirect from Michael Stum on Vimeo.

Rick URL Shortening Service – an ASP.net MVC learning project

All right, I said I wanted to start learning ASP.net MVC, and I did make some progress 🙂 A few weeks ago, I was talking about creating a project called Écriture, a Twitter clone that companies can deploy internally. That project is still in the plans, and when I was creating the “Wishlist” (Or Product Backlog, as the SCRUM guys like to call it) for Écriture, eventually I realized that I wanted a URL Shortening service as well, since in many corporate intranets, URLs can be really long, and using tinyurl, is.gd and all the other services have some confidentiality concerns (hint: Using tinyurl to shorten “company.internal/documents/marketing/unaccouncedproduct.htm” is possibly not very smart).

I wanted to kill three birds with one stone, so I decided to make this a standalone project. The three birds are 1. the actual URL shortening Service, 2. a project where I can play with all the newest technologies, 3. a project that allows me to create some tutorial videos.

The name of the Project is “Rick”, and it’s source code is hosted on CodePlex, at http://www.codeplex.com/rick

Version 01 was just released, and it actually fully works already: You can put in a long URL, get a short URL back, put that short URL in a browser, and get redirected to the original URL. And the best of all: I have created a Tutorial video for that, which you can watch online or download (download requires free registration with Vimeo). Granted, Version 01 is ugly, has no error handling and lacks a lot of features, but I am actually going to improve it over the next few weeks, making it more robust and I also plan to add more technologies to it, for example Windows Azure or Silverlight.

For your convenience, here is the video:


Rick Version 01 – Building a URL Shortening Service in ASP.net MVC from Michael Stum on Vimeo.

Please let me know what you think and what you would like to see in the future.

SourceForge vs. CodePlex

Update 2015-03-18: This post was originally written in 2008, more than 6 years ago. Everything has changed, as Distributed VCS’ have become the de-facto standard for most open source projects, and GitHub is the current go-to host for OSS projects. There are still many large projects running on CVS or patch bombs via email, and these work well. There are also other services like Bit Bucket worth looking into, but if you don’t know where and how to host your OSS project, check out GitHub first.


So, I do have some Open Source projects now. Not many, nothing big, but nevertheless something that got me thinking about “Where to host them?”. A year ago, this was a no brainer, as SourceForge was the only real alternative. But during 2008, other sites have emerged to be real competitors. At the end, I wanted to make a decison between SourceForge and CodePlex, ruling out all other choices for various reasons.

Now, when reading this post, please keep in mind that this is a) subjective and b) possibly biased and flawed. I had a set of criterias and made a decission, but that does not mean that you should come to the same conclusion. I do not even guarantee that anything here is actually correct – it is written to the best of my knowledge and understanding. Okay, enough disclaimers, let’s start out with what I actually want:

  • Source Control, preferably using Subversion. I use Visual Studio 2008 Professional as my IDE with the VisualSVN plugin. Since I actually paid money for that plugin and really like it, and because I already know Subversion, I really want SVN support.
  • A simple bug tracker. I am a single developer, making rather infrequent releases, so I do not need tons of custom fields. I just need something to be able to track bugs and suggestions.
  • A simple way to push new releases. I usually use .rar files because it allows me to lock and sign the archive, and because rar.exe is an excellent command-line version, supporting a lot of useful parameters.
    • rar-authenticity
  • Generally, really simple user interface. I want to do stuff quickly, and I want my users to do stuff quickly, be it downloading the newest release, reporting a bug or browsing the source.

Creating a Project

SourceForge

On SF, you can categorize your project really deeply. You start with the choice what you are actually hosting – SF does not only host Open Source Software, but also Software Documentation for other projects or producing content for an open source project. You need to specify a title, an internal name that will be your URL (the Unix name), a public description and a description for the Sourceforge team. All projects on SourceForge need to be approved by their team first, so you need to tell them something about it.

The next Step is selecting a license. It displays the most common ones per default, but you can pick all OSI-approved licenses or even specify a properitary one. Step Three is a bit more complicated: You have to categorize the project. That is, you need to tell SF about the target Operating System(s), intended end user, category (i.e. Vector-Graphics) etc.

Afterwards, you will agree to the usual terms of use, and submit your project for approval. I can now take a day or two until SF reviews the project and approves it. You cannot do anything on the project while it’s waiting for approval.

Project Categorization within SourceForge
Project Categorization within SourceForge

CodePlex

CodePlex also asks you for a Title, a desired URL and a public description. The second step is answering a captcha and accepting the EULA. Your project will be immediately created and is only visible to you. You have 30 days to upload source code and make it public, otherwise it will be deleted.

Conclusion

The SourceForge project categorization seems to be a neat idea at first, and it was possibly great 10 years ago. But with thousands of projects hosted, I personally only use the Search function to find projects. Sure, if I wanted to learn a new language (i.e. Ruby), I could just browse all Ruby Projects and have a look at other peoples code, but in reality I never see me using that. Also, having to have the project approved and not being able to do anything before it is approved is somewhat of a letdown. As I do not work for SF, I of course do not know how many projects they reject, but that does not mean I do like it.

I think that CodePlex clearly wins here: My Project is available immediately (so I do not lose any momentum and euphory while waiting), and they force me to put up source code within 30 days. There are many Projects on SF that do not have any “meat” in them (shame on me: I own one such project myself) and even though I can circumvent the CodePlex barrier by just adding some bogus to the repository, it looks a lot better. Also, not having the categorization is a good thing in my opinion, because I believe it just adds clutter without adding any value (at least not for me).

Setting up Project Features / Project User Interface

SourceForge

SF offers a lot of features: Discussion Boards and an Issue Tracker, a tab for screenshots, Shell access(!), a Website for your project (yoursite.sf.net), a Wiki and more stuff. In fact, I found it overwhelming, and I first disabled everything that I do not need, which is a lot. SF is entirely self-sufficient, in theory you don’t need any other website for your project as you have everything available. The downside is that there is a lot of clutter at first and you should spend maybe 30 minutes to just look around what everything is.

On the default page, you will see a nice big download button, your public project description, and recent product news. The Source Control browser is based on ViewVC and offers a really nice interface to browse the code, look at older revisions and download a revision. It also supports Syntax Highlighting for my C# code.

CodePlex

In terms of Project Features, CodePlex does not offer much customization. You get a Wiki, an Issue Tracker, a Source Code Browser, some Stats, and a Release Tracker. As far as I see, you can not remove/disable any of those.

The default page is the Wiki and as such customizable by you, with the “Download latest release” on the right side. Compared to the big green Download button on SF, this is not as visible. The Source Code browser is really usable, but somewhat more complicated. At first, you see a list of all commits, which can be quite long. You can then browse the files within that version of the archive. Sadly, you only see the filenames, but not the last commit revision and commit comment for that file. Also, in both Firefox 3 and Internet Explorer 7 it did not like some special characters.

I ? Unicode
I ? Unicode

Conclusion

SourceForge got a re-design in 2008, which was long overdue. The new UI is much nicer, although still somewhat busy and overwhelming due to the wide range of features. Overall, I think it’s a tie, because both have some weaknesses and strengths. CodePlex has a very clean UI compared to the cluttered/busy SourceForge one. Also, it lets me better customize my main project page because the Wiki is the main page. SourceForge scores with the option to host your web site (which seems to compensate for that), but I don’t need that as I already got a web site. SF shines when it comes to online Source Browsing because the interface displays the last commit revision and comment for each file. Syntax Highlighting is available in both, but somewhat flawed compared to the “real one” in Visual Studio (which is not surprising), but it gets the job done well.

Feature wise, CodePlex has what I want, whereas SourceForge has what I want and then about 500% more. Some really nice features, but I don’t need half of them.

Source Control

SourceForge

SF gives you a Subversion repository. Not much to say about it, except that it works well and supports https. You cannot install your own hook scripts though, which means that if you want to use SVN integration i.e. for FogBugz, you’re out of luck. Speed and stability was really good, and when you use svn-keywords like $Id$, it will properly replace it with your SourceForge username (i.e. $Id: Admin.aspx.cs 100 2007-11-21 23:13:51Z mstum $).

CodePlex

Uhhh, Source Control on CodePlex, the evil topic 🙂 CodePlex is based on Microsoft Team Foundation Server, which means that it supposedly works best with a TFS Client. There is the Team Explorer Client, which is a full TFS Client that works with Visual Studio 2005 or 2008 Standard or better. There are smaller ones available, but if you want to use TFS, that’s seems to be the “proper” Client.

Now, what about Subversion? TFS is surely nice but it’s a) not compatible with VisualSVN and b) completely different in terminology and usage than Subversion, which means that the learning curve is steep. The CodePlex team has released a tool called SvnBridge, which essentially acts as a “proxy” that translates between SVN Clients and the TFS Server. When SvnBridge was first released, you had to run it on your PC, and from what I’ve heard, it had some not so nice bugs. Up until 2 days ago, I believed that this was still the case, hence I still believed that CodePlex has no proper SVN Support. But thanks to the power of Twitter, Sara Ford told me that they now host SvnBridge server-side, which means that it looks like a real SVN server from my client tools. I have to say that this works quite well, at least for my simple usage. I do not use some of the more complicated SVN Features (i.e. svn:externals) so I cannot comment on that. There are just two issues that I have found:

  1. When browsing the Source Code on the Web, you get ..svnbridge folders everywhere, containing meta-data. This is needed, but should possibly be removed from the website browser as it just adds clutter
  2. $Id$ tags are not properly expanded on checkout: My Username is missing, instead it says “unknown”: $Id: Program.cs 18767 2008-12-12 22:41:58Z unknown $

Also, on CodePlex you do not have your “own” Repository. My Commit Revision is 18767, but I only made 4 or 5 commits. This is not a direct issue because you do not interfere with other people’s projects, but I don’t really like that my Revision number is essentially randomly increasing with every commit now.

There also seem to be some bugs with svnbridge still left, for example this one, and the stability seems a bit shaky. I got the “The source control server is currently unavailable.” a lot on a newly set up project (which is at least somewhat tolerable, but does not exactly build confidence), but also occasionally on some “mature” project, which gives me the impression that there is either a bigger issue, or that they run maintenance scripts in the morning between 8:00 and 13:00 PST, which means I am just unlucky to encounter them on my evenings due to me being in France 8 hours behind the US time. But that is pure speculation on my side.

cp-tfsdown

Conclusion

Even though CodePlex has a better SVN interface now, SourceForge wins clearly. You can’t really beat a native SVN repository, and with svnbridge not expanding my $Id$ Tag correctly and adding clutter in the Web Source Browser, it’s not really that pleasing. That being said: It does work reasonably well for me, but I think I’d rather learn to use TFS if I start a large project on CodePlex.

Issue Tracker

SourceForge

SF allows you to set up multiple trackers, i.e. a Bug Tracker and a Suggestion Tracker. You can then specify categories (i.e. “User Interface”) and groups (which are essentially outcomes). Entries in the tracker are called “Artifacts”, and you have a variety of filtering options available.

CodePlex

CodePlex has only one issue Tracker. When users create a new item, they just type in a Title, a description and optionally upload a file. The project admin can then categorize it as an Issue, a Feature or a Task. users can vote for entries. Filtering is possible through the advanced view.

Conclusion

For my uses, CodePlex very narrowly wins. The SF Tracker seems really powerful when dealing with large projects, but for small projects I found it a bit to complicated. It is also not very prominently placed in the UI (which seems to be due to the fact that you can have multiple trackers), unlike CodePlex which puts the Tracker prominently into the top bar. Now, CodePlex has some downsides. The first one is speed – CodePlex is slow. There is a reason for that and the team is apparantly working on a solution, but at the time of writing, those optimizations were not live. The second one is that the first page is somewhat ugly. You see a list of recent items, but no filter (filters are on the advanced view). You can of course search, but search is also slow. As in “30 Seconds Response Time” slow.

Performance is actually why it’s only a narrow win. I really like the overall usage of the CodePlex Tracker because it works really well for me, compared to the more complicated SourceForge one. But a tracker that lets me wait 30 seconds for results is a good recipe to lose a lot of credit.

File Releases

SourceForge

On SF, every Project can have multiple “Packages”. For example, you can have your main application, but also some additional Libraries or Utilities which are part of the project, but appear seperately on the UI. To create a new Release, you go into the File Manager, click “Add release” and enter a name. Next, you have to upload your files onto the SF Server, using WebDAV, SFTP or rsync. You can also upload Release Notes/Change Log. You then click a button and add one (or all) files you just uploaded to the release.

In the past, there was one global upload directory, so after uploading your file and clicking “Refresh”, you would see all the files in the upload directory, including files from other users. While not really a security concern (stuff in that folder is meant to go on the site anyway), you could accidentially (or on purpose…) add other users files to your releases, making them unavailable for them. Luckily, this has been changed – every user only sees his files now, which is good.

Not so good is the file type management. Essentially, you have to pick a File Type for each file. Unfortunately, there is no filetype for .rar, a request which is open since August. August 2003. So the files show up as “Other” or “Other Source File”. Well, at least Ross Turk (Director of Community at SF) has acknowledged that now.

sf-release

CodePlex

CP does not have the notion of separate Packages. You only have releases. To create a new one, you click on “Create a new release” and type in a Title. You have a Wiki-Editor to edit Release notes and then you can upload files through the Web UI. There is no notion of file types, there are only 4 general types: Application (Runtime Binary), Source Code, Documentation and Example. You can set a development status for that release (Planning, Alpha, Beta and Stable), decide whether the release is publically visible and whether it’s the default release.

cp-release

Conclusion

For my purposes, CodePlex wins. On SourceForge, I have to use an external program to upload files (even though WebDav is part of some browsers now), and I have to work with the strange notion of file types. I think (actually, I guess) this is because of the large *NIX community on SF, because some projects are available in .zip, .tar.gz and .bz2 format, and often for multiple architectures. So there it may make sense to specify “this is the .tar.gz binary for x86”. But for me, this is just clutter. I rarely have more than one architecture. So CP allows me to upload me releases a lot quicker, although you can now argue that web based uploads are somewhat unstable for big files, and that it’s tedious if you want to upload many files at once. You may be right, but if I look at what I’ve had in the past and what I plan to have in the future, this simply does not apply to me. I prefer the much simpler approach of CodePlex by far.

Overall Conclusion

SourceForge is on the internet since the dawn of time. It is really stable and has eleventy billion features. It supports large projects with many developers and many architectures. It offers 2 different Source Control backends. It is really mature and good. But it is also insanely complicated. You have to apply and wait for approval, you have to categorize your project in some categories, and you have to spend some time to learn how the file upload feature works.

CodePlex is relatively new. It offers much fewer features, has a somewhat weird Source Control and some performance issues. But it is also really simple. Creating a project takes a minute, creating a new release takes two. There is not much to customize and to tweak.

But if I look at my needs as a single developer who just wants to get an OSS project up, CodePlex is my choice for now. I really respect SourceForge, but I want something simpler and something with a nicer UI. Sure, that big green “Download” button is nice, but the front page of my project does not really look as clean and nice as I’d like it to be, even though it became a lot better after the re-design.

The performance issue on CodePlex should be something that Microsoft can resolve. The Source Control issue requires constant improvements on svnbridge, but I think that SVN will always be a second-class citizen unless CodePlex offers a real, native SVN repository. I think I’ll spend some time with TFS.

I was positively surprised by members of both sites. After tweeting about me thinking whether to choose SF or CP, I was tweeted by both Ross Turk of SF and Sara Ford of CP, asking about feedback. It’s really great to see high-profile employees pro-actively asking for more feedback. After Sara pointed out that SvnBridge is now hosted (which I completely missed), I decided to give it a fair chance.

CodePlex HAS issues, and if I were to host a project that would involve many developers I would pick SourceForge, because it has reached the maturity and feature set to really support large projects. But I do not have that need. I want something simple that just works, and CodePlex fulfills that need. And I even have a Project on CodePlex now, with some more to follow shortly.

Sharepoint Discoverter – Convert .wsdl/.disco files for Sharepoint

If you want to create your own Web Service that runs on top of Windows Sharepoint Services 3.0 (WSSv3) or Microsoft Office SharePoint Server 2007 (MOSS2007), you will encounter the issue of setting up the .wsdl and .disco file. For Sharepoint, you need to rename and modify them, which is a small, but tedious task. (If you want to know how to write SharePoint Web Services, check out this blog post, which covers creation of the .asmx, but also the .wsdl and .disco files)

I have written a small application that will do this automatically for you: .disco/.wsdl in, disco.aspx and wsdl.aspx out. It requires .net Framework 3.0 (just as Sharepoint) and is available in both binary and source form on CodePlex: http://www.codeplex.com/discoverter

Discoverter

On a related note, this was also a test to see how good CodePlex is. I will write up a little CodePlex vs. SourceForge post later on as I have experience with both now, and both have advantages and disadvantages.

Do not use AlphaImageLoader to “fix” transparent PNGs in IE6

If you (have to) still support Internet Explorer 6, you may (or almost certainly will) encounter the problem of Internet Explorer 6 not supporting transparent PNGs. There are a variety of workarounds for them. Some use JavaScript to silently replace files, but the most common way seems to use the AlphaImageLoader in your CSS.

Let me quote one of the many many sites that give that advice:

#truck {
 filter: progid:DXImageTransform.Microsoft.AlphaImageLoader (src=’images/mater.png’, sizingMethod=’scale’);
}

Looks nice and clean and seems to work. Well, there are two issues with it. The first one is a rather small issue:

The one big problem with this method, though, is that it if a link is placed over top one of these filters, it often won’t work. That’s not to say it always won’t work, but it often won’t. Depending on the styles of the elements and even the size of the image sent in to the filter, it might work.

The second one is a bit bigger: It can deadlock Internet Explorer 6. It’s not too fun if half of your clients report that their browser is locked up for 10 minutes everytime they access the site, and for me it’s the reason to flat out reject using AlphaImageLoader ever again.

George V. Reilly has an excellent blog post about this issue, and he also has the technical explanation:

To understand the problem, here is an explanation from the IE team (thanks Peter Gurevich!):

  • Each IE 6 window is a UI thread.
  • The HTML page and any script you wrote for the page run in the UI thread. Therefore filters in your page or in script will download on the UI thread
  • IE’s implementation of the AlphaImageLoader filter downloads images synchronously
  • Asynchronous loading of an image or successive images on the UI thread has the potential to hang the browser and adversely affect the user experience.

Thanks a million times George, that post of you is truly worth gold!