Rockford Lhotka's Blog

Home | Lhotka.net | CSLA .NET

 Wednesday, January 23, 2013

This is a good type of exercise - light-hearted demonstrations of the (usually) subconscious gender bias that occurs in our industry.

http://www.newstatesman.com/sci-tech/2013/01/roll-first-annual-objectify-man-tech-day

Wednesday, January 23, 2013 9:40:33 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, January 18, 2013

Note that this is one post in a series. Make sure to read them all. This post provides an index to the set.

I’ve been doing a lot of research around the possibility of building business apps for Windows 8 (WinRT) – focusing a lot on deployment.

The short story with deployment is summarized in this table:

  On Domain Not on domain
Windows RT n/a w/ key
Windows 8 n/a n/a
Windows 8 Pro w/ key w/ key
Windows 8 Ent yes w/ key

The “yes” designation means you can deploy to these devices at no additional cost for licensing. You will still need to figure out how to actually push the apps to the Windows 8 Enterprise computers. The options are the same as what follows where I discuss the “w/ key” designation.

The “w/ key” designation means you need to buy a $30 side-loading product activation key that is per device, and which is non-transferable. So to side-load apps on your Surface RT (for example) you need to buy a $30 key. These keys come in packs of 100, so the minimum price is $3000.

Also, you need a way to actually deploy your app. Your options include:

  • Sneaker-net with a USB key
  • Run a PowerShell script from a network share
  • Deploy via System Center (assuming you have this level of IT infrastructure)
  • Deploy via InTune, Microsoft’s cloud service, where they even provide you with a ‘corporate marketplace’

Of the four, I suspect most organizations will laugh at sneaker-net and having their users run ps1 scripts, leaving the last two options. I also suspect a lot of orgs can’t use System Center, at least when deploying to BYOD and home user devices. Beyond which, if you use System Center and want a corporate marketplace you’ll have to write that yourself. At normal consulting costs I suspect that’ll cost between $50,000 and $100,000 to build and get deployed in your organization.

Update: There is an InTune add-in for System Center. That add-in allows the use of the corporate marketplace WinRT app, and it costs $4 per device per month (plus the cost of SCCM of course).

So this leaves InTune as a primary option. InTune costs $6 per device per month.

Update: There is a more comprehensive $11 per device per month InTune subscription as well.

Let’s assume that your organization has 100 Windows RT or Windows 8 Pro devices, so you buy $3000 worth of side-loading keys. And let’s assume you use InTune. Finally let’s assume your devices have a 3 year life – which is pretty typical for corporate devices where you buy a service agreement from Lenovo or Dell or another vendor.

These 100 devices will cost $3000 for keys, plus $6 per device per month. This means that your org with 100 devices will pay around $23,000 extra to deploy a WinRT app just for this licensing.

image

Money you won’t pay if you use WPF or web technologies to build the app. As a result, you have to ask yourself if there’s an additional $23k of value provided by WinRT that you can’t get via WPF or a browser-based solution, otherwise targeting WinRT makes no sense.

Does anyone have other insight into the costing? Any holes in my logic that makes this sound more sane?

I’ve put the calculator spreadsheet on my SkyDrive for those who care to play around with it.

Friday, January 18, 2013 3:30:31 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [6]  | 
 Wednesday, January 16, 2013

The OneNote app for WinRT (Windows 8 native) is quite nice. And it makes it smooth and easy to interact with notebooks stored on SkyDrive.

What it doesn’t make easy is to open a notebook stored on a SharePoint site. Today I finally figured out how to open a SharePoint-hosted OneNote notebook in the WinRT version.

Put the OneNote notebook file(s) into a SharePoint sub-folder in a shared document library. The name of the sub-folder matters, because this is the name that will appear for the notebook in OneNote.

Create a string URL like this (using NotePad or something like that):

onenote:http://sharepointsite.com/sharepointsite/Shared%20Documents/MyNoteBookFolder

