Showing posts with label web apps. Show all posts
Showing posts with label web apps. Show all posts

Thursday, June 16, 2011

All developers are not created equal - hence not interchangeable

Earlier yesterday I came across this article on the New York Times: Thieves Found Citigroup Site an Easy Entry. At first I thought, "Man, another big site had their customer data compromised", but as I continued reading this incident is a little bit different; especially the nature of the attack that was described in the article. The marketing and PR departments for these brands - and in this case Citigroup - need to be a little more careful about the kind of technical information that gets released when shit hits the fan.
Think of it as a mansion with a high-tech security system — but the front door wasn’t locked tight.
After reading through the article and the retarded nature of the attack you can't think of it as a mansion with a high tech security system; not even close. Some context on this attack:

In the Citi breach, the data thieves were able to penetrate the bank’s defenses by first logging on to the site reserved for its credit card customers.Once inside, they leapfrogged between the accounts of different Citi customers by inserting vari-ous account numbers into a string of text located in the browser’s address bar. The hackers’ code systems automatically repeated this exercise tens of thousands of times — allowing them to capture the confidential private data.The method is seemingly simple, but the fact that the thieves knew to focus on this particular vulnerability marks the Citigroup attack as especially ingenious, security experts said.
So, all these thieves needed to do is basically log in with their own or even someone else's Citigroup account and lo and behold this account number was present in the address bar after login. Changing it gave them access to someone else's account. A little script to repeat this for thousands of accounts and scrape the details.

This process was described by "security experts" as "especially ingenious". Really?!? This is the oldest trick in the book; i.e. mess around with the URL until you get somewhere. These "security experts" should get fired if this kind of attack was surprising.

The "what can we do, we got hacked" wagon got extremely popular in recent years, especially this year, but this Citigroup incident is different. There is no excuse for being on the "we are retards, we got hacked" wagon. When your "high-tech security system" is composed of changing account numbers in URLs, then what else can someone find if they look harder?

How does one get to this position? I think at the root of the problem is the thinking that people working in technology are interchangeable cogs in a giant machine. When you are building the pyramids, yes you can get 40,000 slaves and have them drag giant slabs of rock into place and stack them with virtually no way for an error to occur. And yes you can get another 40,000 slaves and replace the first 40,000 and they will still drag and stack the rocks as good as the previous 40,000 did. That mentality works when the tasks at hand are fairly simple and mechanical such as building the pyramids, or the production line at Ford. It is absolutely not valid in technology, yet there are many executives, project managers, and software architects today that think its possible.

The other part of the problem has to do with measuring expertise. The above assumption that developers, architects, designers, etc. are interchangeable also leads to the flawed assumption that a developer with 10 years of experience can replace any other developer with 10 years of experience as well. It is easy to get to that assumption when you think of these tasks as mechanical such as building the pyramids, or putting the wheels on a car. 10 years of experience developing doesn't have the same weight it did 30 years ago. Most developers today got into while they are teenagers, and hence by the time they graduate university they already have 10 years of experience developing stuff. Also, there are more technologies today that are available to the average developer to experiment with and try out, than there was 30 years ago. Hence why building technology systems  and development in general is a combination of science and art. The Sistine Chapel would have looked different if Leonardo da Vinci painted it instead even if he got the same directions from the Pope. The Pyramids would have looked the same regardless where the 40,000 slaves came from.

So for an online application that has to do with people's credit card accounts to fail at this level doesn't give me the warm fuzzy feeling that I should be getting when I read "Citi has implemented enhanced procedures to prevent a recurrence of this type of event." - if I were a customer.

Where else did you not do the due diligence you owe your customers? What other skeletons are in the closet? The New York Article should have started out like this:
Think of it as a tent with a zipper — but the zipper wasn’t closed.

Monday, August 09, 2010

Daily Digest

Last night I came across this sweet web app called paper.ly that generates a newspaper of your Twitter feed daily. It comes with a pretty basic embed that displays a table of contents for your own personalized news paper that you can embed on your blog or website. The people I follow are mainly from the tech community in North America and the Toronto Twitter community. You'll find posts from the usual suspects like GigaOM, TechCrunch, Mashable, and Seth Godin. Also some local people like Alex Blom, Scott Stratten, Breanna Hughes and Joallore have appeared in my daily digest today. Anyway, if you are interested in seeing what the Twitter community I'm following is publishing on Twitter, feel free to bookmark this page.

Monday, July 19, 2010

Dojo templates & Google Maps InfoWindow

I have been building mashups using Google Maps since 2007 and one problem I had is passing in the content for these bubbles that show up when you click on a marker i.e. the InfoWindow. One big annoyance with it, is that you have to pass in the HTML content as a string when opening the marker. I don't like it because I have to intertwine HTML inside of JavaScript. So how can we make this better?

Dojo Templates


