Random Thoughts of a Scatterbrain.
 Wednesday, February 15, 2006

Love Newegg?

2/15/2006 7:43:55 AM (Eastern Standard Time, UTC-05:00)

I know I do.

It's one of a handful of places that I choose to do business with when it comes to purchasing computer parts.  In fact, I only purchase computer parts from online retailers (and have been doing so exclusively for quite a while).  I think, over the past 4-5 years, I've probably spent over $10,000 with Newegg (don't let the wife see that number).

Well, Anandtech has an amazing look at the internals of Newegg and how that processor you ordered on Monday ends up in your hands on Wednesday.

 Saturday, February 11, 2006

Workshop : XML Schemas + Object Models

2/11/2006 6:30:58 PM (Eastern Standard Time, UTC-05:00)

Actually, very few .Net developers that I've worked with know what a typed DataSet is let alone how to create one. It's one of those perplexing things that always baffles me as typed DataSets are not a bad way to make the best of the flexibility of DataSets while still offering design time support and comiple time error checking (to some degree, of course).

At the core of the typed DataSet is an XML schema that describes the types and structure of the DataSet. While typed DataSets are great, if you ever look at the code, it's quite heavy and not necessarily the most optimized structure for over the wire transport. As even the discussion of typed DataSets narrows down the audience of developers that know how to work with schemas to generate a typed DataSet, the concept of generating entire object models using XML schemas is even less understood. Yes, indeed, the XSD.exe tool that ships with Visual Studio.Net can also be used to generate object classes from the same schemas (although they are a bit clumsy to work with).

You may be asking yourself why bother with schemas when you can just create the classes by hand or some other sort of visual code generation tool. Well, for some people (myself included), schemas seem a very natural way to express object models and classes. I mean, after all, the purpose of a schema is to define what an object (typically an XML document) looks like. But certainly, if that was it, it wouldn't really be worth the effort, now would it? For me, there is an added benefit in that it's very easy to define typed collections in schemas. On top of that, the generated classes come with various XML attributes already marked up for you, which is handy if you plan on using the classes as data transfer objects for your web service.

If you're interested, check out the workshop.

Leave comments, questions, and criticisms in the thread.

Weekend Thoughts

2/11/2006 3:04:05 PM (Eastern Standard Time, UTC-05:00)

Just a collection of random info to wrap up the week that was.

  • This is the first year I've ever filed my own tax return.  It's also the largest tax return that I've received...hope the IRS isn't coming for me. Did it all online via http://www.turbotax.com/
  • Every week, when I get back from Connecticut, my cat crawls on my leg and does this silly "floppy cat" act.  He just flops down on my leg and pretends like he's dead or something.  Conclusion: he needs to go on a diet :-D
  • Excellent issue of Time this week.  Covered some interesting topics, including science education in America and acceptance commitment therapy (very interesting topic).  It also had an interview with Terrance Howard, the Oscar Nominated actor who starred in Hustle & Flow and Crash:

    I want to be the condensation on the glass. I want to be that phenomenon that takes place between hot and cold.

  • Grad school is expensive.  But it's worth it for the sake of education, right?
  • Did I mention that I did my taxes?  I'm elated.

That's all.  I'm working on completing my latest workshop, "Of XML Schemas and Object Models" and I have two more in mind.  I plan on doing a workshop on creating a multi-threaded process status dialog and one on including inline images with CDO with .Net (I get a lot of hits via various search engines on this topic).  I'm also thinking about doing one on using CDO to create MHTML snapshots of web pages...so much stuff to work on, so little time.

 Tuesday, February 07, 2006

Random DevTools Entry: #004

2/7/2006 8:30:55 AM (Eastern Standard Time, UTC-05:00)

I've been doing some WinForms work lately (I'm primarily a WebForms developer) and had a lot of trouble working with the WinForms DataGrid.  Primarily, the DG just seemed very difficult to customize in terms of behavior and look & feel.  Whereas with the WebForms version of the DG, the declarative model and the power of CSS makes it a snap to do these things, the WinForms version just took way too much work.

So after looking around and trying a few open source controls, I finally stumbled on DevAge's SourceGrid3.  I really like it.  It allowed me to do things with a grid that simply were waaaaay too time consuming/difficult with the out of the box WinForms DG, which is just too tied into the DataSet model and doesn't work very well with custom business objects and typed collections.

It does take some time to pick it up, but the MVC design of the library makes the code very clean and extremely flexible.

The Source Pack also comes with a variety of other controls for WinForms development.  Definitely worth a look for any WinForms developers looking for more flexibility in grids.

 Sunday, February 05, 2006

The Problem with Ordinary

