The surprise theme for me was XNA. I was thinking pragmatic programmer - wanting to try something different. I attended a morning session "Making an XNA Game for the Xbox 360" and started getting crazy ideas. Being able to write C# code for the XBox just opens all kinds of doors. I started imaging a world where lots of rich-rich-client apps could be build for mega-markets of people that have consistent, stable, XBoxes in their homes.
As some friends know, I used to do graphics programming, from around 1996 to 1998, for a company in Taiwan that made educational and real games. I never worked on real games, but I learned a lot about graphics working there. It was fun to get a review - normals, phong shading (which you can implement in hardware now, using pixel shaders! Wow!), and all the geometry parts. Funny quote, "10,000 triangles was considered a lot back in DX5!" (everybody but me laughed - I remember at an Intel Programmer's Seminar in 1998 seeing them show a demo with 5,000 polygons, and getting lots of oohs and ahhs. I am old.)
I attended Jeffery Richter's presentation on scalable applications. One word: guilty. Yeah, I've built lots of applications that create a thread for an I/O operation. I don't see the problem as being as serious as Jeffery mentioned - if my application isn't doing lots of I/O operations, what's the big difference? The specter of 1MB of memory wasted? That's virtual memory, not physical! I understand it's not free, and _now_ there is a better way to do it (letting the thread pool manage threads), and in fact that's what I do now, but only since .NET came out. Even that has flaws - one thread per CPU? I'm never going to have the only active threads on the system.
Another problem I see is that with modern frameworks, it's all but impossible to take advantage of things like asynchronous SQL Client methods (BeginExecuteReader() and friends.) Getting something like NHibernate to use asynchronous SQL Client APIs would require a major shift in the way things work.
If I was implementing a different kind of application (Outlook, SQL Server, IIS?), I would be a requirement that I closely follow this advice. For my work, it's well advised, but I am not going to lose sleep over creating an extra thread once a day to gather data without hanging a UI thread. It was a really cool talk and gave lots of information (from what Michael told me after attending the DevScovery version of this, this was just the tip of the iceberg.) I hope I get to go to devscovery or something next year to hear the rest of the story.
The afternoon was all XNA. I was disappointed to learn, before the start of the afternoon session, that XNA has no networking support. That crushed most of the cool ideas I had (the one I had fixated on: data visualization and equity trading on the xbox.) I can imagine that XNA enables lots of bundle-ware-ish scenarios for the xbox - how about a product brochure as an xbox DVD? It looks like it would be easy to throw this kind of stuff together with very little programming. Too bad they are so sensitive about security with the xbox. I think they are maybe missing the huge potential the XBox has with respect to things other than games, or for non-traditional games that need more than just a fixed dataset to run.
Looking forward to today. My plan: Dependency Injection, (Card Spaces | WoW - not a player, but sounds interesting ), (WPF | reporting services | more reporting services | or micro-pairing), then (calling reporting services | virtualization.)
I've already missed several presentations I wanted to see, and will miss more today!