Dojo Templates is the number one reason I love this library, I like the PubSub mechanism I posted about last time but not as much as the templates.

Dojo Templates allow you to associate HTML template files with your widgets, that get instantiated when Dojo parses your page and constructs the widget, basically replacing the references to your widgets with the widget's markup in the HTML template file.

First: my infowindow.html template file

<div class="infoWindowContainer" dojoattachpoint="infoWindow">
<h1>${title}</h1>
</div>

Don't worry about that ${title} thing just yet, but I guess you already can see where I am going with this.

Second: my infowindow.js widget

dojo.declare(
"nael.widgets.infowindow",
[dijit._Widget, dijit._Templated],
{
templatePath: new dojo.moduleUrl('nael.templates', 'infowindow.html'),
constructor: function(){

}
}
);

In this example, my infowindow widget's constructor is empty.

Next we create the marker. Here we using dojo.forEach to loop over all the points that were returned with our AJAX response to fetch points. this.map is the object within this map controller that references the Google Map. (This is the same controller from the previous post on Dojo PubSub mechanism)

dojo.forEach(pois, dojo.hitch(this, function(p){
var marker = new google.maps.Marker({
position: new google.maps.LatLng(p.lat, p.lng),
map: this.map
});
var content = "<div class='infoWindow' dojoType='nael.widgets.infowindow' title='"+p.Pois.name+"'>
" ;
this.addInfoWindowToMarker(marker,content);
}));


The important part is the line where we add the content. Yes, we still need markup in there, but now its just a placeholder for the real markup. We can pass attributes like title into the placeholder for nael.widgets.infowindow. So anything that you want displayed in the info window becomes an attribute. This allows you to focus on content, and not worry about presentation just yet.

The last method we call addInfoWindowToMarker creates a Google maps listener on the marker and connects the info window to it. Note, that the info window here, is not the widget we created in the beginning. The one at the top is "nael's infowindow" and only serves the purpose of templating.

addInfoWindowToMarker: function(marker,content){
google.maps.event.addListener(marker, 'click', dojo.hitch(this, function(){
this.infoWindow.content = content;
this.infoWindow.maxWidth = 300;
this.infoWindow.open(this.map, marker);
}));
}


If you try the above, and click on the marker, the content will still be empty. Because this is a widget, it needs to be constructed. You need to tell Dojo when to parse the DOM to look for new widgets that you introduced since the last parse.


google.maps.event.addListener(this.infoWindow, "domready", dojo.hitch(this, function(){
dojo.parser.parse(this.mapCanvasNode.id);
}));


We don't want Dojo to go looking through the whole DOM for new widgets, we know where the widget was added. So we can just tell Dojo to look for widgets within the div referenced by the HTML id this.mapCanvasNode.id)

Finally, back to our infowindow.html template:

<div class="infoWindowContainer" dojoattachpoint="infoWindow">
<h1>${title}</h1>
</div>


We can now adjust the template as we please without trouble, and this sure is much cleaner than doing this like I used to for years.

var content = "<div class='infoWindowContainer'>";
content += "<h1>" + title + "</h1>";
content += "</div>";


Maybe one day Google Maps will support templating the HTML for InfoWindows internally, until then, I'm sticking to the above when I can.



The benefit of templating the InfoWindow becomes obvious when you are dealing with complex InfoWindows with functionality built into it such as sharing on social networks, embedded videos, AJAX requests, pictures, etc. All that stuff can be templated, and only the dynamic stuff that comes from the backend is passed through.

Of course, on top of being able to template your InfoWindow markup, it is much easier now to replace an InfoWindow with a version 2.0 of the InfoWindow. You just have to drop in the new and improved widget and template, then abide by the Pub Sub channels you have defined between the widget and the rest of the application.

Sunday, July 18, 2010

Dojo How To: Publish / Subscribe

I haven't been using Dojo for a very long time, just over a year now, but its time I blog about all the little great features I have learned.

One of the features I like the most in Dojo is the Publish / Subscribe mechanism. Its flexibility allows you to cleanly implement communication between different components like modules, widgets, portlets, etc.

Lets get down to business. Say I have two controllers, a map controller, and the main app controller. The map controller owns the map object in my application, in this case a Google Map object. The app controller owns the communication with the user, browser, AJAX, etc. When my app loads, I want the map to go right to the user's location. The map doesn't care where I get the coordinates from, it just needs the coordinates.


startup: function(){

//some other startup code

//subscribe to the event we will get back from the app when coordinates are available
dojo.subscribe("nael.controller.app.currentPosition", this, this.eventHandlers.updateMapCenter);

//when Im done starting up, yell to the app controller saying Im ready for coordinates
dojo.publish("nael.controller.app.requests",["getBrowserCoordinates"]);
},


