Are you looking for my non-technical blog?

This is now my technical-only blog, my non-technical blog is here.

06 March 2012

Meraki - Cloud Managed Networking

Every now and then we stumble upon new products, whether they are software or hardware products, social networks or networking gears. And the beauty of writing about those products is that they help you understand marketing strategies by example.

Niche Marketing & Market Segmentation

Before going into more details about Meraki and their Cloud-Managed network products, let me first introduce you to "Market Segmentation" as it was described by Laura Lake here.

Market segmentation is one of the steps that goes into defining and targeting specific markets. It is the process of dividing a market into a distinct group of buyers that require different products or marketing mixes. A key factor to success in today's market place is finding subtle differences to give a business the marketing edge. Businesses that target speciality markets will promote its products and services more effectively than a business aiming at the "average" customer.

Trying to sell product to everyone might look a good thing, but in fact it isn't. Selling your product to everyone means adding features to cover the needs of everyone, and you will definitely fail in designing a product to meet everyone's needs, or at least you will excel more if you focus on the needs of a homogeneous segment of the market. Also identifying and targeting a niche market will make it easier for you to tailor a Marketing Message specifically for such niche. Beyond Niche Marketing summarized the strategy for niche marketing in the following three steps.

1- Identifying the niche
2- Identifying the problems experienced by this audience
3- Communicating the solution your product/services offers for the problems being experienced by the niche audience.

Meraki's Cloud Managed Networking

Now let's go back to Meraki. Meraki is cloud networking company based in San Francisco, California. Initially they were making Wireless Access Points and recently they added Switches and Security Appliances (They don’t call them Firewalls/UTMs). Their selling point is that their devices are Managed from the Cloud. I.e. You get a Switch or Access Point from them, install it, and then log in to a portal in *their* Data Centre to manage your own Switch or Access point.

Their Marketing Message is that this approach simplifies the management process. And to understand their message more, let's see who are their possible market segment, which is somehow clear also in the case studies mentioned in their marketing materials and videos. It's clear that they are selling mainly to SMB’s or enterprises with big number of scattered offices. Take a coffee chain like Starbucks for example, they have coffee shops in different places, and they are normally not connected to each other, so having them all managed from the cloud makes life easier for their small IT staff. This is different from a Bank for example, where they have bigger IT team and they normally have a LAN connecting all their branches. In the Bank example, they probably will prefer to have on-premises management and they have no problem having some IT engineers in each branch, and now with the consolidation trend they might have all their servers in their headquarters. For the Coffee Shop Chain example, they probably on the other hand don't want to have an IT engineer in each of their Coffee Shops, they want to minimize their IT budget as much as possible, so they have no problem sacrificing having their networks management and provisioning software on-premises and have them installed and maintained by the vendor in the cloud instead.

You can see Meraki sales model clearly in their product-line. For example when it comes to the switches, they only have edge 24- and 48-ports switches, no backbone or data centre switches. And for the Security Appliances (Firewall/UTM/Wan Optimization/Link Load Sharing) they range from 100 Mbps to 2Gbps Firewall Throughput, which again is Branch Office numbers according to today’s standards. They are also having features tailored for such market segment such as automatic software updates for the networking products over the air. They make it easier to profile the connected users based on their mac addresses and fingerprints, so you know this is an iPad connected to the network and that one is the Windows PC you run your vending software on

It's clear that knowing their niche market helped them tailoring their marketing materials, message and product-line. And that's why when I try to understand what a company does from a pre-sales point of view, I see first what is their market niche, based on their message, and then it's easier for me to get a better understanding for what features to look for in their products, how to compare them with their competitors, etc.

25 February 2012

Getting Real - Agile Software Development

Yesterday I read an interesting book, written by the guys behind 37Signals, it's called "Getting Real". 37Signals is a Software Company that was founded in 1999 by Jason Fried and others, and David Heinemeier Hansson who joined the company in 2003 is the one behind the famous web-development platform, Ruby on Rails, which he created as a result of his work on Basecamp, one of 37Signals applications.

So back to the book, which you can read online by the way, is their trial to summarize how one can create software quickly by dealing with the actual problems he is trying to solve and staying agile and less complex. Or as they put it here.