Then open the WinRT version of IE and attempt to navigate to that URL. This will open the WinRT version of OneNote and you’ll probably be prompted for your domain credentials. Sign in and let OneNote find and open the notebook file(s) from that folder.

You’ll now see that folder name (“MyNoteBookFolder” in my example) as a notebook on the far left-hand side of the screen.

This could be a whole lot smoother if the OneNote app actually integrated with SharePoint, but it is a decent workaround for now.

Wednesday, January 16, 2013 6:12:19 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  | 
 Thursday, December 20, 2012

A colleague of mine at Magenic recently posted on how to deploy and debug a WinRT app on a Surface RT.

Another alternative is to install the app onto the Surface device via PowerShell. This won’t attach the debugger, but is often an appropriate solution for people who are just testing the app (QA testers, colleagues willing to provide feedback, etc.).

This is a multi-step process. At a high level it goes like this:

  1. Developer packages the WinRT app to a folder on their hard drive, then puts the package on a network share or USB key, etc.
  2. Tester unlocks PowerShell on their device (this is a one-time thing)
  3. Tester gets the WinRT app package and runs a PowerShell script to install the app on their device

Creating the Package

The developer needs to create a distributable package for the app. This is done by right-clicking on the WinRT project in the Visual Studio solution explorer, and choosing Store –> Create App Packages.

image

This brings up the Create App Package wizard. The first question is whether you want to deploy the the store, and the answer in this case is No.

Next, you’ll be asked where to create the package, how to create the package version number (different from the app version number) and what platforms to target.

image

The Neutral architecture in Release (Any CPU) allows testing on Intel and ARM devices.

When the Create button is clicked, the project is built and packaged, with the results placed in the specified folder.

image

The top level folder contains an appxupload file that you can safely ignore (it is used for uploads to the store). It also contains a sub-folder with the actual app package.

image

These are the files you must make available to the tester. You can put these files on a network share, a USB key, a SkyDrive folder, or any other location where the tester can gain access. The Add-AppDevPackage.ps1 file is the PowerShell script the tester will run to install the app.

Unlocking PowerShell

The tester’s device must be able to execute PowerShell scripts before they can install the app. By default PowerShell has security settings that prevent scripts from executing. This TechNet article discusses running PowerShell scripts. In summary, you need to open PowerShell as Admin and run this command:

Set-ExecutionPolicy unrestricted

Be aware that this allows execution of any script, so you do assume some risk by enabling this policy.

Once this has been done your test device is now able to install WinRT apps by executing the PowerShell script generated by Visual Studio.

Installing the App

On the test device you must have access to the contents of the package folder created by the developer in Visual Studio. You might get those files from a network share, a USB key, or other location.

Simply execute the Add-AppDevPackage.ps1 file in PowerShell to install the app.

The script will ask permission to run.

image

If this device does not have a side-loading unlock key (MAK or developer key), you will be asked if you want to get a developer key. You should answer yes and walk through the wizard to get a developer key for this device. This step will require you to enter your Microsoft Account email address and password. The resulting key will expire after a short period of time (currently three months).

The PowerShell script will then ask for permission to install the certificate for the app. If you’ve already installed the certificate (perhaps you are installing a newer version of the same app) the script will skip this step.

image

image

Once the certificate is installed, the script will install the WinRT app itself.

image

At this point the WinRT app is installed and its tile should appear on the start screen along with all other apps installed on this device.

The user may now run the app like any other app.

Once the developer key for this device expires the app will stop working. Obviously the intent of this installation approach isn’t for the user to run the app forever, but rather so they can test it and provide feedback during the development process.

Thursday, December 20, 2012 12:06:59 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  | 
 Wednesday, December 19, 2012

This is something I use from time to time, and I thought I’d post it here so I can more easily find it next time I need the code.

