Monday, February 17, 2014

Why Google bought Motorola for $12.5bn, then sell it for $2.91bn.

Most people are still surprised why Google decided to buy Motorola Mobility for $12.5bn back in 2011, only to sell it to Lenovo for just $2.91bn 3 years later. Don't be fooled into thinking they were doing it because they thought the business has a good future potential. Here are some of the reasons why they bought Motorola Mobility:


Patents

This is the number 1 reason why they decided to buy Motorola Mobility. Apple and Microsoft were harassing Android manufacturers using their patents and Google wanted a way to protect Android manufacturers. Patents are like weapons of mass destruction, big companies need them to avoid getting sued for patent infringement. Whenever a company tries to sue them, they simply counter-sue them. Large part of the Motorola Mobility transaction was for patents. Google is going to retain ownership of the majority of patents. Now Apple and Microsoft won't bully them with their nuclear weapons because they also have the nuclear weapons.

To protect Android

Samsung was changing Android and applying their own skins in such a way that normal users weren't gonna recognize that they are using Android, in future they were simply going to release their phones with their own Android clone which they got for close to nothing. Google had take steps to protect Android from Samsung's monopoly. So, Google had to buy Motorola Mobility to bully Samsung into taking a step back. If Samsung didn't back down, Google was simply gonna use power they have over Android to kill Samsung.

To better compete with Apple and Microsoft

They knew that Microsoft is going to buy Nokia and Apple already owns both hardware and software. It is much easier to develop a gadget when you control the software. That's why Apple devices are so well designed and function properly while majority of Android look like cheap knock-offs from the East. It makes things easier when you control both hardware and software.

Research and Development team

Another reason may be that they wanted to acquire the team, instead of building one from scratch. This is what is called an acqui-hire in technology circles. It is an acquisition done solely for to acquire a team. Normally when companies are acquired, they get paid just enough to convince them to dump their idea to conquer the world and join the bigger company with big pockets. Majority of Google products are acquisition. Android was an acquisition. YouTube was an acquisition and a whole lot of other companies that were acquired just for talent.

To avoid anti-trust cases

They also did it to avoid competition commission. Android now have monopoly over the smartphone market. If Motorola became super-successful, it was going to be seen as an abuse of that power. That's why they sold Motorola Mobility with a combination of cash and stock, so that they can still retain some ownership and push Motorola Mobility to the top while avoiding competition commissions at the same time.

They needed to spend money

When a company carries too much cash in hand, investors get worried because that money is supposed to be used to grow the company, or returned back to the investors in the form of dividends.

Monday, October 28, 2013

What is a fair price for a website?

Why would one Website Designer quote R40,000 for a website which another person can design for R2,000? That's the question most businesses are faced with when they shop around for a website. Unfortunately there is no straight answer for that question. I will try to explain it in this post.

I will start with the group that charge less. Here are the reasons why they charge less:
  • They charge less because it isn't their full-time job are easier to understand because they have another job which is bringing food on the table. They can afford to charge below the market rates because most only wants pocket money. 
  • They charge less because they are less experienced, it is understandable because they don't have enough skills to charge higher fees. They are still learning the craft of creating websites. Even if they find jobs, they will earn low salaries anyway. 
  • They may charge less because are very experienced website designers who have worked for bigger companies for years and have already proven themselves in the industry. They know what they are doing. Most have just resigned to become independent. They will charge less not because they can afford to live on a shoestring budget, but because they are trying to build clientele database. Problem is that they end up not making enough money to keep lights on and they go out of business and go back to full-time employment to recover.
  • Some charge less because they simply don't value their own time. They do it for fun and are less likely to care about delivering value to your business.

Then we have an elite group that charges more. They charge more because they offer more than just a website. They build websites that do business. They build websites that help your business to make more money. They have perfected the art of web design and development and they understand that a website does more than just display information.

Here are some of the reasons why this elite group use to justify their higher prices:

  • They operate from office and they have office bills to pay. If they charge less, they will be out of business soon.
  • They charge more because they don't focus on delivering a website that looks beautiful in the eyes of their customers, but they focus on creating a website that clients of that business will find useful. 
  • They charge more because they also make sure your website can be searchable on major search engines and they give you advice on how to make it to the first page. 
  • They also make sure that they help you track your visitors and can give you advice on what changes you need to make in order to make your website more useful.
  • They don't create a simple website, but an online brand for your company.
  • They charge more because they create usable websites that doesn't confuse customers.
The elite group doesn't charge per hour in most cases, they charge based on value they are going to deliver to your business. They understand that a website isn't just a collection of links, graphics and text, but an online brand for your company. They spend more time evaluating your needs and coming up with a strategy that can best serve those needs, and they deliver on those needs.