Getting real is less. Less mass, less software, less features, less paperwork, less of everything that's not essential (and most of what you think is essential actually isn't).

I advise you to read it, however let me put here the most import point I liked the most.

As you have seen, the main idea of the book is to "Build Less", where "Less is More" or as Seth Godin put it in his - yet another interesting book, "Small Is the New Big". And you can do this by sticking to the following:
  • Half the features is better than half-backed features.
  • Ask yourself what is the main problem you want to solve and focus on it. For example, if it's a blogging system that you are creating, then focus on blog publishing part and let the tagging and commenting modules come next.
  • Don't compete with your competitors on features, this is an endless war. Beat them with your simplicity and your focus on the needs of your core customers and not the needs of everyone. 
  • Feel free to say No to new features requests. If you get a request for adding a new feature, ignore it and let it go. If it comes back to you, its yours to implement. If it doesn't, then it was never meant to be implemented.
  • Each time you say yes to adding new features you are adding complexity to your product.
  • Settings and Preferences add complexity to your project, and puzzle the uses. Feel free to take decisions for your users.For example, imagine you are designing and on-line shop, why your user go somewhere and set the number of results he gets in a page when searching for something? Why not stop for a moment and think, ain't 10 results too few and will bother the users with pressing next, next. Also 100 results might be too much and confuse the users and might not be suitable for those with slow internet connection. So guess what? You find 25 results is the most comfortable option for you as a user, then why not hard-code it. Well, may be later on, your users might not like this, so then you can think about it, but not now.  
  • Start with the core functionality of your software, then move to the less important features.
  • Fine tunings like alight this to left, move that two pixels to the left, etc. Those are stuff to be ignored and focus on making things work, and "iterative improvement" is your friend later on.
  • If it's not a problem that you are going to face now, then ignore it for now.
  • Scale later, don't bother yourself with scalability too early, most probably you will find out how to scale when scalability is needed.
  • Skip meetings as much as you can. Most of the time meetings are waste of time, so do your best to collaborate via short and to the point mails, or even tweets.
 Your development work-flow:
  • Brainstorm => Sketch => Interface => Code
You sure do the first two steps, you brainstorm then sketch your idea, design, database tables, etc. But being a coder myself, I always start with code then add the HTML to it later on. But let me quote the book to make it clear why the prefer doing the interface first:

Too many apps start with a program-first mentality. That's a bad idea. Programming is the heaviest component of building an app, meaning it's the most expensive and hardest to change. Instead, start by designing first. Design is relatively light. A paper sketch is cheap and easy to change. html designs are still relatively simple to modify (or throw out). That's not true of programming. Designing first keeps you flexible. Programming first fences you in and sets you up for additional costs.
...
We [also] start with the interface so we can see how the app looks and feels from the beginning. It's constantly being revised throughout the process. Does it make sense? Is it easy to use? Does it solve the problem at hand? These are questions you can only truly answer when you're dealing with real screens. Designing first keeps you flexible and gets you to those answers sooner in the process rather than later. 
As I said in the beginning, I advise you to read it, because for sure I cannot summarize it in a blog post, and also they sure it delivers the idea more than I do. I also may buy it as a hard-copy although it is available on line for free as a thank you gesture for those who wrote it.

