Archive for the ‘Commentary’ Category

Push Advertising Will Die

I only occasionally feel a need to write about larger subject-matter, but given the recent uptake of websites crying about my use of AdBlock Plus, I feel it necessary to add my two cents.

The current tag-oriented, push/injection advertising is dead. Not because the ads themselves are annoying (although some are), but because it has become an attack vector for Internet security threats, including ransomware. It’s also somewhat disconcerting to do a Google search on some product or type of product and for the next week get inundated with ads for the same thing. I’m pretty sure that if I search for something, I don’t need results three days later.

This led me to think about how advertising could work outside of these parameters and here’s my take.

  • Advertising will begin to be vetted for safety and accuracy. Not sure if this will happen by third parties, social-networks, or some other entity, but I think it’s an important enough task that it will happen. If I see an ad vetted by some legitimate organization, I might be inclined to click on it.
  • Advertising will become highly targeted with trackless view capability. Meaning, I can search, find, view, but no one will know what I’m looking at unless I actually click through to the product or service.
  • Rampant displays of advertising will become the thing of the past. No one wants it and we have the ability to block it.
  • High quality content websites will add pay-walls, similar to the Washington Post, New York Times, and others. We can cry about this, but I pay for the Post and will probably pony up and pay for the Times and other sites. I might even pay for SI or ESPN, but only if they change their models to offer better content, less crap, and certainly less drama.

And of course someone that comes out with a platform for trackless-view-only advertising just might make a buck.

Categories: Commentary, Uncategorized

The Hidden Problem with Apple Mobile Devices

So you just unwrapped your shiny new iPad or iPhone or you bought one for your kids and see the gleam in their eye. You feel warm and fuzzy about this amazing new technology. You can download all sorts of useful applications as well as highly entertaining games. The graphics are gorgeous and the usability is probably higher than on any other platform.

Then you bang it against something, knock it off a chair or table, drop it when getting in or out of your car, or one of the many other ways a mobile device can take an unintended trajectory.

The corner smashes, the glass cracks, the power connector stops working, the power button stops working, the touch capability is messed up, or some combination of these things happens.

If you have a warranty from Apple or Best Buy or some other store, you take it in and get it repaired or a replacement. However there is a limit to the number of times you can do that and if you didn’t get the extra warranty, you’re on your own.

So you can take it to a great repair place like and for anywhere from $100 to $200, you can get your iPad or iPhone repaired.

All of these things are true, but they entirely hide a little-known or little-advertised aspect of owning these devices. They break. They break easily. They break often.

People have spent over $6 billion dollars on repairing their iPhones. I’m sure the cost of repairing iPads is also high.

The simple reality is that these devices, although beautiful, are cheaply made and break easily. It’s expensive to repair or even warranty these devices, making for a very expensive purchase.

You’d be significantly better off with a laptop or a net book.

Categories: Commentary, mobile Tags: , , , ,

Windows 8 is Great – Don’t Listen to the Naysayers

I have a two year old ASUS K52 laptop with an I3 processor. I’m also a developer and two years is about all I can ever get out of a Windows installation before it begins to severely degrade from misuse. I install and evaluate software on a daily basis, so the OS just gets mucked up over time. Normally, I would just re-install Windows on a clean drive and move all my stuff over, but this time I took a slightly different approach.

First, I took the leap to the cloud. I moved all of my documents to SkyDrive and a handful of close-at-hand documents to Dropbox. I used SkyDrive for the larger set of documents because it’s less expensive than any of the other services out there (at a glance). I also trust Microsoft not to go out of business. Of course I made sure that anything that might be construed as a copyright violation is not in that content. I will backup kids DVD’s after buying them and make ISO’s for later use…kids tend to destroy DVD’s quickly. I’ve heard people’s accounts getting shut down for having ISO’s in their accounts. I have not moved my MP3’s up yet and I have to evaluate what the rules are before I do that. I do not plan to move my pictures into the cloud outside of a very small subset of private PicasaWeb albums. I have digital family photos from 2000 forward. Some of them are of the toddler in the bubble bath type. I know they’re just my kids being silly, but they could get flagged. Why test that nightmare? I moved my pictures to a wifi-enabled external drive. They’re there when I need them and they don’t take up working disk space.

So now that my non-OS files are safely backed up either in the cloud or on external drives, I swapped out the drive (I never erase a disk…too paranoid that I forgot something) for a brand new Intel 180GB SSD. I then proceeded to install Windows 8. It took exactly 17 minutes to install. I have no comparison to a standard drive, but 17 minutes is pretty damn fast.