It is very important to know which kind of a designer you are dealing with. If you have a tight budget and your website won't need much modifications in future, it is always safer to look for a group that charges less but are experienced.

In the end, the choice is yours, whether to go for the cheap ones and get a collection of links, graphics and text, or go with the elite ones that create more than a website. 

Just like everything in life, you get what you pay for. Don't expect to get a Rolls-Royce at a price of a small budget car like an OPEL Corsa. Also make sure you don't buy an OPEL Corsa at a price of a Rolls-Royce. They are many designers who claim to know what they are doing and charge more and deliver less. You will see them because they will start charging you before even understanding your business requirements.

Recurso IT, which is my web and smartphone apps development company, positioned itself between the "El Cheapos" and the elite group. Visit our price list page to get an idea of how much we charge for our services.

Thursday, June 27, 2013

Everyone must have a blog and/or a website

Most people underestimate the power of having a portfolio website and/or blog. When you are going to attend an interview, you are advised to visit the company's website to familiarise yourself with the company, why not do the same and have employers look at your website and/or a blog to get to know you before they can even meet you?

Majority of companies are worried that they will hire the wrong person, and will have to go through a lengthy legal process to get rid of that wrong hire. That's why these days employers are resorting to using technical tests and other time wasting techniques to weed out people who don't know how to do the job. Let's make it easy for employers by having a portfolio website and a blog.

I think everyone who has access to internet must have a portfolio website and a blog to showcase their skills. If you are in law industry, setup a blog for free and start blogging about legal stuff, if you are a journalism student, start writing stories that you find interesting in your community on your blog, make it easy for your future employers, they wanna see your writing style and your passion for the job. I know some people reading this article may complain that they don't have time to blog, but they spend the whole day writing things on social networks. Writing an article doesn't even take more than 30 minutes of your time. You don't have to write an article everyday.

Most people will give you all sorts of excuses to avoid writing on a public platform. Here are the top ones:


  1. I don't have something to write about
  2. I am not good at writing
  3. I am not that popular, no-one will care
  4. I don't have time to write
Let me break down those excuse and give you solutions to any of them.

Excuse number 1 can be a valid one for people who have chosen a wrong career, but they can always write about the things they are passionate about, who knows, maybe someone who can help you change a career may read and give you a chance.

Excuse number 2 is just that, an excuse to avoid doing things that are important to your life while doing things that aren't important like liking photos of half-naked people on social networks all day. No-one was born a good writer, the best writers had to start somewhere, the best writers you know, were terrible writers than you are when they started, they became better writer because they used to do it more often. Practice makes perfect. I am not a perfect writer,. I don't even consider myself good, but I am willing to continue writing until I get better at doing it.

Excuse number 3 is more like a chicken-egg problem, you want to become a popular writer with thousands of readers before you can start write something, and readers are waiting for you to get popular before they can read your stuff. The truth is, you gonna have to work hard to be a popular writer, then you can have thousands of readers. It is true you are not popular writer yet, but someday you will be, for now just focus on perfecting your writing skills.

Excuse number 4 is the most popular excuse. People will keep themselves busy with useless things like watching TV soapies 4 hours a day, instead of doing things that will help move their careers to the next level. No-one have time for anything, you have to make time. Your career is more important than knowing if Khethiwe will finally listen to her family and close friends and give up her alcohol addiction. Knowing that piece of information isn't going to help your career in any way. You are just wasting your time. Cut one soapie out of your daily schedule and use that time to improve your writing skills instead. TV is like a visual drug, it makes you feel good in the short-term, but bad for you in the long run.

I always advice web development students to setup a simple portfolio website which they can use to showcase their talent, but for some reason, they don't do it. How will someone know that you can create a website and passionate about it when you can't even set-up a website for yourself. It won't be a great website, but if you keep doing it, you will get better at doing it. When I was still a student, my curriculum vitae was available as a website. It made it easy for me to find a job when I started looking for one.

This world is littered with people who claim to know how to do something, while they know that they can't. They know how to talk, but can't translate that talking into action. Separate yourself from those kind of people by creating a portfolio website and/or a blog to showcase your skills and talents. It's always nicer when you are been interviewed to point to something you have done, instead of talking about it. Your qualifications aren't a guarantee that you can do the job, that you know, and employers know better.

Wednesday, June 12, 2013

Help us so that we can help you