P.S. I wish I can also adapt those ideas to other things other than software development, my day job is a Presales Manager, so why not apply this to both Network Design, Technical Sales and Team Management. Also some ideas here can be adapted to something totally different like drawing, or as Patrick Lafleur put it: "I really got over the "get into details right away" attitude after I took some drawing classes...If you begin to draw the details right away you can be sure that the drawing is going to suck. In fact, you are completely missing the point. You should begin by getting your proportions right for the whole scene. Then you sketch the largest objects in your scene, up to the smallest one. The sketch must be very loose up to this point. Then you can proceed with shading which consists of bringing volume to life. You begin with only three tones (light, medium, dark). This gives you a tonal sketch. Then for each portion of your drawing you reevaluate three tonal shades and apply them. Do it until the volumes are there (requires multiple iteration) ..."

    17 February 2012

    Notepad++ Sessions

    I don't remember using an IDE for writing code ever. I am allergic to such stuff. I prefer a text editors and command line compilers or interpreters. Earlier when I used to write C/C++ code on Linux, I used to write the Make file myself, on Windows I only code in Python since it doesn't require the IDE fuss. I think one of the main reasons that backs me off of writing mobile applications is that IDE's, Simulators and stuff like that are required there, let alone my natural hatred for Java.

    Anyway, I normally use Notepad++ as my text editor on Windows, and one of its cool features is that it remembers the files you had open in your last sessions and opens them the next time you use the program. Think of it that same way Firefox remembers the tabs you had open the previous time you used it. It's cool, it makes life easier when working on a project consisting of many files, instead of opening each one of them every time, yet sometimes you find yourself having zillions of open files from unrelated projects. So here is some other alternative.

    Notepad++ Sessions


    In Notepad++ you can save your current session into a file, hence you can have a session file for each project you are working on.


    First of all, go to "Settings >> Preferences.." then un-check the "Remember current session ..." field and assign a file extension for your session files, I used ".npp" here, but you can invent any extension.


    Now whenever you are on a project with many open files, go to "File >> Save Session" and save your session into a file with .npp as its extension, next time whenever you click on that file your previous session for that project will be open. Whenever you add or remove files to your project you can Save your session and overwrites your session file with those new updates.

    Python vs Ruby - String to Integer

    I'm a big Python fan, but recently, I decided to have a look at Ruby. I'm still not that qualified to do a comparison between the two languages, so let me instead take a snapshot from each of them and do a quick comparison based on it, and based on my own understanding of each.

    Both languages have their ways to transform a strings with integers in there into integers.

    In Python:
    >>> int("33")
    33
    >>> int("33 + 3")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: '33 + 3'
    >>> int("Three")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: invalid literal for int() with base 10: 'Three'


    In Ruby:
    irb(main):007:0> "33".to_i
    => 33
    irb(main):008:0> "33 + 3".to_i
    => 33
    irb(main):009:0> "Three".to_i
    => 0


    So first of all, Ruby seems to be more strictly Object Oriented language, than Python. Sure, Python treats everything as an Object too, a String or an Integer are objects in both languages and they have their own properties and methods, which is not the case with C for example, however I see here that Python uses a built-in methods, while Ruby - which also has its built-in methods - yet it tended more to do the transformation here the object way. 

    Python prefers to have one - and preferably only one - obvious way to do things, hence when I typed stings composed of stuff other then integers it returned an error. It tends to make it easier for programmers to predict the result. While in Ruby, the result wasn't that obvious, it tried not to return an error and decided to think in an work-around for me me, on the second line it just took the integer part at the beginning of the string then ignored the rest of it, while in the third line it returned zero. At the end of the day, this is a matter of taste, some people might like the Python way of keeping everything predictable, while some others might like the Ruby easy-goingness and not nagging and returning errors to them all the time.

    16 February 2012

    Pinterested in getting new Glasses

    You sure was hit with the hype of nowadays, Pinterest. I got an account there about a week ago, was not able to figure out what's that! Well, I added the "Pin It" to my browser and every now and then, I pin something there and then visit the site out of curiosity to find out how the pin will look like there. See, it doesn't look like a pinteresting website at all. Pun intended. But today I found a use for that website, and may be this is how it's meant to be used.

    I want to buy new glasses, so once more out of curiosity I decided to search for men's glasses in the up left corner of Pinterest's homepage, and it's apparent according to the results that geeky plastic frames are hot nowadays ... wait a minute ... so this is gonna be a sort of social searching engine or something!? Why not? A generic search for something like Superman on Google gets you some results from Wikipedia and IMDB, while on Pinterest the results are different for the same search query. How about "Business Card Design" or "Future Technology"? See, there is a use for that thing.

    09 February 2012

    Kippt = Delicious + Instapaper

    When not coding, I like to write posts reviewing new Web2.0 services, it's fun, isn't it?

    Dilicious & Instapaper

    During the old days of the dial-up internet I used to visit pages, without reading them to keep them in my browser's cache to read them later. Later on, I started using Del.icio.us, yeah, I started using almost after it was launched, and when its name was written in such domain hack way. At that time, Delicious was a hybrid of saving links for reading them later, a replacement for my browser's bookmarks, and more important, a way to discover interesting links and stuff to read via its social bookmarking capabilities. Almost a year ago when I got my first tablet, I started to explore the charm of reading my "to be read later" links from the couch or in bed, hence I started using Instapaper. It saves links, de-clutters the web-pages and syncs them to be read off-line. Now things started to get a bit confusing. How to sync my to-read links in Delicious to Instapaper? How to move the stuff I like in Instapaper to my Delicious for my future reference? If This Then That, or ifttt.com can be handy here, but still it works one way but not the other way round between Instapaper and Delicious.

    Kippt

    Won't it be great to find a tool that does the two tasks? Kippt, which is pronounced like "Keep It", is both a bookmarking service and read-later tool. They have a GTD-isque interface with a boxes marked as Inbox, Read-Later, and Starred Items. It can also import your Instapaper, Diigo, Delicious bookmarks, as well as some other services. However they are still in early-stage, so there are some missing features that I'd like to see there, such as:
    • Android Application to sync my "Read Later" pages. Something a-la InstaFetch, and integration with Android's Share Button to save bookmarks from my Tablet/Phone while surfing the internet.
    • Bookmarked links aren't tagged. As I told you, I am an old Delicious user and I am used to tagging my bookmarks there. Don't know if they are going to add Folksonomy to bookmarks and may be tag stuff saved for later reading as well or not?
    • Some social features, i.e. be able to see my see my friends bookmarks, or for example see all bookmarks people saved under the term "Python".
    • API, so for example ifttt.com can create recipes to integrate more services with them. Let's say, I want to import all links in tweets I star on twitter to Kippt.
    I am not sure if they are going to implement all those features, but I know for example that they will be releasing an API and Mobile App sometime soon.

    Kippt: https://kippt.com/ - @KipptApp

    03 January 2012

    A Waitress & A Flask

    Flask is a microframework for Python based on Werkzeug, Jinja2, and here is a simple Flask Hello World code:

    from flask import Flask
    app = Flask(__name__)

    @app.route("/")
    def hello():
    return "Hello World!"

    if __name__ == "__main__":
    app.run()

    Waitress on the other hand is a pure-Python WSGI server, and here's normal usage of the server:

    from waitress import serve
    serve(wsgiapp, host='0.0.0.0', port=8080)

    So, here is how I wrote code to run Flask from within a Waitress WSGI Server:

    from flask import Flask
    from waitress import serve

    app = Flask(__name__)

    @app.route("/")
    def hello():
    return "Hello World!"

    if __name__ == "__main__":
    #app.run()
    serve(app)

    Documentations:
    http://flask.pocoo.org/docs/
    https://github.com/Pylons/waitress/blob/master/docs/index.rst

    29 December 2011

    Quick jQuery Intro.

    For the second time in two days, one of my friends asks me about jQuery. So, here is a quick introduction to it.Let's say we have the following HTML that contains a list of four items
    <html>
    <head>
    <title>jQuery demo</title>
    </head>
    <body>
    <ul>
    <li class="news_line">Mr. One</li>
    <li class="news_line">Mr. Two</li>
    <li class="news_line">Mr. Three</li>
    <li class="news_line">Mr. Four</li>
    <ul>
    </body>
    </html>
    Now we want to make it more interactive, so when the mouse hovers on any of the below items it turns red, and when it goes away it turns white again. Here comes the beauty of jQuery, you can give them all a CSS class "news_line", hence you write a function once and it is applicable to them all. So, first of all, you have to include the following script.

    <script
    src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"
    ></script>
    You put all your jQuery script between the following, this makes sure it's not executed until the page is loaded successfully
    <script>
    $(document).ready(function(){
    ... YOUR jQUERY SCRIPT HERE ...
    });
    </script>
    We now are going to use the following function, which simply mean attach an event catcher to the items with class "news_line", and make the event trigger is 'mouseover', i.e. whenever the mouse hovers over it. We also have other events such as 'mouseout', etc.
    $(".news_line").live('mouseover',function(){
    ... DO SOME STUFF HERE ...
    });
    One more thing to notice is "$(this)", the above command searches for all items with class "news_line", now when we use "$(this)", we are referring the the item we are dealing with now. And starting from that point we use another functions "css()" to change the object's background colour. You may in some other cases use stuff like "$(this).children().css()" to change the colour of all of the children of the matched items, or "$(this).parent().parent().hide();" to hide the parent of the parent of the item you are referring to, etc.So, finally here is the code we are talking about here.
    <html>
    <head>
    <title>jQuery demo</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
    <script>
    $(document).ready(function(){
    $(".news_line").live('mouseover',function(){
    $(this).css("background-color","#ff0000");
    });
    $(".news_line").live('mouseout',function(){
    $(this).css("background-color","#ffffff");
    });
    });
    </script>
    </head>
    <body>
    <ul>
    <li class="news_line">Mr. One</li>
    <li class="news_line">Mr. Two</li>
    <li class="news_line">Mr. Three</li>
    <li class="news_line">Mr. Four</li>
    <ul>
    </body>
    </html>

    Finally, here is a list of all jQuery functions, events, etc.
    http://visualjquery.com/

    15 November 2011

    Democratization the Internet Infrastructure

    You sure heard of the Internet blackhole Egypt lived in when Mubarak's regime shut down the whole internet during January revolution. Other countries are filtering and censoring the Internet, Tunisia, Syria and Iran are just few examples. And recently the availability of the internet to the demonstrators in the Occupy Wall Street movement is an essential issue.

    Isaac Wilder and Charles Wyble are two of the participants in  OWS, and they also are the founders of an initiative to democratize the internet infrastructure using Wireless Mesh Network technology. Their initiative is called the FNF (Free Network Foundation)



    Let me first give you quick brief about Wireless Mesh Network, normally at our homes we connect our access point to the internet via some sort of wired technology, for example ADSL. But let's imagine if I decide to get my ADSL connection then can give that internet I have to my neighbour's Access Point wirelessly, and he on his turn give it to his neighbour and so forth. So we will end up with having one internet connection shared among us. You can compare it to peer-to-peer file sharing (Kazaa and Torrent), where users are connected in a sort of mesh network.

    Basically, the above description is how a Wireless Mesh Network look like, and it is already used but in different scenarios. When you need to have wireless coverage outdoors, you normally need many Access Points to cover the whole area, but also it is hard to get dedicated internet access to each of them, so you end up connecting one of them to the Internet ADSL hose, and then share that internet connection from one to the other using mesh topology.

    Now from what I've read in the Free Network Foundation website, they are looking forward to have a similar mesh network that spans a whole metropolitan area or city, and in the first stage each of those cities will be connected the other cities using the internet, but I can see that they have plans to use underutilized spectrum in the VHF and UHF bands to connect those cities without the need of the Service Provider's infrastructure whatsoever, i.e. we will end up by replacing the Internet infrastructure we have today, and people will not be required to go to the Internet Service Providers or Mobile Network Operators for internet access any more.

    How would such a system create cheaper Internet for everybody?

    In the initial phase, people will be sharing their internet connection, so they will be saving money, and as you can see, their future plan is to totally replace the ISP's and MNO's so it decrease the internet access prices dramatically if not making it free.

    But in my humble opinion, making the internet cheaper is just one benefit, but the most important benefit here, is that it will make it free from the government and ISP's censorship and control.

    Is this feasible?

    Well, we already have seen small scale examples of what they are willing to do, so technically it should be feasible, however I believe there will be many other obstacles such as legal or economical issues.

    For example, here in Egypt, no one is allowed to cover public areas using Wifi, without having license from the government, and this might be the case in different locations, and if not, Mobile Operators will sure lobby to ban such thing, as it will directly harm their business.

    Also, I believe I can compare the FNF to Web2.0. In Web2.0 the user-generated content is generated by users, and here the infrastructure is made and operated by the users as well. And while being at this analogy, huge part of FNF's success relies on users participation. Facebook's success is totally dependant on the user's participation there, and the number of photos and content they share, like and comment on, and so is FNF, it will only succeed if millions or hundreds of millions decide to participate in it, other wise it might fail.

    Where are wireless mesh networks typically used?

    Nowadays it's typically used in covering outdoor areas, but as far as I know, all the available mesh networks are like separate islands each of them is built and controlled by a single business or governmental entity. FNF should do to the state of wireless internet access what Gnutella and Kazaa did to file sharing, where the connection gets democratized and the network infrastructure will be owned and controlled by the people.

    Have they ever been used in a protest context?

    Many people though of a similar solution when the internet was down in Egypt, during January revolution, but it remained an idea and I am happy to see FNF taking it further.
    During the revolution (after the internet came back), people living near Tahrir square opened their Access Points for the demonstrators to use freely. Although what they did is a very basic thing compared to FNF plans, however it shows the need for such solution, especially where governments can either totally shut the internet down or at least censor it.

    What is the difference between a WMN and VPN?

    They two are very different. WMN (Wireless Mesh-Network) is meant to provide physical layer connectivity to users, while VPN (Virtual Private Networks) are built on top of that connectivity to provide connectivity and security (encryption) in the upper layers of the internet stack.

    To make it easier to understand, you can consider WMN as the roads and streets that connect our houses together, while VPN is the cars that run on those streets. Without the roads, no matter how good are the cars you have, they will be useless. VPN can help fighting governments censorship of the internet, but WMN can fight both censorship and internet blockage as well, which VPN's can't deal with.

    Hint: This is basically how I understood the FNF ambitious initiative, and here are links to Mesh Networks, Sovereign Computing, and Packet Radio projects listed on FNF website.


    Sources:
    How Occupy Wall Street Is Building Its Own Internet
    The Free Network Foundation

    30 September 2011

    Delicious Redesign

    As you know, Yahoo sold their social bookmarking service, Delicious, to AVOS, a while ago. On September 26, AVOS redesigned Delicious. It's sad how Facebook grabs the whole internet's attention with every redesign they make, while Delicious redesign was ignored like that. However since I am a Delicious fan myself, let me write my two cents here about their new design, which by the way is not only an interface redesign, but many functionalities have been changed too.


    • Avatar: Now you can add your own Avatar (profile picture) to your profile there. Silly!? Not really, I guess it's meant to make the service more social. Although Delicious was one of the pioneers in the Social Web movement, they have been a bit anti-social compared to newer services like twitter, espcially when Yahoo stopped any further development in the site for ages.
    • Stacks: Well, before talking about that feature, let me tell first you how I used to use Delicious earlier. Other than saving my bookmarks, Delicious was like my way to discover new startups, python libraries, news, etc. All that was done via two tabs that were normally ignored by many users, the Network tab and the Subscription one. The Network tab was like the timeline of my friends' bookmarks, or you can say it was the twitter-like face of Delicious. In the Subscriptions, you were to subscribe to some tags related to interesting topics to you, and it lists all the links saved under those tags whether by your friends or by strangers. Now those two tabs aren't there any more, and it seems that the Stacks feature is meant to replace them, it's like a way for people to curate links under a specific subject, give the whole curation a title and description. You know, it's like a less-geeky replacement for the old tags pages, which are still there by the way. Currently, you should curate the links within a stack manually, however I guess they will let us grab them from specific tags later on. Now if you ask me, are Stacks really a good replacement for Network/Subscriptions, well, I am getting older and don't get used to changes easily, but I guess after a while I'll get used to it as a replacement for the Subscriptions tag, however I'll still miss the Network unless it is - or both of them are - still there but hidden somewhere in the new interface and I am not able to find them!!
    • API: It's cool they left the API as it is for backward compatibility, as now I can still use the same bookmark button I have in my browser. Also, in case any developers had applications built using the old API, they should still function now. However I believe there should be additions to reflect the new features. Are the "tag bundles" mentioned in the API docs for example meant to reflect the Stacks? I have no idea.
    • Rough Edges: Some rough edges are there with the new design, but this isn't a big deal as they are minor one, and they made it clear that they are back to beta status and are looking for users feedback now. 
    • Auto-completing Tags: I've noticed that tags whether in the Bookmarklet or on the site itself ain't auto-completed. Is it something they are working on to improve, or is it a new trend! Hope it's the former not the later. The auto-completion of tags isn't just meant to make our life easier by typing less, but more important, it prevents us from creating too many with slightly different spellings in reference to the same thing, startup, startups, start-up, etc. 
    Tags: , ,