I finally put some time into Longhorn this weekend. At times I was a little bit frustrated (detail below), but overall the experience was exciting. Working with just what I had installed on the Longhorn Virtual PC, I decided to do a little Visual SourceSafe automation to display the file changes between two labels. Here is a screenshot:
If anyone is interested in the code I’ll be happy to post it up for download, but I would like to improve the app some (details below). At this point I wanted to play with some of the basic Avalon controls, including the GridPanel, and of course I had to try out a gradient fill.
(Update: Here is the code, just remember, no warranties express or implied, etc. etc.. Feedback and constructive criticism more than welcomed...)
Along the way I kept some notes on what I liked, what I didn’t like, and what I need to find out more about. I’m sure some of the problems I experienced are just alpha software glitches that will be fixed soon. These notes are not particularly focused on any specific area, but more general to the overall experience.
GUI design with XAML is going to be fun. Using XAML will bring some of the best parts of web design to WinForms while leaving behind all the restrictions. The idea of having a Style element to make sweeping changes to the appearance of a form is particularly powerful.
The refactoring features in Whidbey are worth the price of admission alone. The Extract Method and Rename commands are going to save untold hours of error prone work.
I find the task based documentation (How Do I?) in the SDK extremely useful, particularly when first delving into a new area.
I like the way the Internet Explorer menu and toolbar can occupy the same horizontal area. I’ve always set my IE toolbar icons to “small icons” to conserve space, but this is even better.
When doing a search in the Longhorn SDK (local copy), the “Location” for the search results always returns “Longhorn SDK”. When doing a search in the Longhorn SDK online, I can at least take a guess where I am going to end up by peeking at the URL. For instance, when looking for control documentation, the URL will tell me if I am going to end up in the MSAvalon.Windows.Controls area or the System.Web.UI.WebControls area.
The title bars are so tall they seem to waste space. At first look the contrast to previous versions is pleasing, but when I get down to work I’d like to have more space for real content.
After 20 hours or so of uptime, Internet Explorer (and dexplorer.exe) become so unresponsive as to require a reboot. Is this just me?
I’m starting to wonder what impact Avalon will have on the makeup of software development teams. These days, you can bang out a UI that competes with Microsoft Office applications (in terms of look and feel) as a solo developer. Taking a look at the Longhorn concept videos reminds me of the gaming industry. If you look at the postmortems for today’s best selling games – the skills required go far beyond bit twiddling. The teams usually have half as many graphic designers and artists as there are developers. Plus sound FX people, camera people, voice-over people, and an occasional composer.
Post build steps do not appear to function as yet in Whidbey.
It appears the automagic copying of app.config and COM interop assemblies does not function as yet in Whidbey. I also had some difficulties successfully referencing an interop assembly until I TLBIMP’ed it myself and added a reference by hand.
The app currently does all the work on the UI thread. I didn’t see an Invoke method on the Control class to marshal back to the UI thread, so I abandoned my plan to use a background thread for the VSS automation calls. I did notice the UIContext parameter on the control constructor, which is new, so I’ll need to dig around some more.
Databinding with the GridPanel control? The app currently builds the GridPanel from scratch in the C# code. The next step is to read more about databinding in Longhorn – I’m looking for something similar to today’s DataGrid in Avalon with sorting built in.
Is there an Avalon status bar control?
I’ve heard there is another version of Whidbey coming along soon to play with, but I’m also wondering when there will be another rev of Longhorn to experiment with. Overall - a fun experience with the new technology.
I went out this evening to vote in the Maryland primary. The voting machine was the somewhat controversial Diebold machine. After all the bad press I expected the machine to do something sinister while I was there – but alas – nothing extraordinary to report. No exit poll afterwards either. Bummer.
The only thing to note is the final summary screen which shows all of the selections. In some circumstances there must be a scroll bar present which comes dangerously close to the final “Cast Vote” button. There is a caution at the top of the screen in a small light blue font saying something like “Don’t accidently hit submit when using the scroll bar.” Seems like something they should design around - particularly when there is no confirmation after hitting the big green button.
Dana Epp points to an Internet News article stating XP SP2 will include a virus scanner. I can see the controversy coming, as many people will be unhappy about MS bundling more software into the operating system.
Let’s face it – anti virus as an add-on product just doesn’t work. When someone walks into BestBuy with $50 to spend, I’m sure the products like Halo move much faster than any anti-virus software. It’s just not human nature to spend money on something preventive when you can buy something fun. Halo has much better graphics then any anti-virus software I've ever seen - the choice is obvious.
Here is a new article demonstrating how to use the web service API of Reporting Services to build a tree view of reports available to a user. The ASP.NET project also hosts the ReportViewer sample component in a page to display reports.
Friday was one of those days when I didn’t get to sit at my desk till 2 in the afternoon. What was supposed to be a quick overview of upcoming requirements became an embroiled strategic planning meeting. I came out thinking: how scalable is our software?I wasn’t thinking of scalability in the sense that Sam Gentile was recently thinking about scalability. I was thinking that given the architecture and feature set of our software, how many clients can our small startup support? Since I am probably as clear as mud, let me give you a scenario without too many boring details. We built an ASP.NET Intranet application. The application uses Active Directory. By using AD we saved ourselves development time in building the administration areas of the application. On Wednesday of this week, a prospective customer and his technical team call me. They don’t use AD and have no ready plans for migration. They are using NT4 and are not buying our software if it requires a move to Active Directory. Nevermind that the clock is ticking on NT4 support options. One of our options at this point is to rip out code relying on Active Directory and build it ourselves. I don’t like this option one bit – it’s not a one time cost. There is an ongoing cost in maintenance, regression testing, deployment, end-user training, and support. It limits the ability of our company to scale up sales, because the cost per client just went up. In a small startup company it’s difficult to approach the CEO and sales team and tell them why making a sale is a “bad thing”. The engineering team appears mean, nasty, inflexible, and unsympathetic to customer needs. Believe me, I am sympathetic to what the customer wants. One of the benefits of a small company is having hands on contact with the customer. When they get excited about something I’ve help to create I get excited too. When they want something new I want to build it for them, but I know a company has to live within it’s means. If you build software that is difficult to install, and configure, and support, be prepared to make a living by billing time and materials. I’m sure there are application domains that have no other option, but just make sure you go in with the proper business plan. I try hard to resist customized features, or requirements that make the software more difficult. Unfortunately, in small companies it is very hard to resist cash. Ironically, what helps in big companies can help even more in small companies where resources are tight and people wear different hats. The two biggest process related tips I can give are 1) Have a software development process in the first place, and, 2) automate ruthlessly. Use automated builds, and as much automated testing as possible. It takes more time up front, but pays dividends many times over as time goes on by leaving less to manual intervention, and therefore chance. It also keeps you scalable.
According to Google groups, I started posting to USENET in 1995. It seems like a long time, but a colleague of mine (we’ve worked together at not one, but two startups) has an archived post that precedes mine by almost 10 years. I’ve always liked newsgroups. I still browse and post, and if Google groups (I still type in www.deja.com) had a nickel for every newsgroup search I’ve done, I’d have to sell a kidney to buy food.
Reading through a .NET newsgroup today puts you right in the development trenches. Here you will find people trying to figure out how to call a stored proc from ADO.NET, how to work with connection pooling, and how to send email from an ASP.NET page. Unfortunately, I think 85% of the questions in newsgroups can be answered with 180 seconds of RTFM or Google time.
All of the noise in newsgroups makes the experience somewhat like listening to AM radio in a train tunnel. There is a lot of static and it’s too easy to miss any golden nuggets of information. I think this has driven a lot of quality people out of newsgroups for good. Also, newsgroups are not the place to look for what’s coming down the road. It’s interesting to note the Aero development newsgroup has received fewer posts since the beginning of the year than the reporting services group typically gets in a single day.
Blogs gives people a place to “push” ideas, in contrast to newsgroups and mailing lists, where it seems more acceptable to “pull” ideas by asking questions. Pull would work so much better if people didn’t ask the same questions over and over again each day. What’s sad is, readers looking for someone else to do the RTFM for them are boiling over into blogs.
In the newsgroup world, people post FAQs and documents like Eric Raymond’s “How To Ask Questions The Smart Way” to cut down on the noise. The problem is, the people who don’t RTFM also don’t read FAQs and documents. Fortunately, I don’t think the noise that fills up newsgroups will bog the blog space down, because unlike newsgroups, which are a free for all, bloggers have more control over content and want to keep their blogs interesting. I’m not talking about censoring posts, I’m talking about the blogger always having the headline post, and therefore chooses the direction and theme for the blog content.
Reading the right blogs gives you a better balance of what’s happening today, and what’s going to happen 2 years from now. Magazines, on the other hand, seem to slant heavy to the far future. I’ve seen a few blogs and a few letters to the editor complaining about such and such a magazine becoming less relevant when they don’t cover the current tool set with practical articles. Scoble says covering the new stuff sells more issues, but I wonder if this will continue to hold true as people get the breaking news from blogs, and the magazine cover about the “three pillars of Longhorn architecture” will be looking like three month old news. That would certainly force some more in-depth practical articles instead of the fluffy Gartner Group type executive summaries.
I still read newsgroups, and magazines, and continue to add to the blogroll. If I had to give up one of the three right now, I think newsgroups would have to go. That sounds like an interesting conclusion to end with.