in

 

Evan Hoff, Professional Code Junkie

October 2007 - Posts

  • ALT.NET: Drinking from the Firehose

    Speaking of the firehose:

    ALTNETCONF List Stats

    Started: Oct 7th

    Current Member Count: 438

    Total Message Count: 1842

    New Members In Past 7 Days: 115

    New Message In Past 7 Days: 971

  • Code Is Obsolete in Visual Studio 10

    Sorry, I can't resist.

    Hot off the presses is a new technology planned for Visual Studio 10, Oslo.  It was announced today by the director of Microsoft's Connected Systems Division, Burley Kawasaki (love the name).

    Microsoft today unveiled a futuristic vision of technology for service-oriented architecture (SOA) development where "the model is the application."

    "If you can make the model executable," Kawasaki said, "where the model is the application, then you lose the gaps and handoffs. The model that business defines is the thing that actually executes."

    The next gen tools are supposed to be a form of model-driven development.  It'll be a mashup of BizTalk Server 6, Visual Studio 10, and System Center.

    The Microsoft approach, which will be embodied in the Oslo tooling, is to make modeling a collaborative effort among business analysts, architects and developers and eliminate the coding step.

    No more coding?  Looks like I'll be needing to find a new job.  Apparently the BA's will be taking my place.

    Here's another viewpoint:

    "It's time to help developers and IT professionals extend the capabilities of SOA to address the new 'blended' world of software plus services and cross-boundary collaboration," said Robert Wahbe, corporate vice president of the Connected Systems Division at Microsoft. "'Oslo' will enable a new class of applications that are connected and streamlined -- from design through deployment -- reducing complexity, aligning the enterprise and Internet, and simplifying interoperability and management."

    Enterprise internet alignment?  Is that the next big thing? ;-)

    On a more serious note, if you want to know what's *really* going to ship, you can read up on Composite Applications.  In a nutshell, take a Component Architecture, convert the components to services, add Business Process Workflow to glue the services together in an Orchestrated fashion, mix in some infrastructure services (such as federated identity), and add a dash of MDA all around.

    Of course, then there's always the other form of Model-Driven Development--where the modeling language is the programming language, but that won't sell many tools.

  • OOPSLA Podcasts

    If you are looking for some good podcasts to listen to, you might check out some of the keynotes from OOPSLA 2007.  They've put them all out on the web.

    I'm also super excited that they are doing OOPSLA 2008 right here in Nashville, TN.  That rocks!!

  • Joining INETA as Membership Mentor for Tennessee and Kentucky

    For Immediate Release

    INETA North America Membership Division Announces: New Membership Mentor – Kentucky, Tennessee

    Evan Hoff, Nashville, TN, USA

    From INETA User Group: Nashville Visual Studio .NET User Group

    Bellevue, WA –October 27, 2007 – INETA North America Vice President in charge of the Membership Division, Chris Wallace, announced today the new Membership Mentor for the territory Kentucky, Tennessee - Evan Hoff.

    “INETA is proud to announce that Evan Hoff is now our Membership Mentor for Kentucky and Tennessee” Wallace said. “Evan comes highly recommended by those who know and recognize him for his tremendous work with our developer community. We are proud to call Evan one of our Membership Mentors.”

    Evan is now taking over the important INETA volunteer position of Membership Mentor and the duties that have been the responsibility of Scott Lock for KY and Scott Spradlin for TN. We thank each of them for their volunteer service to INETA as our Membership Mentors. Scott Spradlin has taken the position of INETA Sponsorship Director.  

    “Please welcome Evan to this new position and extend every courtesy in working to succeed in our challenges ahead as we work together to build a stronger developer community. Good luck, Evan!” Wallace said.  

    About Evan Hoff – After migrating to .NET shortly after the 1.0 release in 2002, Evan Hoff has spent the past few years working as a consultant in .NET projects both large and small. Industry experience has included ERP/CRM systems, entertainment marketing, mobile, and healthcare. Notable accomplishments include having his work featured in both television and print, making an appearance in Wired Magazine, and placing 3rd in Yahoo's 2006 HackDay competition. He currently holds a consulting position with Compuware, Inc. in Nashville, TN.  His passions include software design and the pragmatic application of better practices and processes.

    About INETA – INETA is a not-for-profit volunteer led organization whose mission is to provide services, resources, and networking opportunities to user groups and individual member’s interest in .NET technologies. The INETA focus is on face-to-face interaction through local user group meetings as well as larger regional, national, and worldwide events.

    The INETA worldwide team is a collection of five regions working together to foster the global goals of INETA through independently operated locally focused culturally personalized organizations under the INETA name. Currently, INETA supports more than 250 user groups that represent more than 150,000 developers in the United States and Canada, plus about four times that many in total worldwide.

    The INETA NorAm Membership Division is the exclusive internal organization that provides complete membership services to the INETA NorAm association members plus internal and external entities to the association. Membership Mentors act as advisor, counselor, guide, tutor, teacher, and guru of Membership to INETA member user group leadership and user groups.

    Supported by Microsoft Corporation and other sponsors, INETA is an independent volunteer organization run by user group leaders and developers, http://www.ineta.org.

  • ALT.NET: Architecture on an Agile Project

    I'm clipping this for myself.  ;-)

    It's a post from Udi on Agile Architecture.

    Here are my thoughts:

    > - What's hard about doing design in an Agile project?

    Battling with YAGNI people. The amount of up front design acceptable
    to people depends on their experience. Some want to stop after
    setting up 3 layers. Others are willing to continue up to MVP.

    > I think it's
    > easier than Waterfall, but I want to hear from people with a
    > background in Waterfall or RUP like processes.

    I've done enough Waterfall and RUP to tell you that those camps tend
    to do theoretical architecture and design - pictures and
    powerpoints, but rarely actually try out their concepts in code.

    > - How much of the architecture do you know upfront?

    A better question would be how much can you figure out with
    reasonable certainty. That again depends on experience, not only in
    pure architectural work but in the specific domain. Understanding in
    which dimensions these kinds of systems tend to change, and so on.
    It's been my experience that you can get quite a bit done.

    > How are you
    > under control and have any chance of successful delivery if you
    > don't know every detail of the design upfront?

    Screw control. It's more productive - even if you don't have all the
    details. Good architecture separates concerns enabling you to get
    started where you do know more of the details, giving you more time
    to figure out details in other areas as you go along. That's agile
    in my book.

    > How do you make big Architectural decisions without blowing the
    > iteration plan?

    Decisions usually take 1 second - yes or no, and move on. Finding
    out what to decide on can take longer. Again, good architecture
    enables you to decide on bits and pieces at a time.

    > Do you just do time boxed spikes?

    Also that.

    > How much architecture work do you do upfront these days?

    As much as I get paid to do :)

    > Do you still have a dedicated Architect, or is architecture shared
    > throught the team or at least shared by the senior folks?

    The size of projects I usually work on usually have a dedicated
    architect. If members of the team are knowledgable, they are
    involved. Regardless, you need buy in by the team doing the work -
    nothing works better than pair programming with them for that.

    > What about technical infrastructure that takes longer than one
    > iteration to build? Is there really any such thing?

    If it's behind an interface, who cares? Handle its features just
    like anything else.

    > How do you avoid code churn? Do you?
    > Is it really that big of a deal?

    If I had to choose between productivity (in features units / time)
    and not rewriting code, I'd choose productivity. Keep your eye on
    the ball - that's my plan.

    Hopefully my necessarily colored opinions are worth something :)

  • ALT.NET: RE: How can Microsoft Patterns and Practices Help?

    Please read this first 

    ** I would challenge you to find a single page on P&P (or any other part of MSDN) that mentions any OO principle **

    I couldn't find any on google.

    I don't have any problem with MS putting out frameworks, however, what ends up being construed from the frameworks that are written is that they are the "golden" Microsoft implementation (usually due to lack of knowledge).

    Stored procedures are a good example. Probably everyone on this list has been in a shop where stored procedures were touted as the "Microsoft best practice". If you weren't using stored procedures for database access, it was the equivalent of trying to get the team to switch to perl (for instance). This plays heavily into the O/RM topic and even Microsoft got some blowback on this topic with the entity framework. Nearly everyone here knows the sproc myth is just dogmatic thinking. I would imagine that most of the 'softies would agree with us (I'm speculating).

    How do you change this? More guidance in the patterns and practices (maybe a microsoft.com article explaining benefits/examples of pragmatic database access without stored procs).

    Here's another huge pain in my side. Microsoft has created a set of tools which brings the barrier of entry down extremely low (not a bad thing in and of itself). In fact, they've even released the free hobbyist versions of Visual Studio to reduce the economic barrier. A side effect is that you are bringing many people who can just "wing it" in development, but who lack the knowledge/motivation/interest in learning the principles behind developing a clean code base (think OO). If I had to generalize, I would say it's mostly a knowledge issue. All the developers I have worked with (including the ones who just picked it up as a hobby and started "winging it"--including myself), wanted to be good developers, but aren't aware of that side of development. Basic principles are a huge gaping hole in the .NET community. I could probably find you a few dozen User Group leaders, RDs, etc who couldn't name a single development principle. I know a few who think Pattern is a four letter word.

    It might be a valid point to say that educating the .NET community is not the job of Microsoft, but the problem is that the barrier of entry is so low (again, not a bad thing) that it's causing problems (and ultimately, an ALT.NET reaction). Microsoft has positioned itself as the end all for everything .NET (rightly so), but then it leaves this huge hole looming in it's community of developers.

    In short, patterns and practices could fundamentally change the .NET community (in a HUGE way), by doing a blitz on Principles and Patterns (and don't make up your own)--more principles than anything at this point in time (that's where we are at Today).

    In fact, if you look closely, you will find that ALT.NET is really a conglomeration of Principles, Patterns & Practices. Don't take this as offensive, but even the user stories floating around this mailing list are around building a type of CMS for aggregating P&P literature. It's because principles are a huge gaping hole in the community (along with newer development methodologies and practices), and they are completely missing from P&P.

    http://www.google.com/search?hl=en&rls=com.microsoft%3Aen-us&q=site%3Amsdn.microsoft.com+%22separation+of+concerns%22
    http://www.google.com/search?hl=en&rls=com.microsoft%3Aen-us&q=site%3Amsdn.microsoft.com+principle
    http://www.google.com/search?hl=en&rls=com.microsoft%3Aen-us&q=site%3Amsdn.microsoft.com+liskov&btnG=Search

    It's just compounded by the fact that those of us that take the time to learn the principles/patterns get shut down by dogmatic thinking (see sprocs above). If P&P led a "principles" assault, it would make the .NET world a completely different community.

    How about a "Development Principles" caravan that travels to the big conferences? A few screencasts on code quality? An article on what constitutes a good object? A presentation on object modeling at teched?

    I could jump into the topic of Components from here, but I think I'll quit while I'm ahead. :-)

    Of course, we know that principles are only a starting point. After you learn the principles, things like patterns start making sense. It would only be after a "principles" assault that the community could really start moving forward.

    And you don't have to take my word for this, go to your local (non-redmond) user group and ask a handful of developers what principles they develop by. Many will give you a blank stare. Ask them what OO principles are, and they might mutter inheritance or polymorphism. They don't know that Liskov or Demeter fellow (or even what a Responsibility is).

    Evan Hoff

    Just so we are clear, this is NOT aimed at those closest to me (user group leaders, coworkers, etc).  If you know me personally, don't take offense at this, please. ;-)

    I DO know the lack of development principles and patterns to be accurate.  I know it's accurate because it wasn't so long ago that *I* was a part of that.

  • ALT.NET: How can Microsoft Patterns and Practices Help?

    That question was raised by a member of Microsoft's P&P Team earlier.  I wanted to reproduce the correspondence here:

    This is a hot topic, but I am here to have an open discussion with a group of peers so I am taking a leap of faith. It’s no secret that I work in patterns & practices on the client team that built CAB (Yes you can blame me). Anyway, since joining the team I’ve seen a rash of criticism come our way particularly around the way we built CAB, Enterprise Library, etc. Much of that criticism has come from a lot of the folks on this list.  In my opinion some of the criticism was fair and warranted, some if was not. Regardless, I have listened to a lot of the concerns and we are actually working to do what we can to address them.

    <Shameless plug>

    As a team patterns & practices mission is to help developers be successful with the platform. We are not a Microsoft compete with Open Source. Our goal is not to be the next Log4Net, Nhibernate, Castle etc. We may provide some functionality within our guidance that mimics some of those efforts but that’s based on the fact that we are addressing the same concerns those products address, not competing with the product itself. Many of us do have Open Source / Agile backgrounds which is probably why it’s not accidental that we landed in p&p. Lastly, we’re not perfect far from it. We have a lot to learn, and I am sure we can benefit greatly from the shared knowledge of folks like yourselves.

    </Shameless plug>

     Anyway, so forgetting about any pre-conceived notions that you about p&p  and our deliverables today. What would p&p 2.0 that you can be proud of look like to you?  I am open to your constructive criticism.

    Regards

    Glenn

  • Database Normalization Is for Sissies

    Sorry, I rarely do link posts, but this is a must read (even if it is old news).

    It's a tongue and cheek look at database normalization.  Ironically enough, it was given as a presentation to the data storage guys over at Microsoft.

    As for the author, it was none other than Pat Helland.  If you aren't familiar with him, one of his other well-known works was Life Beyond Distributed Transactions: An Apostate's Opinion.  You can find a profile of him here

    He designed the architecture for the MS DTC, the new SQL Server Broker, and spent a couple years working on the product catalog over at Amazon.

    You can find the presentation slides on his blog.

    Arnon had a good writeup on this over at InfoQ.

  • The 8 Fallacies of Distributed Computing

    I wanted to reproduce these here for reference.

    1. The network is reliable.
    2. Latency is zero.
    3. Bandwidth is infinite.
    4. The network is secure.
    5. Topology doesn't change.
    6. There is one administrator.
    7. Transport cost is zero.
    8. The network is homogeneous.

    These were originally coined by Peter Deutsch back in 1994.

  • Transactions Across Service Boundaries

    I figured I might as well bring this back up in light of my next topic.

    Are distributed transactions a violation of the "Autonomous" tenant of service orientation?

    In case anyone missed it, there was some good discussion on the use of transactions across service boundaries.  You can read the responses and listen to the ARCast version as well.  It was fun seeing several industry luminaries chime in, including Roger Sessions.

    It also got a little coverage over at InfoQ.

    In short, ACIDic transactions (ie..database transactions) across services are mostly frowned upon.  They can kill scalability.

  • The Web Database Anti-Pattern

    I'm just naming what I've seen over and over again.  It's the extreme polar opposite of the Smart UI Anti-Pattern (in terms of layering) and a play on words of the popular term "Web Application".

    This anti-pattern most often exposes itself as an asp.net website (or a webservice/remoting tier) which is merely a thin veneer on top of a relational database.  Logic may be deeply embedded in the database or even very lightly embedded.  The key distinguishing feature is the amount of reliance on the database.  This may come in the form of direct database access in the asp.net code-behind or in a very thin implementation of Transaction Script.  All forms of searching and sorting occur inside the database engine.  Application logic rarely goes beyond property-setting and data validation.

    While you can successfully build small websites using this anti-pattern, the architectural qualities of an application built with this anti-pattern force it to scale at the database level.  At it's worst, the database server will max out before the first webserver in load testing.  In milder forms, you may get a web server or two in front of the database (but just barely).

    From a conceptual standpoint, the data model is seen as "the one true model".  Thus any attempts to manipulate or access the model require database roundtrips.  In the worst offenders, data validation only occurs through database constraints.

    Refactoring an application using this antipattern is very hard to do.  The bidirectional relationships available and used in the data model tend to break all attempts at using proper encapsulation when building a corresponding object model.

    A team working on such an application should do a skills evaluation first and foremost.  I think these types of applications are mostly built in ignorance.  The team may have an expert command of css, html, javascript, and t-sql, but lack real exposure to things such as OOA/D and the basic patterns of application architecture.  This results in a high number of tactical solutions with very few strategic decisions.

    An application with an anemic domain model has a high probability to exhibit this anti-pattern.

    If your application returns datasets from webservices, there is also a very strong probability that it falls prey to this anti-pattern.

    If this does describe your application, don't feel too bad.  I've built plenty of these in my past (which is why I can recognize them pretty easily).  It just takes a bit of reading and some practice to grow beyond this style of development.  But I would recommend starting down the road to growth ASAP. :-)

  • Creating Team Coding Standards

    It's nice when your entire team can agree on naming standards (at least).  We are currently going through the process of formalizing a few of ours in the form of a very short Word doc.

    For those looking for something to start from, here are a couple of resources:

    Just remember, don't go crazy.  They should be something everyone can agree on, and something you can give to new developers to reference.  Anything more than a page or two is overkill.

  • New Location, Same Old Garbage

    For those on my RSS feed, I've switched blog homes on the web.  I switched the RSS feed in the background on you, so now that you are seeing this, you are fully switched over (there's nothing to do on your part).

    I did want to link back to the last group of posts I wrote though, just so the newer ones don't get lost in the move.

    Programming In the Weeds

    Every Class Should Be a WCF Service

    DomainService.Equals(typeof(Component))

    The Insanity and the Irony

    Putting It All Together: Objects, Components, and Services

    Screencast: Test-Driven Domain Model

  • Joining Los Techies

    So, for the curious, they have an initiation ritual at Los Techies.  I'm going to spill the secret. 

    From Joe's emal:

    You must sacrifice a live chicken on the next full moon and praise the
    computer gods for creating Assembler.  After that you will have to tattoo
    tux on one cheek and the MS Logo on other and on the nap of your back you 
    have to tattoo "They are both full of crap!" with an arrows pointing to both
    cheeks.  This is a standard indoctrination for all Los Techies!

    I immediately complied and here's the photo of my cheeks to prove it:

  • ReSharper Community Support Rocks

    After posting my TDD screencast last week, I was surprised to receive an email from JetBrains.  It seems they watched the screencast too.  They had a couple questions for me and gave me a few pointers on keystrokes I could use to save myself time.  I'm going to reproduce the email here, because I think it really shows the level of communityness they exhibit.

    Hi Evan,

    First of all, thank you for your video where you demonstrate the power of ReSharper, we really appreciate the effort you give to explaining ReSharper features. The second big thanks come to you for the opportunity to see how other people work with ReSharper, all live. Unfortunately, we rarely have such opportunity. And that is what I want to ask you about – some questions about ReSharper usage. If you have some spare time, could you please answer questions below?

    1. What ReSharper version are you using?
      3.0.468.6
    2. For how long time have you been using ReSharper?
      Less than a year (started on 2.5)
    3. What was the toughest thing to learn about using ReSharper?
      Finding a workflow with all the keyboard shortcuts
    4. What was the biggest “WOW!” you discovered in ReSharper?
      That first unit test I write in it where the code doesnt exist, using the Alt+Enter quick fixes (along with looking at the keymap) and watching that first class and interface literally flow off the unit tests

    Also, I’ve noticed you are not using several time saving features, and I would like to tell you.

    1. You could use creation or initialization of fields from unused constructor parameters. Check quick-fixes on gray parameters.
    2. You could use Go to Next/Previous Error to skip warnings and go straight to red code.
    3. You could use Go to Declaration, or go to base/derived to navigate to classes which are right under caret, instead of going the hard way of clicking in Solution Explorer or using Go to Type.
    4. You could use Go to Recent files to quickly jump between the current set of files you are working on.
    5. You could use Expand Selection to quickly select “throw new NotImplementedException()” and replace it with meaningful code

    If you know them, could you please tell me why you were not using them? Are there any other things you know about, but not using for either reason? I’d like to know!
    Nope, I'm definitely going to play with those.  You guys have so many more features to play with.  R# Rocks!

    Thank you for your time, and I must note we are already fixing bugs which were seen while watching your demo :)

    Ilya Ryzhenkov
    .NET Tools Product Manager
    JetBrains, Inc
    http://www.jetbrains.com
    "Develop with pleasure!"

    When was the last time you blogged about a product and got a direct response from the vendor (with helpful usage suggestions)?  This was a first for me!  JetBrains, you guys are rockstars!

More Posts Next page »
Copyright Los Techies 2007. All rights reserved.
Powered by Community Server (Commercial Edition), by Telligent Systems