This is an IDataReader implementation that reads in comma-separated value files. Probably incomplete, but it works well in the scenarios where I’ve needed it.

using System;
using System.Data;
using System.IO;

namespace Csla.Data
{
  public class CsvDataReader : IDataReader, IDisposable
  {
    private StreamReader _file;
    private string[] _headers;
    private string[] _line;

    public CsvDataReader(string filePath)
    {
      _file = File.OpenText(filePath);
      Read();
      _headers = _line;
    }

    public void Close()
    {
      _file.Close();
      _file.Dispose();
      _file = null;
    }

    public int Depth
    {
      get { throw new NotImplementedException(); }
    }

    public DataTable GetSchemaTable()
    {
      throw new NotImplementedException();
    }

    public bool IsClosed
    {
      get { return _file == null; }
    }

    public bool NextResult()
    {
      return false;
    }

    public bool Read()
    {
      var result = !_file.EndOfStream;
      if (result)
        _line = _file.ReadLine().Split(',');
      return result;
    }

    public int RecordsAffected
    {
      get { throw new NotImplementedException(); }
    }

    public void Dispose()
    {
      if (_file != null)
      {
        _file.Dispose();
        _file = null;
      }
    }

    public int FieldCount
    {
      get { return _headers.Length; }
    }

    public bool GetBoolean(int i)
    {
      return Boolean.Parse(_line[i]);
    }

    public byte GetByte(int i)
    {
      return Byte.Parse(_line[i]);
    }

    public long GetBytes(int i, long fieldOffset, byte[] buffer, int bufferoffset, int length)
    {
      throw new NotImplementedException();
    }

    public char GetChar(int i)
    {
      return Char.Parse(_line[i]);
    }

    public long GetChars(int i, long fieldoffset, char[] buffer, int bufferoffset, int length)
    {
      throw new NotImplementedException();
    }

    public IDataReader GetData(int i)
    {
      throw new NotImplementedException();
    }

    public string GetDataTypeName(int i)
    {
      throw new NotImplementedException();
    }

    public DateTime GetDateTime(int i)
    {
      return DateTime.Parse(_line[i]);
    }

    public decimal GetDecimal(int i)
    {
      return Decimal.Parse(_line[i]);
    }

    public double GetDouble(int i)
    {
      return Double.Parse(_line[i]);
    }

    public Type GetFieldType(int i)
    {
      throw new NotImplementedException();
    }

    public float GetFloat(int i)
    {
      return float.Parse(_line[i]);
    }

    public Guid GetGuid(int i)
    {
      return Guid.Parse(_line[i]);
    }

    public short GetInt16(int i)
    {
      return Int16.Parse(_line[i]);
    }

    public int GetInt32(int i)
    {
      return Int32.Parse(_line[i]);
    }

    public long GetInt64(int i)
    {
      return Int64.Parse(_line[i]);
    }

    public string GetName(int i)
    {
      return _headers[i];
    }

    public int GetOrdinal(string name)
    {
      int result = -1;
      for (int i = 0; i < _headers.Length; i++)
        if (_headers[i] == name)
        {
          result = i;
          break;
        }
      return result;
    }

    public string GetString(int i)
    {
      return _line[i];
    }

    public object GetValue(int i)
    {
      return _line[i];
    }

    public int GetValues(object[] values)
    {
      throw new NotImplementedException();
    }

    public bool IsDBNull(int i)
    {
      return string.IsNullOrWhiteSpace(_line[i]);
    }

    public object this[string name]
    {
      get { return _line[GetOrdinal(name)]; }
    }

    public object this[int i]
    {
      get { return GetValue(i); }
    }
  }
}
Wednesday, December 19, 2012 10:00:22 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, December 07, 2012

The Silverlight.net web site is apparently now gone, merged into the broader msdn.com ecosystem (where it belonged in the first place imo):

http://www.zdnet.com/microsoft-pulls-the-plug-on-its-silverlight-net-site-7000008494/

