Key Note Speaker: Eric Meyer
Eric Meyer headlined the morning keynote for CodeMash 2009, day 2. I think the title of his talk was something like, “How Javascript will Save the World.” He talked about innovations using Javascript to play flash movies and to standardize fonts on the web and he talked about how Microsoft browsers tend to screw up the standardization effort. He also mentioned other cool Javascript efforts like Nifty Corners and Bluff. A problem he sees in this space, though, is that all these efforts invariably produce new Javascript libraries: why not have these libraries parse and process CSS instead?
Like the other keynoters, Eric was quite entertaining and obviously a thought leader in web UI. I must confess that I am far out-of-the-loop on such things. He briefly covered microformats mentioning some Yahoo group that seems to be involved in the movement. Finally, my notes mention ObjectiveJ, 280slides.com, and Capuccino. I suppose these are more innovative web UI platforms. Moving on…
Session: IronRuby In The Real World
Michael Letterle led the talk on IronRuby in the real world; however, based on his presentation, I don’t see how it could be ready for the real world—or at least the real business world. His demo began with a C# desktop application. We were to pretend that the original developer left and no source code could be found (and, I guess, .NET Reflector didn’t exist either…or maybe the code was just obfuscated). At any rate, Michael showed how you could just overlay the desktop app with an IronRuby executable to change the behavior of the desktop app and implement new business requirements. That is pretty cool, but I just don’t see how that would be a practical approach to solving the business problem.
Some online resources for IronRuby include Jimmy Schementi’s blog, the grand wizard himself John Lam, and Ruby itself.
Session: Language Oriented DDD
It seems that everywhere I turn, someone is talking about Domain Driven Design (DDD). I guess, much like Eric Meyer’s Javascript, DDD will save the universe. David Laribee led the only talk with DDD in the title, so I thought I’d better attend.
David kicked things off with a reference to the book The Design of Everyday Things—a book that points out examples of good and not-so-good constructions. Later on, he launched into a discussion of various patterns:
- Layered Architecture; eg. MVC
- Application Services, which should not be “transactional” (as in database transaction?), vs. Domain Services, which should be small and focused
- Model Controller; eg. that which connects a model to a queue
- Published Language
- Aggregate Root
- Routing Method
- The Repository
- Collocated Specifications, used for entity matching requirements
- Anti-Corruption Layer – the use of explicit interfaces
He also enumerated a few anti-patterns:
- Anemic Model
- Ambiguous Command – opposing the use of explicit interfaces
- Reflective Mappers
I’m sure DDD is much more than several five dollar words, but I’ll let you know for sure when I’m done reading the book.
Session: A Programmers Guide to User Experience
My UI skills stink. I know this. However, I am desperate to eliminate my UI handicaps. If any of you know of a good class, book, webcast, or some other medium that could help me in this effort, please let me know. So, in my continuing quest to become a better UI guy, I attended Josh Walsh’s presentation.
Josh is a professional UI designer-type guy for Design Interactive. He walked through how he meets with clients to develop user interfaces that meet their needs. For one thing, he conducts interviews: what does the project mean to you, Mr. Customer? He defines scenarios and processes. He builds a specification document of these scenarios and he writes out tasks and groups them accordingly. He does a lot of hand sketching, too, on graph paper (with a Sharpie).
Next, he performs some tests with the users—without even writing code yet. He’ll walk his documents (and sketches) in to the client and use them as they walk through different scenarios.
That’s all well and good, but can you give me any nuggets of advice that I can use immediately?
- Use standard HTML controls…hmm. Don’t ASP.NET and third party controls ultimately render to HTML controls, anyway?
- Use Arial or Helvetica for body text. These fonts are known as sans serif fonts.
- Use Georgia for header text. Georgia is known as a serif font. What? No Comic Sans?
- Josh recommends a dark grey as a good back color.
- Line height should be 1.5em.
- A page should have space on either side and the middle part (with the content) should be only 40-60 characters wide. There goes my idea of using as much real estate as possible.
- Try blurring the page to see where your eyes focus. This can help you determine the focal point of the page.
Books Josh would recommend: Don’t Make Me Think, Getting Real (a free ebook from 37signals.com), and, possibly, Prioritizing Web Usability.
Session: Reverse Engineering Applications
My original plan was to attend Drew Robbins’ Modern Web Applications with .NET presentation, but Drew was sick in bed (or maybe he just stayed out a little too late the night before at the CodeMash after-hours party…hmm). So, I went to Joe Kuemerle’s Reverse Engineering session. The notion of reverse engineering software to see its source code is not new to me, but Joe did tackle the topic in a pretty comprehensive manner.
Popular reverse engineering tools include:
The primary way to combat disassembly of your compiled code is to obfuscate your code—Joe, as an employee of PreEmptive solutions, certainly knows this! [Although, to his credit, Joe in no way pimped Dotfuscator. Someone in the audience asked how you combat such reverse engineering tactics and it was only then that Joe mentioned part of what his company does. He even went so far as to mention the Phoenix Project—a free obfuscator for .NET. I wonder if he really meant the Babel obfuscator, built on Microsoft’s new Phoenix framework?]
Joe mentioned strong name signing of your assemblies, not to combat reverse engineering per se, but to at least offer some form of integrity or validation. The last thing Joe mentioned was authenticode signing of .NET binaries. I had never heard of this technique before until several months ago when someone in my company told me about problems he was having with Enterprise Library. He was running a web app using Enterprise Library (version 4.0, I believe) on an internal web server. The first time his app made a call to EntLib, EntLib would try to call out to Microsoft.com. My company’s firewall rightfully blocked the call, but the process would sit for about 10 seconds until timing out and continuing with the rest of the operation. The developer determined that this was due to the fact that EntLib was authenticode signed and was trying to do some validation of the certificate. Don’t know how the story turned out—hopefully he found that hotfix—but this authenticode business sounds dicey…and kind of expensive.
Wrap Up
Well, that’s another CodeMash. For the price and locale, you can’t really beat it. Conferences are always a double-edged sword to me: they’re a great way to learn about new and existing technologies/methodologies and an opportunity to ask questions of the experts that normally would be tough to do otherwise. However, they also tend to depress me more than usual. I go away thinking that I’ve fallen so behind in knowledge and experience—I’m barely cognizant of DDD, barely practicing TDD…not to mention Agile, WPF, SilverLight 2.0, Ruby, blah, blah, blah. Either most of these people are exaggerating their experiences, have no life and code all the time, or have great jobs that let them gain deep experience in lots of technologies and methodologies.
Well, I’m going to stop whining and do something this year to keep up. Not sure what, but something. Maybe I should put up one of those trite New Year’s Resolution posts. Hmm. Gotta think about that one.