Thursday, November 08, 2007

Sympathy

As an unbridled capitalist, I never thought I would be siding with a union of any kind. I've never been a member of a union and have never desired to be. Don't get me wrong, I think there was a time for unions. But we don't have children working in coal mines anymore. And from my point of view the unions have succumbed to the very greed they claim to rail against.

But as I learn more and more about the Writers Guild of America strike I become more sympathetic to their arguments, but not for the reasons they would like.

The crux of the complaint is probably best explained by this video the writers of "The Office" posted about the strike.

Some people watch that and see people complaining about their boss screwing them out of pay for extra work. What I see is ANOTHER indication that the Hollywood STILL doesn't "get" the Internet and the change it is going to make in the way media is consumed. They still view it as nothing more than a marketing media, when in reality it is a delivery medium.

I see the television changing so much in the next five or so years that the concept of a "television channel" will be completely obsolete. It all started with Tivo. I remember the day I got mine (generation one) and it's not an exaggeration to say that it completely changed the way I watched television. I never had to worry about being home in front of the TV when my favorite show started. I'm not what I would call a "TV Junkie" by any means, but there are a handful of shows I really hate to miss. I now longer had to make a choice, or be worried about missing my favorite show. I just knew that at a certain point in time the show would just be on my Tivo for me to watch whenever I wanted. It seems so simple now, DVRs are pretty much everywhere, but it was a big change at the time.

The next step was the Internet. Well, more specifically it was the widespread available of cheap high-speed access to the Internet. To be honest, I think the only people I know who still use dial-up are my parents! I'm hoping this changes before I arrive for Thanksgiving next week, but I'm not holding my breath.

Anyway, this wide availability of high-speed Internet made high quality video over the Internet a practical reality. It took iTunes to demonstrate that not only was there a market for this type of media consumption, but that people were even willing to pay for it! Now all the major networks offer (or are preparing to offer) their content (meaning whole shows, albeit with commercials) for download. Products like Microsoft Windows Media Center and Slingbox, not the mention the new generation of Tivo, will continue to offer new possibilities for using the Internet as a delivery method of content.

So, it's really discouraging to hear what is behind this strike. Clearly the networks think of "web content" as a sort of second class form of entertainment. Instead of trying to keep their customers rooted in the past they should be embracing these changes and finding new models to do business in. Instead of fighting this new market they need to find a way to embrace it. Consumers want these things. It's in Hollywood's best interest to provide them.

And don't get me started on movies!

Monday, November 05, 2007

A Blast From The Past

I had a bit of an unusual assignment from a client last week. I had to find a copy of Visual Interdev. Yeah, that one.

  MS_VStudio6Pro

The client in question has system that exports information from their common data model into a specialized one depending on client and purpose. Basically it dynamically crates an Access database from scratch and then copies data into it. The problem is that it does all this in VBScript. It's a ton of processing, and it all occurs in the pages life cycle. Understandably, this causes issues when the client has either a lot of data to export, or a complex destination schema. They are running into the inevitable problem now; processes are timing out.

The application is a ASP Classic web application written in notepad. For the time it was written, and the tools that were available to the developer, it's a pretty well designed and built application, but it's definitely showing its age.

The client wants to convert this to .NET, which I am 100% behind. The problem comes when a client with a system based on old technology wants to simply "convert" the application from one platform to another. The client in question hasn't indicated that this is their mind set, but I've had several clients in the past who have felt I should just be able to run their ASP Classic application through a conversion wizard and be done with it, so I'm mentally getting my ducks in a row if this turns out to be the case.

Not only does technology change, but architectural techniques and practices evolve. A design which may have made sense even five years ago can easily be rendered obsolete by changing business needs just as much by advances in technology.

The key problem with the current application is that the majority of the heavy lifting takes place in the page life cycle. Doing a "one-to-one" conversion from ASP Classic to .NET will make it run a bit faster, but you still have the underlying problem; the wrong part of the application is doing all the work. Sure, the increased performance may help for a while, but eventually there is going to be more and more data as their client base increases and they are going to have the same problem again. By performing a conversion like this the client is just reinvesting  in the wrong architecture.

In this case, it's clearly time for a ground-up redesign of the application.  Clients can often balk at this as on the surface it can present a larger investment; discovery must be done, a design phase is required and it's likely that nothing from the previous version can be salvaged.

But this situation also presents a lot potential positives that may sway a client as well. For one thing, the promise of a system that will grow with the business, not require the business to grow around it. An opportunity to overhaul the user experience may be a way to increase productivity. Perhaps your client have been clamoring for services that your current architecture can't support. Now is the time to look into including these and perhaps introducing new revenue streams. There are lots of ways to find ROI (besides just "Oh, it will work better") in situations like these, and it's very important to find these to make the redesign attractive to the client.

Monday, October 29, 2007

If You're Reading This, It Means I'm Dead

That's right, dead-tired of not having my own website!

I am now the proud owner of JamesCBender.com, although like the second Death Star, this site is not yet fully operational. However, thanks to the magic of Microsoft Silverlight you will soon be seeing the most elaborate "Under Construction" page the net has ever known!

Saturday, October 20, 2007

Reliable Messaging with WCF at Day of .NET

Thanks to everyone who came to my session this morning. I really enjoyed presenting it and hope you all enjoyed it and got some valuable information. I would love to hear from you all in the future about how you are using WCF, and how the information I presented has helped you design your services infrastructure.

As promised, here is a link to a zip file with my slide deck and the two demos I presented. If you are running Vista the MSMQ demo will have to be run in Visual Studio running with elevated privileges the first time you use it. This is because, as I pointed out, if the queue it uses does not exist it will try to create it. As I mentioned I DO NOT condone this as a best practice in an actual application, but it made the demo easier.