So the map widget will initialize the Google Map I'm using, do some other stuff, and when it is done it will publish to the app controller's "nael.controller.app.requests" channel. The message it sends to the channel is an array of arguments. In this case it is the request ["getBrowserCoordinates"]. Your channel names can be anything, I just use the Dojo module path to that widget and end with a good description of the channel, i.e. "requests"

On to the app controller:

The startup function of the widget just subscribes to the required channels

startup: function(){
dojo.subscribe("nael.controller.app.requests",this,this.eventListener);
},


One event listener for the "nael.controller.app.requests" channel. Notice that the listener just passes it to the appropriate event handler, the one we passed in to the channel.

eventListener: function(event){
this.eventHandlers[event]();
},


Finally, the eventHandlers object which will contain all our actual event handlers. Here we have the "getBrowserCoordinates" handler which was the argument ["getBrowserCoordinates"] the map passed into the channel.

eventHandlers:{
getBrowserCoordinates: function(){
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(function(position){
var coords = {lng:position.coords.longitude, lat:position.coords.latitude};

dojo.publish("nael.controller.app.currentPosition",[coords]);

}
);
}
},

Once the app controller receives the coordinates from the browser's geo location API, it publishes the coordinates to the "nael.controller.app.currentPosition" channel - which the map widget has subscribed to during its startup step. When the map receives that event, it tells the Google Map to re-center around the new point.

I'm doing it this way, to reduce the number of channels each module needs to listen to. I can easily bring the browser to its knees if I have a unique channel for each event I'm thinking of raising. Remember, kitchens get dirty one dish at a time. It makes sense to have one "requests" channel for the main app controller, (or every widget as a matter of fact) that all other components can just send requests to.

You may ask why I have a specific channel for the current position? I guess I could have done it similarly to the requests channel. However, I figured that all widgets will be asking the app controller for stuff, while not all widgets would need to know about the user's current position. If we have a "responses" channel that all widgets subscribed to, it could lead to a lot of unnecessary chatter amongst the widgets and too many event listeners. The second reason, is that the current position channel, may get pretty noisy if it is a mobile browser. Couple both reasons together, and you have a recipe for disaster

So why should you care about JavaScript Publish / Subscribe?


The same reason you would care about it for other technologies. Its a better and much more powerful interface between JavaScript modules. Without these channels and event listeners, you would have just called the getBrowserCoordinates method from the map, or worse, you would have called the GeoLocation API straight from the map. You don't have to use Dojo for this, other libraries also provide you with a pub sub mechanism, like YUI EventTarget. Other JavaScript libraries have it, or have plugins for it. Its a design pattern that makes sense.

Note: if you are still not using a JavaScript library for your web app development, you should seriously reconsider because you are wasting a lot of time re-inventing wheels and light bulbs.

Another example, say you need to add a new widget, instead of trying to figure out where you are all the right places to call a method in this widget from another, you just add the widget and subscribe to the event that is triggered. Change request done.

One final reason, Publish / Subscribe is an excellent way to build a mockup of application workflow. You can stub in some datsabase data and when the backend is ready, you just replace the stub module with the one that will listen to the right request channel, and publish to the right response channel. And as an added bonus, if you screw up the channels, nothing breaks, the messages just won't get passed and you won't see browser errors when functions aren't defined. It fails gracefully - which is important.

Tuesday, June 29, 2010

the intersection of business and technology

Technology is useless if it does not deliver business value. Either it saves me time and hence money, or it makes me money. It has to be one or the other. Where does front end architecture fit in this picture? As the title points out, its right in the middle.

The front end is a misunderstood piece of any application, it is usually overlooked, underestimated, and belittled. Its fairly common to perceive it as "toying" around, "no/low value", etc. Its also very easy to believe that all the stuff that happens at the backend is the stuff that commands the big bucks. Unless you develop low level software such as compilers, web servers, drivers, etc. here is why you are wrong, and why front end architecture matters.

You can't deliver "customer focused solutions" if you belittle the front end


Successful front end architecture means focusing on what is important for the end user, not you the developer, nor you the SQL ninja, and not even you the business SME.
I don't know how this upside down tradition started, but I might have an idea. Application development usually starts with the back end framework, you know the Springs, and the Djangos, the Struts, and the Zends. None of these deliver any value to the user, they do add value to the delivery team and make them -in a perfect world- deliver better code, faster. So how did this tradition start? (One that focused on starting in an area that couldn't be any farther from the end user) My reasoning is that it started with equating building end user software with constructing a building. The first step of doing that, is to lay the foundation, the stuff that will carry all the weight of the rebar, steel, concrete, pillars, roof, and all the occupants and their equipment. All this stuff is as far away from the occupants of the building as possible, but it is by far more important than whether the doors open in or out. The occupants of a building are first concerned about their safety, a "customer focused solution" in the construction industry is one that is first safe for its occupants. Everything else comes later. However, when we use this analogy to building end-user software, we start out right off the bat focusing on the wrong things. A customer focused solution starts with the end user, what will he be interacting with, and then works backwards to define the solution that is required to support that end user.

