Trying To Get My Head In The Clouds ...

by Jon Davis 29. April 2008 05:59

Just when I was about to get super excited about the next New ThingTM from Microsoft, which is the big new Mesh initiative ..

.. suddenly the Aptana team (creator of the Aptana Studio IDE, the best open source IDE for Javascript development, and creator of Jaxer, the first AJAX server) pulls another magic trick out of its hat and blows me away again!!

What's intriguing is that about a year or so ago I was blogging about some distributed-database-over-the-web mesh ideas that I had, that no one except a couple people talked to me about to comment on my ideas. I set up a wiki at (down) (.. it's back up). Frankly, it fulfilled at a technical level exactly what Microsoft is trying to achieve. But while I knew I was on the right track as to where things could go and will inevitably be going, I pulled the plug on the initiative and retracted my blog posts and wiki (but it's back up now) because, frankly, I was ashamed of my lack of qualifications. I open up distributed database theory books and cannot get past the first sentence or two, they are beyond my comprehension skills.

With regard to this mesh / cloud stuff, though, I'm just really glad that I was on the right track, even if I couldn't lay claim to fame on the ideas, try as I might have considered.

UPDATE: No.. no, no, no ..... I misunderstood what Microsoft's mesh was all about. I picked up from the MIX stuff, from articles such as I think one was in SD Times, and from blog posts, that Microsoft's mesh was about web developers. But now that they've given me an "invite", I only see the ability to connect devices, such as a PC and, later, a Mac or a mobile phone to the mesh, so that you can put files out on your own personal mesh. And I can't even use the "device" installer on my PC because it doesn't allow itself to be run in a Windows Vista environment where UAC is turned off.

I don't get it. Not what I had in mind after all. Besides, if I wanted Internet-accessible file storage, I have my choice of Groove or Subversion (the latter of which, by the way, is more handy and usable for synchronizing my files between home and than FTP or anything else I've used).

So, um, nevermind what I said about distributed databases ( ?? ) .. garbage analogy, nothing to do with this.

Currently rated 1.2 by 6 people

  • Currently 1.166667/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , ,

Computers and Internet | Distributed Database | Web Development


by Jon Davis 23. April 2008 22:05

Rob Conery, creator of the SubSonic ORM and scaffolding framework for ASP.NET, has been transparently publishing, in video format, what he understands TDD (Test Driven Development or Test Driven Design) in his presentations on the the reworking of the ASP.NET Storefront Starter Kit based on the ASP.NET MVC toolkit.

Surprisingly, the series has little to nothing to do with the storefront project. It's more of .. what I just said, Rob's transparent discovery process of TDD and keeping his process in check. That said, I thought it was a rarity among webcasts, something very much worth watching. Rob, who was recently brought into the Microsoft fold, has a way of making Microsoft look and feel human like the rest of us, using common sense and even humbly making adjustments of mindset and worldview according to the wise words of industry professionals as they give feedback. (This is something Microsoft has been getting good at lately, stepping out from their big Redmond city sized box and learning from a bit the rest of the planet, which is why I still root for them despite my relentless criticisms.)

Rob's discovery process is actually a very, very good opportunity for the rest of us to learn from. Rob came in prepared, he presented well, and the content and message are very good. While it was mostly review for me, TDD brings about such a different mindset to software that I feel like I need as many such "reviews" as I can find so that I can get it ingrained and rooted in my mental patterns.

That said, I am still greener than I want to be at ASP.NET MVC. This is just an issue of experiece; we're using it at work but I haven't been given the opportunity to implement, the other fellows have. Same with SubSonic.

I'm a big fan of SubSonic. I like its approach to ORM and its scaffolding.

Lately, though, I've been touching a bit with one of the software industry's best kept secrets among rediculously handy ORM solutions, and that is EntitySpaces. Mike Griffin's work with ORM tools has been around longer than Rob Conery's, and I've admired his work with both MyGeneration (a free, open source, and in many ways much better alternative to CodeSmith) and EntitySpaces for a couple years now. EntitySpaces is still pioneering in the ORM space, they've had a super-sweet ORM query object model that has been around and in production for much longer than SubSonic's recent "super-query" tweaks, which are still in beta. Makes us all wonder ...

Rob Conery

Mike Griffin

