January 2009 - Posts
I'm not sure I get the point of Mozilla wanting to push an open source video standard (see Ars story). They're pusing for an open platform for video. So why exactly does everything have to be "vendor-neutral, standards-based?" I don't care that Flash is from Adobe. If it works, and everyone has it, what difference does it make? And hey, with Silverlight making some inroads, it keeps Adobe even more honest and working to innovate. Everybody wins.
I hate this religious crap.
Ars Technica launched a redesign today. I seem to recall that they were on ASP.NET before in some custom made CMS. Now they're on Movable Type.
I've been thinking about this a lot lately, the choices made in using a platform. I'm not interested in religion, but I'm obviously interested in ASP.NET as a platform because it's one what I know and love the best. Banks, insurance companies and dating sites enjoy use of the platform, but why is it that it seems to not take significant hold at the lower levels? Does it even matter?
I think a part of it comes out of our culture. Face it, "our" platform enjoys its most widespread use in large organizations where process and bloat are nearly an expectation. Simplicity is hard to find because by our nature we build often in unnecessary, abstract ways, trying to account for a great many what ifs. The PHP and Rails worlds, among others, get closer to doing just enough, and that's exactly what the low to mid-range folks want. Simple is good.
I also blame the community's leadership. I don't feel like we have best-in-class anything. I mean, the official ASP.NET and Silverlight forums constantly have some issue, and they're both clunky. We don't have an all-star forum app (including my own). We don't have an idiot-proof blog app. We seem design impaired (ask yourself how attractive the site is next time a Google search lands you on the answers you're looking for).
I love the ASP.NET AJAX framework. I've also totally fell in love with jQuery. The problem is that jQuery is hard to use with ASP.NET, what with the ugly client ID's and such that won't be "fixed" until v4.0. But on the other hand, I see what might be the perfect marriage for jQuery, namely the MVC framework (which I thought was supposed to be out by now). As powerful as Web forms are, I think they're hard to teach people the right way to use them. MVC challenges everything we do to make things more simple and, my hope, more accessible.
On the plus side, we've had some remarkable changes over the years for C#. Extension methods, anonymous types, LINQ, auto properties, etc., have all made life immeasurably easier. Hopefully we'll be catching up on the UI side soon.
I look forward to seeing what people are doing at Mix. That conference goes a long way toward energizing me and my attitude toward the platform. Hopefully they'll fill the seats... seems odd that they're discounting so heaviliy this late in the game.
I mentioned previously that I was working on a multi-file upload control for Silverlight. Yes, it has been done, but it's a good practical thing to get your head around. I feel like I've managed to get to a good place with it in terms of the "hard" parts (that is, getting to know Silverlight). I haven't fleshed out the back end part as much yet.
The biggest challenge of course for anyone who has spent most of their professional programming life doing Web-based stuff is understanding the right way to do threading. I've done the asynchronous handlers and even put objects on timers in Web apps, but dealing in a real, stateful UI is definitely a different animal. What makes things easier is Silverlight's BackgroundWorker class, which allows you to send notifications to the UI on its finish event. In addition, the Dispatcher helps keep your junk thread safe. That's critical since you can bind UI to pretty much anything with dependency properties, easily the most important concept in Silverlight (and WPF, for that matter). Pro Silverlight 2 in C# is absolutely awesome in that respect, where other books I've read (for SL and WPF) have failed.
The downside of this is that there is no image resizing, but I'm crossing my fingers that the FJCore guys will add a bicubic resizing filter to their library. .NET developers will finally be free of resorting to ActiveX controls and Java applets for this kind of work. I'm still very surprised that there wasn't some basic image manipulation baked into Silverlight, if not the core, then one of the add-on assemblies.
The long range goal is to use this with a plugin for POP Forums that basically does user uploaded photo galleries. Every day I can think of a new use for the forum infrastructure. It works with a wide range of community type things.
I had an exchange with one of the guys from Occipital, who maintain the FJCore library. For those of you not playing along, this is a pure C# implementation for basic JPEG manipulation. It doesn't depend on the .NET Framework in any way, which means it's ideal for use in Silverlight.
In any case, I've been experimenting with it to resize some images, but it uses the nearest neighbor algorithm, which is suboptimal. Something bicubic in nature would of course yield better results. The class library makes it easy enough to plug in these filters, but you need to be a bit of a math nerd. I am not. :)
So I dropped them a line and asked if anyone could jump on that. There is clearly a lot of interest in this library, and it'd be nice to get them some attention going forward. My suggestions are two-fold:
- If anyone can pull off some nice filters for the library, I'd encourage you to offer your help.
- As one of the only things that I feel are really missing from Silverlight, the impact could be enormous. Impact yields more use, yields higher adoption rate, yields more employed .NET developers. I've already mentioned this to some speakers for Mix in March... so can we get the library in a demo?
I think one of the key to Silverlight's succes is without question the contributions of the developer community. This is a platform that, the more I use it, I feel can change how we approach development, especially in the line-of-business and rich app realms. What can we do to help these guys out?
Back in 2004, when I was writing my book, I was all over everything new in the .NET world. It was partly out of never ending curiosity, but partly because I had to know what was in the pipe to avoid making the book obsolete before it was released. These days, I'm a bit more measured. I still watch carefully (really guys, seeing ASP.NET MVC final would be awesome!), but I'm a little more content to just let things evolve and be released as final before jumping in.
The one aside was working on the data-backed DeepZoom in October and November, and I definitely plan to revisit that.
Since Silverlight 2 went final, I've been ramping up my knowledge about it so I could realize some ideas that I had in my head (and with the holidays and a vacation, that means only one month of really getting into it). Like any new development platform, I find it easiest to learn by having a real and practical goal. In this case, it was to build a multi-file upload control. Yes, it has been done and there's an open source implementation, I realize that. But you know how it is, sometimes you want to just do it yourself, and in a way that makes the most sense to you. So that was my weekend project.
The overall experience isn't bad, though I'm still annoyed at the split between Visual Studio and Expression Blend. It reminds me of the days when ImageReady was a split app from Photoshop. It just doesn't make a lot of sense. I've also got an issue where exceptions thrown in the Silverlight app aren't caught by the debugger, but instead passed to the browser. I know the debugger works, because I can drop in break points and step through code, but I can't figure out why the exceptions fall through. That's annoying.
But despite all of that, you can see just how powerful it really is. The stand out pieces to me are the full network stack in the class library, the threading and, above all, dependency properties. Building in this notification system between properties on objects is just awesome because it very nearly eliminates all of the plumbing code one normally associates with any form-based app. The architects of WPF and Silverlight deserve a gold star for this feature.
It's fun stuff to dive into. There's a certain art to layout and style that's definitely new to XAML editing, but the general nature of it forces you into solid practices, compared to HTML/CSS where even experienced people will debate about how to roll. It's not inflexible, but I kind of like being "forced" into the practices. One less thing to think about.
If the next iteration of the tools are more integrated, that would be a huge win. If I can get exceptions to throw in the debugger, I'd be pretty content with how things are today even.
Well, despite getting some leads on who to contact after my previous post, Facebook has otherwise ignored me. I even sent a message Mark Z. just for fun, and he (or someone who monitors his account) wrote back and indicated he would pass along the info to the right people.
But they never did write back, so I'm just going to spill it here. To reproduce the flaw in the chat system, do this:
- Use Adium on a Mac and have it connect to your Facebook account.
- On the same network, login to Facebook via a Web browser from a different account. In this situation, I'd be on Adium while my fiance would be on her Vista computer surfing Facebook in Firefox.
- Check the buddy list in Adium, you'll see your own as well as my fiance's friends in the list. Messages they send to her come to me as well. And I can reply impersonating her.
Now imagine doing this on a larger network at a library or airport or something. I'd say this is pretty broken.
Following my lay-off over the summer from Insurance.com, I've been around quite a bit doing contract work and other sub-optimal things. Now I'm finally in what I hope is a solid job with an online marketing agency that also does app dev. As the company's technical architect, I'm not writing as much code myself as I have previously, but I do get to see a lot of stuff inherited from other places.
The common theme is that most of what I see is universally bad. I mean, throw it out if possible and start over bad. Copy-and-paste from countless blog entries bad. Uses DataTables and Session bad. Written in VB.NET bad. (OK, sorry, that was uncalled for. ;))
I'm trying to figure out the reason for this. I know part of it is the scarcity issue, that there just aren't enough good people to go around. But one would assume that every organization has some senior people in charge of maintaining some level of non-suck. Yet a lot of suck gets out into the wild.
I feel fortunate that I work with developers who are eager to learn and surprisingly open to culture change. They want to be ninjas. I now realize just how high-end the development was at ICOM, and I feel very fotunate to have had that experience, and have others now benefit from it. I like the idea that you can ease your own legacy, and others down the road will thank you for it as well.
Of course, that sounds ironic coming from a guy who often says he can do without the computer science lessons, but come on, the basic design patterns make your life infinitely better and they're not that hard to learn!
What kinds of nonsense have you seen?
I just happened to stumble on a pretty serious flaw in their chat app, to the extent that I wouldn't be comfortable using it on a public network. I feel like I should do the right thing and tell them about it, but they lack contact information in a fairly enormous way. I assume the suggestion box just goes into a black hole somewhere.
So does anyone know humans there?