Thanks again for coming out!

Monday, October 01, 2007

Twittering Away The Day...

Last week I attended the Arc Ready event Microsoft hosted here in Columbus. Josh Holmes spoke about "Web 2.0" (and no Tim, writing about it in a blog is not that same as saying it, so you can't punch me) and mentioned, among other web sites, Twitter.

For those of you who aren't familiar with Twitter, it's been described as 'blogging on crack." In reality, it's a web-based "micro-blogging" service that allows it's users to send frequent, short updates about what they are doing at any particular moment. This can be done via it's web interface, an instant messenger client (Windows Live Messenger is conspicuously absent from the list of supported clients) or from you phone via a text message.

I had played with Twitter in the past, but I didn't do much with it. Mostly because I didn't realize how many other people were using it. I also didn't realize that it was accessible via IM, which makes it much more appealing then having to fire up the web page every time I want to "twitter" about something.

I'm going to give "twittering" a try over the next couple weeks and see how it goes.

Monday, September 17, 2007

DevCares recap

Thanks to all the people who came out for my DevCares presentation last Friday in Cincinnati. I had a great time and I hope the material was helpful. It was almost as fun as watching my Browns rack up 51 points on Sunday. J

Just kidding. But any win for us this year is going to be welcome.

Anyway, I'm providing a link to the materials as promised. I'm including the "ppt" files for those of you with Office 2007 and slide shows for those of you without. I'm also including the completed solution for the "Custom Channels" presentation.



As I mentioned, I will be at the Dayton .NET Developers next Wednesday the 26th presenting Microsoft Patterns and Practices Service factory for WCF. I will also be presenting the DevCares content again in Columbus on Friday September 28th. And if you can't just get enough of me, or just want some more .NET goodness, I will be speaking on "Reliable Messaging with WCF" at the Day of .NET in Ann Arbor on October 20th.

Hope to see you all there!

Sunday, August 26, 2007

Beware the Workspaces of Team Foundation Server


I've been using Team Foundation Server since its first beta at quite a few clients and I like to think that I know a bit about it, but I learn something new every day.


Today I learned a little bit about workspaces.


For those of you new to, or unfamiliar with TFS, your work is done in the context of a workspace which maps local working folders to source control folders. This is a cool way to manage your source control mappings and allows you to do some pretty cool things such as cloaking folders (more on that in another post) and maintaining multiple working versions of the same project (helpful for sandboxing). It's similar to a working folder in Visual Source Safe, but with more features. Think of it as your working folder on steroids.


However, there are some little… idiosyncrasies that you need to be aware of.


By way of background, I am working on a project that requires Windows XP. I run Vista at work and home and since this is a short-tem project (which I actually hope to upgrade to Vista at some point) I didn't feel like setting my machine up to dual-boot. Another reason is that I have someone helping me on this project, and I didn't think he'd take kindly to me telling him "… oh, by the way, I need you to re-image your machine and set it up for dual-boot. I know you have deadlines and all, but you know, whenever you have a few minutes…" So, I created a Virtual PC for my development environment. My plan was to get the Virtual PC all set up with the appropriate third party software and drivers and get it configured so that it could just be copied to any developers working on it and we could start rolling.


This is where I found out that Team Foundation Server Workspaces are NOT strictly local creatures. This was discovered when, in an effort to get the VPC's setup for each developer, we managed to delete workspaces that not only were not associated with the project in question, were not in use on the VPC at all. We got them back, but it was a bit of a pain in the rear.


When you select "Manage Workspaces" from the "FileSource Control" menu in Visual Studio, you will see all workspaces listed that your account has access to, regardless of which physical computer they are listed on (see below). The killer is that you can actually delete and change a workspace from a remote location.




Keep this in mind when working with Team Foundation Server. And be careful out there!

Monday, August 06, 2007

PWN3D!

This is probably old news, but I can't stand these "news" shows that do this, so to see them on the other side is a nice change. If nothing else, it's payback for "outing" Fake Steve Jobs.

Enjoy!


Friday, July 27, 2007

Long Time, No Blog

Hi everyone!

I've been busy for awhile, but I'm starting to get some time freed up, so you should start seeing more regular content here.

For now, you'll have to accept the following rant to make up for the lapse:

<Rant>

I have a latest pet peeve: tools or applications that claim to be Vista compatible where the first step in the installation instructions is "disable UAC." This was doubly troublesome due to the fact that this particular tool required UAC to be disabled not just for installation, but for using the tool!

In my opinion, if you're going to claim Vista compatibility, you should support something as important as UAC. To require it to be disabled while you're installing is bad enough, to insist that you KEEP it disabled is ridiculous!

</Rant>

Thursday, June 21, 2007

Coming to Findlay!

For anyone in the area, I will be presenting "Building SOA based .NET applications with Microsoft Patterns & Practices Service Factory" at the Findlay Area .NET User Group Tuesday, June 26th at 5:30PM. You can get more details about my presentation and FANUG at their website www.fanug.org

See ya there!

Sunday, June 03, 2007

I’ve been published!

Sweeet!

I hope you all find it informative, and please don't forget to rate it.

Monday, May 07, 2007

Day of .NET Recap

I should probably start this blog post by apologizing to everyone who attended my session for not being able to show a working demo. I did find out that I made two small errors; my resource file (the one I created in the first step) was miss-named. Therefore, when my pre-compile step tried to execute, it failed as it was unable to fine the file. I renamed the file, complied and it worked. Also, the "completed" solution didn't work because I tried to run it from Visual Studio when it was not in an elevated state. I will be sending the starting solution and the completed solution to the DODN organizers to post, with the slide deck, on the website. In the meantime, you can drop me an e-mail if you just can't wait and I'll mail it off to you.

But, this reminds me of something I didn't get to in my presentation; once you add the request for elevated privileges to your application, you MUST run Visual Studio with elevated privileges in order to run your application. If you'll remember from the presentation, your applications by default run under your standard user token. Once the application begins, without being elevated, it does not have access to the administrative token anymore. This will also affect you if your application attempts to perform an action requiring elevation and you HAVE NOT run Visual Studio in elevated mode. The solution it to right-click Visual Studio and select "Run as Administrator" which will ask you to confirm that you want to launch the application in elevated mode before starting the application.

Search (the part we ran out of time for)


Those who were disappointed with the search capabilities of Windows XP will be happy to know that the search facility in Vista is completely new and much faster and more user friendly.

Newer Microsoft applications (Windows, Office, SharePoint, SQL Server, Exchange, etc.) are built on a common search technology engine. It's important to understand that the engine technology, NOT the binaries are the same; the new search technology is simply packaged into a number of different forms. While the binaries are not the same, the similarity in the underlying technology allows for techniques used for one system to be used in another.

From a user standpoint, this translates into faster searches with the ability to be more specific about what you are looking for. This is possible because Vista takes a documents metadata into account when performing a search. For example, if you wanted to find all e-mails about vacation from Michelle, your search term would by "from:Michelle vacation." The "from:Michelle" property/value pair tells Vista to find all document with a property of "from" and a value of "Michelle." This can be used for any metadata property that is exposed by any document type in your system.

This common search functionally being deployed to the desktop also allows for Vista search functionality to be used in your application utilizing a specialized OLE DB provider and some extensions to standard SQL.

In order to utilize this search, you need to use a special OLE DB provider capable of accessing the operating systems indexing service. Out connection string is:

Provider=Search.CollatorDSO;Extended Properties=\"Application=Windows\";

For example:

SELECT System.Title,

System.ItemFolderPathDisplay,

System.ItemNameDisplay,

System.Document.CharacterCount,

System.Document.LastAuthor

FROM systemindex

WHERE SCOPE = 'file:C:/Users/Public' AND

CONTAINS('Day Of Dot Net')


This SQL is very similar to any other query you might write to query data from a table; you are selecting fields from a data store where certain conditions are met. In this case the values we are selecting are system values that will return metadata about files. We are searching "systemindex" (Vista's search index data store) where the file contains the string "Day of Dot Net" in the c:/users/public folder. In this case we are treating the systemindex like any other database table.

You can take this query and use it to populate either a data reader or a data set and manipulate the data just as you would for any other SQL query.

This provides us with another powerful tool that can be utilized in our Vista applications to enhance our applications value and provider a better user experience. And best of all, the other things discussed in the Day of .NET session, this is already built into Windows Vista. It's there, ready for you to use today!

Wednesday, April 25, 2007

Guitar Hero… too?

Well, I was planning on making this blog a review of Guitar Hero II for the Xbox. But, I have been unable to find a copy. Every store that I've been to (both of them!) have been sold out. Not hard to understand, since each store only seems to get one copy at a time.

So, as time goes on the odds of me getting GH2 soon decline. The primary reason is that as the weather starts to get nice, I tend to spend less and less time inside, and less of that time playing video games. I also refuse to be one of those guys who spends his weekend going from store to store looking for the one copy of the game in the city. This explains why I still don't have a Wii; I refuse to buy one until I can casually walk into a store and pick one off the shelf without being crushed in a throng of people. I also refuse to pay $800 for a console on eBay that retails for $250 in the store. Maybe if I were a hard-core gamer it would be different, but I'm not.

I did try the Playstation 2 version as Best Buy last week.

As someone who has been playing guitar for quite a while, I wanted to see how the game compared to the real thing. Best Buy has a two song limit on the demos. I choose "Carry on Wayward Son" by Kansas and "YYZ" by Rush on the basis that they were the two songs I was remotely familiar with (being a prog-headed music snob) and have actually played in a band scenario.

Well, big shock, but the game is nothing remotely like really playing the guitar. It's primary skill requirement is rhythm, but basically the game is Simon with a fancy control. Having said that, I did find the game to be a lot of fun. And will probably pick up a copy.

But at this rate, probably not till the fall.

Thursday, April 05, 2007

Dawn of a New Day… of .NET

The Great Lakes Area .NET User Group, The Ann Arbor .NET Developer Group and the Northwest Ohio .NET User Group are all co-sponsoring the "Day of .NET" on May 5th in Ann Arbor. More information can be found at their website.


Day of .Net May 5, 2007 - I'll be there!


This is a great opportunity to come and see some cool .NET stuff, learn some new tricks and participate in the .NET community.

There will be some great speakers, and I will be presenting "Windows Vista for Developers" for anyone who missed it at the February DevCares event.

See you all there!

Wednesday, March 28, 2007

iHippie


Generally, I don't like to repost content from other blogs, but I saw this on "The Secret Diary of Steve Jobs" and I thought it was funny enough to pass along:




Thanks Fake Steve!

Sunday, March 25, 2007

Code Camp

The Dayton/Cincinnati code camp was held today. Alexei, Arnulfo, Monish and I attended.

The Journey

Arnulfo's job apparently was to organize logistics. His "plan" was to have Monish and I meet him at the office at 4:30 (AM) and then go pick up Alexei on the way.

Arnulfo overslept. After hanging out at the office till about quarter of five, Monish called and woke him up. So we were a bit late. We then drove past the meeting point for Alexei, so more back tracking. We used Google maps to get us to our destination, but that was difficult. Many of the side streets we had to take between the freeway and the event were not labeled, or not labeled well. But we eventually made it.

1st Session: Practical Caching in ASP.NET 2.0 - Joe Wirtley

This was an OK session. We are going to be doing some data caching on my current project. The speaker talked a bit about static page and user control caching to. You don't have access to Session from cached user controls, so he showed us a work-around.

2nd Session: Layouts, Styles, Templates in WPF - Drew Robbins

I know Drew has given this presentation a few times, but I haven't seen if for over a year and half. I have to say that WPF is more impressive than its first incarnation. I kind of blew it off at first, thinking it was a neat toy, but seemed like a lot to go through, especially since it wasn't really on the horizon as far as being deployed. But, Drew showed some cool demos so I'm interested. I'll have to pick up Petzolds book and play with it.

3rd Session: Extending ASP.NET with Http Handlers and Modules - Joe Brinkman

This was a pretty interesting session about writing (you guessed it) custom Http Handlers and Modules. The speaker explained the page life cycle, and how sometimes it's more efficient to have a handler respond as opposed to an aspx page. He also showed some cool ways to use Modules to handle some authentication, compression and string substitution. The speaker was from DotNetNuke, and that framework uses several of these, so I'll download it and give it a look.

4th Session: Intro to XNA - Bill Steele

This one was for me. The fact is I haven't made much progress on my project. I downloaded and setup the XNA development tools, and fired up the starter project, but I wasn't really sure what to do after that. There is a little documentation for XNA, but if you don't have experience writing games, it's kind of hard to get your head around. This was a big help. I also learned that the next rev of XNA will be out next month, and that the new version will work with Visual Studio (the current version requires C# Express). I've went ahead and downloaded the framework and Anim8or (the recommended asset creation tool) but will probably wait until next month to avoid having to install Express.

5th Session: Balancing WCF Performance and Security - Darrell Hawley

This was a pretty helpful session that compared and contrasted the differences (both for performance and security, as per the title) of the various WCF bindings. There were some pretty marked differences. It was pretty helpful in determining which binding which binding to use where. One of the big strengths of WCF is the ability to have multiple bindings for the same service AND change these via configuration. So, you can expose your service via WS to the outside world, which provides interoperability, and TCP internally, which provides speed. There wasn't time to go into MSMQ, so I'm going to play with that a little on my own and how it "stacks" up.

6th Session: Improve Your Testing With Open Source Test Tools - Jim Holmes

I already use Team Test for most of my testing needs. Obviously, as good as Team Test is, it doesn't do everything, so I decided to check this out and see what was out there that was new and cool. There were a couple standouts. The first one, Fitnesse, is (according to their website) a tool to compare customer's expectation to the actual results. I also am interested in Pairwise, which is a case generation tool that helps test situations where conditions overlap. Watir looked kind of interesting as well. It basically does the same thing (on the surface) that Team Test’s Web Test does, but where a web test simulates web interaction by comparing query strings, Watir allows you to actually interact with specific fields on a web form. I don’t know what it will really offer that web tests don’t, or if it’s simply a better tool, so I’ll have to check it out. The only “drawback” is that it is Ruby based. I don’t have anything against Ruby per se, but I’d like to not in stall anymore stuff on my computer than I really have to.


All in all it was a great code camp and I got a lot of information and ideas out of the session. I’ll definitely be back next year, and would encourage everyone else who is able to also attend.

Thanks to everyone and CINNUG and The Dayton .NET Developers Group for putting on a great event!

Thursday, March 22, 2007

An Open Letter…

Dear Asshole who broke my car window, tore out my dashboard and took my stereo along with the seven CD's under my seat,

On the off chance you are actually reading this, I just want to let you know what a pain in the ass you caused me today.

Because of your actions:

  • I was made to wait in the parking garage on one of the windiest days in recent memory waiting for the police
  • I was forced to listen to the angry ranting of your other victims (three more in all) as they started to trickle into the garage as the work day ended
  • I will have to go to the police department tomorrow and get a copy of the report
  • I had to go out of my way to the Kroger in German Village and buy clear shipping tape to fashion a "temporary window"
  • I had to drag my laptop through said Kroger, because you've shown me that I cannot trust people enough to leave anything of value in my car, apparently even if it is part of the car, which puts me in a bit of a bind
  • I had to file an insurance claim
  • I had to miss the .NET user group meeting
  • I will have to take time off of work tomorrow to take my car in for repair
  • I will have to pay a $500.00 deductible
  • I will have to rent a car for about a week and a half
  • I have already had to recount the story seven times to seven different people, and none of my friends, family or co-workers even know it happened yet, so I'm looking forward to having to tell the story about a dozen more times
  • I have been tempted to drop the "f-bomb" on this blog, which I promised myself when I started it I would never do

I know this probably doesn't mean much to you. You obviously don't care about anyone. Given that the best you seem to be able to do is stealing, I'm guessing that you really don't care about yourself either. And that's fine; frankly I don't care about you either. Aside from my anger, and wishing you were there so I could throw your ass over wall to the street seven stories below, you are worthless to me. I imagine you are pretty much worthless to everyone in your life as well.

So, what's it like being someone who contributes nothing to the world? If you died would anyone care? Or even notice? Maybe your fence? I'm guessing you are doing this to purchase drugs, so maybe your dealer? But then I imagine that there are hundreds of you on the street, and when you are gone you will be easily replaced. Maybe the next one will be a little taller or shorter. Maybe a little thinner or fatter. But I'm guessing no one will notice that someone has even taken your place. What's it like to be so worthless that you essentially interchangeable with any other loser out there?

What do your parents think of what you do? Do you even have parents? Are they just as bad? Or do they simply not care?

In any case, I'm sure that in the rare moments that you do think about your "life" and how little you've made of it, I'm sure you blame someone, anyone except you for the situation you are in. Your parents, the police, society, schools, whatever. But deep down you must know that's all bullshit. Even if you don't want to face it, only you are responsible for the waste your life has become.

Can you even look at yourself in the mirror? I wouldn't be able to.

The items you stole are just "things" and I will easily replace them, like you are easily replaced. Actually, some of those CD's were imports, so they will probably be harder to replace than you would be.

As for the CD's, I can't imagine you are going to fence them. You CAN'T expect to get much money for them. Even at a used CD store you may get $10.00 for the lot. Did you take them for personal use? I somehow doubt that you are sophisticated enough to enjoy CD's by Dream Theater, Porcupine Tree, Mozart, Rush or my CD of "Great Moments in Italian Opera."

As for the CD/MP3 player, it was about five years old, and not state-of-the-art when I did buy it USED. By the way, the MP3 feature hasn't worked for years. While I'm sure you are a drug user, I admit I have no idea what you choice of drug is, but I hope the $0.50 you get for it buys you enough junk to make it worth it.

But, at the end of the day you are a worthless scumbag who probably won't live to see 30, not that you appear to have anything to look forward to. Oh well. I can only take solace in the fact that I am a better person than you, and that is something you can't ever take away from me.

--Bender

Saturday, February 24, 2007

February DevCares Recap


February DevCares is history (at least in Columbus) and aside from a few technical glitches, I think things went well. My topic was new features in Vista and making application compatible with UAC. Jeff's topic was developing Gadgets and using Vistas RSS platform in .NET.


Aside from a few minor technical issues (it was kind of hard for Jeff to present RSS with a wonky Internet connection) things went very well. Drew gave me some good advice, and next time I'm not going to rely so much on my notes. I was too worried about trying to stay in-sync with the slides and I should have just talked to the group.


It was a relatively quiet group, but they asked some good questions, so they were definitely paying attention. Hopefully I was able to provide some value to their future Vista development AND demonstrate that those Apple commercials slamming Vista are totally full of crap!


I enjoyed Jeff's presentation, and especially in light of the network issues though he did a great job.


The content from both presentations will be up on the DevCares website soon. If you just can't wait, feel free to email me and I'll pass them along. Well, not Jeff's, you'll have to email him


Next month's topic is "Extending Word, Excel and InfoPath 2007" and "Building Workflow Applications on SharePoint 2007" and you can register at the DevCares website. And no, I don't know who's speaking yet, but I'm sure it will be great!


I would like to thank Drew Robbins and Microsoft for the opportunity. I really enjoyed it!


Now, some pictures (courtesy of Arnulfo Wing)








Monday, February 19, 2007

I will be speaking at the February DevCares event in Columbus

This Friday, Febuary 23rd, I will be presenting "Windows Vista for Developers" as part of Microsoft's DevCares event. It will be at the Babbage Simmel office in downtown Columbus.

I will be talking about some new things in Vista that developers can start taking advantage of now. I will demonstrate how to make your applications compatible with UAC, and if there's time how to use the new search functionality built into Vista. Jeff Blankenburg will be presenting on Sidebar Gadgets and Vista's built in RSS components.

You can register at http://www.devcares.com

Tuesday, February 13, 2007

Old Man Winter wins this round…

One "failing" of getting your news and current event information almost exclusively from the Inter-tubes is that reliable and up to date local weather and traffic is kind of hard to come by in a consistent, reliable manner. OK, I should say that up to date local weather and reliable and up to date local weather and traffic information FOR COLUMBUS OHIO is kind of hard to come by in a consistent, reliable manner. This caused me to find myself in the unenviable position of being unprepared for the "White Death" that befell the city while I slept.

I guess it's not all bad, I'm working from home today, and the lack of distractions has allowed me to get more done by 10:00 than I might otherwise get accomplished by lunch.

By the way, if I ever leave computers to become a mafia hit man, or a line backer, I want my nick name to be "The White Death." Yeah, that'll work.

And let me be clear my nick name is NOT "White Death." It is "THE White Death" and I expect to be addressed properly. For example;

The wrong way: "Hey White Death, would you like to come over this afternoon for pie and coffee?"

The correct way: "Hey The White Death, would you like to come over this afternoon for pie and coffee?"

Yes. Yes I would.

Saturday, February 10, 2007

Kinda like a mail-order bride. But you know, for Geeks.

I am in a very happy and excited mood. Yesterday I ordered a brand new, sorta top of the line Dell Insprion E1705 laptop! Based on my mother's experience ordering from Dell, I fully expect it to be here before the end of next week.

Here are the drool-worthy specs:

  • 2.00 GHz Core Duo 2
  • 2 GB Ram
  • 17 inch UltraSharp TrueLife screen (Jeff Blankenburg advised me to pop for the TrueLife upgrade. So if it's not worth it I'm, blaming him!)
  • Vista Ultimate Edition (Why go half-way?)
  • 256MB ATI Radeon X 1400 Hyper Memory (And if you are going to run Vista, what's the point in not using Aero?)
  • 802.11g wireless network card (I didn't see popping for "N.")
  • 9 cell battery (Hopefully I won't hear calls of "The laptop, the laptop, the laptop is on fire!")
  • 160 GB hard drive (I wanted 200GB, but I was on a bit of a budget and I think Dell's HD prices are a little on the high side.)
  • Bluetooth (small upgrade, but worth it.)
  • 2 Year Warranty (Only two years. Hey, love is fleeting and I'm known for being fickle on occasion.)

I didn't get a case. Again, I think Dell charges a lot for a little in the case department. Besides, I've already found several nicer cases on-line that are either the same price or less. So there!

On tip, I priced this on-line, but called the order in. By portraying myself as being somewhat hesitant on the phone, I got an immediate $250 discount!

As for how much? Tsk tsk. I chose not to sully this discussion with talk of money, let us speak only of AMORE.

Monday, January 22, 2007

Fear and Loathing in Software Development

CodeMash was a great conference. There were a lot of opportunities to learn and grow. But some things I heard from more than one person there is a bit of a "dark side."

No one can deny that there has been a lot of churn in the world of .NET and development in general lately. You've got the .NET 3.0 framework, offerings from Microsoft like Service Factory, persistence layers like nHibernate and tools that change the way we develop as a team like Team Foundation Server. You also have things that effect all platforms like SOA, Web Standards and Section 508 compliance. Add to all this LINQ which will be out before the end of the year and whatever Microsoft unveils at this years PDC and it's a lot to get your mind around.

But, when I hear my contemporaries say things like:
  • "Well, I'm not that interested in LINQ. Sure, it sounds good, but it's probably too complicated and who knows how long Microsoft is going to support it."

  • "Sure, Windows Work Flow sounds good, but no one here knows it and I probably can't find anyone to hire who does. I probably wont use it."

  • "Yeah, I know we should use CSS for things like styling and layouts, but it looks too hard and I don't feel like learning it."

  • "Smart Client would fix a lot of our issues, but it looks too hard to learn."

  • "Sure, Service Factory presents all the best practices of web services, but it just seems like a lot of work, so I'm going to just continue to shove everything into one project and not care about scalability or re-usability."

  • "I know Section 508 is the law, but it sounds really complicated. I'll just cross my fingers and hope the Feds never take a good look at my website."

  • "I bet I would learn a lot at that conference, but I'm not making up two billable days to go!"
it tends to be a little depressing. Especially when you note that the common theme is "This is too hard and I don't feel like putting forth the effort. Why can't just do things the way I've always done them?"

The bottom line is this; technology is an engine. You are either on board helping to lead the way and define the way things are going to be or you are behind it, watching it and your carreer get further and further ahead of you until you can't see it anymore.

It's up to you; the tools and information are out there. Use them or don't. But don't bitch when the train leaves you at the station.

Please note, the above quotes are not ment to single anyone out. I've heard them ALL in one fashion or another from a lot of different people on a lot of different occasions.

Sunday, January 21, 2007

Codemash roundup: LINQ is the word.

Well, it's the Sunday after CodeMash, and I've had a chance to collect my thoughts about the event.

In short, it was a terrific event, and I am really looking forward to CodeMash '08. Aside from the technical content (which I'll cover below) it was a great opportunity to meet up with some people I hadn't seen in a long time and catch up, and to meet some new people in the industry. It was interesting to see what not only fellow ".NET-ers" were doing, but to also check out what's going on in the Java and Ruby camps. I even attended a Java session myself! More on that in a bit.

Given that it was the first conference that these guys had done, I thought everything went INCREDIBLY smoothly. I was drafted into working the registration desk for a few hours on Thursday, and the very small number of people asking questions about what was going on was a testament to that.

The facility was nice, although it wasn't hard to see that this was the first "big" event they had hosted. The water park looked fun, but I chose not to indulge for a couple of reasons. It was very nice and convenient to have the lodging and the conference in one facility; no running to catch shuttles, no standing in the rain/snow/heat/whatever and if you didn't want to cart your swag around all day you could just stash it in your room between sessions.

OK, now on to the technical.

As mentioned, I did attend a "Java" talk. Todd Kaufman gave a presentation on Spring. I attended because I know Todd and have seen him present and wanted to throw some support his way. I also know that there is a .NET version that I've heard some interesting things about, so I wanted to check it out. To be honest, some of the Java specific stuff kinda threw me, but I was able to follow along. I'm planning to install Spring and give it a shot.

I also enjoyed Neal Fords keynote on the first morning. It gave me a lot to think about. The fact is, people are already using DSL's and don't even know it. Do you use Service Factory? You are using a DSL.

Some other high points where Kieth Elders Smart Client presentation (I only caught the first half, I understand the second half had mixed reviews) and Drew Robbins presentation on Vista Sidebar Gadgets.

Kieth had some good points about advocating for Smart Client systems and it's something I'm definitely going to offer by way of suggestion to my clients. Some might be open to this. Some, mostly the ones who have drunk the "Web 2.0" Kool-Aid might not, but it never hurts to try. Being and admitted "object-snob" I was a little concerned to see him using datasets. Not because I think he shouldn't have used them in the context that he did, but because I've noticed that a lot of developers want to use them for EVERYTHING. I'm trying to break the cycle of dataset madness, and I was mostly worried that a response to my efforts would be "Well, Kieth Elder uses datasets."

Drew gave a really interesting kind of "see spot run" overview of Vista gadgets. I can see these being particularly useful in an Enterprise environment. The "big thing" now is dashboards and Enterprise Platforms. But, most people don't want to necessarily have their dashboard open all day, especially if it isn't their primary work surface. I see gadgets being useful by allowing a small-footprint, non-intrusive way for people to monitor important information about their organization without impacting how they do their day-to-day work. Right now not enough of my clients are using Vista, but it's definitely something worth keeping in the tool-box for later.

I was planning on attending Josh Holmes presentation on SOA, but he told me that he would be here (in Columbus) next week to present it at the next CNUG users group, so I guess I have to wait a week.

The "big" thing of CodeMash, at least for me and I imagine the rest of the ".NET-ers" was Scott Guthrie speaking, mostly about LINQ.

To be short, I think LINQ is going to be the "next big thing" in the world of .NET. .NET 3.0 (WCF, WF, WPF(/E)) are all great technologies, and represent big leaps in and of themselves. But they don't approach what LINQ is going to do.

I'm not going to go into explaining what LINQ is. If you are reading this and you don't know you either

  • Aren't in technology and don't care

  • You are in technology and don't care enough



What I can tell is you what LINQ is to me. LINQ is the bridge between the idea of data persistence and domain objects. Datasets continue to be used for a lot of database access, and I personally don't like it. Datasets are inefficient. Datasets are heavy. As a developer, I prefer to think in terms of things like customers, accounts, orders, addresses, etc. and not in terms of a field in a representation of a table in a representation of a database. Most importantly, unless you have a bunch of business logic in your database (and why you would put it there is beyond me) datasets don't force you to do any business level validation before saving your data. LINQ is also an easy way for me to find the data I need easily in large collections. LINQ is going to change the way people think about data and data persistence. It's going to be out (officially) later this year and I can't wait!

And finally, the coolest thing about CodeMash was that I was one of several people who were invited to have lunch with Scott Guthrie on Friday. (Thanks Drew!) It was quite an honor, and I think a lot of the .NET people were a little "star-stuck." Alexey definitely had a bit of a "boy-crush" going. But who can blame him. The lunch was great and there was a lot of thought provoking discussion. It was an honor to be invited to attend.

I almost forgot one last thing! A final highlight (or, lowlight depending on your point of view) was the Brian Prince/Josh Holmes head shaving. I guess I should explain for those who missed it; at the end of Neal Ford's keynote on the first day, Josh made a deal that he would shave his head at the closing if there were 500 blog posts about CodeMash. Brian Prince upped the ante by saying he would do it for 600. At the end of the closing, Technorati was fired to up to get a final count and.... Technorati was down. Yeah, kind of anti-climactic. But, Josh made a deal with the crowd that if we all went home and blogged about CodeMash, he would do it. Somehow Brian got roped into this too, and off the hair came. Amazingly, a cursory search of YouTube did not produce a video. Keep checking.

Good luck guys. I hope it grows back. It doesn't alway you know... :)

Friday, January 12, 2007

Lazy Loading in a SOA world.

As a "side effect" of my current project, I am helping my client build a SOA interface to another large system. This client has traditionally used datasets for most of their data access, and one of my goals is to get the harsh dataset monkey off their backs and wean them onto the smooth, mellow high of business domain objects. After all, all the really cool Enterprises are doing it! I'm also trying to champion the "One interface to rule them all" cause, so this (eventually) will be the ONE and ONLY way to get data from, or put data in this system.

In putting together a proof of concept, I came across a bit of a problem; my entity has several properties that return lists of items. Some of these lists can be quite large, so we want to lazy load them. For my example, I created a person, who had a list of four address (I’m just returning four hard-coded ones since I didn’t want to muck with the database for the proof of concept) which I wanted to lazy load. I wired everything up and it was working beautifully!

Except for one thing; I was getting eight addresses back.

Here’s the problem; when the web service was getting ready to send my person object back, it was serialized by the XML serializer. That serializer was looking at my address property, which caused a lazy load. So, my object was initially coming over the wire with all the lists populated. One the client side, the de-serialization was also calling the address property, which was again lazy loading the address right away. I had a check in the “get” to make sure the list was null before the loading occurred, so how BOTH lists got merged together is something I can only wildly speculate about at this point, but it was merely a side effect of a different problem, so I didn’t worry about it.

The solution was to find a way for the XML Serializer to ignore that property when it was sending it out.

The solution: the XMLIgnore attribute. Decorating my property with this attribute causes the serializer to skip it. It doesn’t get looked at during serialization, it’s ignored during de-serialization and my lazy load routine work beautifully.

And all was well in the kingdom of SOA (for now…)

Thursday, January 04, 2007

My New Project

Having just acquired a shiny new XBox 360, noting the release of XNA Game Studio Express, and being the curious little geek that I am, I have decided to try my hand at writing my first video game.

The Concept

Instead of trying to come up with my own game concept the first (maybe only) time out, I am "borrowing" a concept from someone else. The board game Ra. This is basically a game where you bid on tokens to amass points and crush your enemies in a most humiliating manner. I first played the game at Brian Anzalones house several years ago, and despite my less than .500 average enjoy it. From what I've seen, there is no other game available on XBox quite like this (sorry FPS fans, it's not an "action" game) This choice was also out of practiality; I've never written a game before, and didn't want my first attempt to be saddled with having to learn how to do animation, physics, collision detection, lighting and other stuff in involved in action games.

This is a nice, simple, civilized board game. Just my speed first time out.

The First Feature Set

Being a fan of agile development, I will be creating this game as a series of features to be deployed on an probably very irratic and unpredictable schedule. The goals for my first release are:

  • Target for the XBox 360 platform

  • All basic rules and scoring in place

  • Playable against others via XBox live
Once I get these things working, I'll look into developing an "AI" to facilitate single player games, but being my first game I want to start kinda small.

The first step is going to be setting of the XNA Game Studio on my home machine. It looks like I'll need to pay the $50.00 a month, but hey, knowledge is it's own reward, right....?

I'll be sure to blog about my progress. In the meantime, if you would like to be on my list of "beta testers," send me a comment and if I don't already have your XBox Live ID, be sure to include that.

Was this one of your New Years resolutions?

As most of the hits on this blog over the past few days have been on the “lose weight” pages and as the new year brings many people to resolve to lose weight, and as a means to that end many people will join a gym and in order to continue my promised series of articles on the subject, I bring you this next installment of my “lose weight” series.

This time, I’m going to discuss exercising. By means of a reminder, I will switch back and forth between exercise and food as the series goes on.

Why do I need to exercise?



A lot of people will try to lose weight by just dieting. This will only work in the short term. Please see my previous post as to why.

Some people (particularly women) will say they don’t want to lift weights because they don’t want to “get big.” You don’t have to get big from lifting weights; even toning will help to increase your health and your metabolism. And ladies don’t need to worry; without “additional help” (roids) you will not get big. Women simply don’t have the body chemistry to get big. You will get “ripped” but it will be more of a “swimmers body” than a “meat-head” body. Think Madonna, not Arnold.

Gear up!



If you’re just starting out, don’t spend a fortune on work-out gear. A comfortable shirt and pair of shorts should be fine. Women might want to invest in a good sports bra. Clothes should be comfortable and easy to move in, but not loose. Good socks are also a must. For just starting out, a good pair a cross training shoes are important. Make sure they fit! I’ll do another post on gym ware (where I “name names”) later. For now, don’t spend a ton of money.

As you’ll see below, monitoring your heart rate is important. A heart monitor may be a good investment. Get one with a chest strap; the ones that take your heart rate via the finger sensors are useless for working out. Polar makes some great ones that range from a simple model that will only tell you your heart rate to models that have built-in MP3 players and GPS systems.

Don’t bother with the “Nike+iPod” stuff. The only remotely pertinent information it gives you is distance run. In spite of the marketing fluff it can not give you accurate pulse rates or calories burned. Those figures just can’t be computed from a motion sensor in your shoe. If you really want to get the distance retrace your path in your car. If you want “super accurate” numbers, run on a track. Better yet, don’t worry; time and heart rate are more important than distance.

OK, so what do I do?



I work out six days a week. Three cardio days and three strength training days. Here is what I did when I was starting out. I’m not going to give you specific weights, rep counts or “Stair Master” levels. Those things aren’t important. What’s important is your heart rate. More on that later. For the most part, you should spend no more than an hour in the gym each day. But, it should be a good (not wasteful) hour.

Pre-workout



Regardless of what kind of work out you are doing, you need to warm up and stretch beforehand. Warming up should be about five to seven minutes. The goal is to not be sweaty or out of breath at the end of the warm up, just a little looser. If you’ve ever tried to run from a “cold start” you’ll know what I mean. It’s just to get the blood moving a bit.

From there, you should spend about ten minutes stretching. Again, this is to loosen up and ensure that you won’t pull any muscles or injure yourself. I will at some point write a more detailed post on stretching, but for now check this site out.

Cardio



I do cardio Monday, Wednesday and Friday. I do at least 30 minutes. I alternate between the Stair Master (the one that looks like a very short escalator; the other style is a waste of time), the cross trainer and running. If you have access to a pool, swimming is great. Biking is OK, but since you’re sitting your legs don’t support your body weight, and you’re not getting as good a work out as you could be. But anything is better than nothing.

When performing any cardio exercise, do not hang on the machine like you are clinging to it for life. It means you are going too fast. Lower the speed/intensity/whatever and do it with proper form. You will be a better work out and get results faster.

If you are under 220 lbs., running once a week is OK. If you are heavier than that you could run into problems with your legs. Try just walking on the treadmill with a steep incline. If you weight more that 220 and MUST run, try to only do it once every other week. If you start to feel sharp pain in your knees (before, during or after) stop immediately. If you run on a track, or outside or anywhere except a treadmill, be sure to switch directions every time you run. Your legs will thank you.

When doing cardio, you should try to reach and maintain your target heart rate. What is that? It’s the heart rate at which your body is working hard enough to burn fat. There are a couple different ways to figure out what yours is. The easiest way (although not super accurate) is to subtract your age from 220 (226 for the ladies). If you are already pretty fit, that 70% of that number. If you are “so-so” fit, take 65%. If you are a total couch potato, take 60% of it. That’s your target hear rate. If you want a more accurate measurement, and know how to correctly take your own pulse, this site has a calculator that is OK. If you want to be “hyper accurate” contact your gym. There are a couple of different tests they can administer to calculate this that range from cheap and quick to expense of drawn out. Don’t pay too much for this though, your target heart rate will change as you begin to get in shape. And don’t be a slave to this number. If you can do a little more, do it. If your below it but feel like you are about to die, than don’t push yourself. You’ll get there, just give it time.

Weight Training



Weight training does not mean you have to get “big.” It can be as simple as toning and strengthening your existing muscles. Everyone should do it.

The major muscle groups for weight training are;

  • The Chest (bench presses, push ups, flys)

  • The Shoulders (shoulder presses, lateral raises)

  • The Arms (curls, overhead extensions)

  • The Back (rows, reverse flys)

  • The Abdominals (crunches, planks, in and outs)

  • The Legs (lunges, squats, “super-legs”)


This page has a good explanation of most of these.

With the exception of the abs and legs, you do NOT need to work every group every time.

In general, I try to use dumbbells for all of these. You can use machines for some of them, but free weights help keep you honest, and make you work the “stabilizer” muscles which increase your overall strength. Additionally, I use dumbbells as opposed to barbells so that each arm has to work independently. This ensures that everything builds up symmetrically.

When lifting, go slow. Don’t jerk or swing the weights. Besides keeping you from injuring yourself, it will make sure that you are really working the muscle and not letting physics do all the work

Gym etiquette



It’s important to know how to behave in a gym. I’ll do another post on this, in more detail later. For now:

  • Do not drop your weights. If they are too heavy, move down.

  • Put your stuff away when you are done with it. This includes un-racking weight plates from any machine or bars you have used.

  • Don’t monopolize equipment. Let others work in during your break. If the other person was there before you, reset the weight pin to their weight for them, or help them move plates when switching.

  • Wipe off equipment when you are done. Even if there is no visible sweat do it anyway.

  • Socializing is OK, but not everyone is there to talk. Keep that in mind.

  • When socializing, keep conversations from getting too loud and keep the language “PG.”

  • Mind your surroundings and respect others personal space.

  • Don’t leave a mess!


That’s enough to get you started. I’ll post more in depth on some of the topics I’ve covered here later.

Good luck!

Monday, January 01, 2007

What were your plans for New Years Eve?


Maybe just hanging with your buddies?