As we’ve known now for a long time, Silverlight is “dead”. It is in support mode and will be for a decade.

Just like Windows Forms has been since 2005, and WPF is now as well (do you really think Microsoft is going to divert money from WinRT to do anything with WPF at this point??? If so I’ve got this beachfront property for sale…).

As an aside, ASP.NET Web Forms also “died” in 2005, but recently got a major infusion of money in .NET 4.5 – showing that even a “dead” technology can receive a big cash investment sometimes – though it still isn’t clear that this will be enough to breath any new life into Web Forms for most organizations. I suspect it is more likely that this recent investment will just allow organizations with massive Web Forms sites to keep them limping along for another 5-10 years.

If a technology is defined as “dead” when its vendor stops enhancing it and starts maintaining it while they put most of their money into the future, then I must say that I’ve spent pretty much my entire ~25 year career working on dead technologies. And it has been fun! Smile

Although some of us tech geeks like to jump to the next potential upcoming thing, the people who actually fund software projects rarely want to accept that kind of risk. They generally prefer to build applications on stable technology. Most stable technology is “dead” or “dying” based on this idea of “live” technology being rapidly changing and evolving.

Obviously there’s a fine line here.

Target stable technology that is too old and you really are in trouble. Windows Forms is an example of this, because its underlying technology has no migration path to a WinRT future. Although a lot of organizations have massive investments in Windows Forms, I would hope that they’d shy away from starting new development on this extremely stable, but now too old, technology.

Target stable technology that is new, but old enough to be stable and life is generally pretty good. WPF and Silverlight (for smart clients, not for cross-platform RIA) are examples of this. The reason is that these technologies (especially Silverlight) have a good migration story to a WinRT future. A lot of organizations are investing in WPF, and that’s good. But I’d be shocked if Microsoft invests anything in WPF going forward – its future is the one Windows Forms has enjoyed since 2005 – stable maintenance of the technology. Perfect for building critical business apps. Organizations also have large investments in Silverlight, and as long as the intent was smart client development (not cross-platform RIA) it seems to me that they are in the exact same place as everyone using WPF. Arguably better, because Silverlight is much closer to WinRT than WPF.

http://magenic.com/Portfolio/WhitePaperWindows8DevelopmentPlatform.aspx

If you are using Silverlight for cross-platform rich web development, then I do agree that the news is not good. The current alternative appears to be HTML 5, though it is also clear that this is an expensive alternative with an unsure future. Just like every other silver bullet to write once and run anywhere, I think you have to go into such a venture expecting a lot of cost and pain. There’s no widely successful example in the history of computing that indicates otherwise…

The final option is to target “live” technologies. You know, the ones where vendors are dumping huge amounts of money, and where the technology and platform are changing rapidly. Things like HTML 5 and WinRT are examples of this. As a tech geek I love it when organizations want to do this sort of thing, because the challenge is high and we all get to learn a lot of new stuff. Of course the development costs are also quite high because we’re getting paid to learn this new stuff. And the overall costs for the software are high because the technology/platform isn’t stable and the app probably needs to be rewritten (in whole or part) every few months to deal with platform changes.

Some organizations are willing to accept the costs and inconvenience associated with using “live” technologies. But most organizations don’t have the time or money or risk tolerance, and are far better off targeting “dead” technologies like WPF and Silverlight. They just need to be careful to have strategic migration plans so they can get off those technologies before they reach the point of where Windows Forms is today.

Friday, December 07, 2012 11:23:33 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [6]  | 
 Sunday, November 25, 2012

There’ve been a variety of articles and blog posts about the Microsoft Surface, with people expressing pleasure or disappointment as they’ve played with the device.

I thought I’d share my experience with the Surface RT, having now used it for a few weeks.