I have done intensive research about US based technology companies, trying to find out why they are so successful, and it turns out that the people of USA are the ones that make those companies great. They support their startups with all they have, investors will put more money to it, making it easy because now their entrepreneurs will only focus on growing the company without worrying about capital to grow their business and how they are going to survive. Ordinary people will use it in numbers, and when the company finally succeeds, it creates jobs for their country. That's why they dominate tech industry.

When those entrepreneurs get rich, they give back to the community by investing in other startups as angel investors, some become advisors to those startups, and that keeps their startup engine rolling, and that also makes them richer in the process.

Then I look back at the situation in my own South Africa. They do the opposite, when people get rich in South Africa, they don't invest that money back into the system, to make more. They keep it to themselves. I don't blame them because majority of them had to perform miracles before they succeeded, they never had support from the same people who accuse them of not giving back to the community. The hand that gives, is the hand that receives.  We can't expect them to give back something we never gave them. Let's give those who are trying to uplift their communities a helping hand, so that they can give back when they finally succeed.

Mostly it's jealousy that leads people not to help those who are trying to uplift their communities, they look at the negative side of things. They think about the way the person will brag about their riches, and forget that those people will need people to help them, and that will create jobs. This reminds me of Maurice character in Madagascar when the giant New Yorkers arrived at their territory. He said something like "They've come to kill us! And take our women! And our precious metals! ". On the other hand, King Julian saw a perfect opportunity to use the New Yorkers to defend them against the Foosas who were scared away by just one loud roar from Alex The Lion.

Instead of checking the negative side of things, can't we focus on the positive side of things? Let's think about the jobs the people from their communities will get, the expertise and all the respect the community will get for producing such kind of great people. Let's be honest, the only thing we know about Qunu is that it is where our great statesmen, Nelson Mandela was born. Think about all the opportunities people from that community can get just by mentioning that they were neighbours of the greatest person to ever come out of South African ?

You maybe wondering how this all fits into a blog that normally talks about programming and technical stuff. I am one of the people who wants to see an end to our over-reliance of foreign technology. Look at all the social networks you use. Facebook, twitter, Whatsapp etc. Do they contribute anything to anyone you know? Are they gonna give your little sister a job when she completes her degree? Do you even know a single person who works for them? The answer to all these question is a resounding NO. So, why do we overlook our own home grown products that are more likely to contribute to our own country?

We need to stop blaming the government for all our problems. This is our government, it isn't ANC government. We need to take ownership and make things happen, not wait for people who are in power to make things happen for us. When we go on strike, we vandalise the same things we are going to use in the future. Do you really think you are hurting government by breaking windows of your own schools? When winter arrives, who is going to sit in a class with broken windows, our leaders or our kids? Let help them succeed, so that they can help us succeed.

Leaders are not there to solve all our problems, they are ordinary citizens like me and you. Working together with them, we can do more, I am sure you have heard about that slogan before, so, you must ask yourself this question: "What am I doing to help make South Africa great?", if the answer is nothing, I think your right to complain must be taken away from you.

Job creation is also our responsibilities as shareholders of this country, it's not responsibility of the leaders. It's even possible that they are clueless about creating jobs, all they can do is create an environment where it is easy to be an entrepreneur and more jobs will be created, but they aren't gonna force you to login to Khoro.com and help make it the number 1 social network in SA, that will help create jobs, and generate more tax to the state.

Wake up South Africa, break away the chains of slavery, let's learn to rely on ourselves, because if we don't, one day we will do something which is on the wrong side of those we depend on, and when they impose sanctions, they will take away everything. If we don't depend on them, then they won't be any reason to be afraid of doing or saying something that can anger them. It's hard to negotiate for anything when you don't have negotiation power. We have given them the power for a long time, it's time to take it back.

Help entrepreneurs so that they can help the country to fight poverty and unemployment. We have all the expertise to make it happen, don't let them fool you into thinking we don't have skills, what we lack is support. Help entrepreneurs with that support, and they will help create jobs, because government isn't gonna employ everyone, otherwise people who were supposed to help create jobs will succumb to employment, instead of helping with creating jobs. It's not like majority of them go into business because they can't find jobs, ironically they are the ones who don't have that problem, and there is nothing wrong if they get rich in the process.

South Africa, karma is real, to get help, you must be ready to help other people. People are more likely to help you, if you helped them to get what they wanted.

Madia Thomas is the creator and co-founder of South African-based social network, www.khoro.com.

Monday, June 3, 2013

How to be a programmer, or not

Can you imagine if we all think the same way, love the same things, enjoy same kind of music, enjoy same kind of food and prefer same kind of weather? This world wasn't gonna move forward as fast as it is now, because we will be working on fixing the same problems, instead of fixing them in parallel.

