jordan.terrell
Just trying to make sense of things...

Mixed Experiences Using Twitter

Sunday, 10 August 2008 01:50 by jordan.terrell

I've been using Twitter for a little over a week - and as you can no doubt guess from the title of this post, I've had mixed experiences.

I've managed to pick up a handful of useful links to software development resources.  Plus, I like how many of the mainstream blogger's "Tweet" when they make a blog post - it's kind of like real-time RSS.

However, I have noticed a less than desirable signal-to-noise ratio.  Whereas most of the blogger I follow publish software development related content, following those same people on Twitter has thus far yielded dissimilar content, and out of context chatter.  For example, if you are following one person, and they "@reply" to another person you are NOT following, you only hear one side of the conversation - much like trying to overhear and understand a phone conversation that you can only hear one side of.  I've also noticed that since Twitter is closer to a near real-time communication medium, it tends to better enable heated debates, even outright textual fights - I've already had to "leave" (no longer follow) one person for this very reason, just to avoid this noise.

Having said all of this, I think there is much realized and future potential with this platform of communication.  I think Twitter would benefit from things such as tagging, being able to associate a Tweet with a URL (instead of having to include it in the body of the Tweet), increasing the permitted size of a Tweet to ~250 characters, and the ability to create, join and subscribe Tweet groups.  This would allow one to both publish(if a joined member) and subscribe to something like the "ALT.NET Tweet Group" or "Rhino Mocks Tweet Group".  Twitter etiquette would encourage people to stay on topic when posting to a group.