I installed Offfice 13, VS.NET 2010 and 2012, Dropbox, Skydrive, and a few other programs I need on a daily basis. I quickly organized the Metro (sorry – like the Sears Tower, it will always be Metro to me) interface with Main, Office, Dev, Util, and Misc.

So this is my first review of Windows 8. I had not played with the beta and pre-release software at all. I’d seen it, but that was about it.

I have to say I think all the critics are narrrow-minded pansies. Change is often a challenge, but if you actually use the system for a few days, it becomes very natural to know where to find things. The Metro UI is just a big menu and frankly a much faster menu than the Start Menu ever was. I can throw my mouse into the lower left corner, click, find an app, click and I’m where I need to be much more quickly than using a start menu. Now, I did make extensive use of the toolbar in Windows 7, but that option is still available on the desktop.

The one thing you will love about Windows 8 is that it is smoking fast. Maybe that’s partially the SSD, but it’s so fast you’ll freak. A sleep to awake is under 5 seconds. Reboot in 15 seconds. Opening up the laptop from sleep shows the start screen nearly instantly.

The other thing you’ll love is that everything just works. I have had absolutely zero installation or support issues, and this is on a two year old laptop without any touch capability. It took me a few days to learn the ropes, but once I figured out everything, it’s all smooth sailing.

Don’t believe the naysayers when they talk about horrible user experience. It’s different, there’s no doubt about that. But it’s highly usable and very fast.

Corporate Technical Architecture and the Missing Link

I’ve had an obsession with technical architecture from the moment I started typing on a computer terminal back in the late 70’s. Over the course of my 27 year professional career I’ve had many opportunities to be involved in architectural discussions. In recent years I have led these discussions or been a part of the leadership.

I shouldn’t say discussion because my viewpoint almost always garners derision and fuels heated battles over the makeup and purpose of a new technical architecture. I’ve thought long and hard about the things I value in a new architecture over what other (most) architects value. I’ve struggled to articulate my vision and because I’m not as strong technically as others, I generally lose battles quickly and badly.

But I do know what I’m talking about and the other architects keep proving me right. Here’s why…

Almost every architecture team focuses on technical vision and business requirements. So if a company needs to be able to share services across a number of silo’d departments or divisions, this will require a certain type of disconnected and service-oriented architecture. At a high level, this is good and right. But everything goes haywire in the implementation because these same technologists decide to find the most technically elegant solution available.

What most architects fail to take into consideration, or simply deride any attempt to “dumb-down” their goals, is that the results of their work have an associated future-cost and could potentially damage the business. This future-cost/business risk is defined by the level of talent required to implement and maintain the proposed architecture.

The missing piece is the HR department and the market for available technical talent. When implementing a new technical architecture, the architecture team should be forced to sit down with HR personnel and look at current and projected levels of talent in the marketplace and their associated costs. If a proposed implementation requires senior level talent, then HR should be able to offer insight into current and future costs associated with that proposed implementation from a building and maintenance perspective.

“This year, the proposed implementation will cost the company $2,000,000. Maintenance costs will increase to $4,000,000 because the level of talent required to maintain the proposed architecture will likely come from the contractor world and not from full-time employees. We propose you lower the complexity of the implementation so that a mid-level developer can maintain the system. This will open availability and lower future costs to $2,500.000.”

This is the sort of conversation that is missing from every architecture discussion and needs to change. I’ve sort of realized that if I were to carve out a position in a firm, this is where I would excel. I would be able to work between HR and the technical team to monitor proposed implementations and their future costs and complexity.

It’s about time this position become standard in all mid to large corporations.

Object Oriented Databases

While working on a side project, I had a thought to test an object-oriented database. My requirements are very narrowly focused and I’m in complete control of the environment, so I thought this would make a good test-subject.

I looked around and found the comparison of oo databases on wikipedia. Since I’m working in C#/.NET, I need an oodb that supports .NET well. I also prefer to find something with a community or start-up license, since I can’t afford to spend money on this. I also talked to a colleague, Jeff Panici, who recommended looking at Poet.

I first tried DB4O, since it had a demo available. The licensing requirements were a bit vague, but I thought I could work through the issue. I implemented a new database class in my Zifmia Service using DB4O and was successful at the first line of unit tests, but as I got into the deeper aspects of my object graph, DB4O seemed to act strangely. Then I inquired about the licensing issue and surprisingly, Versant expects royalties. I assume this is for mobile implementations, but apparently it’s across the board.

I will say I got the OODB bug bad. Using DB4O was light years easier than using SQL Server and managing the mappings between relational tables and objects. Just removing the need to think about relations and tables saved me an enormous amount of effort. I was determined to find an OODB solution for Zifmia at this point.

