Blog Home  Home RSS 2.0 Atom 1.0 CDF  
The Efficient Coder - Friday, June 13, 2008
There has got to be a better way of communicating with our computers!
 
 Saturday, June 14, 2008

In a previous life I was an embedded systems programmer, there was nothing like defining the hardware, getting the boards made up, and creating the equivalent of the "Hello World" program to make sure hardware can come to life, something as simple as a flashing LED or toggling a pin and checking via an oscilloscope.  I used a language called FORTH which I still have a soft spot for.  Although probably unreasonable, I think everyone should go through this process; “programming close to the metal”; it give a completely different perspective on writing code (I ?think? a good one).

Flash forward about 13 years and I find myself doing web systems, this is not at all a bad thing.  We’ve recently went live with a site www.uspaymail.com and again my perspective is changing, perhaps it’s the problem domain in this case.  We have built the system on a solid set a of services both UI and data layer that I’ve been evolving over the past 7 years.  Therefore adding new features is relatively straight forward.  This application has also a very solid and predictable revenue model, basically if we sign up users and we sign up advertisers, our revenue is predictable.  At this point our mission statement to grow our application and thus income model is to sign up users (and keep them coming back) and advertisers, anything else is secondary, and thus the concept of “programming close to the metal” isn’t going to be referred to as making the microprocessor dance, but providing an experience for both the user and the advertiser as pleasant and rewarding as possible.  How do we do this or more importantly how do we know how we are succeeding?    First we define our currency or what metrics are important to succeeding in our goal.  These seem straight forward, but these metrics should be visible to everyone on the team.

 

·         Total number of subscribers – How many users are currently signed up

·         Total number of new subscribers per day – On each day how many new people signed up

·         Percentage of users on each day that access the site – Total number of unique users that access the site on each day over the total number of subscribers, currently we have a target of 33% but that metric still needs a little more definition.

 

 What we did for our app in our administrative console, we have a marketing section (possibly incorrectly named) that has the following charts that are live:

 

Total Site Subscribers

 

New Subscribers Per Day

Returning Users
The current day is live so the number grows through out the day)

As the techie responsible for this site, I also have a considerable number of metrics on the backend that measure application performance.  Basically these measure the time between ASP.NET page life cycle events such as Pre-Init to Init.  I’ve also instrumented our layer on top of the database to measure the time each query takes, if a query takes more than 10ms, I log that.  This will be key to keep our application snappy.

 

So now that we have our metrics, it’s very helpful in prioritizing work.  Our system at this point is 100% functional so feature can be prioritized based upon the impact they have on improving our defined metrics.  Since we have these metrics very visible, it’s easy to see if we are moving closer to the mark or we are just spending developed dollars on non-value add items.  And thus we are working close to the metal even though there are many layers of abstraction between our application and the processor.

 

As this progresses, and as I learn more about what works and what doesn’t I’ll continue to post my findings.

 

-ec

6/14/2008 1:17:13 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]    |  Trackback
 Friday, June 13, 2008

Got a great tip from listening to the pod cast at http://www.stackoverflow.com/ (if you don't subscribe you should!).  Jeff Atwood in passing mentioned a program I've been looking for, for a long time.  It's called WinSplit Revolution.  I'm big time into multiple monitors, here's a picture of my previous setup, my current one is similar, but have a 24" as my main monitor, then two 21" on each side and finally a 900x1440 off to the left.

  • My center monitor is used for editing source code editing, my primary source of revenue. 
  • Left 21" monitor has all the extra VS.NET windows such as solution explorer, output, error windows etc...
  • Right 21" monitor has the output of the project I'm working, usually have IE and Firefox open.
  • I recently added back in the far left monitor, a 900x1440 in portrait mode.  On this monitor, I've got my email and Debug View.

Anyway back to the WinSplit Revolution, this program uses a CTRL-ALT-NUMPAD KEY to position the current quadrants on the screen.

Check this one out, you won't be sorry!

-ec

6/13/2008 12:11:50 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]   Hardware | Software Engineering  |  Trackback
 Thursday, June 12, 2008

I've built some ASMX web services (yes these should be converted to WCF, but they work for now).  I'm starting to use these as Script Services for some ASP.NET Ajax Enabled pages.  I ran into a problem where some of the "stuff" I didn't want to have happen in some properties on the objects returned by the server were getting executed even though they were marked as [XmlIgnore()] which disables them for SOAP tASMX type web calls.  Apparently when the returned objects get serialized as JSON for a script service, they ignore the [XmlIgnore()] tag, which I guess makes sense but is rather inconvenient, in that I need to go back and do a manual search & change.  Within the using System.Web.Script.Serialization namespace there is another attribute you can decorate your properties with called [ScriptIgnore()] that seems to do the trick.