First though, it is important to understand that I’ve been running Windows 8 full time for months on my laptop and on my Intel-based tablet. When I started running Win8 I consciously chose not to run any of those apps to make Win8 act more like Win7. I never tried to make WinXP look like Win98, or Win7 look like WinXP, so why would I try to make Win8 look like an obsolete OS? Embrace the new, that’s my view!

Also, it is important to understand that I had an iPad at the beginning. That was comparable to the Surface, in that there were basically no iPad apps – just the ability to run iPhone apps on the iPad, which was a really lame experience. So my iPad experience was that the device was reasonable for web browsing and limited entertainment, but had no practical value at all – because it had no Office, or Lync, or other useful apps. I fully appreciate that now, years later, the iPad does have useful apps and can be useful for something other than entertainment and games. But it is important (I think) to appreciate that my iPad experience is directly analogous to my Surface experience – I used both at the start of their existence. (as an aside, I gave my iPad to my wife, because I saw no reason to lug around another entertainment device as I travel)

Given that background, I’ll start by saying that I use my Surface RT every day. A lot. And I like it. I do also find it frustrating at times.

I find it useful for web browsing, entertainment, and productivity.

From an entertainment perspective, it has a bunch of games, it has Netflix and Hulu and Xbox music/video. And it browses the web, which is also entertainment. The only thing I’m missing is Amazon streaming video, which is Amazon’s loss in terms of competing with Netflix/Hulu, so they better get a WinRT app out ASAP or they’ll probably lose me as a Prime customer. Not a customer totally though, because I’m a Kindle addict and occasionally use the Kindle app on the Surface. I still prefer my Kindle Touch though, because eInk is way superior to the shiny-screened Surface or iPad.

From a productive web browsing perspective I find IE10 to be just fine. I am able to use all the sites I need for work, including msdn.com, SharePoint, yammer, skydrive, Google drive, etc. The browsing experience is generally fast enough to be pleasant, with the exception of yammer’s text editing where they run really intensive js scripts for every keystroke. I haven’t tried their site on the iPad, but I suspect it is laggy there too due to this intense use of scripting.

In terms of pure productivity, the Surface is pretty good. I use Word and Excel pretty much daily, reading and editing documents from SkyDrive and collaborating with colleagues on projects. Lync and Skype both work well for telecom (which is important because Magenic’s entire “phone system” is Lync). I’ve used PowerPoint a little, but generally find editing presentations to be easier when using a full-size keyboard/mouse and my big monitors on my main computer. Using Word and Excel on the Surface (with its keyboard) is perfectly fine though, and I use those apps a lot.

I also use OneNote a lot. Much of my life exists in Outlook and OneNote. As a result the Surface provides me with access to much of my life through OneNote. I use the WinRT app, and I’m not sure I’ve even run the OneNote app from Office on my Surface.

The apps I have running on every one of my Win8 devices include:

  • Office
  • OneNote for WinRT
  • Tweetro
  • Skype
  • Lync
  • Feed Reader
  • Remote desktop
  • News/Weather/Stocks
  • Xbox Music/Video
  • Netflix
  • Hulu
  • Youtube player
  • Khan Academy
  • Calc
  • File Manager
  • TED Talks HD
  • All My Storage (at least until there’s a real DropBox app)
  • Bing

What is missing, and this is a big hole for me, is Outlook. The email client in Win8 is pretty lame. Perhaps adequate for casual email use, but not remotely adequate for productivity users. It has poor calendar integration, no Lync integration, no flagging of emails. It just isn’t even close to Outlook. Similarly the Calendar app on Win8 is lame. Well, it is worse than lame – it is really hard to read or use. Again, it also has no Lync integration and is largely useless for ‘real work’. Although I do use both the email and calendar apps, the experience is frustrating at best.

Similarly, the WinRT Lync app doesn’t compare to the real Lync client on an Intel machine. It is a limited subset of functionality. Fine for making and receiving calls, but extremely poor for collaboration scenarios where you need to share your screen.