I then looked for Poet and discovered that Versant had purchase Poet and has it “hidden” from testing, use, or even purchase. I assume Poet was a legitimate competitor to their main OODB and so they bought it and took it off the shelf. This left me feeling like Versant wasn’t a company I wanted to deal with, so I went back to the comparison list.

The next OODB I looked into was Eloquera. This had everything I needed and even better, it was an almost exact match in usage patterns to DB4O. I had to update my code a little bit, but most of the Linq queries I implemented remained unchanged. I have since been able to implement all of my unit tests with success. There is one issue though. the performance is less than ideal. It’s not terrible, but it is suspect. With a very simple object graph and what is essentially 13 objects in a 3-level graph with a couple of circular references, saves are taking 3 to 5 seconds. Loads are <1 second, but the saves are a concern. It’s also slow handling large byte arrays (7MB). SQL Server was never a bottleneck for any of these interactions, but the I was doing all the mapping with SQL Server.

I’m completely in love with the OODB concept and Eloquera is great, but I’m hoping I can work with the development team to get past the performance issues.

That said, I wonder why Microsoft doesn’t create an OODB. They certainly have the know-how. It may confuse their SQL Server customers, but it may also provide an alternate solution to problems that are founded on objects, not on relations. I suspect that anyone at MS Research that’s interested in OODB development is quietly asked to choose another subject-matter. SQL Server is probably one of the golden geese and tampering with its identity at MS is likely taboo.

Follow-up: I found a 6 year old MSDN article that claims OODB’s are dead. An interesting and incorrect notion. The argument is that companies will never abandon the relational model and the problems in managing object graph changes is too complex. I’ve managed the upgrades of relational models and let me tell you that’s no picnic either. I do understand how a larger company wouldn’t want their payroll or invoice systems in an OODB. There’s too much gravity in relational database systems backing those types of vertical products. But that still leaves a ton of room for single purpose systems, mobile applications, and small business systems. These types of implementations aren’t “corporate” and can be adapted to the OODB concept. And if there’s ever a need to change the objects, it doesn’t get any simpler to write data movement Linq statements to do that work. Given two different object models, I could write a mapping program in very little time. Doing the same for a relational database would take much longer, even using tools like SSIS.

I think the MSDN artical was seriously mistaken in its grasp of how much more effcient an OODB can be.

Why iOS is King and How the King might Fall

December 30, 2010 Leave a comment

As a start-up owner focusing on mobile game development, I’ve been staring at all of the platforms and trying to identify why Apple has been so successful and why others, including Android might struggle against them. I have a theory and want to share it.

Apple has three devices. The iPod Touch, the iPhone, and the iPad. They cover different segments of ownership. The iPod Touch has a fairly wide demographic, all the way from elementary school kids to adults. The iPhone is more of an adult toy, but parents probably share the device with their kids for the apps (Doodle Jump, Angry Birds). The iPad also has a wide range of users, but probably leans a bit towards the younger age group. No matter what though, Apple has a set of devices that covers all demographics.

This cannot be said for Android, Blackberry, Windows Phone 7, WebOS or any other device stratgey. However there are signs that the competition understands the problem.

Samsung has introduced the GalaxyTab, Microsoft has the Zune, and Archos has some smaller footprint tablets.

I think what any given vendor needs to do is focus on a set of devices similar to the Touch, iPhone, and iPad and make them seamlessly work exactly the same.

Take Microsoft. If they were to adapt the Zune to use the WP7 OS sans the phone capabilities and sell it competitively, this could be seen as a counter to the iPod Touch. If they were to also adapt a tablet to use the WP7 OS, this could counter the iPad. Microsoft could very quickly have the same device strategy as Apple and be able to compete on developer base. C# and Silverlight vs. Objective C and Cocoa? Interesting battle.

On the Android side, it seems the audience for their devices are different than Apple. They aren’t buying devices to play Doodle Jump or Angry Birds, but to locate restaurants and surf the web. I wonder if anyone will create an iPod Touch-like device that runs Android. Could be a winning stratgey. An iPod Touch for $79 instead of $149? Might be interesting.

Categories: blogroll, Commentary

Programming in Grades

(this post is a work in progress, but I’m sharing it now to think about the grading more)

As an architect and a developer I have often been frustrated by the gap in understanding between what I call “rock star” programmers and “average joe” developers. To start, let’s define who’s who:

Rock Star Developer
The rock star developer is the guy that eats code in all forms at any level of complexity. He can read it, decompile it, reconstruct it, and communicate it to others. What he may not be able to do is understand the big picture and how code relates to a business. If he does, then he’s a developer God and there are an infinitely small number of those people.