-ec

6/12/2008 10:07:58 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]   ASP.NET | WCF | AJAX  |  Trackback
 Wednesday, June 11, 2008

I've got a couple mobile projects that need to provide communications services to a centralized server.  Over the past year or so, I've been getting to know WCF a little better and the more I learn, the more I think this is the one by far that in all the latest Microsoft technologies, that you should invest your time in learning.  Saying that, it would seem logical to think about using WCF as the technology to communicate on our mobile devices.  I'm not sure the answer is clear to me yet on this one.

First, what do I LOVE about WCF, if I had to sum it up, I would say three things,

  1. The formality of defining and implementing contacts for our communications
  2. The ability to configure and for the most part not worry about the transport details when coding your service
  3. The ability to do duplex messaging, I still need to spend some time to see how this works under the hood from a scalability implication, but the concept in general seems powerful.

Saying that, we can make the following assumptions about the current state of mobile devices and applications:

  1. In most cases the device is going to be a client on the client/server side of the equation
  2. Our computing horsepower just isn't the same
  3. Based upon my experience in both worlds (desktop/web AND mobile devices) I would say you can crank out 3-5 lines of desktop/web code in the same time it takes to get one line of mobile code into production
  4. Code on mobile devices can't easily be updated so it really has to be right the first time
  5. As good as our mobile platforms are these days, there are still a few quirks that are beyond our control and device specific

Therefore, most of the benefits of going with WCF really aren't that great in a mobile device.  And if a technology really doesn't provide much value, it may make more sense to keep it simplest technology with the fewest moving parts.  I think as with anything new, one needs to implement and analyze the results.  As I mentioned earlier, I don't have answers here yet, but wanted to start capturing thoughts.

-ec

 

6/11/2008 7:08:05 AM (Eastern Standard Time, UTC-05:00)  #    Comments [2]   .NET 3.5 | Mobile | WCF  |  Trackback
 Thursday, June 05, 2008

I've got an awesome battery in my laptop

I wish I could find more like this

-ec

6/5/2008 7:06:10 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]    |  Trackback

Annoying VS.NET "Feature"

 

I have a fairly large ASP.NET application that has a large number ASP.NET WebParts built as Custom Controls (150+) in a compiled assembly .  I've been getting a little annoyed with VS.NET (I'm using 2008 right now, but saw the same behavior in 2005) where after I get done compiling I have to wait 20-30 seconds while VS.NET does ?something? and freezes the UI (can't ?someting? this be done in a worker thread).  Anyway I think I've finally figured out what's up, it would appear anytime I open anything that requires a designer (including an ASMX page) the tool box get's populated with all the custom controls as part of my project.  It would seem as soon as the tool box is populated it needs to be refreshed and that's what's taking the 20-30 seconds.  So therefore if I don't open anything requiring a designer, I'm OK.  I think I've gotten used to this for ASPX and ASCX pages since they normally open up in the HTML view, but I'm still clicking on ASMX and Services design surfaces and end up shutting down VS.NET and restarting without a design surface open.

 

Maybe my project isn't typical, but it sure would be nice if I could use design surfaces at some point.

 

-ec

 

6/5/2008 7:08:30 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]   .NET 3.5 | ASP.NET  |  Trackback
 Saturday, May 24, 2008

LINQ 2 SQL - SQL Server Compact Edition 3.5 - Provider Not Found

If you are working on a 64 bit machine and get the error message

Provider 'System.Data.SqlServerCe.3.5' not installed.

when you attempt to connect to your database, open your project properties and on the build tab, change your target platform to x86 and you should be back in business.

-ec

5/24/2008 5:48:29 AM (Eastern Standard Time, UTC-05:00)  #    Comments [0]   .NET 3.5  |  Trackback
 Sunday, May 11, 2008

More Help Available

I got this one while trying to spin up a 3.5 WCF Service and it made me chuckle...no comment necessary...

-ec

5/11/2008 2:33:36 PM (Eastern Standard Time, UTC-05:00)  #    Comments [0]   .NET 3.5  |  Trackback
Copyright © 2008 Kevin D. Wolf. All rights reserved.
DasBlog 'Portal' theme by Johnny Hughes.
Pick a theme: