|
|
-
I don't remember who called whom, but I clearly remember how excited I was that late summer night in 2000 as I spoke to my dad on the phone. I was in the bedroom of the apartment I had been renting with my fiancé Shannon, who's now my wife. I proudly relayed the news that Shannon & I had successfully placed a bid on a townhouse, and we'd soon be homeowners. I was pacing back in forth with restless energy as I spoke, unable to contain the feeling that, at 28, I was finally becoming a grown up.
My father warmly congratulated me and let me ramble self-absorbedly for a bit. Between the househunting, wedding planning, and recent promotion at work, it had been a busy summer for Shannon and me. A few minutes later, after our conversation had settled into one of those "I guess now is as good as time as any" moments, my dad broke the news that he'd been to the doctor that afternoon and the doctor had identified (in my Dad's words) "an old baseball injury." I guess that was his way of coping with the news he'd relay in the next sentence: my father, who at 58 had recently been at the absolute peak of athletic health, had just been diagnosed with Lou Gehrig's disease, also known as Amyotrophic Lateral Sclerois (ALS).
Having known virtually nothing about ALS at the time, I recall my reaction as being muddled, probably more subdued than my father might have expected. I was still riding the high of the news about "our" new townhouse, and had no idea how serious the diagnosis was. I didn't dismiss the importance of the news, but I was taking my cue from my father, who after all had just jokingly broken it to me as "an old baseball injury". The mood he was conveying, although not as bemused as it had seemed earlier, was nonetheless light and matter-of-fact.
ALS is a progressive condition in which the neural pathways from the brain to the muscles throughout the body slowly and irreversibly degenerates. The brain loses the ability to contract the muscles, causing the muscle to wither away, or atrophy. Not all people with ALS experience the same symptoms or the same sequences or patterns of progression. But, progressive muscle weakness and paralysis are universally experienced. ALS, as I'd learn, is virtually always fatal. The mean time for survival is typically three to five years from diagnosis.
My father's case progressed swiftly, and in a devistating pattern. Time after his initial diagnosis seems like a blur. Everything just changed so fast, and continuously. It was absolutely heartwrenching to witness, and this wasn't something that was occurring an ocean away: this was happening right before my eyes, to the man who meant more to me than any other. As my father's condition progressed, I began spending more time with him each week, to help physically and to share what little time we had together. In the end, God's grace saved him from further suffering. Seven years ago today, on July 29th 2001, my father died.
I miss you so much, Dad. You were so many things to me throughout my life: an authority figure, a guardian, a hero, a guide, a coach, a mentor, a companion, a role model, a financial aid office, a great listener, a champion of God's word, and above all, the person I could most turn to in a crisis or just when I needed an ear.
You weren't a great man, but your passing was a great loss. You are in my thoughts always, but especially today.
|
-
Trika Harms zum Spreckel recently blogged a post that discusses SharePoint certifications. In the post, she mentions...
No professional-series cert underway at the moment (MCPD or MCITP) but we would like to have one, especially with the growth in this area. Need to make sure we get the role right and it's not that clear cut. The planning teams are trying to sort through that now (any thoughts? post a comment...)
I'd agree that there's definitely a compelling call for a PRO-level SharePoint certification, and completely understand the certification team's dilemna that it's not that clear cut. Getting the role and scope right are absolutely key, but it's a chicken vs. egg struggle. More than most Microsoft products, SharePoint roles are driven by the environment. Production SharePoint environments range from single-server deployments to mission-critical, multi-tier multi-server environments with high availability requirements and Internet, intranet, and extranet needs. A SharePoint expert needs to be able to evaluate the environment to see which roles are applicable, and then needs the technical competency to fill a role as appropriate.
For SharePoint, does it make more sense to choose the role and then identify its competencies, or would it be more natural to get a braindump of competencies that "PRO-level" SharePoint professionals need to perform, and then group those competencies to define the roles? I think it might be the latter.
Some PRO-style "What? Why? Who?" scenario-based compentencies I'd throw out there include:
Evaluating sharePoint products & editions against solution requirements (i.e. "What do we need to buy?"):
- "Does the proposed solution require MOSS, or is WSS sufficient?"
- "Do we need MOSS Enterprise Features, or will Standard features provide the required functionality?"
- "Do clients need InfoPath, or can we use leverage InfoPath Forms services?"
Evaluating integration with Microsoft Office:
- "Is the proposed solution compatible with Office 2003?"
- "Is the stated Office integration compatible with the proposed SharePoint authentication mechanism?" (for instance, Forms Authentication)
Identifying the appropriate SharePoint feature (which may be "a custom solution") to provide the required functionality:
- My Site?
- Audiences?
- Custom Content Types?
- Managed Search Properties?
- Site collection?
- Alternate Access Mapping?
- Security Policy?
- Specific/custom Web Part?
Deciding how customization should be implemented:
- Feature?
- Solution?
- SharePoint Designer?
- Through the browser (Site Settings)?
Deciding how to selectively display content based on user attributes:
- list/library view
- audience(s)
- Content Query Web Part?
Deciding how workflow should be implemented:
- Out of the box workflows?
- SharePoint designer?
- Visual Studio 2005/2008?
Deciding how branding should be implemented:
- Through the browser (Site Settings)?
- Custom master page?
- custom CSS?
- SharePoint Designer
Designing SharePoint architectures to support...
- code/content deployment promotion from test to dev to production
- server maintenance (e.g., maintain site availability during maintenance)
Deciding how to expose legacy content through SharePoint:
- migrate documents into SharePoint libraries?
- leave the content in place and crawl existing web sites or network shares to expose the content via Search
What are your thoughts?
|
-
The short version: If you're creating a custom login page for SharePoint Forms authentication, pay attention to which master page your login page references. Even though the login page is typically stored under the /layouts directory like application pages, using application.master will give you an awful lot of heartburn. The login page requires anonymous access, which the application.master won't allow. You'll end up in a redirection loop, eventually ending up with a URL such as ( line breaks introduced for clarity) http://mosszoneurl/_layouts/customLogin.aspx? ReturnUrl=%2f_layouts%2fCustom%2fCustomLogin.aspx %3fReturnUrl%3d%252f_layouts%25%2f%2fCustom%2fCustomLogin.aspx %253fReturnUrl%253d%25252f_layouts%2525%252f%252fCustom%252fCustomLogin.aspx %25253fReturnUrl%25253d%2525252f _layouts%252525%25252f%25252fCustom%25252fCustomLogin.aspx %2525253fReturnUrl%2525253d%252525252f _layouts%25252525%2525252f%2525252fCustom%2525252fCustomLogin.aspx %252525253fReturnUrl%252525253d%25252525252f _layouts%2525252525%252525252f%252525252fCustom%252525252fCustomLogin.aspx %25252525253fReturnUrl%25252525253d%2525252525252f _layouts%252525252525%25252525252f%25252525252fCustom%25252525252fCustomLogin.aspx %2525252525253fReturnUrl%2525252525253d%252525252525252f _layouts%25252525252525%2525252525252f%2525252525252fCustom%2525252525252fCustomLogin.aspx %252525252525253fReturnUrl%252525252525253d%25252525252525252f _layouts%2525252525252525%252525252525252f%252525252525252fCustom%252525252525252fCustomLogin.aspx %25252525252525253fReturnUrl%25252525252525253d%2525252525252525252f _layouts%252525252525252525%25252525252525252f%25252525252525252fCustom%25252525252525252fCustomLogin.aspx %2525252525252525253f ReturnUrl%2525252525252525253d%252525252525252525252f _layouts%25252525252525252525%2525252525252525252f%2525252525252525252fCustom%2525252525252525252fCustomLogin.aspx %252525252525252525253f ReturnUrl%252525252525252525253d%25252525252525252525252f _layouts%2525252525252525252525%252525252525252525252f%252525252525252525252f Custom%252525252525252525252fCustomLogin.aspx %25252525252525252525253f ReturnUrl%25252525252525252525253d%2525252525252525252525252f _layouts%252525252525252525252525%25252525252525252525252f%25252525252525252525252f Custom%25252525252525252525252fCustomLogin.aspx %2525252525252525252525253f ReturnUrl%2525252525252525252525253d%252525252525252525252525252f _layouts%25252525252525252525252525%2525252525252525252525252f%2525252525252525252525252f Custom%2525252525252525252525252fCustomLogin.aspx %252525252525252525252525253f ReturnUrl%252525252525252525252525253d%25252525252525252525252525252f _layouts%2525252525252525252525252525%252525252525252525252525252f%252525252525252525252525252f Custom%252525252525252525252525252fCustomLogin.aspx %25252525252525252525252525253f ReturnUrl%25252525252525252525252525253d%2525252525252525252525252525252default.aspx and either a blank screen or the following misleading error message:
Instead, do like the default SharePoint Forms Authentication login page does: use simple.master, or a customized copy.
|
-
July 1 st already. Unbelievable. This year seems like a complete blur. Where's it gone? In the past six months, I've completed another semester of grad school, welcomed another child into the family, changed jobs, changed technology focus (somewhat), lost and found about 10 lbs, consumed a ton of coffee, become SharePoint certified [insert streamers and confetti], and signed on for a couple of external projects that should be kicking off in the next week or so. I really need to learn to slow down.
|
-
Wikis are great. Love 'em. WikiPedia is a godsend, and the number of public wikis I browse and contribute to always seems be climbing. That said, there's a browsing and content organization gap that seems too be present in the the wiki engines I've worked with (ScrewTurnWiki, MediaWiki, the WSS 3.0 wiki site template,..)
Each of those wiki engines are extremely easy to use - they let users quickly add and format content, and provide great mechanisms for creating new pages. Want a new page? Create a link to it, and then follow that link to have the page auto-provisioned. You've now got a new, named page for your content, and you can easily link to that page from anywhere else in the wiki with some simple syntax. (Usually just the name of the page surrounded by one or two sets of square brackets.) From a user-friendliness perspective, that's just awesome. Simple publishing of formatted content, that's now just a hyperlink away.
What I don't like, though, is that I have to use that hyperlink. There are times when I want to create reusable content sections that I could just embed within other pages. I don't want users to have to navigate away from the current page to view that content; I want them to see it here, within the current context. Instead of merely providing a link to the other page, I'd much rather be able to embed a collapsable region that contains the shared content.
Is this a gap, or do any existing wiki engines support this? I haven't looked into it yet, but I wonder how hard it would be to extend ScrewTurn or the WSS 3.0 wiki template to support this feature, since I'm a big fan of their out-of-the-box usability.
Edit: shortly after I posted this, I stumbled upon WikiMatrix, a pretty cool site that lists and compares various Wiki engines and provides that abililty to search for engines based on features. It turns out there are at least two Wiki engines that support content includes and the other criteria I'm looking for (free, with source code; written in C#, has WYSIWYG editing support):
|
-
Yesterday morning, my wife Shannon & I were blessed with the arrival of our third child, Jason Edward Kahler. Mom and Jason are doing great, and in a few minutes, I'll be taking my daughter Nicole and son Ethan to go meet their little brother.
|
-
I think most people hate maintaining their own old code. Maybe not recent code, but I doubt anyone enjoys reviewing code they wrote years ago and modifying it to add a new feature or satisfy a new business requirement.
I now write virtually all of my new code in C#, but I was a VB devotee for years (starting in the late 90's.) I wrote tens of thousands of lines of VBScript and pre-.NET VB, and as such, it took me a while to start fully leveraging object-oriented principles when I started writing managed code. I was good at learning APIs and consuming classes, but I tended to write method bodies that were way too long, and (I can now see) often did a poor job of updating external variables from within method bodies, rather than structuring my code to be more maintainable. (Where was Code Complete when I needed it? Available, but not on my radar.)
I felt the pain of that coding style again today. Spent the better part of this morning working a new business rule into an application I wrote about 4 years ago, and the task involved a lot of cringing. The existing code works as designed, and it's actually pretty readable. You can pick up the intent of the code pretty easily, since I'd at least had the discipline to use meaningful variable and method names, and had inserted comments alongside segments that might not had been intuitive. But, ugh, this code was definitely not written with consideration that it might later have to be extended.
Today's experience reinforced just how valuable it is to have good refactoring support in your IDE. Refactoring tools simply the task of re-organizing and restucturing your code for productivity, maintainability, and reliability. If I'd had that support in my IDE years ago, I'm sure I would have broken those bad habits much sooner and produced more code in less time.
Refactoring support was extremely limited in Visual Studio .NET, and it was also one of the main reasons I made the "full time" jump from Visual Basic to the C# camp when I was first able to start creating new applications in Visual Studio 2005. Out of the box, Visual Basic 2005 is just way behind on refactoring features, and I wasn't able to convince my boss to buy a CodeRush license for me, or even a Refactor Pro! license. (In hindsight, I probably should have bought my own, even for use at my full-time job.) The built-in refactoring support in Visual Studio 2005 is pretty sweet for C#, though. The refactoring support in VS2005/C# is eerily similar to the support in the NetBeans 5.5 IDE for Java, right down to the menu options and dialogs. Anyone know which IDE's implementation was in place first?
If you're developing code without IDE refactoring as part of your development experience, you're doing yourself a greate disservice. Take a minute to learn the basics of refactoring and check the support available for your IDE, but natively and through third-party plug-ins. You'll be glad you did.
|
-
Just because it's not the way I'd do it, doesn't mean it's wrong.
Repeat to self, repeat to self, repeat to self.
|
-
There aren't many things I don't like about IIS 7. Generally speaking, I think the product team nailed it on all aspects - administration, development, security, modularity, extensibility, ASP.NET integration, ... You name it, they've got a great solution for it. Granted, there's a significant learning curve as people move from earlier versions of IIS, but it's a necessary evil. Most of the significant advances in IIS 7 were only made possible by drastically changing the underlying product. I love IIS 6.0, but it doesn't hold a candle to IIS7.
That said, I've got two compliants about what I perceive to be gaps in the IIS7 feature set, and both seem to be side effects of the distributed configuration system:
- I miss the ability to perform an explicit, named point-in-time backup of the IIS configuration.
- I miss IIS configuration change auditing, a feature that was once promised but never delivered.
Point-in-time backups present a challenge because the IIS configuration is no longer encapsulated in a single file and in a single directory. Instead, the configuration is distributed across multiple config files (applicationHost.config, machine.config, root web.config, and site-, application-, and vdir-level web.config files). What's a simple clear-cut way to back up these various files as a point-in-time configuration set? What's the corresponding model to enable a machine-wide IIS 7 configuration restore?
A partial solution would be to back up the machine-level files as a set, but this isn't a very clean solution. It doesn't produce a solution that's a clean or comprehensive as the pre-IIS 7 metabase back ups. (I'll concede that metabase backups back up only IIS configuration, not ASP.NET 2.0 configuration, so metabase backups also provide an incomplete solution. I love the configuration integration between IIS 7 and ASP.NET 2.0.)
What about IIS 7 configuration change auditing? The guidance I've seen from the IIS product team is "use Windows' built-in file auditing capabilities". Sorry, but that solution doesn't do much for me. File auditing can only tell me who changed a file and when, but it can't tell me which specific configuration elements or attibutes were changed. Was a value changed? An element added? A collection cleared? If the changes extend the IIS content to directories for which I hadn't already explicitly configured file auditing, any changes to those files won't be tracked. File auditing is a far cry from the configuration change auditing that IIS administrators have been requesting for years. The IIS product team made long-overdue metabase change tracking available to IIS 6.0 in Windows 2003 Service Pack 1, and I hope we don't have to wait for Windows 2008 SP1 to get this functionality in IIS 7.
|
-
It appears that Microsoft's finally revealed the official name for Windows codename "Longhorn" server: everybody give it up for your new friend, Windows Server 2008.
http://www.microsoft.com/windowsserver2008/default.mspx
Hopefully, this naming choice is not an indication of the expected RTM date. There's way too much goodness to get at.
Through the current release (Beta 3), my own Longhorn testing has admittedly been pretty lightweight, focusing primarily on the kick-ass improvements in IIS7. I haven't experienced any quirkyness at all, but my test scenarios have been along a narrow focus, and my test instances haven't been exposed to any type of load.
Still, the announcement of the official product name is definitely a good sign that things are progressing nicely.
|
-
In the remaining 23 days of the month, I will:
- Get to the gym 11 more times.
- Lose 3 lbs.
- Eat a "brown bag" lunch every day.
- Take Exam 70-549 to earn the MCPD - Enterprise Applications Developer credential.
- Begin two of the classes I need to complete to earn an undergraduate Computer Science degree.
Goal #5 looks pretty weird when listed directly after goal #4. I earned a BS in Mechanical Engineering from the University of Maryland in the 90's, but I've never put it to use professionally, and, while I've been an MCSD since 2001 and using the .NET Framework since March 2001, I still feel like I can benefit from a stronger low-level "core". If the scheduling gods are with me, I expect to finish the ~38 CMSC credits by the end of the Fall 2008 semester.
|
-
Last week I had the pleasure of attending IDesign’s Advanced .NET 2.0 Master Class in Reston, VA. The class was far and away the best developer training I've ever attended. Brain Noyes taught the class, and he did a great job. Brian’s knowledge of the courseware and subject matter was fantastic, although that didn’t surprise me. What did surprise me was how well he managed the classroom and nailed the instructor intangibles – small logistics things like ensuring that people’s refreshment preferences could be met, making sure we stopped for breaks at appropriate intervals, and adding “Introduction to Windows Workflow” and “Introduction to Windows Presentation Foundation” sessions late in the week once it was clear we’d progressed ahead of schedule. He even made himself available for extras questions and discussion at the end of each day.
I couldn’t have asked more of the class. The materials were excellent (including a complimentary copy of Juval Löwy’s “Programming .NET Components, 2nd edition"), and the class had tons of demos and walkthroughs that were given to us either at the start of the course (for the “canned” materials) or after the class via email.
I’d definitely recommend the class to mid-level and senior .NET developers, and I’d recommend checking out IDesign’s new .NET 3.0 training classes for anyone who’s interested in quickly getting ramped up on .NET 3.0.
|
-
On Friday, IDesign Chief Architect and Microsoft Regional Director Brian Noyes held a contest on his blog, with the winner receiving a free seat in the 5-day IDesign Advanced .NET 2.0 Master Class being held in Reston, VA December 4-8. As luck would have it, I was lucky (and quick) enough to win!
I'm very excited about the chance to attend - Brian's an excellent and approachable instructor, and a super-knowlegeable guy, and the course topics are tremendous.
How badly did I want to attend this class? Here's a hint - I expect my daily commute to be over 2 hours each way and I'm still really looking forward to the week. 
Woohoo!
|
-
On Tuesday evening, I had the pleasure of giving a 30-minute presentation on SQL Server 2005 Query Notifications at the September Central Maryland Association of .NET Professionals main meeting. It's a topic that I find thoroughly enjoyable, and I wish I'd had a full hour to dedicate to the topic. Thanks to all attendees for be interactive and asking several excellent "how, why, and when?" questions. I'll post my slide deck, demos and resource links in another blog post shortly.
After I'd over-run my allotted time, CMAP co-founder Anil John gave an excellent presentation on “SOA, Interoperability and Web Services”. Anil is obviously well-versed in the subject matter, and his presentation skills flatly blow mine out of the water.
|
-
OK, I'm in no way a Yankees fan, and I'm keenly aware of the competitive advantage the Yankees have over small market MLB teams who can't afford to sign free agents with little regard to financial concerns as the Yankees can, but I felt a little taken aback when Minnesota Twins' star center fielder Torii Hunter tried to justify a recent loss to the Yankees with the following quote:
"The Yankees have a $200 million payroll, and we play for minimum wage"
You see, Hunter is currently earning a pitiful $10,750,000 salary for the 2006 season.
It's just so insulting to people who actually struggle with legitimately low incomes, including many of the fans whose support pays Hunter's salary. I'd be similarly insulting to people who earn minimum wage if I were to complain, but come on, man - you earn over 100 times my salary and you're calling it minimum wage.
Reminds me of Patrick Ewing's classic response when trying to defend the NBA Players' Union position during the 1998-1999 NBA lockout:
"Yeah, we make a lot of money, but we spend a lot of money, too."
Suck it up, and learn when not to speak.
|
|
|