here, there
... by hllau

Lack of Technical People
2012-08-24 22:27:45 | China, Shanghai, entrepreneurship
I am actually here to attend a joint-event organized by Hong Kong and Shanghai entrepreneurial organizations trying to promote entrepreneurship in our culture. Generally speaking, people who came here are mostly with general background or those who wants to be on the "consultancy" side. It is lack of talents with technical skills (not that I have seen are on the bleeding edge of technology). They do not understand technology.

Bad signs. Why? Eventually, for any successful technology-related company, the company must develop a technical niche which has an absolute advantage over other competitors. Such kind of technical niche could never be developed by companies which you outsource to, as those companies do not share the vision that you are having. When developing a web application, at the end, it is all the subtleness of the interface and smooth infrastructure that creates great user-experience. Through all these subtleness, you are delivering message to user which other people cannot copy. User experience is the key.

In terms of web development, China is still an adopter rather then an inventor. It is much easier for them to copy something from the US and implement a Chinese version, which works without any legal violation at all and they can make a lot of money from it. As such, there are no incentive for them to invent new ideas. Inventing something new probably takes 100 times the effort of copying something which has proved to work somewhere else. But who cares in China?

I just met a girl who worked on a github clone in China in Shanghai. I am highly skeptical about how open-source can become a culture in China. It is a challenge to the Chinese culture. People who are interested in doing open-source are not working for money, because they are working for social status and respects from the community. When people are still worried about their living, will they care about this higher level of needs?
When is the end of information asymmetry?
2012-06-24 00:29:59 | economics
I was just having a good chat with an old friend yesterday, where we talked about information asymmetry and our thoughts on how it is going to change in the future.

Long time ago, when the internet was not available, economic activities of human-being are restricted to only information known to them. To obtain useful information, we have to go to read books or to ask people. The old Chinese idioms "inside books are gold" held true because most people did not have access to books back in those days in the generation of my grandparents. Information asymmetry made those people who had access to knowledge and hard-working enough to learn them would become wealthy.

Later on, economic structure improved and free education were established by governments. More libraries were built and books became widely available. Sooner or later, good knowledge would become public domain and available to anybody who are interested to read them. Anybody who is hardworking enough to learn those skills would be able to make a good living. Households skills quickly became commodities.

In those days, business opportunities arose for those who had the strongest network of people, because they had the highest access to valuable information, specializing in different niches, and they built new values by joining different niches together. People who are only good in one field are labelled "nerds", who had much less respects than those who are good at socializing, even though they might work much harder. Again, due to information asymmetry, business people good at networking have advantages over other people because they had a higher efficiency in accessing and joining different bits of good knowledge together.

With the availability of internet and the changes of human habits nowadays, information is efficiently dispersed into the public or certain groups of people once they are available. Anything that happens in one spot of the world is quickly published to another spot of the world. When we need information, we ask Google; when we need people, we talk to Facebook. Information has been more transparent and easier to obtain than ever in the 21st century.

In fact, Hong Kong is a very good example, which its growth was mostly derived from information asymmetry due to transfer of knowledge from colonization by the British. We had better education, banking system, social security, engineering foundation and communications skills than Chinese mainlanders in the last century. However, the story is totally different now. Hong Kong loses all these advantages now.

My hypothesis is that, since the ability to network and socialize with other people is becoming a commodity through the internet, industries that have been highly dependent on advantages from information asymmetry would soon fail, as information of all industries and markets are opening gradually and becoming easier to be obtained by the public. Basically, nobody is allowed to hold any information long enough to keep their advantage.

I believe this century will mark the end of information arbitrage. Survivors will be those who can continuously develop new processes, innovate new ideas, create new markets, and try hard enough to implement them into today's society.
Common Startup Ideas and Why They Fail
2012-06-11 14:04:01 | tech
People always think that they have great ideas to start a website/company/app. Whatever ideas, there is a high chance that somebody in the world's ~7 billion population has already thought about it in the past. Sad but true, you are most likely not the first one.

Common tech startup ideas:
  1. Application generators for non-programmers
  2. Social networking
  3. Video, photo or music sharing website
  4. Email alternatives
  5. Online design gallery
  6. Goods exchange sites
  7. Auction sites
  8. Dating
  9. Startup communities
  10. Personal finance management
  11. Micropayments
  12. Personalized T-shirts
  13. To-Do Lists
  14. Social recommendations
  15. VIdeo conversation
  16. Online coupons
  17. Any kind of code scanner for coupons
  18. Business cards killer
  19. Kid-safe browsers
  20. Online storage

Common reasons why they fail:
  1. Saturated market - e.g. Plenty of iPhone applications generators in the market. Plenty of dating sites also.
  2. Chicken and egg problems - e.g. Who will use a dating or social recommendation site when there are only 10 users?
  3. Two-sided dependencies - e.g. Online buying/selling business platform. Usually, they are plenty of sellers, but no buyers.
  4. Opposition - e.g. Specialized knowledge forum, as those who know do not share, and those who share do not know.

There is still a high chance somebody could create something successful in the above list, as many successful products are purely reinventions of existing products. If you have one of the ideas in the above categories, think carefully about your niches and your competitive advantages to overcome the above difficulties. As long as there are problems, there are opportunities.

Life of a Taker
2012-05-31 14:32:37 | life
An excerpt taken from Very true.
  1. When a taker meets a person who is at a better level in a particular aspect he wants to take some benefit
  2. He starts by behaving as a giver so that he can create a good impression but his eventual goal is to take
  3. If the other person is a giver, it works for sometime but sooner or later, the relationship goes downhill when the taker’s true intent is revealed
  4. If the second person is also a taker the whole thing will anyway be a non-starter
  5. If a taker meets a person who is lower level than him he would take no interest in this person

Startup Dilemma
2012-05-10 22:00:01 | work
I am googling around as I find myself in this turmoil of whether rewriting the web application again for my startup. It seems the clients want something different from what I was originally thinking. While I really appreciate that my client has given me enough feedback to let me know what they really want, I find the codebase harder and harder to maintain when changes of requirements come through.

At this moment, I have been postponing to launch it as late as possible to test the market and see the feedbacks, as I want to product to be usable to multiple clients. Writing bad codes to attract early users is never a good idea, because I am afraid that I will end up with unmaintainable codes which is hard to respond to further changes in the future. My clients are mostly senior people in their industry. They understand their problems, but they do not understand technology. The only way that I can see if the software fits their requirements is not through piles of documentations and many official meetings – something that most big companies would definitely fail in what they call themselves as “project management” skills. The only correct way to see whether the client likes the software is through producing it, showing it to the client, let them use it and listen to their feedbacks afterwards. Customers do not just want to see the product presentation, they want to have a feel of using it, but they also want to control what is happening despite the fact that they are horrible at explaining what they want in a tone and with the amount of details that developers understand.

I will do whatever it takes to get my product fits their needs, even if I have to throw all the codebases and rewrite the entire thing, I will do it! The reason is that, if I do not do it right now, I will need to spend twice or even thrice the efforts to make the changes after the product has launched in the coming few months. These several months are going to be critical.

Here is a blog post by Steve Blank on–-rewriting-the-code/. It’s a bit old but I think it’s a good article. I do not completely agree with his viewpoint, as there are always costs, benefits and risks involved in every decision. The discussions underneath the blog post is worth reading. Their arguments present a good general perspective to whether rewrite the codes or not.

No good engineers would work with old codebase, because they believe they can reinvent a better wheel. This is probably true.

SQLAlchemy + MySQLWorkbench
2012-05-04 22:17:32 | programming
Workbench is a great tool to visualize the database while I am designing. What I am doing right now is to write the SQL schema in SQLAlchemy, load it in and then run MySQL Workbench to reverse generate the EER Diagram. For all the simple interface that the client sees, what underlies is the complicated database structure which the client does not see and does not want to pay for. 

