October 2003 - Posts
There are a number of posts regarding the desire for meaty, substantive posts from the PDC. Deep into the first day of pre-PDC blogging at 9:40 PM in Vermont, I wanted to say that I've been enjoying the non-.NET posts of PDC attendees. I don't mind reading about guys finding their way around, being awed or confused by their surroundings, wanting to make the most of a very personal, very human, and very brief conference where the excitement has been really high for a really long time. These types of posts about wifi access or seeing this guy or that gal at the hotel lounge, are part of the nerd drama of guys (and gals) like myself goin' to the PDC. I mean, be real. We'll each be spending a lot of effort (okay, maybe just me) TURNING OFF the Whidbey - Yukon - Longhorm - Avalon - WinFS - yadda-yadda channel over the next...uh, years. So I say, bring on fellow goofy nerds this week doing their thing at the PDC.
This subject isn't fair. Sharepoint doesn't crash all the time. Its just that I've been using it for going on two years now, and I never could relax and be confident in it due to occasional issues with webparts, WSS, Digital Dashboard disappearing acts, and “legacy” SPS system VBS behaviors. We've built our company intranet around SPS as soon as it was released and haven't looked back. Much.
Anyway, today we encountered WSS.MDB corruption and Sharepoint would not load. It was pretty much dead in the water. Fortunately, my best-darn-network-guys-in-the-whole-world were quickly all over it and the three of us attacked the problem from various flanks, deciding to go with ESEUTIL.EXE utility in the SPS Shared System files \bin directory. And it actually did the trick and the WSS.MDB was repaired.
It sucked being down, of course, but stuff happens, and you have to always appreciate the availability of MS package-installed utilities in case you ever need them.
While looking at the features list in this month's issue of CoDe magazine, I was blown away by the list of authors. Get a load of some of these names with content in issue:
and others whose names I don't recognize personally but who I'm sure are no less talented. You definitely need to check out this issue of CoDe Magazine.
...but in a good way.
Billy spoke at the Vermont .NET Users Group tonight. Thank you, INETA! If you ever get the chance to sit in on a Billy Hollis session, DO NOT MISS IT! Bill's topic was Advanced Object Techniques in .NET and it totally lived up to its billing. (No pun intended.)
Bill didn't use a single powerpoint slide (uh, except to present information about INETA...) but instead was ALL CODE, BABY. He dug into Interfaces, dynamic module loading, extender providers, and other related issues.
Not only was I wowwed by Billy Hollis's presentation, I reserved the VTDotNet copy of Chris Sells' Windows Forms Programming in C# which Julie L brought to the meeting for me. (Yes, Julie, I promise to post a review on our Group Book Review Page. :-)
Oh, and besides all that, I left the meeting with two month issues of asp.net PRO and two issues CoDe magazine, including Dino Esposito's article on ASP.NET Controls.
Whoa. What a night!
||It was time to replace my 3-year-old Motorola StarTek phone. I rarely use my phone, but I don't go anywhere without it in case anyone from my out-of-state company needs to contact me or I need to make a call from the road.
In deciding what to buy, I liked the idea of having a robust phone book, but I particularly liked the idea of not having to carry around a phone AND my Dell Axim PocketPC which I often do currently. So while waiting at the local Verizon Wireless store I saw the Thera by AudioVox. Its a real PocketPC, running the same version as my recently purchased Axim: Version 3.0.11171. It uses an ARM SA1110 processor with 32MBs of RAM with a 32MB Media card. Came with ActiveSync 3.5, a cradle, USB connection, and power adapter. With a 2-year renewal of my service agreement, the price of the PocketPC was only $105. Now that's pretty inexpensive for a device that I can surf the web on, or read Jules Verne's Mysterious Island, and use as a phone. It should also support Compact Framework apps...
I should say that as a phone it's pretty clunky and is more like using a walkie talkie than a phone, but it seems to meet my particular lifestyle and phone needs. The Verizon guy told me it was discontinued, so I don't know how long it will be available. There were similar PocketPC phones on display, but they were closer to $600 than the $100 that I paid for the Thera. We'll see. I have 15 days to decide whether I want to take it back for something else.
My wife is tired of her Palm and asked me twice since I picked up the Thera today when I was going to give her my Axim. :-)
As I mentioned in an earlier post, I needed to implement a subscription approach for a couple of company .text weblogs. Consequently I had to add a new page in the .text httphandling framework and understand what was being handled behind the http scenes. That said, this is still a view from 1000 feet and there's a lot more I hope to understand about the framework and ScottW's use of httphandling. This post is based on .text 0.94 release.
Before describing the process, a helpful thing to know is that the subscriber.aspx page does not really exist and is physically comprised of a Pagetemplate.ascx with other controls loaded via a skins.config file in the web project skins directory. I'll get to those.
1) Create a new PageType enum. PageType class located in Dottext.Components project. Optional. Can use “Other or Not Specified.“
2) Copy existing class from Dottext.WebUI.Pages project folder to same folder and name accordingly. To follow existing naming convention I named the page "BlogSubscriberPage.cs." The page does a trackback using the PageType enum.
3) Copy existing class from Dottext.WebUI.Handlers folder to same folder and name accordingly. To follow existing naming convention I named the page "BlogSubscriberPageHandler.cs." The page handles the BlogSubscriberPage.cs added in #2.
4a) Add control entry to Skins\[skinname]\Skin.config file located in the web project. In this example, for Dottext.WebUI.Pages.BlogSubscriberPage. The Skin.config entry looks like the following:
<SkinItem ControlName="Subscriber.ascx" ParentControl="pageBody" CacheKey = "ControlPage" CacheTime = "30" />
4b) The control is added to the Placeholder ID in the PageTemplate.ascx page located in the same directory. The template page excerpt where the control is loaded looks like the following:
<asp:PlaceHolder ID="pageBody" Runat="server" />
5) Create actual .ASCX control in web project Skins\[skinname]\Controls folder. My control file name is Subscriber.ascx. There is no code-behind file and it inherits from a class in the Dottext.WebUI.Controls namespace.
<%@ Control Language="c#" AutoEventWireup="false" Inherits="Dottext.WebUI.Controls.Subscriber" %>
6) Add code-behind for .ASCX in Dottext.WebUI.Controls folder. In the example: Subscriber.cs. It inherits from BaseControl class found in the same directory.
public class Subscriber : BaseControl
7) Add httphandler in web project blog.config file. This is what mine looks like:
<HttpHandler Pattern = "^(?:\/\w+\/\w+\/subscriber\.aspx)$" Type = "Dottext.WebUI.Pages.BlogSubscriberPageHandler, Dottext.WebUI" HandlerType = "Factory" />
I hope no corrections are required, though I certainly welcome them and any additional info on the process.
Happy .text coding!
A couple days back I saw a wonderful opportunity to rewrite an existing page, make it a base webpage class, then with inheritance extend it for an add-on feature for a new app I was working on. I began working in this direction for about an hour when I realized I had to focus on the primary objective: getting the app out the door meeting its defined scope.
This post is not about application scope, but about using company time on Code Pursuits which do not lead to immediate productivity. I could have spent a day or two on company time digging into a re-write which was not really necessary at the time. I have the luxury (and responsibility) to decide how my working hours are best spent for my company's benefit. We each have those decisions to make. Like you, my company expects me to be as productive as possible and to provide them with highest quality applications in the shortest time possible. While my ultimate priority is to my own career and my skillset, my immediate priority from 9-to-5 is to my employer. I've been strictly a teleworker for over 3 years now, but there is still a clear distinction between company coding time and personal coding time.
There have been articulate and passionate posts by Eric Sink and others which state that it is the developer's sole responsibility to learn and to grow, not their employers' responsibility. I cannot improve on what has been said. I am using this incident as an example of where my thinking would follow these principles. On my company's dime, I get the app out the door and move on to my next task. If I'm going to pursue an approach which I know will take extra hours but pay back dividends (for me and, yes, for my company), that work is done at night or weekends, on my own time. The decision is not based solely on the prospect of extra hours, but on other factors as well:
- Will I learn a lot in doing this? (yes)
- Will I spend time googling and reading in the course of completing this task? (probably)
- Have I used this technique before? (no or only rarely)
- Would the result be something I would wish to record in a blog post? (usually)
During weekday working hours I ask “How can I be most productive for my employer?” At night and weekends, I ask, “How can I be most productive?”
Lots of grey area in this post. Very subjective stuff. Time for a post to describe a technical process. Yeah.
I finally “had a reason” to checkout Reflector. I was updating my C# asp.net app and found a call to an older VB.NET component I'd been using. (I started in .NET using VB.NET.) Well, I wasn't going to do that anymore. It was cool that I could use a VB.NET component in my C# app, but it was time to re-write it. Then I remembered that Reflector showed compiled source from a dll in either VB.NET or C# (and Delphi). My second reason for giving Reflector a try, earlier that day I was frustrated searching the system namespaces within VS.NET, and it wasn't the first time.
Okay, I was going to DO IT!
Now it isn't a matter of finding a reason to use it, its finding the TIME to use it....every day!
A most excellent week spent customizing .text 0.94 for a company weblog to track project events has ended with the release of not one, but two separate weblogs now running on the company intranet. The same day the project event weblog was put online I was asked to create a version for proposal activity as well. I was able to “customize the customized version” to track proposal event activity in a couple of days.
To make the .text framework a project event tracking application, the following changes were required:
- Anyone can create a new weblog from active projects from a “Create Project Weblog“ service with the project selected from a dropdownlist. The link is found on the Project weblogs home page.
- SQL data, procs, and .text classes were updated to support addition of project id and user id values for tie-backs to other data.
- RSS Clients are still being evaluated and not on all users' desktops, so to support communications, a weblog subscriber system was implemented. This meant that all posts and all post comments are sent as HTML-formatted emails to that project weblog's subscribers. The email contains entire post, user and project-specific information, and urls to the post or comment.
- To quickly add project team subscribers to any weblog, the creator of the project weblog selects subscribers to the weblog at the time the project weblog is created. There is also a separate Subscriber Administration tab in the Admin section to update the subscriber list.
- Any user can unsubscribe from / subscribe to any weblog at any time through a “Subscriptions“ menu link in the My Links menu block for the project weblog.
- Anyone can post to any project weblog.
- Since anyone can post to any weblog, project-specific and author data must be added on all post lists and emails.
- Links to other project data found outside of the weblog is available in that project's weblog.
The Proposals event weblog and the Project event weblog both use the same .text VS.NET project modules to support future enhancements. I'm hoping users ask for a lot of enhancements so I can spend more time working with ScottW's code!
My coding + weblogging practice seems to have settled into going a number of days focusing on the work, then taking a night away from coding to post a few blogs on the experience. In the meantime I'm reading other blogs and the ones which don't get deleted remain my reference list for things I want to review or to have ready access. I'm calling this my .NET Undeleted Blogs Series. If I don't get back to them as I would hope, at least I have spent the time to re-reference them here in a single location...
ASP.NET Weblogs: 10/14/03 - 10/17/03
Unofficial GotDotNet Main Feed: 10/15/03
Weblogs @ DotNetJunkies.com: 10/16/03 - 10/14/03
More Posts Next page »