You can't slap an interface on it


Okay, you can, but you shouldn't. Can you slap a steering wheel in the backseat of the car? Sure you can. Should you? probably not. Why is the steering wheel in the front? because the end user needs to see the road. Start with the end user and work backwards to the solution. A more accurate statement is actually "slapping a back end on it", or "wiring the back end to the front end". That you can do. Why? Because at that point you know what the user wants, and you know how your front end will achieve it.

Another reason why not to do this, is if you care about your users' experience, you would spend more time thinking through the front end, iterating and making it better. Forget the focus groups. Forget the design committees. Empower qualified, creative, and responsible people to make usability decisions. Have real users developers use your application, and keep your mouth shut. Don't show them how to use it, or what they're doing wrong. Observe, take notes, and make it better. Focus groups could just make you chase your own tail, as what happened with New Coke.

Phasing in features


Good back end frameworks and architecture allow you to phase in functionality as you progress in the project. A good front end architecture needs and should do the same. This means, just like a good back end does, a good front end must utilize a common framework. Today, not much focus is given to the front end. In fact it is assumed it can be completed 100% with a "big bang" approach. We don't use a "big bang" approach with the back end, why do you do it on the front end? Because you tried to slap an interface on it...

Front end components need to be thoughtfully designed, with re-use and phase-in in mind. Don't attempt a one-size-fits-all approach to these components. It might make for less development, but if your focus is "customer focused solutions" then you need to account for different use cases and different user types/roles. Also, just like back end components get re-factored when duplications occur, so must front end components. Why the double standard? because the front end gets belittled.

More data is better data


Yes, your gut can have a lot of say when it comes to the front end. However sometimes the change has no affect on your gut. Does it matter if your links are underlined? or are you just doing it because [insert your favorite reason here, ex. because my dog wags its tail when it sees underlined hyperlinks] Design your front end to be able to gather these usage patterns, because "customer-focused solutions" support their decisions on customers' actions. Don't even ask your customer whether they like A or B better, keep your mouth shut and observe. Do they use your application more? better? quicker? when A is there? or when B is there?

At the intersection of business and technology lies the role of the Front End Architect (FA). This person should be empowered and trusted to make front end architectural decisions based on supporting data that will deliver value to the end user. The FA, is not a business SME, they're not a designer, but they could be. They are a technical person, a developer with the scars to prove it. They work with the business to figure out how to deliver this end-user value. The FA also works with designers to iron out any usability issues that may affect the end-user value and can be fixed via enhancing the look and feel. They also work with the rest of the developers to keep front end components re-usable, and phase in friendly.

Do you have an FA on your project/in your organization?

Tuesday, April 20, 2010

Crash 'n' Burn: The 11th hour for Flash

Adobe's rhetoric continues after the curve ball Apple threw. The whining continues with this post: On Adobe, Flash CS5 and iPhone Applications.

Sadly, the whining doesn't change anything, and Adobe's argument would have been more valid if they didn't trying to lock developers into Flash/Flex and if it -Flash- were really open. Also, I think Adobe's Flash/Flex tools favor developing using Cold Fusion on the server side... you can use other server-side technologies however I believe the tools "play" better with Cold Fusion.

Apple's decision makes 100% business sense to me. They're advocating for their own platform, or open standards. Just like Adobe advocates for their own platforms, or open standards. What's wrong with that?

Flash filled a void in the 90s, but where is that void today? Is it even still needed? Yes its far superior technology, but its a closed technology. And to think that Android will succeed because it has Flash is just absurd. Android could be the iPhone's real challenger ONLY because it is open. The above post also seems to confuse "open" with "cross-platform". They're very different. Flash is cross-platform because its not open.

Flash needs something different right now, we don't need Flash to deliver rich content online anymore. We don't need flash to deliver sexy fonts. We don't need Flash to scroll and fade text. Soon we won't need Flash to play video - my Youtube embed below is still in Flash- . We don't need navigation built in Flash. So much stuff we needed Flash for (right or wrong) , that are just not needed today.

On to Flex, Flash's younger cousin. We - the majority - don't need that as well. Slowly but surely applications will move to the web. They may have some Flash components that could now just be as easily done in HTML5 or even HTML and some nifty JavaScript. Where I can see Flex fitting, is for these extremely specialized software, such as CAD or medical imaging. Such software is expensive and time-consuming to write, and would be a pain to translate into different operating systems. Such software also comes with heavy visualization, so its a good fit with Flash. Maybe thats where Flash will head, who knows? But there is definitely hardly any room today for Flash on the web.

This song is dedicated to Adobe Flash, I don't know who your savior will be, but you really need one right now...bad.