Aside from the additional fact that ES works cleanly and happily on the Mac and on Linux with Mono, and aside from the additional fact that SubSonic is less about ORM and more about "building web sites that build themselves" (not everyone is building ASP.NET web sites, some people are writing software and just need a focused ORM solution), one thing I'm noticing recently about ES that makes it stand out from a lot of the other solutions out there is that an investment in ES on the server side is a really smooth and effortless transition to the client when you throw WCF in the mix, if all the client needs is the data models. The WCF proxy support in MyGen+ES makes client/server integration over WCF a snap. Part of this magic is also in Visual Studio, when you right-click References and add a Service Reference, the proxy objects are brought over from WSDL or a WSDL equivalent proxy definition, and you can begin coding on a seemingly rich object model on the client right away.

For me when I was tinkering with ES over WCF, being still green to ES, this brought TDD (actually integration testing) back into the picture. I found myself taking what I learned from Rob Conery on TDD and designing my services by executing tests--specifically, integration tests, which isn't pure TDD but I trusted WCF. I kind of had to; I needed to invoke the interfaces so that I could step through the debugger and introspect the objects and see what was going on under the covers as I was invoking code over the wire. This isn't pure TDD by principle but it is "test driven design" in the sense that I was finding myself writing tests that simulate real-world behavior in order to design how I want the code to function.

TDD, meanwhile, has made me think a lot about what I wrote half a year or so ago about Design Top-Down, Implement Bottom-Up. I didn't get much feedback on that post, but I, too, was being transparent with what I thought was a good idea. My word choice in that pattern seems foreign at first to TDD principles, if not contradictory, but the more I think about it the more I think it is actually very much complimentary.

  • In TDD, the tests simulate, by way of invocation, the top-down design and verify the bottom-up implementations, and
  • The implementations are kept in check by these simulations of top-down usage.

So I think TDD is really the glue, or a type of glue, that makes Top-Down-Bottom-Up work. I think the only big differences in perspective here are physical; TDD's perspective is a "I poke at you first, before you yelp", or forwards, perpective, Top-Down-Bottom-Up assumes that encapsulation is a layer, and the priority in the design process, over the implementation. (Or something.) It's all pretty much the same thing. And actually, while TDD validates the Top-Down-Bottom-Up process, TDBU validates TDD, too, because done right it uses TDD to prove out the stability and rock-solid implementation of an end product.

I'm feeling now like haacking (pun intended, for those who know) together a SuperText blog engine using a mish-mash of funzy geek stuff I want to keep pushing myself with including ES, ASP.NET MVC, TDD, REST, WCF, VistaDB, Silverlight, Javascript/AJAX, and Internet Explorer. Just kidding, I won't use IE ...

... not that I haven't built a complete blogging solution before.

Not To Make Fun Of Anyone, But ..

by Jon Davis 23. April 2008 12:32

When I listen to ..

.. images of ..

.. flash in my head. I keep waiting for the music to start. (I loved the motion picture films!!)

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Bank ATM Innovations?

by Jon Davis 20. April 2008 21:57

When I moved to Scottsdale, I was introduced to automated check-out counters, where I scan my items in, including produce, then pay with my card, and then I leave, no human interaction required. (Someone is always watching, though, 4 counters at a time.)

But I was just blown away today by my bank's ATM machine (at Chase Bank). Very seldom do ATM machines impress me. Bank ATMs are usually 5 to 10, sometimes 20 years behind the times when it comes to technology. Usually banks just give their machines facelifts--prettier graphics, crisper displays, and a few more words and details on the displays. But apparently over the last few weeks my bank replaced their ATM machine with a "new and improved" machine that, frankly, raises the bar about five notches.

Even Smarter Than A Human Teller

I rarely deposit checks, but when I did, I used to kinda cheat. I'd fill out the deposit slip, leaving the checking account number blank (because I didn't know it, and I didn't have a blank checkbook anywhere handy when going to the bank), and then I'd stuff it in the envelope and stuff it into the ATM. I'd always hear some dot matrix printer pounding something out on the envelope, so I always figured it printed my account number on the envelope. The deposits would always clear when I deposted this way, even though soon after I started doing this I started seeing a big sign (which I ignored) taped up above the ATM saying, "To minimize the chances of delays processing your deposit, please include your checking account number with your deposit." I actually didn't care about delays. And when I go in in person, they have no problem with looking up the checking account number themselves (using my ATM card).

Well today, apparently the bank figured out how to deal with troublemakers like me. They used technology.