Average Joe Developer
The average joe developer is the guy that writes code for a living, but would very likely rather be doing something else. He has a life that doesn’t include much time on the computer beyond his work day. He’s not going to seek new knowledge. He only grows when internal systems and standards change and he’s forced to learn new things, which he will do happily, but not ambitously.

Having been in this business for 25 years (many as a consultant), I have witnessed many IT environments. It’s my belief that the number of Rock Star developers is a relatively small one. By far, the vast majority of developers are Average Joe’s.

This presents a very serious problem in most IT departments in that the minority is in control of the standards and architecture for the majority. I can’t tell you how many times I’ve witnessed the development of a “framework” that is great on paper, sells well to the business, but no one ever asks the Average Joe’s what they think. Everyone just expects that they will learn it and move on.

The problem is that this will stress out most Average Joe’s and they will become less productive. If they can’t grasp the new “framework”, they’re likely to take months if not an entire year to learn the environment.

So then you’ll hear the rock star’s say, “This isn’t that hard. All good developers should know this stuff.” and will convince management to hire consultants or more senior developers. This creates an imbalance where too many cooks are in the kitchen and egos will start to come into play. IT departments are no different than a carefully developed fish tank and its ecosystem. If you have too many rock starts, things will get unmanagable. If you don’t have any, standards will be tossed aside and you’ll have as many styles as you do programmers.

So there are a couple of problems here. One is to balance out the number of rock star developers with average joe developers. The other is, how do you determine who’s a rock star and who isn’t. So I’ve come up with a grading system to define what I think they are and you can chime in with your thoughts. We’re going to categorize various development tasks with a grade level (as in 1st grade, 12th grade, associates degree, bachelor’s degree, masters, doctorate. We’ll keep the basics at 4th grade. These are the most basic tasks a programmer needs to be productive. The scope of this grading system is strictly business application development. There are other areas of development, such as programming computer chips, that are so different that they need their own grading system. This also ignores communication skills like speaking/writing English.

4th Grade Developer Tasks

  • G4-01: Ability to use a Windows, Linux, or Apple OS X computer, including log in, run programs, use a command line, print documents, e-mail, instant message, and use a text editor.
  • G4-02:Ability to use the file system to locate, list, and manage files.
  • G4-03:Ability to write a Hello, World! program in at least one programming language without a book.

6th Grade Development Tasks

  • G6-01: Ability to use a platform specific Integrated Development Environment such as Visual Studio or Eclipse.
  • G6-02: Ability to create a basic web page with a form that posts data to a server.
  • G6-03: Ability to handle server side logic of a given web page in at least one programming langauge.
  • G6-04: Ability to handle querystrings and form variables.
  • G6-05: Ability to access a database using at least one programming language.
  • G6-06: Ability to use data from a database to output to a web page.
  • G6-07: Ability to write simple CRUD SQL statements.

8th Grade Development Tasks

  • G8-01: Ability to create a class with private and public members.
  • G8-02: Ability to create SQL Statements with one JOIN.
  • G8-03: Ability to create Stored Procedures and Views.
  • G8-04: Ability to write a Functional Requirements document.

10th Grade Development Tasks

  • G10-01: Ability to create protected and static members on a class.
  • G10-02: Ability to create an abstract or base class with virtual members.
  • G10-03: Ability to create a sub class with overriding members.
  • G10-04: Ability to develop a complete CRUD application in at least one programming language, including the data model, the object model, a data access layer, screens, web pages, with validation, exception handling, logging,
  • G10-05: Ability to create SQL statements with multiple JOIN’s.
  • G10-06: Ability to create database Functions, Indexes, and constraints.
  • G10-07: Ability to develop a simple data access layer.
  • G10-08: Ability to designa a simple domain model.
  • G10-09: Ability to design a simple data model.
  • G10-10: Ability to write a Detail Design Document.
  • G10-11: Ability to write a unit test class.

12th Grade Development Tasks

  • G12-01: Ability to develop polymorphic class structures.
  • G12-02: Ability to develop custom generic types.
  • G12-03: Ability to diagnose database performance issues.
  • G12-04: Ability to design a complex domain model.
  • G12-05: Ability to design a complex data model.
  • G12-06: Ability to develop by writing unit tests first.

BS Level Development Tasks

  • GBS-01: Ability to create and use complex data structures.
  • GBS-02: Understand and use big O notation.

Masters Level Development Tasks

  • GM-01: Ability to develop a compiler for an existing programming language.
  • GM-02: Ability to develop a compiler for a new programming language.

PHD Level Development Tasks