Coding Over the Holiday Break
January 3rd, 2007I had several tasks I wanted to complete on several of my personal projects which I had on hold while I was busy with other work the past few months. Over the break I was able to squeeze in time between driving around the state for family visits to knock of few of these tasks off my list.
First I added a new video for SmallSharpTools.Messenger which is a contact form control for ASP.NET. It is highly customizable and I wanted to show how it could be used. The video walks through the code to show how it works and how to use it. It then shows a live demonstration of the contact form in action. I created this control to learn how to create some of these features for the first time, such as smart tags, templating, bound properties and custom events. I often refer back to this project when I create new controls.
Next I updated the SmallSharpTools.EmbeddedScripts which is another ASP.NET control. It is a container for a series of popular Javascript libraries like Prototype, Scriptaculous and Dojo. I wanted to adjust how it adds the script includes to the page and add another working example to the sample website included in the solution. Previously when I requested the scripts to be included in the page ASP.NET would place the script element in the page at the point where the control is placed in the designer. What I wanted was for it to be added to the head of the HTML document instead. I changed it to manually add a LiteralControl to the HEAD element as the ClientScript methods would not do that for me.
For the working demo update I added a drag and drop example. You can see the drag and drop example on the staging site. The auto-complete demo was available before.
What I also did for that project was update the MSBuild script and the CruiseControl.NET setup to automatically build and deploy updates to the staging site. This way I can submit my changes to source control and within a few minutes it will have the update ready to try on the staging site. Everything to do this is in the build script. What I hope to do next for this project is record another video showing how easy it is to add Javascript enhancements to your website with this control.
The new project I started this past week was LinkMindr.com. It is functional, but I am still calling it alpha because it is lacking many of the features on the website which I did not have time to complete. What you can do already is create an account and save the links on the Tools page as bookmarklets to make it easy to add links to your LinkMindr profile. The home page then shows your link based on the time you added them, such as Today, This Week, This Month, etc. The backend supports tags, ratings and other features but the UI has not brought them out. The bulk of the work so far has gone into the domain layer which includes created the tables, constraints, stored procedures and the domain layer in C# to access all of it. I also created a series of unit tests which verify all of the functionality. My day job has not allowed for this mode of development so it was pleasant to get back to developing a backend and then throwing together the UI without being concerned that something in the domain layer or database was not working as it should.
I have a list of tasks to complete to bring this website to a beta status at version 0.5. Then I hope to get feedback on the website and add more features I had not considered. I came up with this idea because of sites like Digg.com and Slashdot.org which frequently overwhelm an interesting website and make it unresponsive for a while so I needed a way to save the link for later, but emailing myself a link or scheduling a reminder in Google Calendar was getting tedious. Now I just have the bookmarklet send the title and url for the current page to the Add Link page and submit it there. I can check it out later that day or over the weekend.
Beyond the timely nature of the social bookmarking on this site, I plan to set it apart from the other sites which do the same thing by producing a distributed version of the website. Different companies and organizations could host these sites and have reports relayed back to a hub where it maintains statistics so that it can show link reports based on time, frequency, tags and ratings. The groups which I anticipate would use such a distributed system would be gamers, academics and IT professionals and grouping the statistics about their interests in these groups will make for a more useful community than what is available on the big social bookmarking websites.
I can also see people hosting their own individual LinkMindr site at a hosting service and associate it with a hub server of their choice based on a common interest. I have yet to fully flush out how I would have the nodes talk with the hub sites. But initially I would have the node tell the hub that it has new data and the hub would come get it when it wants to get it. And the node site may need to register with the hub so that there is a level of trust available. If a node does start link spamming the hub it can simply start ignoring those requests and also purge all data which originated from that server. I would also only display links submitted from multiple sources and hopefully check them against a phishing database to prevent that sort of abuse.
I have considered extensions for Firefox and IE7, but the simple Javascript used for the bookmarklet really works well for direct browser integration. There is little reason to do much more.
