14. October 2006 19:49
After two months of working nights and weekends, I've finally finished Photo History Doc, my little contribution to the shareware world. I'd love to hear what you think about it. Visit http://www.photohistorydoc.com and download it and let me know what you think.
I'll post more about it and how it gets received out in the world later.
7. October 2006 19:07
I'm disabling trackback on my blog because one particular post gets spammed with about 30 porn trackback spams a week. All of them in one batch. They point to seemingly empty places. So if you want to trackback here, sorry, too bad. It's too much of a pain to delete all the spam trackbacks and there is no easy way to track the offender or block him/her/it.
19. September 2006 03:00
A little puzzle came up today. Fetch an image out of a database and stream it down to the browser. The trick: we don't know what type of image is stored in the database. So I borrowed a little from our Python friends and this is what I ended up with.
internal static class ImageTypeFinder
internal static string GetMimeType(byte image)
string retval = "image/jpeg";
string imgtype = GetImageType(image);
retval = "image/bmp";
retval = "image/gif";
retval = "image/tiff";
retval = "image/png";
internal static string GetImageType(byte image)
int len = image.Length;
if (len > 32) len = 32;
string first32 = ASCIIEncoding.ASCII.GetString(image, 0, len);
internal static string GetImageType(string first32)
string retval = string.Empty;
if (first32.StartsWith("GIF87a") || first32.StartsWith("GIF89a"))
retval = "gif";
else if (first32.StartsWith("MM") || first32.StartsWith("II"))
retval = "tif";
else if (first32.Substring(6, 4) == "JFIF" || first32.Substring(6, 4) == "Exif")
retval = "jpg";
else if (first32.StartsWith("BM"))
retval = "bmp";
else if (first32.Substring(1, 3) == "PNG")
retval = "png";
It's a bit of an esoteric puzzle, but if you're trying to solve this one, the above code should help.
12. September 2006 17:17
I want a T-shirt with these words on it:
Bad Code is Platform Independent
All the political and religious debates about platform superiority all come to an end when running bad code. It amazes me how much bad code is out there (some of mine included). And yet we so often jump to blame the platform, runtime, operating system, tools, or some other outside element.
Where have all the good coders gone? More to the point. Were there ever any?
Bad coders never die, they just pick a new platform.
1. September 2006 09:52
Some time ago and again today, I had occasion to write an ASP.NET page that had no form in the .ASPX page but would accept and handle POST 'ed data. This was in an effort to support a REST-like interface for non-ASP.NET developers. Here's the way it turned out.
The .ASPX page looks something like this:
<%@ Page Language="C#"
There is nothing else in the file. Now the code behind looks like this:
public partial class extract : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
string alldata = string.Empty;
using (StreamReader sr = new StreamReader(this.Request.InputStream))
alldata = sr.ReadToEnd();
//convert to strings - assumes URL encoded data
string pairs = alldata.Split('&');
NameValueCollection form = new NameValueCollection(pairs.Length);
foreach (string pair in pairs)
string keyvalue = pair.Split('=');
if (keyvalue.Length == 2)
if (alldata.Length > 0 && this.Request.HttpMethod.ToUpper() == "POST")
if (form["text"] != null)
//TODO - do something with the data here
Response.Write("*** 501 Invalid data ***");
Response.Write("*** 599 GET method not supported. ***");
Well, there you have it. There are probably better ways to do this, but I didn't find one.