Technology
Inspired by Ruby on Rails
Instead of vegging out on TV after work today, I decided to veg out on the web. Between reading and IM I managed to kill about 2 1/2 hours before I even noticed. The payoff for this exercise was discovering a little project called the .NET Action Pack. Rob Conery has taken the concepts of Ruby on Rails and reimplemented them using C# and .NET 2.0. The screencast he used to demonstrate the action pack was quite impressive. With a build provider, a configuration file, and a single assembly, you get a whole host of classes that let you query and manipulate a database however you wish that are available at design time. I’m definitely going to try this out at work tomorrow.
Visual Studio 2003 Service Pack 1
Somehow I completely missed this announcement about the Visual Studio 2003 service pack being released. Our group at Lockheed Martin won’t be upgrading to Visual Studio 2005 until 2007 at the earliest, so it looks like I’ll be installing this service pack very soon. Apparently, Microsoft found quite a few bugs that needed fixing.
Downtime
I haven’t blogged in awhile since finishing my latest project, pushingback.com. My employer sent me off to Cognos 8 training last week. I’ve spent the rest of the time doing what I can to fill in the void between billable projects. My boss tries to fill in the time by assigning me tasks like documentation, and creating PowerPoint presentation on this or that flavor-of-the-month technology. The latest such assignment is to lead a project to create a web application our clients can use to communicate with us about past, present, and future projects.
My employer was very cheap concerned about the impact on the budget, so when it came time to implement an internal solution for defect/issue tracking back in 2004, we chose to customize the ASP.NET IssueTracker starter kit (I’ve discussed this earlier) instead of dropping some cash on FogBugz or Bugzilla.
Now that my boss has suggested looking at COTS or open source solutions (again), I’ll be spending at least some of this downtime trying to find an improved solution.
ASP.NET 2.0 Membership
Today I’ve been spending a bit of time fiddling around with Visual Studio 2005, particularly the ASP.NET 2.0 membership functionality. When I visited 4GuysFromRolla.com to see what they had to say about it, I came across 5-part series of articles. The examples are in VB.NET, so I’ve been rewriting them in C# (my preferred .NET language) as I go along. What stood out about their information message example in part 4 of the series was that they added a label to their login page and set the text string based on the error details.
It seemed to me that there should be a property in the Login control that could be set programmatically instead of adding a label that results in two error messages for the user to look at. It didn’t take much digging before I found it. The property: FailureText.
Here’s how my revised code looks:
protected void Login1_LoginError(object sender, EventArgs e){
MembershipUser userInfo = Membership.GetUser(this.Login1.UserName);
if (userInfo == null){
//The user entered an invalid username…
SetLoginFailureText(string.Format(“No account exists with the username ‘{0}’.",this.Login1.UserName));
} else {
if (!userInfo.IsApproved){
SetLoginFailureText(string.Format(“The account with the username ‘{0}’ has not yet been approved by the site’s administrators.”, this.Login1.UserName));
} else {
if (userInfo.IsLockedOut){
SetLoginFailureText(string.Format(“The account with the username ‘{0}’ has been locked out.”, this.Login1.UserName));
}
}
}
}
private void SetLoginFailureText(string failureText){ this.Login1.FailureText = failureText; }
Effective Bug Reporting
This has been a real problem at work lately. I’ve decided to write a document to send to people who report bugs to try and stem the tide of useless “it doesn’t work” reports. I found a nice long piece on effective bug reporting by Simon Tatham here. I’ll probably use it as a reference for further reading because I envisioned something much shorter than seven pages.
Community Server 2.0 Quick Image Buttons
The blog I’m building for a client at work needed an image button to trigger searches instead of the standard link button. After my ill-advised attempts to extend CommunityServer.Controls.IButton, the consultant I’m working with recommended a far simpler solution–changing the ASP.NET LinkButton tag to enclose an HTML image tag with the border attribute set to zero (0).
If you want to use the same technique, start with this sample skin file.
A "Most Viewed Blog Posts" control for Community Server 2.0
The Code Project is one of my favorite sources for finding out how to do things on the .NET platform. Since my blog was down for a bit a couple days ago, I thought I’d put an article there on the latest bit of customization I’ve done to Community Server. If you’re interested in the article, visit this link to read it.
Changing File Upload Limits in Community Server 2.0
I wanted to see how much effort it would take to replace this RSS feed with a CS 2.0 blog. It’s currently being generated by an old ASP application that I customized with a colleague of mine. But I kept getting errors when I tried to upload MP3 files above a certain size. A bit of googling revealed this MSDN entry and the attribute “maxRequestLength”.
RSS Publishing
It shouldn’t be a big deal at all with apps like Community Server 2.0 or WordPress available, but budget and/or personnel constraints often conspire against us using either one. So lately, we’ve spent more time (and money, but salaries apparently don’t count) putting together custom applications to generate RSS feeds.
I always check to see if a solution to my problem already exists before building my own, so when it came time to develop the MethResources.gov RSS feed, I simply reused the example from this article by Scott Mitchell. Behind the ONDCP podcast (I did the database work, a colleague did the rest) is a classic ASP application with the most basic admin functionality.
To cut down on this sort of one-off RSS app building, I’ve been hunting around for any bits of code or fully-formed toolkits that could be reused easily. The latest interesting bit of code I came across is the ASP.NET 2.0 RSS Toolkit. It’s from a Microsoft employee, and most comments I’ve read on it have been positive. Of course, when I tried to get the samples to work, I had all kinds of problems. The solution was to create a new website project (with location = “File System”) , browse to the samples directory of the toolkit, and open the existing website. Once I did this, and added RssToolkit.dll to the GAC, all six scenarios worked perfectly. The two examples I tried from Scott Guthrie’s blog entry on the toolkit worked also.
The only things I haven’t found in this toolkit so far are support for enclosures and an easy way to syndicate a database.
ASP.NET Calendar Customization
My latest assignment is to help redesign this website into a true blog for the office of the drug czar. We’re using Community Server 2.0, and one of our requirements is to customize the calendar. Since the CS 2.0 calendar is a wrapper around the stock .NET framework one, I put together a Word document to explain the customization process to the graphic designers who are actually responsible for the look-and-feel of the calendar. My hope is that they’ll understand it well enough to reduce my workload when it comes time to implement this.
The document applies pretty well to calendar customization in general for ASP.NET 1.1 projects.
I created an RTF version and an HTML version of the content as well.
Community Server 2.0 Patching
Telligent sent out an e-mail last Friday afternoon about a critical security patch. These were the patch instructions:
Directions for installing the patch:These are the contents of the readme.txt file:
- Download the .zip file here:
- Community Server 1.1: [communityserver.org/files/fol...](http://communityserver.org/files/folders/archived_cs_releases/entry532297.aspx)
- Community Server 2.0, ASP.NET 1.1: [communityserver.org/files/fol...](http://communityserver.org/files/folders/releases/entry532260.aspx)
- Community Server 2.0, ASP.NET 2.0: [communityserver.org/files/fol...](http://communityserver.org/files/folders/releases/entry532293.aspx)
- Unzip the file(s) and extract them to a location on your computer
- Follow the directions in the readme for installing the patch on your Community Server 2.0 server(s)
Steps for installing the Community Server 2.0 SP1 Patch.I wish the readme file had said exactly where the updated source files go. I don't like the idea of having to hunt around files to replace when the patch has to do with security. So here's what the readme file should include:1. Make a copy of the CommunityServer.Components.dll found in the bin folder of your web site. 2. Replace the existing CommunityServer.Components.dll with the new one you just downloaded and unzipped.
If you have questions or problems, please email support@telligent.com
We have also included the updated source files. If you have modified any of the code in the Community Server Components project you will need to apply these fixes and redeploy your assemblies.
ComponentsHttpModuleCSHttpModule.csTelligent has an announcements blog with a post about this security patch.ComponentsComponentsHtmlScrubber.cs
ComponentsComponentsTransforms.cs
Paging in Microsoft SQL Server stored procedures
Today I found out that an old boss of mine at Ciena Corporation has a blog (thanks to Plaxo). I learned a lot about ASP.NET, C#, and Plumtree through the work he assigned to me. From looking at the posts he’s got in there so far, if you’re looking to overclock a PC or find out more about Vista, it’s worth checking out. An older post of his has a good example of how to implement paging in a SQL Server stored procedure.
IntelliSense for SQL Query Analyzer
Red Gate Software is giving away a tool called SQL Prompt until September 1, 2006. If you work with SQL Server at all, definitely visit Red Gate and grab this.
Amazon "1-Click" Patent Challenge
According to this article, Amazon’s patent is being reviewed because it looks like the U.S. Patent & Trademark Office granted a similar one 18 months before Amazon’s filing. It will be interesting to see what fallout there would be from a decision invalidating Amazon’s patent.
That aside, this brief story does a nice job of pointing out how profoundly broken the patent system is. The prior patent wasn’t found by a USPTO employee, but an actor from New Zealand who was angry about a slow book delivery and wanted to get back at Amazon. If Amazon hadn’t made one of their customers upset, who knows if this would have ever been found. The patent review will probably revisit these requirements:
- is 1-click new
- is 1-click useful
- is 1-click nonobvious
Apple's business model beating Microsoft's
So says Walt Mossberg, the man with the job I envy most in technology.
I agree with what he says for the most part on the advantages of the end-to-end model versus the component model. One thing I would say that’s slightly different is that Apple is winning not merely because of the tight linkages, but because of the quality of the end product, and their huge market share.
Having lost what Mossberg describes as “the first war” in the personal computing space, Apple took a look at the MP3 player market and delivered a product significantly ahead of the competition in quality and ease of use. Even when connected to a PC (as I did with my first iPod), using MusicMatch for the music software, I liked the experience better than other players I’d considered. Once iTunes came to the PC, it made things even easier.
Part of what helped Apple get its current marketshare in the digital music market is their refusal to inflict the subscription model on their customers. They understood that people want to own music instead of renting it and delivered just that. Between that, their great per-track price point, and the minimum necessary DRM, there are plenty of reasons to choose Apple over the competition.
Downside of Certification
According to this eWeek article pay premiums for skills that don’t have a certification grew three times faster than pay premiums for certified skills.
I never really bothered with certifications for any of my skills because I was usually too busy working to set aside the time to study for and pass the exams. I was more motivated to do that for things like grad school. I always felt that experience was more valuable than a certification, but the counter-argument of “if you have the experience, certification should be no problem” is still a reasonable one.
Still, I hope the pay premium changes mean employers are choosing experience in favor of those who’ve passed an exam but have little or no hands-on experience.
Amazon.com and A9.com switch to Microsoft Search
I hadn’t noticed this until yesterday, but Google is no longer the guts of A9 & Amazon search. According to this article, A9’s contract with Google expired and they decided to go with Microsoft for the replacement.
I tried “v for vendetta” as a search in both A9.com and Google to see how the results differed (if at all). In my case, the top 6 links from A9 were to the V for Vendetta website by Warner Brothers (hits 1-2), its IMDB entry (hits 3-4), its Wikipedia entry, and its Rotten Tomatoes review. Google gave me the same hits, in almost the same order. The only difference was that the top result returned showtimes for the movie close to my zip code. A9 actually provides that info too, you just have to check the “Movies” option.
It looks like Microsoft’s search has actually improved somewhat since I last tried it. I’ll be curious to see what moves Google and Yahoo make to try and stay top two in market share.
Update:
When I talked to my friend Sandro about the switch and told him what search term I used, he suggested I use a tougher search term to test the relevance of lower-level results. We compared the results of searching for his name “Sandro Fouche” between Google and Live.com. With Google, I had to go to the 50th result to find the first irrelevant result. With Live.com, I got an irrelevant result as early as the 10th result.
Mac OS X gets its first virus
According to this article in MIT Technology Review, the Apple operating system got it’s very first virus this year. I suppose the “virus-free” label wasn’t going to last forever, but we should still be extremely impressed that it took about five years for a serious vulnerability to be found.
Even with the latest vulnerability announced, I’ve still found the Mac mini I bought last year to be incredibly stable and easy to use when compared to any of the Windows machines I currently use. The only fallout from this announcement I see is that anti-virus software makers will be able to sell more to Mac users.
Ether Beta Test
Awhile back, I read a blog entry (probably from Robert Scoble) about a venture called Ether. If memory serves about how he described their goal, they’re trying to be the eBay of services. I figured I’d sign up and see if they’d add me to their beta test list. Today I got their e-mail saying I’d been added.
Here’s the business card I generated after signing up:
Scott Lawrence (IT Advisor)
1-888-MY-ETHER ext. 01568799
|
I’ll post more as the beta test proceeds.
Ads coming to iTunes
I came across the article today in Advertising Age (via a Wall Street Journal link). The article hints that this is the first step toward advertising showing up on iPods.
I’m not surprised. It was inevitable that advertising would show up on iTunes. I’d been hearing it in some of the podcasts I listen to already. I wouldn’t expect Apple to turn down that revenue stream forever. It’s still a little sad that there’s one more place we can now expect to see ads.