I inserted my card, and they said, "Insert your check(s) into the slot. You can stack up to 20 checks at a time." Wha?! Insert my check(s)?! No deposit slip?? No envelope?! I stuck my check into the slot and it sucked it in. (It rejected it at first, but I had it in backwards.)

The machine then proceeded to scan my check, OCR'd the value of the check, displayed the scanned image to me, and asked me if it determined the value correctly! There was the check I just deposited, looking right back at me on the screen, with "Please confirm that the value of this check is $__, YES/NO".

As if to add a cherry on top of my sundae, when I was finished, it printed the scanned image of the check onto my receipt!!

If banks keep this up, they just might make banking funner than my deposits' value.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

General Technology

LizardTF: TortoiseSVN Equivalent For Team Foundation Server?

by Jon Davis 20. April 2008 15:29

I just restored my svn server at home this weekend--apparently after rebuilding my HTPC a couple months ago I forgot to restore my personal svn server--and after checking in my own bits, I also checked out some SourceForge code bits using TortoiseSVN. So then I was looking for TortoiseSVN-like Explorer integration of Team Foundation Server so I could do some source code check-outs from CodePlex.

I found an open souce upstart called "Turtle" whose name was apparently so controversial that it seemed to have been buried in its name's confusion. Then I found DubbleBock, and from there I found LizardTF. This is something to watch.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Software Development

Migrating Back To Software

by Jon Davis 20. April 2008 13:19

If anyone is reading this, you can feel free to skip this post as it's just a boring "outburst" of the refactoring of my intentions here. 

For the last few months I've been taking a vacation from software and focusing on the distraction of Javascript. That was fun, but I'm feeling a bit burned out, particularly since there is little "return" (not counting the surprising popularity of my jqalert and using.js, the first of which I seriously need to revise, refactor, and reskin). I've been approaching these Javascript mini-projects for mostly "edutainment" reasons, although a lot of it has found its way into how I'm devising solutions on the web at the office.

But I want to work my way back to my first love, which is software development. Javascript only barely meets the description. Javascript is fast becoming what makes the world [wide web] turn, but below that, you have apache, IIS, and web browsers. I want to keep tinkering with those--learn how to create apache modules, learn how to write IIS 7 modules on each part of the IIS 7 pipeline--as well as what's below that: the OS. Today I downloaded the source code for SharpOS and ran it .. wow, now I'm getting excited!

I also need to continue to master data services (besides continued growth in MS SQL Server, LINQ, *yawn* ADO.NET, mySQL, and continued understanding of the science of distributed data services, I also want to get familiar with Vista DB and possibly participate in SharpSQL development).

I need to continue to grow my understanding and practical implementations of TDD and agile development, and I'd like to start cracking open my software project management books as I seriously want to lead software teams in a few years. (I've had dreams of trying, for a second time, to start a software company, but with capital for a change.)

And I work a day job not just to pay the bills but to keep learning, through the successes and failures of my employers, how to run a business.