How to throw usability out the window - Part 1

Sometime between when I paid my Rogers bill last month, and when I tried to look it up this month, the Rogers site was "upgraded" to portal. I'm not sure what it used to be before, but I think now it sits squats on top of the BEA Weblogic portal - now owned by Oracle.

Note: This is only part I, the Rogers Portal went offline while I am writing this. To be continued when its live again...


The Loading Dial Syndrome


Who hasn't seen one before? its a great little technique to let the user know something may take some time to come up - note the keyword is "something" not "time". If in your site's case "something" is replaced by "everything" then something is definitely wrong. Sometimes you just can't make things any faster, especially today when portals by nature provide seamless integration between different internal and external applications. At some point, its just out of your control. However, if your site suffers from the Loading Dial Syndrome you are definitely doing it wrong, and its just not out of your control.

By the way, when the loading dial in the middle disappears - after a minute or so-, nothing actually loads. I end up with all this blank space in the middle of my screen. Obviously a bug of some sort, but hey I'm trying to pay my bills here, not QA your application. For the record I wouldn't mind doing it if it was optional (i.e. I choose to jump to the Beta version) plus I receive a reduced bill.

Navigation


So after going to the "Bills & Payments" tab I see a list of my previous bills and I can dive into any of them by clicking the "Bill" link next to each. I then see the screen below:


Whats the problem? How do I go back to seeing all my bills again? I can't even click on the same tab again. The only way I found is to click on another tab, and then click back on to "Bills & Payments" and then the view is reset to the initial state. Almost like driving a car that can't be put into reverse.

The other thing about this screen, is that effort was spent on meaningless details, such as the red dropdowns with the white gradient background.

The thing about usability is that when you get too deep into something, you miss these obvious issues. I'm sure they looked like non-issues during develeopment, but take a step back and Don't Make Me Think. Sure, there's rounded corners, pretty shadows and loading dials, but none of that will make me login more often if its too darn slow. Now I have two things to dread about the end of the month, finding out how much $ I am about to spend, and trying to use this PoC. - and that doesn't stand for Proof of Concept.


Thursday, February 18, 2010

why not Microsoft (Part 2 of many)

