About/Contact

Steve Trefethen

Steve Trefethen is CTO at Wanderful Media.
Contact me

View my LinkedIn profile



Calendar

<<  May 2013  >>
MoTuWeThFrSaSu
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

View posts in large calendar

Disclaimer

The posts on this weblog are provided AS IS with no warranties, and confer no rights. The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.



Facebook wants to know what client library you use

April 28 2008 11:48PM

If you’ve downloaded either the Facebook Developer Toolkit or Facebook.NET Starter Kits I recommend voting in Facebook’s poll regarding which client library you use. It seems to me there’s no good reason Facebook shouldn’t provide an ASP.NET support on par with PHP though I’m biased. Here is the blog post about the poll.

Heck, even if you haven’t downloaded my starter kits but you do ASP.NET development be sure to vote!

FacebookDel.icio.usDigg It!

Tags:

Microsoft delivers "Feature Packed" update to Visual C++ 2008

April 10 2008 6:38AM
Microsoft just announced the release of Visual C++ 2008 Feature Pack which, albeit a bit late arriving, includes an impressive feature list:
  • Look & feel support for...
    • MS Office
    • Visual Studio
    • Internet Explorer
  • Visual Studio Docking
  • Auto hide windows
  • Vista theme support
  • Menu/toolbar customization
  • Shell management and more

If all this stuff is as good as it sounds it would appear Microsoft finally delivered on what Steve Teixeira said they were going to do. To top it all off the whole thing is a free download. I wonder if/when they’ll do the same for WinForms. Btw, I’d imagine this will make a few third party component vendors squirm a bit.

[UPDATE: April 10, 2008] Changed the wording of the last sentence to clarify that I meant "component" vendors based on Oliver's comment where I think he implies that I meant CodeGear which was not the case.

FacebookDel.icio.usDigg It!

Google's App Engine and Amazon's web services leading us into the clouds

April 08 2008 7:01AM
S
o, Google releases Google App Engine a cloud computing service for building web applications in Python. Very cool! Over the coming days and weeks I’m sure there will be plenty of comparisons with Amazon’s Elastic Compute Cloud for us to consume. Cloud computing is an interesting model, one where I believe an independent dev tools company could flourish.

image
In fact, before leaving CodeGear I sat down with Jim Douglas to discuss ideas around web development focusing on the growing eco-system of web services that companies are publishing on what now seems like a daily basis. The discussion covered a variety of web services available as well as platforms like Facebook, all things I’ve been thinking about for a long time. To the right is a photo of a page from my developer’s journal which outlines a concept I had (in March 2006) for extending Delphi applications, including the IDE, using web services. For those of you familiar with Delphi’s ToolsAPI it’s like extending the IDE, or any Delphi application, without installing/updating binaries on the local machine. The net effect is it affords the small company the opportunity to deliver more features faster with less impact to their installed base as opposed to getting stuck on a designer. With the advent of so many different API’s from so many different companies I think there’s a good opportunity for a company to stitch these services together and provide developers an entire toolset for use within their applications.

Over the past few years we’ve really witnessed the web grow into an honest to goodness platform and I think Facebook’s salvo really helped lead the way. Initially, we’ve seen the explosion in the world of social networking which I believe is largely due to the allure of ad revenue from millions of page views fueled by viral growth.

Eventually, with things like the Elastic Compute Cloud and Google Apps Engine I believe we’ll see more mainstream web application development move "into the cloud". Today, to leverage Amazon’s services it’s like working with Legos where you need piece things together to build out a site. One example I think illustrates the difference between Amazon and Google is Amazon’s Copy Proposal for S3 read it and let it sink in. I think that illustrates a fundamental difference between how these services are likely to evolve. On the other hand Google’s App Engine appears to be a more well rounded service which will make it interesting to watch Amazon’s response.

One thing is for sure, we won’t likely see Amazon or Google or Microsoft or IBM develop tools that would allow developers to leverage services from many different companies which is where I believe there is an opening for something creative to occur. I guess time will tell who will jump at that opportunity as it’s not likely to come from one of the big name players. I think this idea is already happing in the social network arena where sites like Plaxo and FriendFeed are aggregating data from a number of different services.

Another cool thing about moving "into the cloud" is the opportunity to use whatever OS you want on your local machine. I’m using a MacBook Pro and I’d love the opportunity to boot to the other half of my hard drive and work in OSX for awhile.

Btw, just landed in my inbox:

Thanks for signing up to try Google App Engine!  Your account has been activated, so you can begin building applications!

Looks like it could be a long night!

What’s your take on cloud computing?

FacebookDel.icio.usDigg It!

Reflecting on the past and the transition to .NET development

April 01 2008 7:24AM

Having recently released my first major project after having left CodeGear/Borland I’ve found myself reflecting on the last few years and my decision to leave CG. It seems particularly apropos as my first Falafel review was today.

For awhile back in late 2006 early 2007 I’d felt like I was in a rut and watching all kinds of cool things happening in the .NET world. A few years earlier, I’d made the decision to work on Internet technology because I felt it was important and early on had me working on things like ISAPI thread pooling back in 2002 which was cool. Eventually, when Borland decided to get into .NET with C#Builder I got to work on the ASP.NET designer with Jim Tierney which was a great experience and served to "keep my head in the game". I learned a lot about .NET and ASP.NET in particular and had the chance to write my first designer from the ground up. I used to wonder how many people Microsoft had working on their ASP.NET designer? I bet it was more than two.

The up hill battle

Prior to leaving Borland for Microsoft in 1999 I’d spent a great deal of time working on what eventually became the core of the ASP.NET designer, the integration of the MSHTML control. Even with all the capabilities we were able to wring out of it I became very discouraged trying to keep pace with Microsoft’s designer. When VS.NET 2005 RTM’ed it really hit me hard because I knew Delphi’s ASP.NET designer simply wouldn’t catch up at least not on the trajectory it was on. I recall many difficult conversations about which direction to take including dropping the designer entirely and focusing on creating a richer code editor experience geared towards web development. The primary issue was that Microsoft’s WebForms architecture placed an incredibly heavy burden on the design environment in an attempt to make it function like VB, Winforms and VCL designer’s developers had grown to love.

I was frustrated not spending time working on framework code people could leverage in their own applications and instead putting every last minute into the designer which, in the end, is more or less geared towards trivial applications. A fact that’s true even of Microsoft’s ASP.NET designer which has diminishing returns as the complexity of an application grows. Not a good value add proposition. For me, it was a pretty dark time and I didn’t feel my efforts were headed in the right direction, a point amplified when I attended Google Developer Day in May '07. To be honest, I found myself sitting through session after session wondering why I was the only CG developer attending this free conference a mere 15 miles from the office thinking the entire team should have been there. You could say it was an epiphany of sorts 28 days before what would be my last day.

Another issue I struggled with was believing CG would eventually be freed from Borland’s confines. It’s been just over two years since the original announcement and to my knowledge still no word. Then there’s the decline in BORL stock, dropping an astonishing 70% in the eight months following my departure. While I managed to survive a dozen or more layoffs in 15 years I’m glad I dodged what must have been a nerve racking free fall.

Basically, there was a lot on my mind this time last year.

Life in the .NET world

Back to the point, it’s been a welcome change working exclusively in .NET and in many ways a reprieve from Win32. I’m enjoying the .NET ecosystem and learning lots of new tools which is something I wasn’t really aware I missed on the Win32 side. I think one of the key things that Microsoft was missing prior to .NET was a runtime that developers could "party on" (to quote an old Microsoft phrase) and with .NET they have that in spades.

Probably one of the most liberating things has been getting away from the Windows API and focusing less on the individual function calls and more on solving real world problems. The other day Mark Edington called me regarding a SendMessage question and I can’t say I really miss those days. Another exciting piece is knowing that there is lots more to explore like all the new features in C# 3.0. Admittedly, I really struggled not having the constant drum beat of language innovation present in the .NET world.

.NET Tooling

Speaking of tools one of the most enjoyable parts of .NET development for me has been using VS.NET, NDepend, NUnit, NCover and writing code that’s easier to test  supporting things like Mock Objects. Reflection is a beautiful thing. I’ve also enjoyed the .NET Open Source community including dasBlog, CruiseControl.NET, FileHelpers , edtFTP , ScrewTurn , SubSonic and many others. I think the past nine months have done a lot to reinvigorate me as a developer and I’m feeling more engaged and learning more now than I had in years in Win32 land. It’s interesting to think the guy I sat right across the hall from had so much to do with launching both these development communities.

What’s your .NET experience been like?

[UPDATED: April 1] Fix link.

FacebookDel.icio.usDigg It!

Why Agile isn't good for shrink wrapped Product development

March 18 2008 3:28PM

Preamble: Here’s a post I wrote nearly a year ago which I’ve sat on until now. I know the Agile vs. Waterfall (or whatever other development methodology) issue has been rehashed a great deal but now that I’m working as a consultant and particularly after having pushed my first project into production, I felt it was time to hit the "post"  button.

First, notice that the in the title the "P" in Product is a capital letter. When I was at CodeGear (CG), there was an effort to use $g(Agile software methodology) and I reached a point where I felt it was not good for large, complex, version 10.0 code bases sold through channel sales for profit. To me the $g(Agile Manifesto) describes what I’d refer to as a "close combat" software development that calls for the ultimate flexibility necessary to adapt quickly to a dynamic situation. But that level of flexibility comes at a high price, like close combat itself, given the unpredictable nature of a dynamic environment. It’s been my experience that that’s not retail product development and what I’ve come to realize over the years is that if you fail to evolve your development process along with your product your chances for success will likely follow.

For me, what came out of the formal Agile training I received while at CG and a year spent using the process is that it was worth learning but the team would have benefited more by not trying to completely switch lock, stock and barrel (first mistake). The first clue, which admittedly I missed, came during the training where it was made clear there would be a "transition period", lasting potentially several iterations before each mini-team could accurately "calculate" it’s velocity. With 20-20 hind sight I believe a better approach would have been to start with a complete review of what was wrong with the existing process and an analysis of why Agile was necessary. I now believe what we did was probably typical of many teams as the "Agile mentality" washed over the shores of development engulfed us all.

We (the development teams at CG) bought into the whole thing, got training, switched project management software, started SCRUM meetings, daily stand-ups, a backlog the works. That was wrong. I think it was too much change all at once and when the product requirements changed late in the process we reconfigured the team to respond accordingly and wound up relying on an older tried and true development process that had been used for years. At that time, CG polled it’s customer base and with that knowledge decisions where made to refocus on other areas of the product. The interesting thing is that Agile more or less fell by the way-side and no one really seemed to skip a beat. We needed a complete RTM plan with priorities and requirements pitted against hard dates. And yes, dates were, and I presume still are significant as CG works towards becoming an independent company. We desired many of the principles of Agile though many of which aren’t new nor unique to Agile. I mean who doesn’t want:

  • Satisfied customers
  • Sustainable development
  • Technical excellence
  • Motivated individuals

If your team hasn’t switched to Agile or is perhaps considering switching you need to take a long hard look at your current process and at the very least get your ducks in a row before you decide that a true culture change is best for your team.

I think Agile fits particularly well in the world of contractors (of which I’m now a member), internal facing application development and IT and in those worlds makes a lot more sense. I’m now doing contracting work and I think working on small deliverable chunks over short periods of time is a great way to sustain a project. In fact, working as a contractor on a project several years ago, I didn’t focus enough on Agile principle #1:

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

Which directly lead to the end of the contract. Needless to say, lesson learned.

Relevant Links

Post-Agilism: Process Skepticism
Agile people still don’t get it
Accountability in a Scrum World
The start of the end for Agile software development?

FacebookDel.icio.usDigg It!

CCNET based EDI Invoicing Project Goes into Production

March 04 2008 8:50AM

Over the past six months I’ve been working on a system to automate invoicing using EDI. The system is built on CruiseControl.NET and a collection of custom written source control providers and CCNET tasks. Back in December, I blogged about this project which integrates with a custom ERP system built from scratch by Falafel that processes half a billion dollars worth of transactions a year so it’s nice to finally see my small part come online.

There are several Open Source projects used in the implementation including:

Here’s a diagram of the system with CCNET at the heart:

EDI Invoicing using CruiseControl.NET

One of the many benefits of using CruiseControl.NET is the visibility the system can provide to the people in Accounts Receivable. Not only can they see what’s going on via the CCNET web dashboard but they can even install $g(CCTray) and monitor from their desktop as invoices are processed throughout the day. On the web dashboard clicking through to a specific "build" log for a given EDI 810 "build" provides invoice details including invoice number, customer name, date and dollar amount.

EDI CCNET Web Dashboard
As you can see I still need to customize the dashboard to fit into the web-based ERP system’s look and feel.

CCNET’s plug-in architecture made it perfect for this situation as it has numerous features that can be leveraged to create this, perhaps unusual, usage of a Continuous Integration server. I suppose CI could just as easily stand for Continuous Invoicing. :-)

EDI 850 Up Next

My next task will be to re-work on an existing, read old, EDI 850 Purchase Order set of processes and integrate them into CCNET. Anyway, this has been a fun project to work on and I’ve learned a lot along the way and I’d like to give a tip 'O the hat to John Waters, Falafel’s CTO, for all his help. If you’re looking for an ERP guru, I think you’d be hard pressed to top John plus he’s got a great sense of humor. One afternoon while driving back through the farm land of Watsonville from our client’s site, one of the largest organic food companies in the world, he quipped:

Here we go driving through our business objects...

Something only another geek could really appreciate!

Lastly, I have to admit after 15 years of doing product development feels very satisfying to design and implement a system that solves a real world business problem. There’s just no substitute for hands on experience!

Related posts:

[UPDATED: March 4, 2008] Forgot SubSonic which I use for data mapping/xml creation!
FacebookDel.icio.usDigg It!

NDepend and static code analysis for .NET

January 23 2008 8:25AM

Recently, I’ve been spending time analyzing code from a project I’m working on using NDepend 2.6. NDepend is described as...

...a static analyzer that simplifies managing complex .NET code bases.

It digs deep into your code providing an incredible level of detail. Should you decide to take a look at NDepend be sure to give yourself several hours to spelunk as there’s tons to dive into. For starters here is a screenshot of what you can expect when you load a project:

NDepend Static Code Analysis Tool

In this image the mouse (not pictured) is hovering over an assembly name in the Dependencies pane, in the center of this image. Simultaneously the assembly region is is highlighted in the Metrics pane, in the top right.

Querying your code

While I’m still very new to this tool and digging away the thing that’s really caught my attention is CQL. Here’s a closer look at the CQL Query pane:

NDepend CQL Queries Pane

CQL stands for Code Query Language and it’s exactly what it sounds like, SQL for code, the heart of NDepend. In fact, you can check out the CQL v1.5 spec. In the above image, the queries you see are provided by default when you load a new project. On the left is a list of query groups which is a one to many with the queries listed on the right. In the image at the top I’ve selected a query titled "Methods too big" which equates to this in CQL:

// <Name>Methods too big (NbLinesOfCode)</Name>
WARN IF Count > 0 IN SELECT TOP 10 METHODS WHERE NbLinesOfCode > 30 ORDER BY NbLinesOfCode DESC
// METHODS WHERE NbLinesOfCode > 30 are extremely complex and
// should be split in smaller methods
// (except if they are automatically generated by a tool).
// See the definition of the NbLinesOfCode metric here http://www.ndepend.com/Metrics.aspx#NbLinesOfCode

Notice the blue highlights on the Metrics pane, again the one with the gray sphere’s, which represent methods from the query result set. Double clicking any of the sphere’s opens that method in VS.NET, very nice. Btw, NDepend includes copy/paste syntax highlighting of CQL queries, also a nice touch.

NDepend CQL Intellisense

Clearly, CQL is incredibly powerful and the engine that drives the code analysis used in NDepend. I think it’s a very natural approach for .NET developers and if you’ve worked with SQL at all you’ll find picking up CQL straightforward. Although, NDepend does go one step further by providing CQL Intellisense making it easier to get started with the new query language.

While the Intellisense support is nice it would be even better if it listed things like assemblies, namespaces and types (among others) where appropriate rather than just listing "assembly" or "type".

Continuous Integration Support

If you’ve followed my blog you know I’ve written quite a bit about CruiseControl.NET which NDepend integrates nicely with. Included is a command line tool which will generate your NDepend output for integration with your build results. Here is a short screencast available with more details so I’ll leave it at that.

Conclusion

I’ve already spent numerous hours exploring my code and playing with CQL and I still just scratching the surface. I’ve also managed to find and fix a number of issues and improve and optimize my code. The NDepend website has lots of screencasts on how to accomplish various tasks using NDepend and be sure to read Patrick’s blog for lots more information on NDepend.

What do you use for static code analysis?

In the interest of full disclosure, I was provided a copy of NDepend v2.6.3 for review with no strings attached for which I’d like to thank NDepend’s developer Patrick Smacchia for the license and providing such a great tool to the .NET community!

FacebookDel.icio.usDigg It!