I want to continue to be proficient in many things, expert in some (rather than a jack of all trades, master of none -- and in software technology it is not even as ideal to be good at only one or two things unless you're really, really good, which I suppose I will never be). The reasons are three: 1) the full spectrum of web and software technologis is exciting, fun, and fulfilling to delve into at every level, 2) having a strong understanding of the bigger picture makes me much more valuable and productive as a software and web engineer (ultimately I dream of being one of the best software consultants in the world .. you know what happens when you aim for the moon .. you reach the sky!), and 3) leading software and web teams, and being dang good at it, is my long-term goal, even if that's still a decade out.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5


Addendum 1 to Lists Of Microsoft's Fame And Shame - 2008

by Jon Davis 19. April 2008 10:27

After posting my blog article, "Lists of Microsoft's Fame and Shame - 2008", I knew going in that there were some things I was going to miss, on both sides (fame and shame).

There's one thing that I'm a little disgusted with myself for forgetting, and that is:


  • SVN (Subversion)
    • Nothing makes it seem to the software community more so than SVN that Microsoft "knows" software from only the confines of their own innovations and culture. On this technology alone, it sometimes seems like they live in a box and engineer in a cave.
    • Visual Source Safe is not version control. It's change control. The difference is as much cultural as it is functional; think a bunch of productive engineers in an agile group ("update", "OK, merged"), versus a bunch of wedgie-suffering tightwads in a red tape overwhelmed corporation ("can you please check that in so I can edit some of the code?")
    • I tried and failed to install Team Foundation Server three times and never got it right. The list of steps is a full page long, and each step takes several minutes of installing stuff -- set up Windows, figuring out whether or not to set up Active Directory, set up SQL Server Std. (not any version but Standard!), set up Windows SharePoint (don't confuse it with Office SharePoint! Don't confuse the version number!), optionally configure SharePonit for Active Directory, etc., etc. In the end, I always had something up and running, but when I would go load the SharePoint intance up in a web browser it would give me some stupid IIS error. Was I not supposed to hit it with a web browser? I don't know; the Help file didn't say.
    • I don't consider mysef a genius, and I don't consider myself a moron either. I consider myself having slightly-better-than-average intelligence. I think my I.Q. was measured 115 when I was a kid, whoopty doo. But I can set up SVN server and SVN client (w/ TortoiseSVN) without a lot of effort, as well as a few free issue tracking web sites like Gemini. I don't have Visual Studio integration (but you can use Ankh or Visual SVN), but I do have version control and a tracking system.
    • This blog post is very telling of the whole cultural situation over there in Washington.

Currently rated 1.3 by 3 people

  • Currently 1.333333/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Lockup by AJAX is unacceptable

by Jon Davis 13. April 2008 02:59

Brower Vendors: Please Add This To Your Unit Tests  

Currently rated 1.0 by 2 people

  • Currently 1/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Javascript: Introducing Using (.js)

by Jon Davis 12. April 2008 22:37

UPDATE: This is now managed on GitHub and this blog article is now obsolete. See you on GitHub!

I'm releasing v1.0 of using.js which introduces a new way of declaring dependency scripts in Javscript.

The goals of using.js are to:

  • Seperate script dependencies from HTML markup (let the script framework figure out the dependencies it needs, not the designer).
  • Make script referencing as simple and easy as possible (no need to manage the HTML files)
  • Lazy load the scripts and not load them until and unless they are actually needed at runtime  

The way it works is simple. Add a <script src="using.js"> reference to the <head> tag:

    <script type="text/javascript" language="javascript" src="using.js"></script>
    <script type="text/javascript" language="javascript">
      // your script here
  <body> .. </body>

Then in your script, register your potential dependencies. (These will not get loaded until they get used!) 

using.register("jquery", "/scripts/jquery-1.2.3.js"); 

Finally, when you need to begin invoking some functionality that requires your dependency invoke using():

using("jquery"); // loads jQuery and de-registers jQuery from using
$("a").css("text-decoration", "none");

using("jquery"); // redundant calls to using() won't repeat fetch of jQuery because jquery was de-registered from using
$("a").css("color", "green");

Note that this is only synchronous if the global value of using.wait is 0 (the default). You can reference scripts on external domains if you precede the URL in the using.register() statement with true and/or with an integer milliseconds value, or if you set the global using.wait to something like 500 or 1000, but then you must write your dependency usage scripts with a callback. (UPDATE: v1.0.1: Simply providing a callback will also make the load asynchronous.) No problem, here's how it's done:

using.register("jquery", true, "");
using("jquery", function() {
  $("a").css("text-decoration", "none"); //async callback

Oh, and by the way, using.register() supports multiple dependency script URLs.

using.register('multi', // 'multi' is the name
    '/scripts/dep1.js', // dep1.js is the first dependency
    '/scripts/dep2.js'  // dep2.js is the secon dependency

UPDATE: I just mostly rewrote using.js. Now with v1.1 you can now add subdependencies, like so:

using.register('jquery-blockUI', true,

Basically what the new .requires() functionality will do is when you invoke using('jquery-blockUI'); it will also load up jquery first.

UPDATE 2: With v1.2 I've added several new additional touches. Now you don't *have* to declare your subdependencies with using.register(), you can just say:

using('jquery', 'jquery-blockUI', function() {

This assumes that jQuery and blockUI have both been registered, the latter without the .requires('jquery') invocation.

That said, though, you don't even have to call .register anymore if you don't want to:

using('url(', function() {

There are also two new features that *should* work but I haven't written tests yet:

  1. using.register([json object]); // see using.prototype.Registration
    • object members, and the arguments for the compatible using.prototype.Registration prototype function, are both:
      1. name (string)
      2. version (string, format "1.2.3")
      3. remote (boolean, true if external domain; invoke requires callback)
      4. asyncWait (integer, milliseconds for imposed async; invoke requires callback)
      5. urls (string array)
  2. Registration chaining:
    • using
        .register("myScript", "/myscript.js")
        .register("myOtherScript", "/myotherscript.js").requires('myScript')
        .register("bob's script", "/bob.js");

UPDATE 3: v1.3 fixes the using('url(..')) functionality so that a script loaded this way is remembered so that is not fetched again if the same URL is referenced in the same way again. This is the reverse of the using.register() behavior, where if a script is loaded its registration is "forgotten". Also made sure that multiple script URLs listed in using('url(..)', 'url(..)'), function(){}); is supported correctly.

If for some strange reason you want the script at the same URL to be re-fetched, try this unsupported hack that might not be available tomorrow:

using.__durls['http://my/url.js'] = undefined;

UPDATE 3.1: V1.3.1 should hopefully fix the "not enough arguments" error that some Firefox users have been having. I was never able to reproduce this, but I did discover after doing some research that Firefox supposedly expects null to be passed into xhr.send(). I guess some systems suffered from this while I didn't. At any rate, I'm passing null now.

UPDATE 3/29/2009:

It is very unfortunate, guys, that the script loader in using.js doesn't really work as designed across all major browsers anymore. The demos/tests on the using.js page have erratic results depending on the browser--they all work fine in current Internet Explorer, but half the tests fail on Safari now, and FF has inconsistent results especially with Firebug installed (actually it's not that bad, Safari 4 beta only fails the "retain context" test which is a minor issue, and FF fails about two tests)--but most of this Firefox's failures was not the case when using.js was implemented. It seems as though the browser vendors saw what using.js was taking advantage of as an exploit and started disabling these features.

Pretty soon I'm hopefully going to start looking at all the incompatibilities and failure points that have arisen over the last year to make using.js more capable. In the past I always took pride in building in standalone isolation from jQuery, but I'm using jQuery everywhere now, and jQuery has its own script loader, which apparently works or else it wouldn't be there (haven't tried to use it). That said, though, a port of using.js to jQuery's loader might make sense; the syntactical sugar and programming-think of using.js goes beyond just late script loading, it's more about dependency-checking and load history, and that part being just pure Javascript is NOT broken in the browsers.

UPDATE 3/9/2010:

All of the modern browsers (Chrome, Webkit/Safari, Opera 10.5, IE8) except FF 3.6 now pass all the tests! I figured out what was wrong with Webkit and Opera not handling the "retain context" test properly. It turns out that window.eval() and eval() are not one and the same. The test now invokes eval() instead of window.eval(), and passes.

FF 3.6 still fails two tests: The "no callback" test (XHR is not behaving) and the multiple dependencies test; I'll look into it and follow up with Mozilla.

UPDATE 9/19/2012:

Using.js is now on GitHub! Thanks for all your comments, thumbs-up, and support!

If you have bug reports or suggestions, please post comments here or e-mail me at

kick it on

Currently rated 4.5 by 22 people

  • Currently 4.454545/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Software Development | Web Development

Quote Of The Day: "You're Thinking At 15 Frames Per Second ....."

by Jon Davis 11. April 2008 22:20

I was looking over the shoulder of a new young co-worker today, and after he committed to TortoiseSVN I thought saw him cancel. He replied with the best quote I've ever heard. "Huh? What are you talking about? I clicked 'OK'. You're thinking at 15 frames per second, I'm thinking at 30."

Sad thing is he's probably right, at 31 yrs old I'm probably slowing down a bit. I got pwn3ed by the new guy!

'Nother co-worker overheard and muttered (something along the lines of), "You're bumpy like Flash, I'm smooth like Silverlight!"

Currently rated 5.0 by 1 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,


Powered by BlogEngine.NET
Theme by Mads Kristensen

About the author

Jon Davis (aka "stimpy77") has been a programmer, developer, and consultant for web and Windows software solutions professionally since 1997, with experience ranging from OS and hardware support to DHTML programming to IIS/ASP web apps to Java network programming to Visual Basic applications to C# desktop apps.
Software in all forms is also his sole hobby, whether playing PC games or tinkering with programming them. "I was playing Defender on the Commodore 64," he reminisces, "when I decided at the age of 12 or so that I want to be a computer programmer when I grow up."

Jon was previously employed as a senior .NET developer at a very well-known Internet services company whom you're more likely than not to have directly done business with. However, this blog and all of have no affiliation with, and are not representative of, his former employer in any way.

Contact Me 

Tag cloud


<<  May 2021  >>

View posts in large calendar