I do wish that the SkyDrive app supported interaction with shared folders. When I’m collaborating with people on projects we often use shared folders in SkyDrive, but the SkyDrive app for WinRT doesn’t understand that concept, forcing me to drop into the browser to access those documents.

Finally, there is a general lack of apps in the Microsoft Store. This is directly comparable to my iPad experience (remember, at the start of the iPad’s existence) – with the notable exception that Surface comes with Office, so the single biggest set of apps I need are available right now on the Surface, unlike with the iPad (even today there’s no actual Office there, nor the amazingly smooth integration with SkyDrive).

For me, the big missing apps in WinRT include:

  • Outlook
  • Full featured Lync
  • DropBox
  • Yammer
  • TripIt
  • Amazon streaming video
  • Quicken

In short, at this comparable point in time with the iPad I gave the device away because it was just more weight to carry for little value. But I find my Surface RT continually valuable and have no plan to stop using it. The fact that it has Office and that it smoothly integrates into the SkyDrive ecosystem along with my desktop, laptop, and phone (WP8) makes it incredibly useful. I move seamlessly between my various devices, able to view and edit my documents regardless of where I am or what size screen I’m using.

So yes, I really like my Surface RT. There’s some frustration, but not nearly as much as when I was a month into using the iPad.

I have high hopes for Windows 8, WinRT, and Surface (and similar devices).

Sunday, November 25, 2012 11:48:20 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [7]  | 
 Thursday, November 15, 2012

At a .NET Rocks event a few weeks ago an attendee asked if there would be some add-on to Windows 7 that allowed running WinRT apps.

My answer: Yes! It is called Windows 8  :)

Thursday, November 15, 2012 10:57:19 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [1]  | 
 Monday, November 12, 2012

Stephen Sinofsky’s departure from Microsoft was rather unexpected, but not unpleasant news, at least from my perspective as a business developer.

Before I explain that, let me say that I really love Windows 7, and feel that it is the best version of Windows ever released. I also really like Windows 8, and have high hopes for its future. These successes are to Sinofsky’s credit to be sure.

As a business developer however, I have been extremely disappointed in Microsoft over the past couple years as Sinofsky ‘flexed his muscles’ within the organization.

Enterprises require predictability and some reasonable level of transparency. Microsoft provided neither of these over the past couple of years. The complete ‘blanket of silence’ surrounding anything to do with Windows 8 was stifling. As a result people at Microsoft were unable to talk about anything useful at all for an extremely long time. The future of .NET, Visual Studio, Blend, and many other key developer technologies became completely opaque.

As a result, many organizations developed strategies to move their business development away from dependencies on Microsoft, at least in terms of any client software development.

If there was any ray of hope over the past couple years, it was in the server and cloud space. This is where all the best known developer advocates inside Microsoft moved to, if they stayed at Microsoft at all. As a result, many organizations felt comfortable using ASP.NET and other server-side technologies, but generally started assuming Windows would no longer be a viable target for client-side software.

Obviously this is horrible for Microsoft, and yet it is a direct result of Sinofsky’s influence on the company.

Even today the story around deployment of business applications to the WinRT platform is at best incomplete, and I think is more accurately described as non-existent. Sinofsky’s apparently dismissive attitude toward anything outside the consumer space has left Microsoft increasingly irrelevant to anyone considering building smart client applications.

In short, the one true stronghold where Windows is currently dominant has been largely abandoned by Microsoft, effectively pushing us all toward building HTML 5 cross-platform apps that don’t rely on Windows at all.

Clearly this is one of the primary areas that Sinofsky’s successor must address and correct – unless Microsoft really does intend to abdicate the business client to commodity browser-based devices (can you say Chromebook?).

Personally, and based on no knowledge of the new people in charge, I am hopeful that they will restore some level of predictability and transparency to the Windows platform and the related development platform. This will help restore some confidence around the idea of building applications for Windows in the small, medium, and enterprise spaces. And I am hopeful that they’ll develop a real strategy and mechanism for deploying business applications to the WinRT platform so Windows 8 can become relevant to more than just the consumer space.