Fortunately, that's not how the world works. Some people like working with people and hate machines, some enjoy working with machines and prefer little human interaction when working, some people enjoy serving people and they are civil servants.

It's always nice knowing that while you are fixing problems in your field, someone is busy researching some new vaccines that will help you when you get diseases, and that person enjoys it and do it with passion. You don't have to get worried that if you catch flu, you have to stop doing what you do and look for a vaccine.

It's the same thing with computer programming. I will outline some non-negotiable traits that you need to make sure that you have before you even attempt to learn programming.


You must love computers

You may think this one is obvious, but I have met a lot of people who don't like spending time in front of a computer, but they want to learn programming. To be good at something, you have to do it over and over again, and with programming, you need to do it on a computer over and over again. That's why I am saying that you need to love computers before you even attempt to learn programming.

You mustn't be lazy to type

If you spend a day with a Computer Programmer, you will think all they do all day is type. There is a joke that says a programmer is simply an overpaid typist, but that's half of the story, you don't just type in programming, you have to think a lot while typing.

You must be a logical thinker

A program does a lot of logical decisions, and it doesn't do it on its own, it must be told what to do by a Programmer, and if a programmer isn't a logical thinker, it will be hard to write a program that uses logic, when you can't think logically.

You mustn't be lazy to read

If you are lazy to read, Computer Programming isn't for you. Before you start working on a new project, you have to read specifications that explains what the program must do, so that you can design a program that meets your client's requirements. This is the most important character because most projects fail because they don't meet the client's requirements, not because they aren't functioning properly.

You have be a good communicator

If you don't understand something properly, you have to ask questions, setup meetings and get answers, send emails, whatever you can to get clarity. The thing you must avoid is make assumptions, because assumptions are the mother of all fuck-ups in programming. If you don't understand, ask, if you see some missing information on the specification, ask for clarity, don't assume. 

Listen to everyone who does the job you are trying to automate and understand that they won't always be nice to you, understandably so because some will be giving you information that will help you to keep them out of their jobs. If you are automating security, obvious some guard who must give you information about how security works at that building must give you details.

Commenting your code is also part of communicating to other people on what you were trying to achieve when you added that code, because it's not always clear.

Early in your career, you won't be expected to have this skill, but as you progress, you need it. A junior Programmer can get away with it, and someone who is technical can always attend meetings on their behalf, then they just need to be good listeners.

You must always be ready to learn new things

I know only a few programmer who have worked in one industry, on one program that does one thing, the rest of us are always working on new things, using new technologies. If for an example, a doctor wants you or the company you work for to design a program that manages a surgery, you have to learn how surgery works, what happens when a random patient enters the building and all the steps that the patient will go through till the end.

While I was working for Alexander Forbes, I had to learn about pension schemes and how they work, when I moved to FNB, I had to learn about legislations that affects banks, and write exams about them. In most cases, the company you work for, will give you training, but not all companies have that luxury. When I was working for a company that does investments, I had to invest my own money to understand how share investing works, and it turned out to be the most important skill I have learnt in 2012.

Conclusion

This is just minimum requirements that you need to possess, there is more, but this is what you absolutely require in order to make it in this industry. You need to understand that not everyone was born to be a programmer, some people make good doctors, some make good musicians, some make good politicians etc. 

You don't have to force yourself to do something you aren't passionate about because your father told you to do it, or because it pays well, oh yes, it does pay well. Top 20 of world's billionaires is dominated by programmers, mostly dropouts, but that shouldn't be your only reason to do it, you must make sure that you enjoy doing it, and you will become better at doing it, and you will wonder why someone have to pay you to do it.

I love programming too much in such a way that I wouldn't mind doing it for free, but I have bills to pay, that's why I charge for it.

Thursday, May 23, 2013

Introduction to Computer Programming: Day 10

Welcome to final day of our introduction to Computer Programming. Indeed it is a very emotional day because we have come to and end of the series. The good news is that I am still gonna continue writing articles about Computer programming.

Focus of today is on error handling. Some unforeseen circumstances can make a program not to run as planned, and when they happen, the program will crash, and to recover you have to restart the program. Today I am going to show you how to write programs that don't crash when unforeseen things happen.

I will use a simple and most common problem in Computer Programming, which is an error  hat happens when you try to divide by zero.




#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int number1;
    int number2;
    
    cout<<"Enter number1: ";
    cin>>number1;
    
    cout<<"Enter number2: ";
    cin>>number2;
    
    int answer = number1/number2;
    
    cout<<"Quotient: "<<answer<<endl;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}



Run(F9) the program and enter 2 when prompted to enter a number, then enter 0 when prompted for number2.