Perhaps my suggestions goes against the grain of what Twitter is all about (following people's daily on-goings), but if you think of RSS, it too came from humble beginnings as well - but now we tag, we TrackBack, and we Digg, Kick, etcetera.  This has created a very vibrant blog ecosystem, while still maintaining its grassroots heritage.

Regardless, I'm going to stay of Twitter for now - if I continue to see a degradation in the signal-to-noise ratio, I may just tune out...

Tags:  
Categories:   General
Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

I'm on Twitter Now

Wednesday, 30 July 2008 10:58 by jordan.terrell

At first I resisted using Twitter, but I'm starting to like the concept.  The thing that probably turned my viewpoint was the ALT.NET Podcast on Continuous Improvement.  I've been telling people the same thing for a long time - good listen.

How does this podcast relate to me using Twitter?  Well, they talked about looking at alternative sources for information - including Twitter - not just following blogs.  So, I'm going to try this for a while.

I'm using Witty as my Twitter client of choice - I don't have a mobile approach figured out yet.

You can follow me, if you like...

Tags:  
Categories:   General
Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

Where Can I Buy One of THESE Computers?

Tuesday, 22 July 2008 10:03 by jordan.terrell

Wow!  64 CPU cores and 2 Terabytes of memory!  I'll take two please...

Categories:   General
Actions:   E-mail | del.icio.us | Permalink | Comments (1) | Comment RSSRSS comment feed

Room 2531 Building 41

Friday, 11 July 2008 11:06 by jordan.terrell

The room where C# was born.

Tags:  
Categories:   .NET | Programming
Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

iSynaptic Commons - Release On Hold

Friday, 11 July 2008 09:23 by jordan.terrell

Back in April I mentioned that I was close to releasing my iSynaptic Commons framework - I've changed my mind on how soon I'm going to release it.  I've noticed a trend in short-changing my personal projects from certain quality practices that I am very strict about in my professional projects - practices such as unit tests with high code coverage, using a build server, well factored build scripts that compile, package, and publish builds, an active versioning policy,  code generation support (more on this later), etcetera.

The iSynaptic Commons framework represents my first public open source project envisioned and implemented by me.  As a result, I've become quite conscious of the missing quality practices mentioned above.  This in part of the reason why I chose to upgrade some software I've been using - I'm going to try to get strict about following all the best known practices with all of my iSynaptic projects, starting with the Commons framework.  I intend to get a build server up and running, and implementing all of these practices.

Towards that end, I want to communicate the inception of two other frameworks (extensions to the Commons framework):

    • iSynaptic.SolutionBuild - This will be a suite of reusable MSBuild scripts and tasks, aimed towards having a componentized build system where you can pick and choose build functionality

    • iSynaptic.Modeling - A set of class models, a XAML-like parser, and code generation templates for common infrastructure layers (e.g. db schema/data access, domain modeling, etcetera

    The Commons framework will be dependent on the SolutionBuild framework.  This will not unduly postpone the Commons framework, but should present a higher quality release.

    Thanks for your patience, and hopefully I can get a first release out soon...

    Upgrades, Upgrades,Upgrades...

    Friday, 11 July 2008 08:41 by jordan.terrell

    Yesterday I spent some time updating software that I use frequently:

    I was a bit trepidatious about upgrading all of this software, however, all things considered it was all painless.  The first three products come with a XCOPY deployment model, and if you follow the directions it's no problem to upgrade everything this way.

    I was very impressed...

    Categories:   General | Programming
    Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed

    Rhino Mock 3.5 Release Candidate - I Got To Help!

    Monday, 30 June 2008 02:22 by jordan.terrell

    Rhino Mocks 3.5 just went to release candidate.  Probably the biggest change is the new Arrange-Act-Assert (or AAA) syntax.  This now allows you to use a nearly identical approach to Moq's API.  What I like about Rhino Mocks is the fact that it uses extension methods, so you don't have to access an "Object" property to get the real mocked object.

    But what is even cooler about this release, at least for me, is that I got to help with it!  I was migrating a project over to Rhino Mocks 3.5 beta, specifically because I wanted to make use of the new AAA syntax to simplify our tests, and during that process I found a pretty big bug - ordered expectations did not work with the new syntax.

    To make the problem summary short, when you used the Expect() extension method, it put your mock object in Record mode, recorded the expectation, and then immediately put the mock object back in Replay mode.  Two problems with this: First, it assumed you were in Replay mode to begin with (Ayende noticed/fixed that); Second, switching back to Replay mode originally would ensure that you could not do so within the context of an Ordered() scope.  This was, I assume more to encourage proper use of the API than a real design/implementation constraint.  With the fix that I made in place, IF you were in Replay mode when you call the Expect() extension method, it now skips the check to see if you are in an Ordered() scope.  However, using the previously existing MockRepository.Replay() method still behaves the way it did before - it will throw an exception if you try to call it within an Ordered() scope.  The reason we can make an exception for the extension method is because it is an atomic action: if you were in Replay mode already, you will just be adding an expectation; you'll still end up in Replay mode.  If you were not in Replay mode, it will not try to place you in replay mode.  The API with the fix in place still protects the invariant disallowing you to enter an Ordered() scope in Record mode and switching into Replay mode before exiting the Ordered() scope.

    If you want to look at my fix, it's revision 1482 in the Rhino Mocks Subversion repository.  Not a rocket science-like fix, but it's still cool that I got to contribute, and that Ayende choose to recognize my contribution when announcing the Release Candidate (thanks Ayende!).

    You can bet I will be updating my project to use the Release Candidate later today...

    Tags:  
    Categories:   .NET | Programming
    Actions:   E-mail | del.icio.us | Permalink | Comments (1) | Comment RSSRSS comment feed

    Apress Books 45+% Off!!!

    Tuesday, 24 June 2008 14:26 by jordan.terrell

    Anyone who knows me well knows that I'm a huge book reader (mostly technical in content).  I love to learn new things, and books present, at least to me, and ideal package.  Having said that, you can imagine I get pretty excited when there is a book sale; especially when the discount exceeds 30%.

    I'm normally a Borders fan, however Bookpool is having a sale on many new Apress books, all discounted at 45% or more.

    I personally recommend the book entitled "Pro C# 2008 and the .NET 3.5 Platform (4th Edition)" by Andrew Troelsen.  The very first edition (based on .NET 1.0 beta) introduced me to .NET.  Since then, this book has grown to include new framework and language features all the way up to .NET 3.5 and C# 3.0 (2008).

    Enjoy!

    Tags:   ,
    Categories:   .NET | Programming
    Actions:   E-mail | del.icio.us | Permalink | Comments (1) | Comment RSSRSS comment feed

    IEnlistmentNotification: Implementation Nuances

    Friday, 20 June 2008 11:15 by jordan.terrell

    I am a big fan of System.Transactions.  It is by far one of the coolest additions to the .NET framework.  It was what introduced me to the power of ThreadStatic variables (use with caution).

    Since being introduced to System.Transactions, I've been using it to create transactional business objects (volatile resources in System.Transactions lingo).  This has worked very well for me, however, I recently (read: in the past two weeks) discovered some nuances in implementing IEnlistmentNotification that might not be readily obvious or documented (as far as I could tell).

    Nuance 1: Do not throw exceptions from the Prepare(PreparingEnlistment pe) method

    If you need to indicate that your resource cannot prepare for the transaction to complete, you must call the ForceRollback(...) method on the PreparingEnlistment object passed into your implementation of Prepare().  If you want to include additional information on why your resource was unable to prepare for the transaction to complete, there is an overload of ForceRollback() that accepts an object that derives from System.Exception.  Once all resources have rolled back, the System.Transactions infrastructure will throw a TransactionAbortedException.  Any custom exception that you've provided to the ForceRollback() method will surface as the InnerException on the TransactionAbortedException thrown by the System.Transactions infrastructure.

    You should NOT throw an exception from Prepare(), and you should wrap all code within the Prepare() method with a try/catch block - the catch block should catch all exceptions and pass them on via the ForceRollback() method.  Throwing an exception from Prepare() (or allowing one to bubble up thru Prepare()) will short-circuit the System.Transactions infrastructure from calling Rollback() on enlisted resources - not something you want to happen.

    Nuance 2: Rollback() is not called on your resource if Prepare() votes to rollback

    If you call ForceRollback() within your implementation of the Prepare() method, the Rollback() method will not be called on your resource.  Any clean up that typically occurs in Rollback() will need to occur within Prepare() IF your Prepare() method votes to rollback.  For example, if your Prepare() method acquired any locks (e.g. "row locks", "table locks", etcetera) you will likely want to release them in the Prepare() method right before you vote to rollback.

    Moving Forward

    I hope that this is useful to you - I haven't seen this behavior documented anywhere, but that could be my own fault.

    I have no doubt that I will find additional implementation nuances when it comes to System.Transactions.  When I do, I'll be sure to document them here.

    Enjoy!

    I'm Going To The PDC!!!

    Monday, 16 June 2008 09:27 by jordan.terrell

    I can't wait to see what Microsoft has cooking now!  The 2005 PDC was great because of all the LINQ-related language enhancements and WinFX content.  I'll keep you posted.

     

    Bling3

    Tags:  
    Categories:   .NET | Programming
    Actions:   E-mail | del.icio.us | Permalink | Comments (0) | Comment RSSRSS comment feed