All that said, and for all my criticisms of Sinofsky’s brutal blanket of silence and alienation of the developer community inside and outside Microsoft, he really did something that had to be done – reimagine Windows to bring it into the future. Windows 8 and WinRT really might be the future of smart client development for most organizations.

The foundation is there, and it is now up to his successors to make it viable.

Monday, November 12, 2012 10:32:14 PM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [14]  | 
On this page....
Search
Archives
Feed your aggregator (RSS 2.0)
August, 2014 (2)
July, 2014 (3)
June, 2014 (4)
May, 2014 (2)
April, 2014 (6)
March, 2014 (4)
February, 2014 (4)
January, 2014 (2)
December, 2013 (3)
October, 2013 (3)
August, 2013 (5)
July, 2013 (2)
May, 2013 (3)
April, 2013 (2)
March, 2013 (3)
February, 2013 (7)
January, 2013 (4)
December, 2012 (3)
November, 2012 (3)
October, 2012 (7)
September, 2012 (1)
August, 2012 (4)
July, 2012 (3)
June, 2012 (5)
May, 2012 (4)
April, 2012 (6)
March, 2012 (10)
February, 2012 (2)
January, 2012 (2)
December, 2011 (4)
November, 2011 (6)
October, 2011 (14)
September, 2011 (5)
August, 2011 (3)
June, 2011 (2)
May, 2011 (1)
April, 2011 (3)
March, 2011 (6)
February, 2011 (3)
January, 2011 (6)
December, 2010 (3)
November, 2010 (8)
October, 2010 (6)
September, 2010 (6)
August, 2010 (7)
July, 2010 (8)
June, 2010 (6)
May, 2010 (8)
April, 2010 (13)
March, 2010 (7)
February, 2010 (5)
January, 2010 (9)
December, 2009 (6)
November, 2009 (8)
October, 2009 (11)
September, 2009 (5)
August, 2009 (5)
July, 2009 (10)
June, 2009 (5)
May, 2009 (7)
April, 2009 (7)
March, 2009 (11)
February, 2009 (6)
January, 2009 (9)
December, 2008 (5)
November, 2008 (4)
October, 2008 (7)
September, 2008 (8)
August, 2008 (11)
July, 2008 (11)
June, 2008 (10)
May, 2008 (6)
April, 2008 (8)
March, 2008 (9)
February, 2008 (6)
January, 2008 (6)
December, 2007 (6)
November, 2007 (9)
October, 2007 (7)
September, 2007 (5)
August, 2007 (8)
July, 2007 (6)
June, 2007 (8)
May, 2007 (7)
April, 2007 (9)
March, 2007 (8)
February, 2007 (5)
January, 2007 (9)
December, 2006 (4)
November, 2006 (3)
October, 2006 (4)
September, 2006 (9)
August, 2006 (4)
July, 2006 (9)
June, 2006 (4)
May, 2006 (10)
April, 2006 (4)
March, 2006 (11)
February, 2006 (3)
January, 2006 (13)
December, 2005 (6)
November, 2005 (7)
October, 2005 (4)
September, 2005 (9)
August, 2005 (6)
July, 2005 (7)
June, 2005 (5)
May, 2005 (4)
April, 2005 (7)
March, 2005 (16)
February, 2005 (17)
January, 2005 (17)
December, 2004 (13)
November, 2004 (7)
October, 2004 (14)
September, 2004 (11)
August, 2004 (7)
July, 2004 (3)
June, 2004 (6)
May, 2004 (3)
April, 2004 (2)
March, 2004 (1)
February, 2004 (5)
Categories
About

Powered by: newtelligence dasBlog 2.0.7226.0

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2014, Marimer LLC

Send mail to the author(s) E-mail



Sign In