2/5/2006 3:44:03 PM (Eastern Standard Time, UTC-05:00)

I came across a very good article by Ian Thomsen on SI.com discussing Shawn Marion's "frustration" towards his role in Phoenix.

Marion is averaging career-highs of 21.4 points and 11.9 rebounds, well on his way to a fifth-straight year of producing at least 19 and 9. Those are enormous numbers for a small forward, yet Marion believes he could do more if asked.

"You can improve anything you want during the summer, but if you don't get to work on it during a game, it just goes away and you go back to doing whatever it is they want you to do,'' says Marion, 27. "That's one thing I don't like. It's frustrating for me because I can do so many other things on the floor and I don't get the opportunity. I'm limited to doing certain things, and that sucks.''

Context must be introduced before this train of thought gets carried away. Is Marion demanding a greater role in the Suns' offense? No. "We're in winning situation,'' says Marion. "You don't get bleep in this league unless you win; I learned that a long time ago. I've been around people who say it's all about them, but they're wrong -- it's a team thing.''

What he's trying to say is that he isn't as impressed with his numbers as everybody else seems to be. He knows they could be gaudier.

"When I'm in the summer, playing pickup and working on my game, I'm working on pick-and-roll, handling the ball, doing all that kind of stuff -- but I don't do that here and it just really goes away,'' he says. "I do everything in the summer. I play '1' [point guard] through '5' [center]. I'm a pretty good passer, but I don't get the assists because I don't have the ball.''

I think I'm in the same boat with Marion, on some level.  Recently, I've just been so frustrated by the type of work that I'm doing at my company.  But it's not just a temporary issue; I just don't see that the company is dynamic and innovative enough to really land the type of contracts that I want to work on.  I've been fortunate that the last 1/2 of the previous year, we were able to have quite a bit of freedom in terms of execution, but if the current project I'm on is any indication, then it's not a good sign.

Understand, that like Marion, it's not really an issue of selfishness; of course I want to help my managers, my sales guys, and my company succeed.  Rather it's the fact that I work hard to become good at what I do.  I'm continually improving my software engineering IQ by consuming information through books, weblogs, magazines, and webcasts.  I make a real effort to refine my technique and learn new technologies.  Like Marion, I'm willing to take a hit for the team (I'm travelling to CT on a weekly basis at the moment, which isn't too pleasant, and doing some grunt work).  But it's frustrating because I know I could do so much more in the right environment. 

It's frustrating because I could help the company even more if the leadership could create/find the right opportunities. It's frustrating because I work on understanding design principles, software engineering practices, new tools, and other aspects of building applications/software, but all of that goes to naught due to the nature of the work I do (heavy in volume, yet light on the factors that interest me).  It's frustrating because I always want to take a step forward in terms of professional development; I don't want to stagnate.

Bah!  Just more bitching and moaning career-wise I guess.

 Thursday, February 02, 2006

A Little Introspection

2/2/2006 7:32:09 PM (Eastern Standard Time, UTC-05:00)

I've always had a hard time figuring out what I want to do with my life. From a career perspective, I've always had a hard time defining what interests me because, to be honest, everything, interests me. Well, let me clarify that, everything technical, from a software perspective, interests me. From BizTalk to DHTML to .Net to software design, I want to learn it and I want to explore it.

For the most part, I'm not even particularly interested in mastering "it"; I'm just curious about how things work and what things do. Reaching a level of mastery with any of the technologies I work with is purely happenstance and a byproduct of my repeated experience with it (not that I've mastered any of the technologies I work with, but I think I'm certainly above average in most areas).

I think that, even beyond that aspect, I'm fascinated by refining and improving my technique.

The act of building a typical house is fairly standardized these days. For the most part, there's very little innovation and challenge in building houses because most houses are built from the same mold. Whether you build a 2000 square foot house or a 5000 square foot house, whether you build a house with brick face or a house with siding, whether you build a house with three bedrooms or a house with four bedrooms, the act and practice of building a typical house remains pretty standard for the most part. In fact, many companies have capitalized on this fact by building house "factories" which kind of lay out a house's frame and various bits and all of the core pieces of the frame are shipped on one or two flatbed trucks, partially assembled.

For the contractors that build these houses, there's very little challenge; there's very little knowledge gained after constructing such a house. The entire design process has already been thought out and the difficulties taken care of ahead of time. All that's left, really, is to do the manual labor.  At the end of the day, this is what most builders do because it's what pays the bills and that's good enough.

For a comparatively small set of contractors/architects, there are clients that demand houses that are different. What different means is up for interpretation. It may mean building a house on a site that makes it extremely challenging to build a sound foundation. It may mean constructing shapes that typically aren't constructed in cookie cutter houses. It may mean integrating systems (networking, electrical, software control, etc.) in ways that have never been integrated before. It may mean building with materials that typically aren't used due to lack of exposure and knowledge. It may mean utilizing untested and undocumented methods to accomplish what would otherwise be impossible. Whatever the definition, this class of builders/architects are driven by a different desire. They're not so much driven by the bottom line (making a highly profitable business) as they are by the chance to innovate (even if this term is used in a relative sense), the chance to try something new, and the chance to improve the understanding of techniques and tools that may otherwise be foreign.  If these individuals are successfull, financially, that's just the icing on the cake.

That's me in a nutshell :-)

In my consulting days the last few years, I've seen both sides of the coin. I've worked places where the work was so cookie cutter and boring, that I started to look for new positions even just a few weeks into the job. I've been in at least two organizations that were so creatively stifling and just not a developer friendly environment that I ended up just being so frustrated and a little drained each day I had to be there.  On the flip side, I've had positions that offered me opportunities (although not consistent) to build some really awesome solutions.  I've had positions where I've been given free reign to do some really creative work (both visually, programmatically, and design wise).

I think what I'm seeking, nowadays, is the ability to do the latter, but on a much more consistent basis; I want to feel like I'm doing something interesting and challenging every day that I wake up. I want to work where I'm expected and given the opportunity to learn ideas, concepts, constructs, techniques, technologies, processes, frameworks, and practices that would otherwise be considered unimportant to deadlines. I want to work with people that are as geeky (or even more so) than I am.  Certainly, I understand that the bottom line (dollars wise) is important, but I want to work where there's a fair balance between the that and taking some risks.

This morning, I was handed two printouts of lists of incentives from Handbook of Human Performance Technology (quite a hefty, but seemingly interesting book). The lists are broken down into monetary and non-monetary incentives. Reading through these lists, I could immediately tell what this superior was trying to point out to me. I identify very well with the items listed in the non-monetary list, including:

  • Choice of project,
  • Flexible schedule,
  • Informality,
  • Nature of work,
  • Type of community,
  • Type of organization,
  • Mentoring,
  • Participation in professional conferences,
  • Support for personal development,
  • Training materials,
  • Job aids and documentation,
  • Type of furniture,
  • Freedom to innovate,
  • Dynamic leadership,
  • Entrepreneurial support,
  • Membership in elite team,
  • Patents

On the other hand, I find far fewer items that I can identify with in the complementary list. Things like:

  • Overtime payment,
  • Weekend payment,
  • Clothing allowance,
  • Sick leave,
  • Club membership,
  • Expense account,
  • Medial insurance,
  • Stock bonus

Just don't concern me at all. I'll gladly work weekends, holidays, 16 hour days, etc. so long as the work is interesting to me. To confirm this, simply ask my wife, who oft complains about this and claims that my company is screwing me somehow. But I never think about projects that are interesting in those terms. I frequently work unbilled hours that I don't even count when I'm deep into something I'm interested in.

Well, I'm not totally agnostic of the monetary incentives. If that were the case, I'd be doing my PhD right now on my way to being a professor or a high school math/science teacher. I certainly believe in receiving a competitive, market salary and a fair bonus plan.

This last bit is the reason why I think I'm starting to fall out of love with my current job. Whereas in the early-mid portions of the last year, I've been able to do some fairly nifty work and work alongside some really good people, the last few months and the outlook at my current company seems bleak for doing the type of innovative and interesting work is waning. For the past year, I've made sacrifices (perhaps selfishly from the perspective of my wife) in terms of my salary for the opportunity to do cool things, work with people that I like, and work at a site close to home. But I'm just not feeling the love these days.

There's a good passage from this printout that I received this morning that kind of sums up my current situation to a T.

Adequacy is the condition of being sufficient for a given purpose. It is a relative concept: what is adequate for one individual or group may not suffice for another. There are two aspects of the adequacy of an incentive system: it should enable the employee to maintain a standard of living typically associated with the job, and it should be comparable to incentive systems associated with other jobs available to the employee.

The first aspect of adequacy deals with the cost of living at an expected level of quality of life. When the same level of salary does not tempt a computer programmer from Columbus to move to San Jose, it is probably because the salary does not fully compensate the increased cost of living in California. Similarly, a newspaper publisher must provide greater salary or allowances (including housing) to successfully induce an Indianapolis reporter to move to Tokyo. In many developing nations (and among such professions as teaching and nursing in developed nations), inadequate salary is the major obstacle to recruiting and retention of talented individuals.

