Blogging and Podcasting for ONDCP
Yesterday, I gave a presentation at the RSS, Podcasts, etc! workshop along with a colleague. Our presentation isn’t available on NOAA’s website yet, but you can download it here if you’re interested.
From what I saw and heard, NOAA, NASA, and the US Geological Survey are the furthest along in implementing RSS feeds and podcasts. Surprisingly enough, there are very few government agency blogs. Even the one Aspen (now Lockheed Martin IT) developed for ONDCP doesn’t have an RSS feed yet. There was very little use of blogging software to automate RSS feed generation. A number of our fellow presenters talked about custom solutions on the LAMP stack that retrieved content from databases.
Our podcasting solution for ONDCP was the only one that used Microsoft technology. The code we started with was a demo application including an Access database, a feed generation page, and a number of admin pages for adding, updating, and deleting RSS feed items. Our customizations included the following:
- making the application run against SQL Server instead of Access
- adding iTunes-specific tags
- XSL to transform the raw XML into something viewable by users with regular web browsers
The solution works reasonably well, but it isn’t as fully-featured as WordPress or MovableType. LMIT will be using Community Server as part of the redesign of ONDCP’s current blog, pushingback.com. We’re using version 1.1 on an extranet project I’m managing and it’s got tons of feature. I think it’s overkill for a single blog, but if ONDCP decides they want forum functionality, photo galleries, blog rolling, etc, Community Server gives them all that out of the box.
.NET User Groups are Good
Before yesterday, I didn’t know what I was missing. I’d always gained my knowledge about .NET (and any other technology for that matter) from conferences, classes, reading, work projects, or trying things out on my own. But the ASP.NET custom web controls talk I heard yesterday was a real eye-opener. The speaker, Miguel Castro, made great use of the code snippet feature of VS.NET 2005 to speed up the development he did during his talk. Stepping through actual code in the IDE and not just reading from the few slides he did have made it a very engaging presentation. The only thing that might have made it better was if an electronic version of his presentation was made available after the talk. Until that happens, I’ll record the few notes I captured here.
Personal Notes from Presentation
- WebControls are ultimately "code generators"
- They are server-based components; classes that are OOP-aware
- The terms WebControl and ServerControl are interchangeable
- WebControls are code-only, UserControls are not.
Advantages of WebControls
- Isolation of visual components
- Fully object-oriented
- Browser independent
- Promote declarative programming
- Handle their own state
- Reusability
Rendered WebControls
- fastest
- direct output to HTML
- least reusable
- very manual
Composite WebControls
- code is easy to follow
- handle complexity well
- most commonly used
-
Inherited controls inherit from rendered and/or composite controls
-
Rendered controls usually have direct HTML counterparts.
-
HTML controls are a visual designer representation of actual HTML.
When to Use WebControls
- Use inherited controls when merely extending existing functionality will solve a problem.
- Use rendered controls for simple widgets.
- Use composite controls in all other instances.
-
The ToolboxData attribute and inheritance make a class a WebControl.
-
Override the Render method to generate HTML on-the-fly (rendered controls).
-
Advice: use your objects before you develop them (a nod to test-driven development).
-
Override CreateChildControls (composite controls).
-
ViewState identifies controls with ids, so set them first.
-
Tables cannot appear next to each other because they are block elements. Block elements cannot appear inside inline elements. Inline elements can appear next to each other.
-
The default master tag for a WebControl is . You should override the TagKey property in .NET 2.0 to change this. In .NET 1.1, you would extend the constructor to do this.
-
Implement INamingContainer to make sure control names are unique (.NET 1.1).
Properties
- Use ViewState instead of memeber variables when creating properties for WebControls.
- Category, Description, & DefaultValue are basic design-time attributes of every WebControl property.
- Property-mapping needed if a user can change the value of a property.
- Use "this.ChildControlsCreated = false" in your "setters" for visual properties so control changes are reflected right away, without having to close and re-open the page.
- Add event handlers for composite controls using your control constructor. Also declare a public event handler delegate.
- Events are not inheritable
- Make button controls overridable with protected virtual void methods.
- Object properties can be made read-only because their internal properties have their own getters and setters
- Save WebControl state by using an object array. Reserve the zeroth array element for the base.SaveViewState call.
- Style isn't serializable, so it's handled slightly differently.
- Use ControlState to keep your control functioning even with ViewState turned off.
Recommended Reading Essential ASP.NET With Examples in C# Essential ASP.NET with Examples in Visual Basic .NET Building ASP.NET Server Controls www.dotnetdude.com
- Just reading good source code is great education
Bosses 'are deluded' over success of deals
An interesting title for this story I read in the Times this morning. The acquisition of my current employer (Aspen Systems) by Lockheed-Martin falls right in the area the story discusses (acquisitions of $100 million or more). The buyout is scheduled to close shortly, so I expect to find out soon enough what Lockheed’s plans are for us.
The idea of M & A activity not always creating additional value has been around for awhile. I remember reading stories like this in magazines like The Economist five or six years ago in the middle of the Internet bubble. I’ve only been working full-time for nine years or so, but I’m sure questioning the value of mergers stretches back far before my time.
Since news of the buyout came to us, I’ve been wondering what Lockheed sees in Aspen that they want. Our annual revenue is a tiny fraction of Lockheed’s. As far as I can tell, the thing about Aspen that Lockheed most wanted was the subject-matter expertise. A lot of the civilian agencies we do work for have essentially outsourced certain government offices to Aspen so we can act on their behalf. So while we aren’t an outsourcing power like IBM or EDS, we do occupy a similar niche.
I think Aspen gets plenty out of being bought Lockheed. The first thing is deep pockets. Even more important than the deep pockets is superior processes. We just achieved CMMI level 2 last month, while parts of Lockheed have been at levels 3 through 5 for years. Only time will tell if we help push the LMT stock symbol up.
What Corporations Know About Us
This morning, when I was listening to the umpteenth radio story about the Justice Department subpoena of Google, it occurred to me that Google might know less about us than some other companies.
I’ll use myself as an example. I use Google for searching and Gmail for e-mail. So they know what terms I’ve searched for and when, along with who I’ve sent e-mail to (and received e-mail from). They could certainly know the contents of every e-mail if they wished. The biggest potential risk to me of someone knowing what I’ve e-mailed or searched for is embarassment.
Compare that to what credit bureaus can know about me. TransUnion, Experian, and Equifax know at least the following:
- current and past addresses where I've lived
- current and past employers
- when credit accounts were opened and closed
- what things I've bought with credit, as well as when and where I bought them
- all the loans I've taken out, and how quickly (or slowly) I paid them off.
- who has requested my credit report
According to this web page, there’s a long list of companies and people who can look at my credit report. There are a lot of potential risks to me if I have a bad credit report:
- I could be denied credit or other loans
- I could lose out on potential job opportunities (company background check)
- I could be denied housing (landloard background check)
- I could end up paying high insurance premiums, or be denied coverage (insurance company background check)
At least Google lets you look at your recent search history. The law only requires credit bureaus to give you free access to your credit report once a year. After that, you have pay to get access.
Somehow, I’m a lot less worried about how Google will use what they know about me.
Advice from Warren Buffett
Buried deep in this article about the dangerous size of the U.S. trade deficit was this bit of advice to MBAs:
“The one piece of advice I can give you is, do what turns you on,” he said. “Do something that if you had all the money in the world, you'd still be doing it. You've got to have a reason to jump out of bed in the morning.”
Unfortunately, my current job doesn’t fit this description. I need to do something about that, I just haven’t settled on what.
32
Today is my 32nd birthday. To me, it doesn’t seem like a particularly special birthday. It isn’t like turning 13, when you’re finally a teenager, or 16 when you can drive, or 18 when you’re officially an adult. I remember being excited about turning 18 because I was finally old enough to vote. I don’t drink, but 21 was still a good birthday. People talk about turning 25 as a milestone, but I feel 24 was a bigger year for me because I bought my townhouse that year.
Looking back over the past year, I see a lot of changes. I finally got my MBA after 3 years of working full-time and school nearly full-time. I made my first career change by leaving a full-time programming role and moving into project management. Looking forward, I see the potential for more change. The Lockheed-Martin buyout could change things completely. I might start a business of my own this year, or get out of project management and into something else, like business development or strategy.
.NET Development Tools
Richard Slade came up with a great list of free tools he thinks .NET developers should be using. I first found out about test-driven development and NUnit a couple of years ago in a previous job. It definitely improved the quality of my code. A consultant at my current job told us about TestDriven.NET. I’m looking forward to checking out the upgrade, since we used version 1.1 a year ago.
Ruby on Rails Progress
I finished Curt Hibbs' first Rolling with Ruby on Rails tutorial today. After getting phpMyAdmin installed, doing the database parts of the tutorial went a lot more quickly. Before I tackle part two, I need to read this post by Amy Hoy.
After this brief tutorial on building a database-backed website with Ruby on Rails, I like the way it works. While I didn’t find the development process quite as simple as the screencasts portrayed it, I can definitely see using it as a rapid application prototyping tool. Even with the hurdles posed by installing and configuring PHP and phpMyAdmin on top of learning Ruby and Rails, getting from page 1 to a completed application didn’t take much time.
I still want to try out the Ruby plug-in for the Eclipse IDE to see how that compares with with SciTe and the command line.
Trying out Ruby on Rails
I made it one of my resolutions to learn Ruby this year, so I took a bit of time yesterday and today to try and get something working on my work laptop running Windows XP. I’d used the one-click Windows installer for Ruby a week before, so I was able to use RubyGems to install Rails. I put the latest version of MySQL on the laptop as well, since the tutorial I’m following uses it.
Instead of building the cookbook application the tutorial describes, I’m trying to build an app that serves a database-driven RSS feed. My reason is that we’ve done this for a client project with some old ASP code and I wanted to compare architectures and level of effort. So far, I like the way Ruby on Rails works. You can create an empty web app just by typing ‘rails
Development Ruby on Rails seems to go fastest if you follow their naming conventions for code, and the table names in MySQL. When the model name is singular form of the database table name in plural form (recipe–>recipes or podcast–>podcasts), using “scaffold :
I’ll probably go back through the cookbook example and follow it step-for-step before going back to the podcast example, just so I have something stock that’s working. The other thing I plan to do is to replicate my work on the Mac mini I have at home.
Goals for 2006
Improve My Health
- Exercise 3 times a week
- Cook 3 times a week
Maintain My Hobbies
- Shoot 36 film and/or digital exposures a week.
- Post 3 shots on the photoblog each week.
- Start re-learning the piano.
- Go skiing once more (or snowboarding twice) this winter.
Strengthen My Faith
- Read the Bible every day
- Pray every day
- Help out with a church activity once a month
Improve My Career
- Work on a business plan once a week.
- Learn Ruby
- Attend one technology conference this year.
- Attend one business conference this year.
- Write a technical blog post once a week.
- Contact a different person in my network once a week.
Teaching the Clinton Presidency
I admit it–I’m a C-SPAN junkie. The purpose of the open phones topic this morning was to air people’s opinions on how the Clinton presidency should be taught in middle and high school history classes. As is usually the case with these shows, the callers didn’t so much answer the question posed as bash George W. Bush or Bill Clinton. The calls I found the strangest were the ones that blamed Clinton for the current Bush years and for how divided the country currently is. Those opinions aside, my own is this: teach Clinton’s successes and his failures–all of them.
I voted for Clinton both times. Despite that, I don’t consider him the best president ever, or even a great president–merely a good one. In the success column: NAFTA, welfare reform, the economy. Perot said plenty on the “giant sucking sound” of jobs leaving the U.S., and that’s true. But that has as much to do with companies not doing what was necessary to modernize as it does with lowering tariffs. I remember being disappointed that Clinton signed the welfare reform bill, but in retrospect, it did get a lot of people off the welfare rolls. Clinton should get credit for mostly staying out of the way as the economy recovered from downturn under the first Bush. He should also get credit for increasing taxes on the highest earners in this country. That contributed a lot to the government going from deficit to surplus. I would count Clinton’s actions on Bosnia as a success too, if only because he helped get NATO involved in stopping the slaughter of Muslims there.
In the failure column: healthcare reform, Rwanda, impeachment. The failure of healthcare reform is perhaps the one with the most consequences for the present day. The voices who said there was no healthcare crisis when Clinton was trying to get this passed are probably the same ones who passed the narrow, expensive and poorly-planned prescription drug benefit. While Clinton isn’t the only one to blame for the genocide in Rwanda (the whole world stood by on that one), as the leader of the greatest military power in the world, his government’s inaction was very disappointing. Impeachment ranks as the worst of his failures from an opportunity cost perspective, not just the moral one. A lot of time was wasted that could have been spent doing far more useful things (like chasing al-Qaeda for example). It allowed people to question his motives for trying to do what was ultimately the right thing.
Windows Live Beta vs Google Homepage
My office gives us the day off tomorrow, but it’s pretty much a ghost town already. I had a bit of time today to play with the Windows Live Beta. I was curious to see whether it was a step up compared to my.yahoo.com or google.com/ig.
At first glance, live.com looks like a clone of Google’s personalizable page (though live.com is even more streamlined). It’s easy to add content to the page, whether it’s “gadgets” (the Google homepage calls them sections) or individual RSS feeds.
One particularly nice touch live.com has that I haven’t found on Google yet is a way to import an OPML file. To test it, I exported an OPML file from my bloglines account and imported it into live.com. Very quickly it showed up under “My Stuff” as “Subscriptions”. From there, it was very simple to drag and drop individual RSS feeds onto my live.com home page. I didn’t realize right away that “>>” meant content would open in a new window, but once I did, I liked the functionality much better. I wouldn’t use this over bloglines right now, but I’d be very interested to see if someone could come up with a slick gadget for newsreading.
A second convenient feature live.com provides is the ability to add the results of search to your home page. It’s like the News Alerts feature at Google News, only instead of sending you an e-mail, you see the results right on your page.
live.com seems to work equally well in Firefox or IE. If I had to choose between google.com/ig and live.com right now, live.com has a slight edge in functionality.
If you’ve already got a Microsoft Passport (and/or a Hotmail account), live.com is worth trying out.
Busier Ads from Google :-(
This article from the NY Times (free subscription required) tells us that those of us who use Google will soon have to contend with graphical ads. I suppose it was only a matter of time, but I’m still disappointed by the news. There are areas when simpler is better, and search is definitely one of them. We can only hope they’ll be small and tasteful (or that CustomizeGoogle will still allow us to remove them).
Acquired
Last Friday, just before the end of the day, I found out that my current employer had been acquired. The buyer: Lockheed-Martin, the multi-billion dollar defense contractor and member of the Fortune 50. It’s the second time I’ve been part of a company that was acquired.
When I first heard the news, I thought back to previous employers. At Ciena, we were the buyer. I was there when they bought Catena Networks, Internet Photonics, WaveSmith, ONI Systems, and Akara. I worried less when we were the buyer because it usually meant that any “redundancies” would favor Ciena employees over the acquired company. Our managers and execs would always have meet with us to put the most positive spin on these moves. The acquisitions were revenue plays of course. When I left marchFIRST to join Ciena, it turned out that I had merely traded the Internet bubble implosion for the telecom bubble implosion. We merely delayed the inevitable layoffs a bit longer.
MarchFIRST (the former USWeb/CKS) was a different story. We got to be on both sides of the equation. While I was there, we acquired a strategy firm, and sold out Whittman-Hart. While it was spun as a “merger of equals” by the old CEO and the new one, it was as much a merger of equals as the DaimlerChrysler hookup (and even more of a failure, since not a shred of the combined firm exists anymore).
Since Aspen is so small (1700 employees to Lockheed’s 130,000+), I feel plenty of uncertainty as to what will happen next. Do they value Aspen as a single entity or will we be broken up? Is this acquisition simply a purchase of people and contract vehicles or something more? In the e-mail we got from our CEO, he said everyone would keep their jobs. But I have my doubts that we’ll keep two HR and accounting departments for any length of time. What happens after those duplicated positions go away is what I wonder about. I think it’s likely that after 3-6 months, the best technology people will be cherry-picked for other spots in Lockheed-Martin IT. I’m not sure what that means for me, but I feel better about sticking around to find out than I might have otherwise.
Skiing
Yesterday, I got on a pair of skis for the first time since 8th grade. A friend and I went to Wisp to enjoy their cheap rentals and lift tickets (part of their 50th anniversary of operating). It’s a little weird to be an age where I can say I haven’t done something in 15 years (it’s actually 17 years, but who’s counting).
Skiing is a bit more terrifying than I remember, but ultimately a fun experience. After some initial awkwardness (ok, falling), I was able to get down a green run and a fairly challenging blue run in one piece.
There was one spill though, that introduced me to a new term: yard sale. Apparently, if you crash on a ski slope in a way that separates you from both skis, both poles, and a hat, it’s called a yard sale. On a run named “Boulder” (which should have been renamed Steep Sheet of Ice), I missed a yard sale by hat. Thankfully, I didn’t have more than a headache after, and there were no cameras.
For a more in-depth definition of yard sale (of course one exists), check out this link.
Microsoft doesn't get Test-driven Development
That’s what Scott Bellware contends in this blog post. He does a very thorough job of explains what test-driven development in meant to accomplish and how Microsoft missed the mark. In my own experiences with test-driven development over the past couple of years, I’ve found it to be extremely helpful. The code I’ve written using this practice was quite a bit better than code written without it. The primary objection I’ve seen to using it is deadline pressure. Some developers I’ve worked with find it easier to develop test pages, since that’s what they’re used to. The idea of writing code to help them design the finished product (instead of merely testing it) doesn’t seem to appeal to them.
Gmail signature graphic
I came across an application that generates signature graphics for Gmail, Yahoo, and other e-mail providers courtesy of this blog entry.
When clients (and bosses) go bad ...
I came across this article via the Signals vs. Noise blog. While the entire piece is 100% on target, this passage really spoke to my current situation:
But the worst are the ones that become slaves to their clients--often driven by the fear of losing one.And fear leads to underbidding. And underbidding leads to… pulling all-nighters to make an impossible deadline on too few resources. (And the dark side is in there somewhere.)
It’s more fuel to do things differently when I (finally) start my own business.
Bush's Latest Appointment: Harriet Miers
Trying to find some information about Bush’s latest appointee to the Supreme Court, I found two comments especially troubling:
"The reaction of many conservatives today will be that the president has made possibly the most unqualified choice since Abe Fortas who had been the president's lawyer. The nomination of a nominee with no judicial record is a significant failure for the advisers that the White House gathered around it. However, the president deserves the benefit of a doubt, the nominee deserves the benefit of hearings, and every nominee deserves an up or down vote." — Manuel Miranda, chairman of the conservative Third Branch Conference
"This is a smart move. You try to pick a nominee that Democrats won't be able to criticize as much because they are a woman or minority. This is a classic Clarence Thomas strategy."— Artemus Ward, Northern Illinois University political science professor.
For other reactions, see the full version of the article (free registration required).
They are minority opinions to be sure, the bulk of the comments so far range from polite to unalloyed praise for Harriet Miers. Still, I shudder at the mention of Clarence Thomas in connection to anything at all. Few things in politics have made me more angry than his nomination and confirmation to the Supreme Court. Thurgood Marshall’s record as a lawyer, his tenure as judge on the 2nd Circuit Court of Appeals (none of his 98 majority decisions was ever reversed), and his record as solicitor general of the United States (winning 14 of 19 cases he argued before the Supreme Court), stand in stark contrast to Thomas' brief and unremarkable tenure as an appeals court judge. Thomas was notable only for being a black conservative (and his alleged conduct while head of the EEOC). To replace a lion of civil rights like Thurgood Marshall with someone so opposed to what he’d fought his whole life for was has always disappointed me.
What’s sad is that Artemus Ward is probably correct. Miers won’t have enough of a paper trail for anyone to effectively oppose her–unless a significant amount of conservative reaction falls along the lines of Mr. Miranda’s commentary.