The truth is, the simpler the application, the more complicated it is. The fewer decisions user have to make to get what they want, the better the user experience is. In other words, the application has to incorporate enough logics to make intelligent assumptions for different users. This is probably one of the most challenging problem in designing a good system.
How to disable Office Reminders of Microsoft Office 2011 on Mac OS X Lion?
2012-04-20 15:30:05 | mac
It has been very unpleasant that the reminder pops up every time when I turn on my Mac. After googling for a long time, there are still no correct answer. This may be useful and save time for the next person who has similar problems.

The correct procedures to disable Office Reminders:
  1. Open Microsoft Outlook 2011.
  2. Select “Outlook” –> “Turn Off Office Reminders” on the context menu.
  3. Close the current instance of Office Reminders. Done.

The Zen of Python
2012-04-01 15:30:05 | python, zen
The secret Zen of Python:
  1. Beautiful is better than ugly.
  2. Explicit is better than implicit.
  3. Simple is better than complex.
  4. Complex is better than complicated.
  5. Flat is better than nested.
  6. Sparse is better than dense.
  7. Readability counts.
  8. Special cases aren’t special enough to break the rules.
  9. Although practicality beats purity.
  10. Errors should never pass silently.
  11. Unless explicitly silenced.
  12. In the face of ambiguity, refuse the temptation to guess.
  13. There should be one– and preferably only one –obvious way to do it.
  14. Although that way may not be obvious at first unless you’re Dutch.
  15. Now is better than never.
  16. Although never is often better than right now.
  17. If the implementation is hard to explain, it’s a bad idea.
  18. If the implementation is easy to explain, it may be a good idea.
  19. Namespaces are one honking great idea — let’s do more of those!
-- Tim Peters
Getting into Technology
2012-02-04 18:30:05 | life, tech, python
If you are reading this, you probably are an amateur who gets satisfaction from building something instead of following a boring, soul-eroding and routine jobs, in which results are always known before implementation (as the results are told by your boss!). You may have general knowledge in programming (like Excel, VBA, HTML) but have never gotten serious in development, and you may think you are a problem solver and streamliner. Here is a way to test whether you may fit into technology:

  1. Install Linux on your computer or get a Mac, which are more friendly than the Windows environment for developers. You also get more free resources, supports and guides to learn how to program and build things in a *nix environment. Nowadays, with distribution like Ubuntu, switching from Windows to Linux is just easy. Download the image from the Ubuntu official website. Burn the image, boot from it and install it. Play with it for half a day to get familiar with the new environment.
  2. Grasp the basic about HTML and JavaScript. These are what you are reading right now. These are what the internet and world wide web are built on. You do not need to be an expert, but a basic understanding and genuine realization that these two languages are the cornerstones for internet applications for now and in the future is important. A good tutorial to start with from Way2Tutorial.
  3. Building something means producing and publishing something so other people can use it and benefit from what you finish. The best way to kickstart is to write a blog. Get your opinions out and be an expertise on areas of whatever you like. If you are a professional in mathematics and statistics, talk about it and your opinions on daily life regarding how you can use this skill in different situations, and what you think most people should know about your expertise and how it connects to the world. Go to Blogger or WordPress to start one quickly.
  4. To really build something, you will need more skills. Get yourself to learn a proper programming language. Some popular choices would be Ruby, Python, PHP, and Java. Each of them has their strengths and weaknesses, so just pick one that you enjoy most and get a taste of it. I personally go with Python, as it is a general purpose language with a large active community. The code readability of Python is high and it is not difficult to start with. The official tutorial from Python documentation is good one to start with, assuming you already have general knowledge in programming, like basic flow controls (e.g. for-loop, if then/else) and basic object-oriented concept. If you are brand-new in programming, you may want to start here. Don’t expect that you can take it over a weekend.