I'm actually more interested in the second aspect, but unfortunately, the printout left that page out :-S I'm currently making a long journey each week from my home in New Jersey to a client site in Connecticut. It's not that the commute is that bad, really, it's that there's no incentive for me to do so. It's not even a matter of being short sighted; even in the long run, there's no incentive for me to do this because of the nature of my company, especially when the work is so boring and grinding (even worse considering that the environment isn't developer friendly).

So that's that. I think I may be leaving my current company, the longest tenure I've had with any company, in the next few weeks for either an opportunity to do more interesting work or at least make more money doing more driveling work :-) Just a little thinking that I had to get off my brain and put in writing.  As Nader would say, we shall see.

 Tuesday, January 31, 2006

Random DevTools Entry: #003

1/31/2006 7:21:43 PM (Eastern Standard Time, UTC-05:00)

DHTML Edition.

Came across an awesome listing of DHTML resources today via weblogs.asp.net.

Just a short snippet:

  • 3 Column Holy Grail.  For good reason, clean, search engine optimized CSS layouts have been hot in the web design space for quite a while.  I really got into it when I was working at Factiva.  Up until that point, I didn't even know that such techniques existed.  Well it seems like someone has finally pulled it all together into one super clear layout.  I marvel in the simplicity...
  • Qooxdoo.  Wow.  I am blown away by what's capable with this library.  Definitely worth a look, particularly the windowing capabilities.  The last two web based projects I've built have used custom windowing libraries which are definitely not as well developed as these libraries are.  Now I'm salivating to build something cool with it :-)
  • dp.SyntaxHighlighter.  I've actually been thinking of writing just this!  Amazing stuff, really.  At the moment, I'm mostly using an external tool to colorize my code and pasting it as HTML...this looks like a much better solution.
  • DOM-Drag.  Looks good.  Last DHTML front end project I was on, I spent way too much time making drag-drop work.  However, the performance does seem a tiny bit laggy on some of the demos.
  • Nifty Corners.  Looks interesting...people seem to like the rounded corners look...I've always been too damn lazy to make rounded corners :-)
  • moo.fx.  This library looks great...very performant and easy to use.
  • script.aculo.us.  A more heavyweight and full featured effects library.
  • Behavior.  I'm really digging this one...check out how clean the demo pages are.  Very nice.

And there's also a boatload of AJAX libraries listed as well...way too many, I'd say.

But I digress.  Some of these libraries just make me giddy.  But I'm weird like that.

Random Links

1/31/2006 7:08:12 AM (Eastern Standard Time, UTC-05:00)

It's always interesting to see how people end up on this site.

That's one of the neat things about dasBlog...I'm always giddy when I see some new referrals :-)  Every once in a while, I'll get a few referrals from a handful of bloggers over at weblogs.asp.net.

For a while, I spent quite a bit of time over at weblogs.asp.net.  Not so much these days as my projects have picked up, but I've had some interesting discussions with some of the guys over there.

Stop by WAN if you get bored; there's certainly interesting bits here and there.

 Monday, January 30, 2006

Happy Chinese New Year!

1/30/2006 2:45:28 PM (Eastern Standard Time, UTC-05:00)

Yay!

I celebrated over the weekend with hotpot at my mother's significant other's house.  It was great...I love hotpot!  But so damn tired from my drive home from Connecticut the night before (I live in Jersey, but currently working in CT).

As we were eating, my sister relayed an amusing story to me regarding my Amazon.com reviews.  Apparently, one of her friends had come across my review for the Microsoft Natural Ergo 4000 keyboard while searching for a new keyboard.  As relayed to me by my sister, this friend became quite excited and called/emailed/messaged my sister and started asking if she had a brother in North Brunswick.  Funny how small the world is I guess.

Even more interesting, this morning, I got an email from someone who had read my review on the same keyboard and wanted to know if my opinion had changed since owning it.  Of course, I replied to this woman and told her that the 4000 is a fabulous <<in that nasal, metrosexual tone>> keyboard.

 Wednesday, January 25, 2006

Yet Another Bookmark

1/25/2006 8:49:09 AM (Eastern Standard Time, UTC-05:00)

I going to have to take a look at this Composite UI Application Block from Microsoft's patterns and practices group.

It actually looks very similar (at least from a 10k foot view) to the architecture/design implemented by Omar Al Zabir in a writeup over at CodeProject.

I admit, I've never been much of a WinForms guy, as development of Windows clients has never really interested me (partially because of what a pain in the ass it is to work with WinForms compared to WebForms (XHTML markup just makes more sense for UI layout and presentation, at least in my opinion)), but I think it's probably worth my time to take a good look.

RSS 2.0 Atom 1.0 CDF