I just can’t say enough about BDD (Behavio[u]r Driven Design) and how it’s helping me with an application I’m writing (which you’ll know all about soon enough). I’ve stopped myself from soooo many stupid errors it’s unbelievable – and since I’ve been writing so many opinion posts lately, I thought I’d do an end to end BDD post for the masses.
Phil Haack is not only a good friend, he’s also a damn good writer. He has a talent for focusing sharply on a point, and then supporting it with quick wit and a fat brain – a deadly combination should you find yourself disagreeing with him or his point of view. With his last post on the new C# dynamic keyword – I found myself in just such a position – and it’s going to get ugly. Phil: you’ve been served my friend! It’s a Blog Fight – pass the popcorn! OK not really – but these discussions are fun and I was going to leave a really long comment on Phil’s blog – instead I’ll just write my own post.
I’m building an application which I’ll talk more about later – but this one’s different from other applications I’ve built: this one’s for me. In the same way teaching your spouse/significant other how to do X is a major pain in the ass, building your own application makes you do dumb, silly things (I think Jeff Atwood might be able to back me up on this one…). This, friends, is a story of my pain to ease your Monday blues.
I’m a bit steamed. I walked around the block, hugged my cat, infused my chakras with candles made from persimmon and sage by a monk in Kalalau… I even took a few deep breaths. It’s not working and I feel compelled to tell you why.
This post is a bit of a downer – at least for me – but it comes on the heals of this Tweet by Scott: One of those positions is mine. I’ve made the tough decision to leave Microsoft and go back to working for myself.
Every developer has a blog, and every developer bitches about it – mostly because (and this is my theory) they always think they can do better themselves. The only people who don’t bitch about their blogs are the guys who are building the engines (they just bitch about each other’s :).
I got a comment on my post suggesting you learn ASP.NET MVC from a person whom I’ve talked to a lot over the years – Gerry Lowry: There are four nerd diner nerds, We've hear from one that's ornery, but what about the second, third, and the head honcho fourth?
Seems I touched off a bit of a “swirl” with a comment I made on my last blog post:
Before I worked at Microsoft I worked at/with/for various startups. Depending on who you talked to, I was involved in building rockets, the Next Big Thing, and a Super Whamadyne Paradigm-Shifter.
00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01011111 01011111 01011111 01011111 01011111 01011111 01011111 01011111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00101110 00101101 00100111 00100111 00100111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00100111 01111110 00101110 00101100 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00101110 00101101 00100010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100010 00101101 00101110 00101100 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00101111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100010 00111010 00101100 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00111111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 01111101 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00111010 00100111 01011110 00100111 00101110 00101110 01111101 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00111010 00100010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00111111 00101110 00101110 00101110 00101110 00101110 01011111 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00111010 00100111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 01011111 01011111 00101110 00101000 00101110 00101110 00101110 00101110 00101110 00100010 01111110 00101101 00101100 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00111010 00100111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00101000 01011111 00101110 00101110 00101110 00101110 00100010 01111110 00101100 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100010 01111110 00101100 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00111010 00100111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01011111 00101111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01111011 00101110 00101110 01011111 00100100 00111011 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00100010 00111101 00101100 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100010 00101101 00101100 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00101110 00101101 01111110 00101101 00101100 01111101 00101100 00101110 01111110 00100010 00111011 00101111 00101110 00101110 00101110 00101110 01111101 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101000 00101000 00101110 00101110 00101110 00101110 00101110 00101010 01111110 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100010 00111101 00101101 00101110 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00100010 00111011 00101100 00101100 00101110 00101111 00100111 00101110 00101110 00101110 00101110 00101111 00100010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00001101 00001010 00101110 00101110 00101110 00101100 00101100 00101100 01011111 01011111 01011111 00101110 00100111 01111110 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00100010 01111110 00101110 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00101110 00101110 00101110 00101110 00101110 01111101 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101000 00101110 00101110 00101110 00101110 00100111 00111101 00101101 00101100 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101000 00101110 00101110 00101110 00101110 00101110 00101110 00111011 01011111 00101100 00101100 00101101 00100010 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00101110 00100111 01111110 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00101101 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 01111110 00101110 00101010 00101101 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01111100 00101100 00101110 00101111 00101110 00101110 00101110 00101110 00101110 00101100 01011111 01011111 00001101 00001010 00101100 00101100 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01111101 00101110 00111110 00101101 00101110 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01111100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00111101 01111110 00101101 00101100 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00100111 00111101 01111110 00101101 00101100 01011111 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00111101 01111110 00101101 00101100 00101100 00101110 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00111010 00101100 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01011111 01011111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00111101 00101101 00101100 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100 00100101 00100111 00111110 00101101 00101101 00111101 00111101 00100111 00100111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01011111 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 01011111 00101100 00101101 00100101 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00100111 00001101 00001010 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101110 00101100
I've been reading a lot of old blog posts tonite regarding Microsoft and Open Source - it really reminds me of the interesting stances the company has taken over the last 5 to 10 years (I've only been working with Microsoft for just about 2 years now). For instance - I read a post from Scoble that goes over why "Web 2.
“I can’t believe you’re using your blog to pimp you’re book! You’re such a … [not a nice word]”.
I’m never shy about my opinion – why start now? I’ve been reading a lot of posts flying about on whether you should learn MVC, Summing up the differences so you can decide when to use it, I even found a post that offers a scorecard approach!
I’ve been working with the SubSonic forums lately (CommunityServer) as I prep them for retirement (archiving, searchable). One thing I really need to is to be able to run accurate searches based on free text – so over the weekend I’ve been goofing around with Full Text indexing and it hit me that not a lot of people know a little trick you can pull with a Table-valued function.
This is one of those posts that’s for me to remember (cause I always forget it) and perhaps could come in handy for you too. From time to time I need to setup Full Text Indexing (yes I know there’s lots of alternative) and I hate using the IDE if I don’t have to.
I'm sure you've seen the news: I'm excited today to announce that we are also releasing the ASP.NET MVC source code under the Microsoft Public License (MS-PL).
Eilon is a madman. If you ever get the chance to actually meet the guy you’ll see right away that part of his brain is engaged in quasi – dimensional pursuits.
Finally! Today we're announcing something pretty dang cool: a FREE ASP.
Before I was a geek, I was a Geologist. A Geophysicist to be precise - but mostly I just tell people I was a Geologist.
Sometimes I find myself with absolutely nothing to say and yet decide to write a post anyway. Do you ever have that problem?
Last year I tore apart my kitchen with a sledge hammer and a crowbar. I knocked a wall down, ripped out the old, crumbly cabinets, and tore up the 20-year old vinyl flooring that was discolored and horrifically 80's.
I listened to the Alt.NET Podcast the other day and there was a crazy guy who sounded an awful lot like me on there talking about Object Databases.
A lot of people have been asking about the Storefront and whether I've abandoned it with all that's gone on with Oxite, etc. The short answer is no - I haven't.
I mentioned yesterday on Twitter that I'm helping out the Oxite team with some refactoring and tweaking of their codebase. I got started last night and people have been asking about it a LOT, so I thought that today I'd show you initially what I'm up to.
Last night I was watching the sunset here at my house, watching the lightning ripple across the sky as mellow slack-key tones twanged in the other room. Work can get .
I knew this would happen. I put up a post about spamming and XSS and wouldn't ya know it, within minutes I was receiving emails that my blog here had some vulnerablities :).
Recently, the Platform D&E (developer evangelists) group released Oxite, a CMS/blog application that is summarily described thus: Oxite is an open source, standards compliant, and highly extensible content management sample that can run anything from blogs to big web sites. We know this because it runs MIX Online.
I'm sure you've been told, numerous times no doubt, about Cross-site scripting and that it's bad. I think, for most developers, the only fear they have of XSS is looking foolish when someone hacks their site, shredding the layout of their pages and sending popups all over the screen.
I've been hammered in the past for incomplete support solutions, and for bouncing between forum solutions and project sites. There are no excuses - it's completely my fault.
This is an off-topic Saturday post that came to mind as I was eating lunch. I haven't written an off-topic in a while, so I thought today might be the day I write about something that is very close to me: one reason I live where I do.
I just got my notice that it's been one year here at the Blue Monster. Interesting, that.
I'm no stranger to the off-topic political posts when the occasion calls for it - and this is one of those occasions. Over the last few months I've talked to a lot of people and was amazingly surprised to find out how casually people take the responsibility of voting.
Let's get this out of the way: I know you're going to think I'm nuts as you read this. You may "pfft" to what you're about to read - know that I know you're "pfft"-ing me.
I ran into a "weirdness" the other day while working up some sample code for this little book I'm writing and thought I would share it with the community since hit me sideways. I was using ASP.
Scott beat me to it. I had been waiting a bit to talk about the new Web Application Installer from the IIS team but got scooped.
As many of you may know, I've been goofing around with Code Generation again with SubSonic's new MVC Addin. One of the things I really wanted to try and flex is Visual Studio 2008's code generation bits - T4.
I've been tagged by Scott Hanselman, who's asking: Did you grow up a geek? Let's see what you looked like as a young burgeoning nerd or nerdette.
Yes, I know this is becoming a habit - but the last bits are tough! This one's worth waiting for though, I think :).
As I'm sure you know by now, jQuery is going to ship with Visual Studio in the future and will also be distributed as part of the ASP.NET MVC installation.
It's annual review time at Microsoft and I've been a tad distracted with that and some other things that I hope to show off in the next 2 weeks. I did find time to record about 40 minutes of stuff (usable stuff) over the last 2 weeks and I've been cutting/splicing it together over the last few days.
Had a funny conversation with a colleague the other day where we talked about coding, project process, platform, etc. and we started talking about "Our Most Successful Project" and what it was and why.
I've refactored to Preview 5 and posted the source up to CodePlex and now I'm doing some work on the Order Fulfillment piece. I'm recording all of it but there are some ... *things* ... that are inspiring me at the moment that are related to what I'm doing here (building an application). I've decided that chasing and refining those could help me to finish this faster. So hang in there. It'll be worth it! I should have another episode ready by this Friday.
If you were hired to create some software to count votes in an election, how would you do it? What considerations would you have and how would you implement them.
I'm currently updating the site to work with Preview 5 and there have been some significant changes - as well as opportunities to upgrade the way I've been doing some things. I'm going to take a few days here to make sure all things are working correctly. Hopefully I'll be able to pop out a new episode on Friday...
I've been working a lot with LINQ over the last few months, trying to approach it sanely with respect to SubSonic. It's not that it's terribly difficult to understand - it can simply be overwhelming at times with how much is in there.
Read Scott Watermasyk's post today on Disqus (spose to read like "discuss") and it sounds very intruiging. I've always hated the way comments are managed in ANY blog platform (although Graffiti does it pretty well).
I left a comment on Chris Cyvas post today about LightSpeed and SubSonic. Turns out that I got stuck in a time warp .
I've been feeling like poop today and I thought I was getting sick - turns out I was just stressed out. This is both good and bad - good in that I don't have a virus, bad in that I'm THAT stressed out.
It's Friday and I feel horrible. I called in sick and for the last few hours I've been laying here, bored out of my mind, feeling flat out yucky.
I've been meme-pinged by a few people (Ryan Lanciaux and Father Damien Guard - who I got to meet at ASP Insiders and who looks remarkably like Thom Yorke) and in the spirit of wasting time and adding (extremely needed) more words to the blogosphere, here it is: stuff about me I know you desperately care about. How old were you when you first started in programming?
I feel like Ayende, posting little snippets of code weirdness as you write them (or see them). Today, when testing the OrderService and transactional stuff for the MVC Storefront, I wanted to write a test that would conclusively show that an order would fail if the Authorize() method of IPaymentService threw.
I spent a week in Redmond earlier in the month at the ASP Insiders Summit and wasn't able to get too much work done on the store. There's a lot going on, as you can imagine, and with the next screencast I want to start to tie the application up - at least from the user's perspective.
In one of the first few episodes of the MVC Storefront, Ayende decided to be brilliant and came up with a really cool way to handle lazy loading with Linq To Sql: The LazyList. If you're not familiar with the term, "Lazy Loading" applies to the concept of an object that has a property which is a collection of child objects - like a Category would have Products.
The last few weeks has been ripe with weirdness. On three separate occasions I've been jarred into an alternate Macarena universe where I can still get Lucky Charms from WebVan.
Every time I do a demo or post something about MVC, I invariably get the comment: "this is Spaghetti Code from the bad old days of ASP Classic". Gimme a break.
I found out the other day (the hard way) that ComponentController - my beloved little prototype - was ripped mercilessly from the MVC framework in Preview 4 and cast into the Pit Of Carkoon to "be slowly digested over thousands of years". I was mortified, vaklempt, the refactor dingo ate my baby!
It's time to rethink how we store user information. You don't need as much as you think you do.
When I created the prototype of the MVC Toolkit (the HTML Helpers), there was a method in there that I was particularly fond of: ToFormattedList(). This Extension method would take an IEnumerable (or IEnumerable
This last week I was on vacation with some friends of mine in the Northern California foothills (Pinecrest Lake). My buddy John has a cabin up there that's been in his family for almost 80 years, and it's the perfect place for a bunch of aging dudes to act like idiots and talk politics.
While building out the MVC Storefront, I find that I'm creating quite a large "Helper" library for doing common things, like registering script tags and CSS sheets. I decided to tighten this up a bit and created a helper I kind of like.
I sat today with Jeremy Miller (the Shade Tree Guy - what does that mean anyway?) for 2 whole hours as we replumbed the site to work with StructureMap.
I've been turning up the heat in terms of getting content out for the MVC Storefront series, and it's caused a bit of an avalanche for me. I've had to "double my efforts" of late as I've been falling behind some, and in doing so I've been smothered in geeky goodness.
A late night Skype with Scott Bellware has turned into something. stange.
You can get it here. Eric has a great write up here. This is all Eric, Yitzock (adminjew), and Shawn Oster. I can't thank these guys enough for their work. Tremendous amount of bug fixes and optimizations... just awesome.
I've had some interesting experiences on TDD Island over the last month or so, and I thought it would be a good idea to share what I think so far. Evan Hoff asked me in a comment on my last post: SOO.
Behold, the meme (from Wikipedia): A meme (pronounced /mi?m or m?
54 68 65 20 42 72 65 65 7a 65 20 61 74 20 64 61 77 6e 20 68 61 73 20 73 65 63 72 65 74 73 20 74 6f 20 74 65 6c 6c 20 79 6f 75 2e 0d 0a 0d 0a 44 6f 6e 27 74 20 67 6f 20 62 61 63 6b 20 74 6f 20 73 6c 65 65 70 2e 0d 0a 0d 0a 59 6f 75 20 6d 75 73 74 20 61 73 6b 20 66 6f 72 20 77 68 61 74 20 79 6f 75 20 72 65 61 6c 6c 79 20 77 61 6e 74 2e 0d 0a 0d 0a 44 6f 6e 27 74 20 67 6f 20 62 61 63 6b 20 74 6f 20 73 6c 65 65 70 2e 0d 0a 0d 0a 50 65 6f 70 6c 65 20 61 72 65 20 67 6f 69 6e 67 20 62 61 63 6b 20 61 6e 64 20 66 6f 72 74 68 20 61 63 72 6f 73 73 20 74 68 65 20 64 6f 6f 72 73 69 6c 6c 0d 0a 57 68 65 72 65 20 74 68 65 20 74 77 6f 20 77 6f 72 6c 64 73 20 74 6f 75 63 68 2e 0d 0a 0d 0a 54 68 65 20 64 6f 6f 72 20 69 73 20 72 6f 75 6e 64 20 61 6e 64 20 6f 70 65 6e 0d 0a 0d 0a 44 6f 6e 27 74 20 67 6f 20 62 61 63 6b 20 74 6f 20 73 6c 65 65 70 2e 0d 0a 0d 0a 2d 2d 52 75 6d 69
Had an interesting conversation the other night with a buddy of mine wherein we were wondering if it's possible that an application can actually be "finished". By "finished" I mean it does what it's supposed to do, does it well, and delivers the value it's promised.
I love lambdas and I'm pretty sure they solve every problem imaginable. Why just the other day my daughter painted her face with leopard spots, using a Sharpie pen, and I said to myself "Rob(x=>x.
Many people on the forums want to know how to best protect Actions on their Controller using Forms Authentication. The MVC Team has done a nice job introducing Filters (using Attributes) to this latest drop of MVC, and in this post I'll show you how to create a filter that can handle security.
Props on this one go to Scott Hanselman who pulled me back from the edge of the cliff last night. I was particularly distraught in getting a MIX demo together where I had to do some queries using LINQ, and I couldn't for the life of me figure out how to fashion an IN query!
As you may have guessed, I've been using LINQ a whole lot with Adventure Works lately. It's been.
I spent Saturday with my buddy Eric, in his garage, drinking really bad Coors Light and talking about cars. He was rebuilding this Jetta of his, swapping out the gas tank to add in a Bio Diesel system.
I watched two videos today that just got me rolling. The first one (kind of creepy how completely accurate it is) is Tina Wood's life at Microsoft : The second is the Channel9 interview with Scott Hanselman.
I bought an iPhone roughly six months ago and I thought it would be a fun thing to post my experiences with said phone. You either love em or hate em - no getting around it.
A few months back, right before I was hired by Microsoft, I knew people wouldn't look kindly on the forthcoming ASP.NET MVC Framework and it's support of Inline Scripting.
I want an XBox, wife doesn't. We finally bargained and she told me if I recycled some of my old gadgetry on eBay I could use that money to get an XBox.
What could be more boring - a blog about blogging :). Usually when I read a post title which suggests "Blog Like Me, Today!
In my write up on ASP.NET MVC, I decided to recount my conversation with Scott Hanselman on the subject of the "story" behind ASP.
UPDATE: Refactored and tweaked the validation method below by popular request! I know this might make some people groan - but that's OK - I'm used to it.
There are many solutions out there for Source Control and Build Servers (with Continuous Integration) - most notably (and in no particular order) Team Fortress Foundation Server, Subversion, CruiseControl.NET, and CI Factory.
Scott Hanselman and I were on the phone the other day talking about Community stuff surrounding MVC and certain ideas we had. The next thing ya know we're waving our phone arms and waxxing poetic as we try to phrase what we think the "MVC Story" is.
On the plane tonight (I'm in Redmond this week) I got to thinking about writing "Maintainable Code" and what it means in light of our fad-centric industry which churns itself every 18 months or so with a new language or platform version. We all inherit projects and are confronted with Geek Lust to rewrite everything in our own image - but what is the motivator for you when you do this?
I'm an avid brewer and have been for the last 16 years. My good friend John Kirk brewed up a batch of beer in our kitchen when we were just out of college and sharing a house in Berkeley, CA.
This post is in response to a forum user, who is wondering how to properly use a ViewUserControl: I'm sorry if this is a really silly question, but I'm having a hard time grokking what the right usage of a ViewUserControl looks like. Does one invoke the RenderView from a controller?
Just got done reading Phil's post about Leaving LA and it made me homesick. The odd thing is, I'm in LA right now, on vacation with my family, sitting in the house I grew up in, visiting my momma and I'm still homesick, but I'm very happy because it's right outside my door, and when I get done I'm headed out into the sights, smells, and sounds of the city that I love.
This question has come up many times in the forums: I have an application that needs functionality X, but I need it everywhere - including my Master Page. Where should I put this stuff?
Having a great discussion over on the ASP.NET MVC forums about Html-Encoding and what should be done about it.
I've been asked a lot over the last few weeks this question: Should I use SubSonic, LinqToSql, or NHibernate? And I think it's probably a good idea to go over these things in a post - so here goes.
Phil's a Forum Hound (with some great hair I might add - it does that Becks faux-hawk thing), and I'm getting cheesed off about it. He and I are in a bit of a competition up at the ASP.
In some of his demos, ScottGu used a method that we didn't include in the MVCToolkit called "PagedList
The bits:
CodeSnippets are something we use every day, and from what I know, they are severely overlooked. In this post I'll show you how to create your own to do the things you do a lot of, and also how you can use your Toolbox to store the things you seem to write over and over again.
There's a lot of information out there on how to do specific things with ASP.NET MVC, but not much in the way of architectural approaches that you can use to leverage the new MVC option.
For the last month or so I've been working on the MVC UI Helpers (aka the MVC Toolkit) that will help developers work with HTML in their Views. These helper methods are primarily Extension Methods, and are designed to encapsulate UI code in much the same way that Server Controls do with Web Forms.
I don't like categorizations, and I "super" don't like it when people hoist a flag to identify themselves and "how they roll" in an exclusive way. When I first heard the term "Alt.
I've been thinking a lot today about what it means to be thankful. Truly thankful - not just "aww that's sweet" kind of thankful.
Math isn't just for breakfast anymore. In fact, it turns out, there's a lot you can actually do with Math, aside from using it to sound like you know a lot of stuff.
My first week at Microsoft is just about over. This is a pretty whack deal.
So I'm in Vegas right now at DevConnections/DotNetNuke OpenForce. I should be downstairs in the smoke-filled casino, watching friends hand over well-earned money to the Vegas machine.
Just finished putting the wraps on a new provider for SubSonic using the new LOLCat.NET coding engine.
01010100 01101000 01100101 01110010 01100101 00100111 01110011 00100000 01101110 01101111 00100000 01100101 01100001 01110010 01110100 01101000 01101100 01111001 00100000 01110111 01100001 01111001 00100000 01101111 01100110 00100000 01101011 01101110 01101111 01110111 01101001 01101110 01100111 00001101 00001010 01010111 01101000 01101001 01100011 01101000 00100000 01100100 01101001 01110010 01100101 01100011 01110100 01101001 01101111 01101110 00100000 01110111 01100101 00100000 01100001 01110010 01100101 00100000 01100111 01101111 01101001 01101110 01100111 00001101 00001010 01010100 01101000 01100101 01110010 01100101 00100111 01110011 00100000 01101110 01101111 00100000 01101011 01101110 01101111 01110111 01101001 01101110 01100111 00100000 01110111 01101000 01100101 01110010 01100101 00100000 01110111 01100101 00100111 01110010 01100101 00100000 01110010 01101111 01110111 01101001 01101110 01100111 00001101 00001010 01001111 01110010 00100000 01110111 01101000 01101001 01100011 01101000 00100000 01110111 01100001 01111001 00100000 01110100 01101000 01100101 00100000 01110010 01101001 01110110 01100101 01110010 00100111 01110011 00100000 01100110 01101100 01101111 01110111 01101001 01101110 01100111 00001101 00001010 01001001 01110011 00100000 01101001 01110100 00100000 01110010 01100001 01101001 01101110 01101001 01101110 01100111 00111111 00001101 00001010 01001001 01110011 00100000 01101001 01110100 00100000 01110011 01101110 01101111 01110111 01101001 01101110 01100111 00111111 00001101 00001010 01001001 01110011 00100000 01100001 00100000 01101000 01110101 01110010 01110010 01101001 01100011 01100001 01101110 01100101 00100000 01100001 00101101 01100010 01101100 01101111 01110111 01101001 01101110 01100111 00111111 00001101 00001010 01001110 01101111 01110100 00100000 01100001 00100000 01110011 01110000 01100101 01100011 01101011 00100000 01101111 01100110 00100000 01101100 01101001 01100111 01101000 01110100 00100000 01101001 01110011 00100000 01110011 01101000 01101111 01110111 01101001 01101110 01100111 00001101 00001010 01010011 01101111 00100000 01110100 01101000 01100101 00100000 01100100 01100001 01101110 01100111 01100101 01110010 00100000 01101101 01110101 01110011 01110100 00100000 01100010 01100101 00100000 01100111 01110010 01101111 01110111 01101001 01101110 01100111 00001101 00001010 01000001 01110010 01100101 00100000 01110100 01101000 01100101 00100000 01100110 01101001 01110010 01100101 01110011 00100000 01101111 01100110 00100000 01101000 01100101 01101100 01101100 00100000 01100001 00101101 01100111 01101100 01101111 01110111 01101001 01101110 01100111 00111111 00001101 00001010 01001001 01110011 00100000 01110100 01101000 01100101 00100000 01100111 01110010 01101001 01110011 01101100 01111001 00100000 01110010 01100101 01100001 01110000 01100101 01110010 00100000 01101101 01101111 01110111 01101001 01101110 01100111 00111111 00001101 00001010 01011001 01100101 01110011 00101100 00100000 01110100 01101000 01100101 00100000 01100100 01100001 01101110 01100111 01100101 01110010 00100000 01101101 01110101 01110011 01110100 00100000 01100010 01100101 00100000 01100111 01110010 01101111 01110111 01101001 01101110 01100111 00100000 00001101 00001010 00100111 01000011 01100001 01110101 01110011 01100101 00100000 01110100 01101000 01100101 00100000 01110010 01101111 01110111 01100101 01110010 01110011 00100000 01101011 01100101 01100101 01110000 00100000 01101111 01101110 00100000 01110010 01101111 01110111 01101001 01101110 01100111 00001101 00001010 01000001 01101110 01100100 00100000 01110100 01101000 01100101 01111001 00100111 01110010 01100101 00100000 01100011 01100101 01110010 01110100 01100001 01101001 01101110 01101100 01111001 00100000 01101110 01101111 01110100 00100000 01110011 01101000 01101111 01110111 01101001 01101110 01100111 00001101 00001010 01000001 01101110 01111001 00100000 01110011 01101001 01100111 01101110 01110011 00100000 01110100 01101000 01100001 01110100 00100000 01110100 01101000 01100101 01111001 00100000 01100001 01110010 01100101 00100000 01110011 01101100 01101111 01110111 01101001 01101110 01100111 00100001 Now get back to work.
When I was in Redmond a few weeks ago I begged ScottGu for a copy of the MVC bits so I could "muse" over how SubSonic would fit in. Scott's a big supporter of what we've been doing with SubSonic, and he gave me his "demo proto bits", which, as Hanselman put it, are but shades of the real thing.
Well, that was a record. It's been 5 and a half months since I've needed to re-image my machine, and I think today is "pay the piper" day.
Previously I posted my modified version of Jon Lam's Vibrant Ink theme (which is a copy of the TextMate/Rails theme), and I've received a lot of queries about it, including some tips and changes.
As I've been reading through the comments to my last post itoccurred to me that .NET has been around for about 7 years now, and for a lot of developers, that's all they know.
As if I haven't been flamed enough in the last few days (and I still have a few minutes left on my Fire Ward),I'm going to challenge the notion that Inline Scripting is a relic of Web 1.0, and that it has no place in today's ASP apps.
Update: I've responded to many of the comments below here I love Rails - let me just get that out of the way right now. As many who've read my blog know, I think it's the Dog's Bollucks in terms of a developer's framework.
Over the last 3 weeks I've found myself engaging with people who are FUD Poster Children. FUD, if you're not aware, stands for Fear, Uncertainty, and Doubt: "Fear, uncertainty, and doubt (FUD) is a tactic of rhetoric used in sales, marketing and public relations.
While I was in Redmond last week I got to talking to a few people, and was surprised when a few of them said "Yah, I saw your post on [thingX]". It's strange - those MS guys seem to just know when you blog about things they're working on.
In my last post I talked about some simple approaches to mining text using Full Text Indexing in SQL Server 2005 and LinqToSql . Admittedly, the LinqToSql bits we pretty light and some even asked "why is Linq even in the title?
Prolog and Teaser This is going to be a long post. More than that, this post is going to show you something (if you don't already know it) that could have very easily netted you $20 - $50 Million in funding just 4 years ago (who knows - maybe this stuff might even be worth this today).
I feel it's appropriate to start this post off this way:
There's a lot you can do with LINQ and the new C# goodies that are coming up in .NET 3.
I just got my rear handed to me today. I tried to make fun of Jon Galloway for being a dork, and I got dork-served: Don't mess with Jon.
This post was supposed to be all about Lambda Expressions and how you can use these to strip some serious lines of code from your application. As I started working with some examples it became clear to me that Scott Guthrie already said pretty much all that needs to be said about that.
I've been working lately with LINQ and LinqToSql in an effort to see how SubSonic can "play nice" with the emerging framework. In my previous posts I discussed the DataContext in LinqToSql and what it means from an architectural point of view.
Why don't you rip with me, the maniac psycho
are the things you say when screaming at your monitor when young ears are in the next room. Yes, it's silly.
Lots to read lately on LINQ and Linq2Sql, and for the last couple of days I've been tits-deep in code, trying to figure out neat and fun ways to clamp LINQ to my Database's privates while not causing offense. Let's start this post again.
I know that Scott says not to do this, but I have to. I'm having a hard time managing my servers as it is, and my new thing is to "service out" whatever I can. My feed is the same (it's why I use feedburner!) so most of you shouldn't even see this post. I love SubText and only wish Phil had a hosted thing going :(:(:(.
I get eye-strain headaches sometimes, and it really sucks. A lot of this has to do with the black-on-white default settings that VS uses.
It's late in the day, my IPA that's been fermenting now for 10 days has a wonderful sour/bandaid taste (the yeast was crap evidently), and a hurricane is making it's way slowly towards us. Not really conducive to work so I thought I'd muck around with Rails a bit and make y'all a screencast that "goes beyond" the sticky sweet stuff and shows you how easy it is to extend and build out your application.
I'm getting a complex. I think my PC hates me, I smell bad and maybe, just maybe I'm getting a little paunchy round the midsection as the surf sticks to the other side of the island.
A lot people keep emailing me and letting me know how much they like the Rails webcasts I've been doing so I thought I'd continue today with a webcast all about their Unit Testing framework.
I've been a consultant for a long time now (22 years!) and sometimes I really hate the CYA part of it all.
I took a stand for All The Geeks tonite. Took one on the chin (and the ribs/teeth/forehead) but I stood strong in the face of venomous anti-gadgetry and stood up for the Little Man (like the guy in Oh Brother Where Art Though).
I had to make a tough decision a month or so ago, and that was to give up control of the Commerce Starter Kit, and hand it over to someone more capable of giving it the time it needs. I don't like the idea of "giving up", but at the same time everything cycles through some sort of organic change process.
I've been reading The Name of the Wind by Patrick Rothfuss and I have to say it's as close to perfect as a book can be. It keeps me up way too late, I read it when I have 10 minutes to myself, and overall I just can't put it down.
The sun shines outsideMy eyes strain to see clearlyAlpha means patience If you haven't seen this error when working with Silverlight, you will. I promise.
I'm sure that those of you who have 3-7 year-olds know exactly what the title is referring to. For those of you who don't have kids, you may want to skip this post - or not if you're planning to have kids soon!
Dare wrote an interesting post on Three Things he learned in college, then Scott Hanselman wrote up Three things he didn't learn in college, and that's spun people off to writing what they've learned (and not learned) etc in college, and they told two friends, and so on, and so on. It's all so terribly exciting and it's filled up my reader all of this excitement has.
Recently I have been asked by a client to use LINQ for some interesting stuff (which I'll blog about later), and one of the things I needed to do was to use it to query a REST service. Step 1 was to query Amazon (since there is an existing sample out there on how to do this), and I just wrapped up that part of it and thought I would share with you how I dove nose-first into refactoring the existing sample to work with .
It's been a while sinceI asked for help with the SubSonic forums, and a lot of good people asked to take the project on. Also, we had a nice contribution from Microsoft AND MaximumASP to support the effort!
I posted about this the other day with the Login Control example, but it really is worth having it's own post since I, once again today, pounded my head trying to figure this out (duh). Anyway - if you're going to allow script components (like AJAX and Silverlight) to access your web service, you need to make sure you mark the class with the "System.
This is going to be a big post, but I'll do my best to be as succinct as I can. This wasn't easy - mostly since the controls I needed the most were not easy to understand, and Twitter likes to crash every 15 minutes (I'm not kidding, that's what I ran into - completely non-responsive every 15 minutes).
In previous days writing about my journey down Silverlight lane, I focused on what Siverlight is and also some architectural approaches when using it (Eric Kemp has dubbed me the "Siverlight Surfer". too funny).
So my wife and I are having a nice dinner together the other night at Bar-Acuda, a great local tapas restaurant here in town that our friends own. The guy who owns it used to own the Slo Club in San Francisco, and the environment is really wonderful - sort of a little mainland escape for us.
So I managed to ruffle a few feathers with my comments on ORM the other day. While I stand squarely behind what I said (which is that ORM lends itself to abuse), I think it might be a good time to clarify a few things since I seem to have landed on someone's bad side and I certainly didn't mean to - Ayende is one of my hero's and inspirations.
This is going to be one of those "silly" examples, but I hope it illuminates the Silverlight landscape a little. In this post I'll work up an ASP.
For the last 2 weeks I've been getting my feet wet with Silverlight. Actually that's not true - I've been getting wet everywhere with Silverlight.
PrologThink back to your high school/early college days. It's Friday night and you call your buddy Jimmer wondering what's happening.
I've been asked a few times by friends and people I've worked with how "I'm setup". A lot of people work for themselves and some make a really good living at it.
I've been working a lot with Sam Ramji (Microsoft), Phil Haack, Jon Galloway, and Scott Hanselman over the last few months on various ways that, together with Microsoft, we can help expand the Open Source landscape for .NET.
Jon Galloway posted today (based on some "info" that I turned him onto) that CodePlex appears to be launching Subversion. The notion arose from this workitem, posted at CodePlex, which clearly shows a "Release Date" of June 5, 2007.
Previously I posted a request for ideas RE a SubSonic "Green Screen" challenge, wherein y'all give me some ideas on an application I could work up and I would do a series of webcasts, showing me do just that. Lots of ideas were presented and they varied between CMS and Forums, and since our new Starter Site has a lot of CMS in it, I figured I'd go with forums.
Kevin Fricovsky was nice enough to contact me a month or so back and ask me some thoughts about Open Source, Big Waves, and Life In General. The interview was just published if you're interested - he asks me questions about SubSonic and other random things. Very fun :).
Well, that didn't take long :). Phil was commenting on the cool SP we use(d) to load up a tree-view of the Pages, and asked the pivotal question: Does it work in MySQL and [all the other databases that aren't SQL 2005]?
I'm on vacation. And it's good.
Eric and I are feverishly polishing and tweaking as we try to nail version 2.0 down as best we can.
These guys never stop... http://www.google.com/tisp/
I dabble in Rails for fun - it inspires me to do what I do for SubSonic. The one MAJOR PITA however is running it on a Windows 2003 Server box (I have a nice, big, PHAT hosted box with MaximumASP.
Keegan's gone and got himself all sorts of busy lately and so I'm finding myself a tad shorthanded in the VB department. We've rolled a new code scripter out and we need to make it work for the VB'ers out there.
Most of the day I have some kind of music or other playing while I'm trying to get work done (or get my kids off my lap). My musical taste varies, and more than once I've had someone on Skype message me wondering why I was listening to Xymox (curse that LastFM plugin!
My youngest daughter, Ruby, doesn't like to sleep. Neither does Vista running an NVidia GeForce 7900 GT for that matter.
I am happy to announce our first "beta" of Google Checkout for the Commerce Starter Kit. We took our time with this one, and were fortunate enough to get to work with Martin and the gang at Google on how to provide the best experience possible.
I was watching OC-16 the other day (our local "variety channel") and saw a cool piece on Charlie Chan. He's a bit of a cult hero over here in Hawaii and was inspired by a guy named Chang Apana, who worked as a detective for the Honlulu police department back at the turn of the century.
I seem drawn to living in highly-touristed spots. I think it's from growing up in the land of Edward Scissorshands (props to anyone who can figure out where that is.
I'm interested to know what people think about auto-complete AJAX "stuff" that's out there . I think I like autocomplete, but then again I think I might not.
Phil wrote a great post today on ControlState and ViewState for ASP.NET pages.
I paddle outrigger canoe during the spring summer months and along with being a great workout, it's a perfect time to slip into Alpha-wave state and let my creative side take over, solving work issues of the day or thinking about a better PvP build for my Rogue. In fact you could attribute SubSonic's existence to the fact that I paddle :).
I've been working lately with the GoogleCheckout guys (Martin Omander in particular) on how we can integrate GoogleCheckout nicely into the Commerce Starter Kit. The architecture of the Commerce Starter Kit is such that it's not totally straightforward on how this should work - but I think we're really close :).
On the heals of Jon's super-groovy Kick-it post, I thought I would add another tweak that I put up for my blog: using Google as my search engine.
Just got an invite today from the MIX '07 Content Crew to participate in a panel discussion about Open Source and .NET: Open Source Applications Using the .
So yesterday I wrote about the latest SubSonic checkin and Kevin Dente left me a great comment that got me thinking a lot about collection sorting and how to do it properly. One of the things Kevin brought up was that the boolean argument for sort direction was limiting - it really should be an enum for readability and also in the case where you might want to support a third sorting direction option (aside from ascending and descending): unsorted.
Jeff Atwood wrote an outstanding blog entry today:Why Can't Programmer's Program? It's an interesting read and revolves around the problems developers have writing an answer to this problem:
I've been pretty happy with Vista - I've played by it's rules and I haven't gotten hurt. Well at least not as much as I'd like to have been.
I moved my blog to SubText completely today, and I couldn't be happier. Mostly because of the UI options that I have now (some really groovy styles and a great editor) and also because I think this thing will scale happily.
I have a the very typical developer disorder: Magpie Syndrome, where shiney things attract my attention (and make me fly face first into reflective surfaces). I'm usually the first kid on the blog to upgrade to the alpha-release of a new OS, or to say "sure why not" when a major software company asks me to build up a Starter Kit based on a first beta of a new development platform (for example).
Yes, I know that you can download all sorts of Auto-completion stuff using the Atlas Toolkit. But let's pretend that you client hates Atlas.
So I'm in San Francisco last week, getting ready for the Bay.NET user group and going over the presentation when my lovely, hateful, major POS Alienware Area 51m (that cost me $3500) decides to take a dirt nap.
I was talking to some friends the other day about books that I love (and there's a lot of em) and I kind of went off on all the great things out there to read. I love talking about books, sharing favorites, and discovering new authors; so in the spirit of a Virtual Book Club - I thought it would be fun to share some of my most favorite books with you, dear reader.
So Vista called me last week. I know, I know.
Phil Haack has tagged me and so, being the nice type that I am (and I'm afraid of Phil) I'll play along. I'm not sure if anyone cares about me and my Five, but it's my obligation.
Had a very interesting discussion over lunch today, and being the "challenging personality" that I can be, I was questioning my compatriot (the ever-popular nameless one) at every turn. He took it in stride and after a while we acknowledged each other's points by ordering a beer and declaring we were each full of #$@#.
I recently started to use FCKEditor and it's the Dog's Bollocks I must say. The editor is peaches but the additional file manager is rockin!
Recursion is one of those geek Camaro-qualities, where Big Guy Geek might say "well you know MY recursive method only uses the stack and has 16-inch centerlines" (or something like that). I remember sitting in my Pascal class and our class was on outputting an org chart.
I hate MarketSpeak. Words like "Paradigm", "Dogfooding", "PowerChat", and "Virtual Marketplace" all make me turn green :).
Here's one for the Utility Belt - how to upload an Excel workbook and display in a Gridview. This comes in handy when user's want to import bulk data data to your site (admin function, etc).
I recently had to repave - no - reincarnate my PC and so installed everything from scratch. In doing so, I:
In re-installing my box, I had to run SQL Express a few times to get the Business Intelligence toolset up and running. Long story short - I had to install SQL Manager Express twice: once using SQL Advanced Toolset and once using the SQL Toolkit.
I'm cut. Bruised.
I'm writing to you from my laptop, dear reader, as my PC is a steaming slag heap on the floor here. Long story short: It's too soon to be using Vista.
For some reason I have Buffalo Bill from Silence of the Lambs in my head: "It puts the lotion on its skin, or else it gets the hose again. It puts the lotion in the basket.
Vista RTM was pushed to the MSDN downloads yesterday and being the Magpie geek that I am, I frantically logged in and began the download. It took a while to pull down all 2.
The domain CommerceStarterKit.org expired 5 days ago and for some reason they decided not to let me know about it.
I am in the process of cleaning up, formatting, and generally "spit-polishing" the second version of the Commerce Starter Kit. It's been in beta for about 17 years now, and I think we're about done :).
I grew up in LA and I'm used to quakes so when the quake hit the other morning I sort of smiled my way through it, remembering my years growing up near the intersection of the San Gabriel and San Andreas faults. All's well with us (thanks for thoughts to all who sent an email!
I have a fast box. Luke had to roll his own lightsaber before he could be a Jedi, I had to build my own Computer before I (or so I thought) I could properly run Visual Studio.
First, if you haven't watched the World of Warcraft Southpark Episode, you must. It's disturbing, humbling, painful, hysterical, and basically made a bunch of MMO players (myself included) squirm.
Just got my copy of ASPNET Pro magazine and I skipped ahead to the back flap to read what Jon Goodyear has to say about stuff. Normally I read this kind of thing lightly cause, well you know, it's opinion and it needs to be strong if it's to be entertaining (and let's just say Jon has a lot of "interesting" opinions).
I am always asked by clients, at the end of a project, to generate a whole mess of reports. Usually they are within scope (I am a hound about reporting and making sure that all data needed is put in there during initial design) but often, too often, a client can't think of all the reports they'll need when the site is up and rolling.
I live in a very small place (Kauai, Hawaii), and I am reminded of it every week. The power goes out at least once a month for at least 2 hours a shot, right in the middle of the day.
I'm working for a client right now who needs to scrape some public data from the web. It's all very legal and they have the
ForwardA bit of warning: this is a little zen thing about my kids, so if you're not a parent you probably won't care. Though I'll do my best to entertain you "0-drag coefficient" types out there too.
Let's face it - Ruby is seductive. From your first read of Ruby code, your hooked:
I'm a vid geek, plain and simple. There, I admitted it which is supposed to help matters but.
Recently I was asked by a client to help out with a dependency issue they were having with Team Foundation. They have two Team Foundation projects going (each it's own solution) and one of the projects (Project A) had a dependency on the other (Project B).
I decided to get my hands dirty today with Google's new checkout system. It's remarkable, silly, scarey - kind of all the things you thought when Bubble Yum first came out and those huge pink blobs erupted from people's mouths.
I have just, this very minute, FINALLY made my Website Project (not ScottGu's WebProject, but the plain old ASP.NET website) build inside Team Build (Team Foundation Services).
We're making extraordinary progress here and are sooo very close to getting beta 2 out the door. Here's what's going on:
For those of you using SQL 2005 Express, you really owe it to yourself to upgrade to SP1. In addition you can now get Express Edition with "Advanced Tools" - which include Full Text Indexing and other fun things.
I mentioned in one of my previous posts that I had a big announcement coming, and here it is:
Watching yourself is not easy - especially when you're sort of terrified :). The MIX people (the MS conference this last March) put a really cool webcast up of my talk at the MIX - introducing the CSK etc.
So in the last month or so, PayPal has tightened the screws on it's calculator. Now before I get too far along here, I need to apologize to everyone who has been receiving the "RedirectURI Cannot Contain " error, and the "Order Total is invalid" error.
Long overdue post - sorry for the delay. Wanted to update everyone on some changes coming in for beta 2, the feature list we're woring with, etc.
This just in from PayPal: PFX/CER files are no longer required to access the API. Instead they are moving to using a second password in the form of a signature!
J Sawyer (aka JEclipse from the CSK Forums) and I were talking about OR/M (Object Relational Mapping) and the goods/bads about it. He told me a funny line that i borrowed for this post, which he heard from a colleague at Microsoft: "OR/M is coding Vietnam".
The forums have not been logging IE users in, and I had no idea. If you use FireFox however, you've had no problem logging into the CSK forums.
We're heavy into our next build phase, on target for our late spring release. Our goal is to announce the release of 1.
So I'm back on my Ruby thing again. I don't know why but it's got ahold of me.
I was thinking this server switch thing went too well. for some reason all the apps that we use (CommunityServer, DNN, my DasBlog) are now "forgetting" cookies.
I am not really a big fan of OWC since they are ActiveX controls, which are a major no-no for web design. However, if you have a client like I do who has a locked-down desktop, then you can have a little fun.
David Hayden has been kind enough to extend the CSK with an InventoryProvider that does a little bit more than the existing "AmountOnHand" field. Check it out:
I have been talking to the MS and PayPal folks and have narrowed down a pretty good release strategy for some interim fixes as well as added functionality.
I watched the VS/SQL/BizTalk 2005 Launch Party yesterday online and it was pretty hilarious - Cheap Trick? I dunno.
We are readying the launch of the ASP.NET 2.0 Commerce Starter KIt and have just loaded up the support and download sites. You can check em out at http://www.commercestarterkit.org. This has been a lot of work by some very fine people and I am proud to be part of this effort! Give it a spin!
Wow, this one sucked! It dropped my SQL Service completely and ALL of my sites went offline (except for my blog here, which runs on XML - good job guys!
I like Outlook, it's been the killer app of killer apps forever. But eventually all good things get bulky and slow (?
Recently, the good folks at PayPal updated their API routines and added not only a new "version", but a whole new service call. I don't know why they needed a whole new service, but suffice it to say that it's there, and you have to know which service to use when calling the API.
I don't really do layout - or at least I should say that I don't
I have had the priviledge of working with PayPal and Microsoft over the last 6 months developing the new Commerce Starter Kit for ASP 2.0
This tragedy is beyond belief. Blame and outrage come later - for now, please give what you can. I used PayPal to give to the UnitedWay (http://www.paypal.com) and also donated through the Red Cross.
I have recently been trying to get a beta 2 ASP.NET app running alongside other 1.
It used to be, with ASP 1.1 (if you have been reading any of the posts below about the PayPal API) that the SSL certificate you were trying to send to a remote web service needed to be located in your Computer's personal store.
One of the silly things that comes up from time to time is the need to test your site using SSL. If you're like me and you work on your own, often your development sites exist on your laptop, home server, or right on your dev box.
The SSL plot thickens. as I was installing the Transactor for a client today, I ran accross this little gem when I tried to import the certificate into the Computer Store: