CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Steve Hebert's Development Blog

Steve's Blog - From .Net to dotMath and everything in between.

May 2005 - Posts

  • Great post, greater title

    Here's a great post by a tester at Microsoft titled "Testers are Little More than Accounts In a Factory".  The article provides one of the "forest through the trees" moments with respect to professional testing. 

    The title is what first got my attention - it's a great title.  While I certainly don't think it applies to testers - it talks to the importance of proper focus in testing.    There is potentially nothing more worthless in a factory than an accountant - especially with regard to cost-accounting.  Cost-accountants in a factory setting work to create a set of fictitious numbers to value production at any point along the production line. These numbers can be dangerous.

    To illustrate the point, lets say the accounting numbers tell us 20% of the companies scrap comes from a single production step/workcenter. In response to the accounting numbers, I take a team of engineers to attack the problem and reduce it to less than 1%.  What is the effect on the bottom line of the company?  Have I made matters better or worse for the company?  What situations can you envision that drive up costs and leave the company worse off?

  • What Pre-1985 video game character are you?

    I took the "If I were a video game character I would be ..." test and it said I'm either a Guantlet Adventurer or a Defender Ship.

    I have to say I prefer the Defender Ship explanation (the getting lost bit is way off) - plus I loved that game...

    I am a Gauntlet Adventurer.

    I strive to improve my living conditions by hoarding gold, food, and sometimes keys and potions. I love adventure, fighting, and particularly winning - especially when there's a prize at stake. I occasionally get lost inside buildings and can't find the exit. I need food badly. What Video Game Character Are You?
    I am a Defender-ship.

    I am fiercely protective of my friends and loved ones, and unforgiving of any who would hurt them. Speed and foresight are my strengths, at the cost of a little clumsiness. I'm most comfortable with a few friends, but sometimes particularly enjoy spending time in larger groups. What Video Game Character Are You?
  • Working with a third-party menu control

    I'm starting to work with a third-party menu control by telerik.  This is a company based out of Bulgaria with an office in the US. I've used their r.a.d. menu indirectly with a webgrid product that implements the telerik product for context menu purposes.  I've been playing with the code samples and exploring their site.  So far I'm very impressed.  I especially like the control over the menu on the client-side.  The look and feel of these menus is top-notch from what I've seen so far.

    The menu samples they include with their install package are even better than what they have on their site and illustrates many ways to create the menus.  I've always had to implement menus of my own in the past, and now I can take the time to check out a third party tool and integrate it.  I'll be blogging about the experiences shortly - looking at the product as well as support and bits about their other products. 

  • Webservice Thinking - thoughts on Sahil's blog entry

    I was reading Sahil's post titled "WebServices - A WHOLE new way of thinking" and it triggered some thoughts on the subject. 

    Sahil discusses the notion that you have to wrap your head around the request/reponse model vs. a remoting/conventional OO model.  This observation is so correct.

    The differences between remoting and WebServices are significant - the biggest difference is analogous to fat-client versus web-client application design.  The first and biggest mistake is believing the WebService layer exists at the business layer - bad move! 

    One approach is to consider the WebService Interface operating at the same level as the WebUI level.  The request/response interaction is nearly identical, "session management" requirements are the same (even though they are likely to be handled differently) and you can't trust either interface. While you may decide to provide method signatures that look and feel like certain business object calls, remember that, at best, these are merely proxys to the core that also provide authentication, validation, etc..  You can use O-O design to augment the process and provide services like standard validation higher in your object hierarchy, but expect some refactoring of your existing UI related designs.

  • Effectiveness of TDD Whitepaper

    Jeffrey Palermo links to a whitepaper from the NCSU Computer Science Department titled "An Initial Investigation of Test Driven Development in Industry".  There is some very good information here as it builds on an earlier study from Muller & Hagner's work in "Experiment about test-first programming."

  • Exploring BITS and the Software Update Services

    I've been doing some work with the BITS SDK and understanding that tool a little better.  So far, I'm finding it to be fairly straight forward and efficient - but I'm not hitting a lot of traffic or scenarios at it just yet.

    After reading about Software Update Services (SUS), I wish Microsoft would open this framework so I can make the next step in my software updates.  Ultimately, I'd like to have the same capability that Windows Update provides by enabling monitoring of software updates and automatically notifying users of new updates.

    As I dig further, I'll continue blogging on what I find along the way to solving this problem.

  • Note to Self: Plugin discoveryand Reflection

    Here's a decent article on plugin discovery and reflection from Roy Osherove's blog.  The blog discusses the memory overhead issues of testing a lart number of assemblies. 


  • Roy Osherove's MSDN Article

    Roy Osherove blogs about his first MSDN article titled "Simplify Data Layer Unit Testing using Enterprise Services".  The article is a nice overview of different approaches to testing a stateful back-end data source. He has a number of good resource-type links in the article as well.

    Congrats to Roy on his first MSDN article!

  • Master Page under VS2003 - a nice writeup

     I've run across this Master-Page implementation discussion by Shams Muhktar several times over the past year.  I really like the write-up for its clarity so I thought I'd take a moment to capture it for good.

     

     

     

  • Ultramon convert

    I'm a little late to the ball game, but I finally downloaded UltraMon after reading Fritz Onion's blog.  This tools is great!  I love the spanned taskbar feature and the added window buttons for swapping apps between screens. Very nice.
  • Interview with Ken Henderson

    I just finished reading an interview with Ken Henderson over at Simple-talk.  Now I'm interested in his book "The Guru's Guide to SQl Server Architecture and Internals".  I usually look at "Guru's Guide" books to be just another marketing variation on the "Idiot's Guide" books, but this one looks promising.  Time for a book store run...


  • .Math Development Directions

    I’ve been asked by a few developers for a roadmap of where .Math development is headed.  I thought I’d put these thoughts to paper and attempt to explain my reasoning at this point.  My goal is to garner some input to the process and see if there are other approaches to this process based on other developer experiences and needs.  Here are the areas I see from where I sit:

     

    -        Feature Enhancements and Code Refactoring

    -        Speed Optimizations

    -        New language/operational implementations (Fuzzy Logic engine)

     

    Please remember, this list is not final and represents one developers view serving a few implementation uses.  I’m very interested in any feedback and adjusting this roadmap as necessary.

     

    Feature Enhancements / Refactoring

     

    Feature enhancements have currently stalled at this point.  I get the feeling the feature list for the library is fairly complete for the task at hand.  However, this is usually the time when broadsided with a cool idea.  I’m always open to new ideas and I’ll be listening to the user community for these ideas.

     

    Refactoring of the interface is largely trivial at this point. I’d like to follow internal variable naming conventions more closely and eliminate some code duplication in a few spots.  These areas have largely been eliminated, but there would be some additional areas where code can be simplified using generics in the Visual Studio 2005 version of C#. The biggest area that I feel needs refactoring is the creation of custom functions.  I feel the token identification process and instantiation of new function instances is clumsy.  On one hand this could be handled nicely by generics or pushed higher into the object hierarchy.  The current solution focused on simplicity for the developer to create new function implementations for extending the compiler, but I believe the time may be ripe to revisit this at some point.  Given that this is an open-source project, I’d like to maintain backward-compatibility to avoid breaking anyone’s current function implementations.

     

    All that said, I strongly hesitate on moving to generics as this breaks compatibility with the .Net 1.0 and 1.1 implementations of C#.

     

    Speed Optimization

     

    Speed optimization is very interesting to me as I know I can squeeze out at least another factor of 10 speed improvement on performance.  However, given the satisfaction with current evaluation performance I cannot justify the time and effort required to perform this change.  This will also directly impact the implementation of the user-defined function implementations and I hesitate to break current implementations.  I believe I have a way to use the current functions through a sort of ‘proxy’, but that needs to be fleshed out.

     

    The biggest speed optimization would come from changing the compiler from a stack-based implementation to something of a register-based machine.  This allows for the elimination of stack memory allocations for evaluating the expression and generally only becomes noticeable when running over 100 million expression evaluations.

     

    This is perhaps the most interesting area of the compiler – the .Math compiler does not appear to be a stack-based compiler, however the resulting IL looks a lot like the resultant code you’d find in such an implementation. Not to mention the fact that the IL is compiled once and the evaluation is performed by the runtime stack organization of the individual objects makes this interesting.

     

    New Language Implementations

     

    I’ve considered releasing a fuzzy logic engine that utilizes the parser and compiler structure to provide very fast evaluations of fuzzy logic sets.  While this is a fun exercise, my implementation is rather small compared to other, more complete open source sets currently available.  On the other hand, I believe the performance of my implementation will outpace most others (including the commercial tools).  I can’t really see following this trail without an economic reason to flesh out the tool to a point that will be well respected by the ‘fuzzy logic community’. 

     

    The .Math library as it stands plays a key role in the model for providing custom fuzzy membership shaping functions.

     

    Summary

     

    Those are the three issues I currently see on the .Math plate.  I would argue that feature enhancements and refactoring are priority #1, speed enhancements are priority #2 and new language enhancements are priority #3.  Enhancements and refactoring are the most likely to be completed but not on a schedule at this point.  Anyone who would like to contribute to this effort is certainly welcome.  Speed enhancements are the #2 priority because language enhancements would create a central dependency on the engine at this point and reworking speed enhancements after completing language enhancements becomes a more difficult proposition (even though #3 is more fun).

     

    Please feel free to contact me regarding this plan with questions or suggestions. I can be contacted via the project site at http://workspaces.gotdotnet.com/math or my blog site at http://codebetter.com/blogs/steve.hebert/contact.aspx.

     

  • .Math 1.01 Beta is now available

    The .Math 1.01 Beta fixes the known bugs to date. In addition, sensitivity to regional settings (specifically use of the decimal and group separators) is now an option on the EqCompiler class.  This was made optional because applications may or may not wish to be sensitive to these settings depending on operational requirements.

    The only urgent bug fix is for multi-valued functions that use 3 or more parameters.  If a value beyond the 2nd parameter is a negative constant, an exception was previously thrown.  This has been corrected and thanks go out to Ruslan Kiskinov for reporting the bug.

    Ruslan has also extended the compiler by adding financial functions to the library.  These functions are compiled and can be added to the list of available functions at runtime.  I'll be adding this as an extension pack shortly and I'd like to say thanks to Ruslan for graciously providing the code.

     

  • .Math 1.01 beta being released

    I am putting the finishing touches on the .Math 1.01 Beta for release.  I'll leave it in beta for a couple of weeks and anticipate moving to a full release in a couple weeks given no new bugs are found.  The TDD library was invaluable once again in making the core changes necessary without breaking the rest of the product.

    This includes a couple of fixes to bugs reported on the GotDotNet site and some new functionality.  I'll be rolling out this release tonight along with details to follow.

  • Identifying long running Sql Server Agent Jobs article

    Gregory Larson put together a nice code article on Database Journal on detecting long-running SQL jobs.  The code fires off an email to a designated contact when a job is running for more than 6 hours.  I could personally see a use for logging instances of a job running for more than, say, 60 minutes to a table. His code is certainly easy enough to modify.

     

     

More Posts Next page »

Our Sponsors