Your program will crash, with no way of recovering. I am sure you have seen programs hanging like that. Those who use Blackberry can relate to this. You are busy using your phone and it suddenly freezes. It's an exception that causes this. Today I will show you what Blackberry programmers didn't bother to do to prevent such things from happening.

To fix this issue you use exception handling. This is how you write the same program, but doesn't crash. The program will show the user the mistake and give the user an opportunity to correct and continue.

To fix our program, we have to check number 2 before trying to perform division. This is how you write the same program.


#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int number1;
    int number2;
    
    cout<<"Enter number1: ";
    cin>>number1;
    
    cout<<"Enter number2(0 not allowed):";
    cin>>number2;
 
    if(number2 != 0) {
        int answer = number1/number2;
        cout<<"Quotient: "<<answer<<endl<<endl;
    }
    else {
       cout<<"Dividing by zero isn't allowed!"<<endl;
    }
    
    system("PAUSE");
    return EXIT_SUCCESS;
}


This is the safest way to write a program, You will notice that I even added (0 not allowed), that will help for users who read, which is more like 5% of the population. You can also research about try...catch blocks. I must admit, I am not a great fan of using try...catch blocks. Especially in C++ because they were badly designed. Some languages like Java forces you to use them.

I prefer preventing an error from happening, not to recover after it happened. Prevention is always better than cure. Same applies to programming.

This is the end of our 10 day program. Keep visiting the blog for more advanced programming related topics. Don't forget to subscribe by email to the blog, so that I can email you a copy of the book for free when it is done.

Wednesday, May 22, 2013

Introduction to Computer Programming: Day 9

Welcome to Day 9.

Today I am going to show you how to create a program that create a file on your computer, and will show you how to write another program that read that file.

Please created a folder on the C-drive called TestFolder, you are going to use that folder to save your files. Open Dev-C++ and type file program:


#include <iostream>
#include <fstream>

using namespace std;

int main () {
  ofstream myfile;
  myfile.open ("c:\\TestFolder\\example.txt");
  myfile << "My name is Thomas Madia.\n";
  myfile.close();
  
  system("PAUSE");
  return EXIT_SUCCESS;
}


Run the program, close it and go to C:\TestFolder and check if there is a file called example.txt, open it with Notepad, and you will see something written.

You will notice at the top there is a new header file which was included:

#include <fstream>

This header file contains functions and type for working with files. We included it because our program wants to use a type called ofstream. We declared a variable called myfile. On the next line we are opening a file on the folder called TestFolder, which is on the C:\ drive. On the next line, we wrote some text on the file. Then we close the file. When we close the file, everything you wrote on it is saved and other programs can use the file.


You will notice that to write to a file works the same way as cout.  Writing to a file is equivalent to displaying on the screen, and reading from a file is equivalent to accepting input from command-line using cin.

Remember to always close the file, because if it's not closed, other programs cannot use it.

There if 3 kinds of types that deals with files.
  1. fstream - this type opens a file to read and write to it by default
  2. ofstream - this type opens a file only for writing to it by default.
  3. ifstream - this type opens a file for reading to it by default.
You can also use this optional flags when you call the open method. To indicate that your reason for opening that file.

ios::inOpen for input operations.
ios::outOpen for output operations.
ios::binaryOpen in binary mode.
ios::ateSet the initial position at the end of the file.
If this flag is not set to any value, the initial position is the beginning of the file.
ios::appAll output operations are performed at the end of the file, appending the content to the current content of the file. This flag can only be used in streams open for output-only operations.
ios::truncIf the file opened for output operations already existed before, its previous content is deleted and replaced by the new one.


By default, when you use fstream, this two optional parameters are added: ios::in and ios::out. They are separated by a bitwise operator (|) .

When you use ofstream, by default ios::out parameter is added. Our program was going to work just fine if we used ofstream because we only wanted to open the file for writing to it.

We are going to write another program that opens that file we created, and show contents on the screen. This is how you do it:


#include <iostream>
#include <fstream>

using namespace std;

int main () {
  string line;
  
  ifstream myfile ("c:\\TestFolder\\example.txt");
  
  if (myfile.is_open())
  {
    while ( myfile.good() )
    {
      getline (myfile,line);
      cout << line << endl;
    }
    myfile.close();
  }
  else 
  {
       cout << "Unable to open file!";   
  }
  system("PAUSE");
  return EXIT_SUCCESS;
}


We are using ifstream to open our file for reading. Then read contents of the file on the command-line. A lot of problems can occur when we are trying to open the file for reading or adding more data. On Day 10, I will show you how to handle those problems problems. That's it for today. Let meet again on Day 10 when I show you how to handle exceptions.