Round 2 of this series. I'm about to gut this video and turn it inside out. Kids, cover your eyes, this will get ugly.

  • Delegation of mail and calendar. Once upon a time, in a world when dinosaurs roamed freely on this Earth there was a need to do this. (Okay, it wasn't that long ago, but you get the point). However today, I don't think this is needed anymore. You get an e-mail invite, and you can quickly accept or reject it, find out if it conflicts with other meetings, etc. The need to delegate your mail and calendar is now obsolete. There is an exception to every thing, and some executives may still have a need for this, but come on, how many of these executives are there out there? This point is moot at best.
  • Folders or labels. That is the question. Yes you can't create folders because the whole concept of organizing mail in folders is from that 'dinosaur era' I mentioned above. The problem with folders, is its one-to-one. How do I file an e-mail as "High priority, I'll lose my job if I don't get this sorted out ASAP" and "this is for project X". Then after completing this task, I want to tag it with my "followup" tag so that I remember to check in a month later. I don't want to lose the other tags. I haven't found a way. Again, once upon a time, when you got physical mail you had to file it somewhere, you can only file it once. E-mail is different, and if you haven't figured that one out yet, then yes you should get an assistant.
  • Full corporate directory, and contact delegation. Ok you lost me here. There is an address book. I can search for people in it. Thats all most of us need.
  • Folks, its called GMail, and not GRemoteWipePhone. If that is available via Outlook, then it shouldn't. Remember point #3 from the first part? A costly excess of tools for people who don't use them.
  • Can't Manage Conference Rooms. These guys must be looking at the regular, public gmail and not the corporate google apps. You can manage conference rooms, and schedules. AND double booking still happens on Outlook. Don't blame the tools.
  • Sure, lets say you do need to install all this stuff to hookup Outlook with GMail. Sounds like FUD to me, but for the sake of argument I will accept this. Here, the problem is really Outlook. The world is moving to web based applications, keep up. You only need a browser if you were using it via the web interface, which by the way does not contain a costly excess of tools for people that don't use them. On the other hand, if you are obsessed with Outlook or absolutely need it - for whatever reason - , then perhaps Google Apps and Gmail is not for you.
Judge for yourself.




Tuesday, February 16, 2010

Why not Microsoft (Part 1 of many)

I just saw this Microsoft channel on Youtube comparing Microsoft solutions with Google's. I couldn't resist writing this up.

  1. If I need to mix different features in a blender then its not easy to manage. In fact it could very well turn out messy.
  2. "Documents zip across back and forth without a hitch". Okay, but what usually happens when you have "documents zipping back and forth, and back and forth, and back and forth, and..." Think turning the blender on without closing the lid.
    I'm also not sure why the diagram above shows a "phone" between a "PC" and a "browser"? Are you seriously telling me to e-mail my 40MB powerpoint slide on dialup? back and forth..back and forth..back and forth?
  3. "A costly excess of tools for people who don't use them" I just don't understand how the fool who approved this could have done so while keeping a straight face? Isn't MS Word and Outlook bloated beyond belief with tools that most people don't use?

Here's the video. Judge for yourself.


Saturday, January 30, 2010

On the rise of social eCommerce

Deborah Collier published her five predictions for social e-commerce in 2010:
  1. Goodbye to the Middleman
  2. The Year of the Deliver Company
  3. Creative Sponsored Advertising
  4. Mobile Commerce Revolution
  5. Free Culture Frenzy
Her predictions can't be anymore bang on, if these become a reality of 2010, then we are well on our way to reaching that stage of "Social eCommerce" in the first half of this decade.

As it stands today, our eCommerce networks are all rather isolated and built up silos. We have the Amazons, the Ebays, the Facebooks and the iTunes and App Stores to name a few. Social eCommerce requires these imaginary walls surrounding these walled gardens to come down - and I do expect them to. The reason they will is because as much revenue these networks generate, there is still much more left on the table. We just need to reach out for it.

The elimination of the middle man is a big step. Online applications that have carved themselves a small niche of the market have risen. Not surprisingly these bleeding edge, creative and unique applications are not operated by large corporations, but by the John and Jane Does that have operated them out of their home office or even basements. In today's online world a business does not need to provide a whole lot of services and products to corner the market - in fact focusing on your niche and a small set of products and services guarantees that you will provide better results. Amazon allows me to sell my books to other people, I can sell my old computer on eBay, or my music on iTunes. There is no middle man involved. I would say the middle man is mostly eliminated at this stage.

Delivery is an interesting service, as it increases with the growth of C2C markets, because the middle man does not exist. We are yet to see a creative, bleeding edge and unique process for delivery. Its a harder problem to tackle, but definitely still possible. I don't expect this advancement to come from the national postal services. Its tragic, but these creative solutions come out of the basements and dorm rooms of the World. The big corporations are too sluggish and paralyzed to move with the speed required for this sort of advancement.

Creative, seamless and relevant advertisement is a personal interest of mine. The future of online ads in the social eCommerce phase would be heavily wired with the abundance of data on today's and tomorrow's social networks. We have some creative advertisement solutions today such as AdSense that would push ads based on the content on the page. That was last decade's technology, the 2010s need something new that is even more seamless, more integrated, and finally more relevant to me. The only way I can see these advertising engines outdoing themselves is by personalizing these ads. The data to drive such personalization is present, just locked away in these individual silos.

Mobile. Mobile. Mobile. The iPhone has revolutionized this arena. When I went to highschool, not all the kids had cell phone, a good chunk did, but not everybody. I didn't get my first cellphone until grade 10 I think. Similarly with university, at least the earlier years. Slowly the mobile population grew, but at that time it was fairly uncommon to see a smart phone within the hands of a twenty year old. Today that is different. Now we spend more time with our iPhones, Blackberrys, and other smart phones than we do on our laptops or computers. This is just another bundle of cash waiting for someone to reach out. Those who don't keep up with these trends will surely suffer. Generation Y is closing in to their 30s and 40s, these are the future customers and they will naturally surround those that provide such services.

The freemium model. Another prediction that is directly tied to Generation Y. Unlike the preceding generation, this generation expects to get basic features for free. This generation does not tolerate the service charges and system access fees. I don't expect these old fashioned models to remain much longer. Take the service charge I pay to CIBC, what do I get in return for it? Absolutely nothing. On the other hand, they get to invest my hard earned money, make money off it, and then have the nerve to charge me a service charge or fee to take it out? They ought to be paying me a service charge! That model will change. On the other hand, I would gladly pay a service charge to get premium features for my online banking, as well as mobile banking - and by premium I don't mean printing my paper statement on my screen. Rogers mobile has slowly started introducing such free features to their customers. This includes the "My Account" Rogers iPhone app to monitor my usage, free Rogers OnDemand Online and the ability to tag phone numbers with names on my online billing. Not rocket science, but its an excellent step forward. Stop thinking of the web as e-paper.

In a perfect world, the data I publish on Facebook, could generate sales on Amazon, that will provide recommendations from Ebay along with tunes to match the occasion from iTunes in an experience that is seamless wrapped with personalized ads from Google.

Unfortunately we don't live in a perfect world, but these visions and ideas can' t be that far fetched. However, such ideas are a dime a dozen, what is important is how these ideas are executed, and not who is the first to execute them.

Wednesday, May 20, 2009

Navegg for behavior web analytics beyond Google Analytics

Navegg is a web based add-on just like Google Analytics but aims to report on visitor demographics and behaviors - which you cannot achieve with Google Analytics.
This information is extremely important for marketers, but it is also important if you aim to personalize your content for different users. The uses are not just limited to marke
ting as the data it gathers can and should influence your design and feature decisions as well.

I signed up for this account a few days ago and now I get access to very little demographics that I will share with you. What is confusing is that Google Analytics reports 20 unique visitors yesterday and 24 the day before yet I only see 3 on Navegg. I will probably have to revisit this in a few weeks when it has gathered more information for me.

The neat thing is that both Google Analytics and Navegg have public APIs and both so far are free services. One could potentially build their own analytics engine that combines data from both in the segments each excels at. For example I really like the Goal Funnel Visualization feature on Google Analytics, it can be made even more useful if I can see demographics on it; ex. how many single females between 22 and 28 dropped out of the sales funnel? 

Thanks to Jennifer Van Grove's post on Mashable about Navegg which got me to sign up and try it out - how else would I have known that I had 3 readers yesterday that are college graduates and males between 25 and 34 years old!

Monday, May 18, 2009

Lessons learned from Gordon Ramsay

Ever watched an episode of Kitchen Nightmares? I mainly got into it because of the similarities between running a kitchen  Gordon Ramsay style and how a lot of software processes could look at Gordon Ramsay for direction.

Ramsay's kitchens are agile kitchens and if his kitchens followed a waterfall model like many software teams do then you would end up getting your food at 2am after arriving for supper at 6pm. Anyway that is not the topic of this post, but you can read more on this at Clinton Begin's Blog.

Can you become successful by being average?

What makes a good dish a great one?
Every ingredient in a great dish is there for a very specific reason, there is not 1 unnecessary ingredient. Nothing is out of place and each element captures a component of the dish's essence.
Presentation, presentation, presentation. That is the second element of a great dish. A great dish is inviting, once you see it you already know how you are going to 'attack it' and you are not left confused where to start.

Why simple works better?


A good software engineer says "No" more than they say "Yes"
Cooking a great dish requires a lot of discipline; building great software also requires great discipline. It is very tempting to just add more ingredients or more features into a dish or software, but that temptation needs to be resisted; someone needs to act like a referee and reject anything that does not add value. Just because you can, does not mean you should. As a software consultant I always find myself facing customers that want everything under the sun in their application. They want everybody and I mean everybody to use it for everything. There are many problems with this philosophy, mainly you end up with a very cluttered software where it's main essence has been diluted. This is where I find myself asking over and over again What value does that feature add? Who does it benefit? How many will benefit from it? Keep in mind that 80% of your revenue is generated by 20% of your customers.

Gordon's cooking style is simple, and whenever he walks in to a failing kitchen he ends up simplifying and idiot proofing the menu more than anything else. A lot of restaurants fall into the trap of trying to satisfy all their customers even if doing so takes away from the restaurant's essence. This seems to be a common mistake amongst all restaurants shown on Kitchen Nightmares. Surprisingly lessons learned from these failing restaurants can be applied to failing software as well. One episode I remember is the case of an "authentic" Indian restaurant in Notting Hill that had french fries on their menu! Yes french fries in an "authentic" Indian restaurant. The owner's flawed reasoning is because some customer's wanted french fries. This is a simple example where discipline was required and if the customer wanted french fries they can go to the nearest McDonald's or KFC - not an "authentic" Indian restaurant. If it goes on the menu it will be ordered, but don't trick yourself into thinking just because it was ordered or used then there was demand for it.
I am a true believer that doing one thing great is better than doing a half assed job on 10 things. I hear the phrase "Jack of all trades" often in the software / consulting industry I don't particularly like it because it literally means you are not exceptionally good at anything, just average in many things i.e. "Jack of all trades; master of none". I don't see anything to boast about there. Don't get me wrong, there is nothing wrong with knowing a lot of trades, but everybody needs one or two trades where they are really good - and I mean really. So can you make a career for yourself out of being a "Jack of all trades" - I don't think so. 
In his book Malcolm Gladwell talks about the 10,000 hour rule where for one to call themselves an expert at anything they need to have done that for at least 10,000 hours. Consider one who works an average work week of 40 hours and no weekends, it would take you 5 years of doing nothing but that one thing to become an expert at it. If you are a "Jack of all trades" then it could take you 10 years, 20 years or maybe even a life time before you become an expert at any one of these trades. Point is, it is very easy to be a "Jack of all trades" but it is difficult to be a "master of one"; so focus on a few things or ingredients and become really good at delivering these ingredients together. Now you have a unique selling point. Next time remember this when you are just about to describe yourself as a "Jack of all trades".

Presentation is the second criterion for great dishes and excellent software. Making 12 features look awesome is always an easier and simpler task than making 120 look okay. Get the basics right first and then build from there. If you mess up on the basics, you really don't have a chance.

So how can you tell the difference between an excellent dish and an average one if all you have been tasting are average dishes?


Monday, April 27, 2009

Track Swine Flu On Google Maps

Google Henry Niman has published a Google Maps application to track the recent Swine Flu outbreak around the World. Google Google Maps platform is a great way to quickly publish applications regarding current events.

For a Swine Flu tracking application I would like to see someone do any of the following:

  • add a timeline and be able to view how the disease spread, just like the Google News Timeline launched at Google Labs
  • notification via e-mail or twitter if there was a case reported around your location
  • be able to compare the patterns of this outbreak with that of SARS or some other disease
Comment if you know of any application that does any of the above.

Saturday, April 25, 2009

Wordle - Still Beautiful Word Clouds

Generating a tag cloud is an art in itself, Wordle has perfected this art. I will try and generate a word cloud from this blog every month to try and visualize the topics I have been talking and ranting about here. Heres today's Wordle - click it to view a large size.

Wordle: elshawwa.blogspot.com today's wordle

Tag clouds do not just have to convey information using the size of each word, we are already restricted about what we can convey so one really needs to maximize the number of ways information can be conveyed. Word size is only one way, but we can also think about orientation of the words and color as Wordle does very well.

I have not seen a tag cloud yet that relates which words show up together. For example, am I using Twitter as an application? or a Twitter for advetising? or Twitter to expirement with advertising my blog?

If you know about a word cloud that makes use of more than just font size, color and orientation please share here. I'm always interested in different ways to visualize data especially when you are constrained in what you can do to visualize it.

Thursday, April 23, 2009

Pimp Your Slides Using Prezi.com

Learned about this neat presentation online application called Prezi. 100% online, free to use with some limitations (no private presentations, 100MB limit). Still awesome application, easy to learn and fun to use.

Love it.

Decided to give it a test drive and make a prezi out of my last topic "How To: Use Twitter Feed and Bitly to Promote your Blog"


Sorry about the bad quality images, I just saved them off the sites.



Link to it here or view full size/full screen: http://bit.ly/PoJB3

Thursday, March 26, 2009

Ministry of Transportation Ontario Online Transaction - FAIL!

Although I have been in Canada since 2001, I started my drivers license graduated program in 2004 only - I should have done it earlier but that is not the point of this post.

The Ministry of Transportation in Ontario has an online transaction application to process your test booking - unfortunately this application seems to suffer from major problems. I recall this happened to me when I booked my G drive test. Say I was going North and hit a stop sign and was going to turn East, I did not wait for the car that was on the East side heading West to clear the intersection and apparently that was a "dangerous maneuver"

So the online drive test booking engine stalled on processing my booking request yesterday so I have no idea whether the transaction went through or not and now I have to wait until it shows up on my credit card online report.

Over the past decade we came to expect certain applications to work in a certain way - when we want to make a purchase online we expect the transaction to complete successfully or let you know what went wrong. Online transactions are supposed to be easy to use, increase throughput and be convenient by avoiding you to have to line up somewhere - but when it does not work this is a problem. I waited 70 minutes for the transaction and it still did not complete.

For online retailers, this failure results in lost business, there are many of them so you can easily switch to someone else and make the purchase there - unfortunately there is only one Ministry of Transportation but this does not mean that their online applications can be below average. MTO needs to look at people using their online apps to book tests or pay fines as customers as well. Yes you are going to pay anyway sooner or later since you have no other option, but money now is always better than money next month. If I was ordering pizza online and this happened odds are my pizza will be free.

Sunday, July 06, 2008

Is this the coolest way to browse Flickr or what?



I Came across this Flex app (flash) a few weeks ago that searches tagged flickr images that match your choice of keywords. The app is called Tag Galaxy, try it out.

So once again I am MIA on this blog for several months now. Nevertheless I have been very busy the past few months working on some very interesting projects.

Google Earth Day 2008
What have you done for Earth Day this year? I was on a team that developed a website for others to make publish what they will do for Earth Day.

Martha Stewart Store Locator

A map based store locator for MarthaStewart.com allows users to search for stores that hold Martha Stewart products. Filter stores by city, zipcode, radius, product and retailer. Very neat!

Audiograff.com
A really cool Google Maps mashup that plots the location of music events - currently in the UK mainly, but will grow to world wide events at some point. The other neat component is that the database is loaded with new events from Ticketmaster every day! Got a band? what are you waiting for?

On another note, I bought a Nikon D40 recently and started reading about photography. I am really impressed with the picture quality of the D40, I barely have to do anything and the pictures come out ' redonculously' awesome! I will put up some of the best shots soon - maybe I can tag them and get them to show up on tag galaxy! All in all, I am very happy with that purchase.

This was a pretty generous update on Random Sh!t tonight for the very few readers left out there. I'll try to be more active in the future.

Come again