It’s a great talk given by the founder and lead of the project, Les Hazlewood, who relocated to Bay area not long ago for starting his company katasoft. The presentation ran over for one hour but still got most people seated.
I attended a great seminar at Stanford by Haiping Zhao on the open source compiler which converts PHP code to C++ yesterday. Haiping is the tech lead for the open source HipHop project at Facebook.
As many have known, Facebook is a PHP shop with all the front end dynamic pages written in PHP. The upside of using PHP is that it’s very easy to read, write and debug, plus platform independent. The downside is that it’s really slow, probably one of the slowest scripting languages.
Why PHP is slow?
Haiping summarized three reasons, which he thinks are common contributors for slowness of scripting languages in general:
- Byte-code interpreter.
- Dynamic symbol lookups, including functions, variables, constants, class methods, properties, etc.
- Weakly typing. The zval has to evaluate the data type of any variable before any operation. Plus, the PHP array is too generic because it can represent any collection.
Why Should Facebook Care?
When Haiping joined Facebook, new servers cannot catch up the new users. The server farms became so big that any percentage saving could save the company millions of dollars. Like all the big web companies, Facebook does not disclose the number of servers they have. The size of the datacenter is guarded as a secret. One of the professors did an estimate in his questions anyway: 15,000 to 30,000 servers.
If you are a software engineer, you might have known Tiobe popularity index of programming languages. The index is updated on monthly basis. The following table shows the top 20 most popular languages this month.
The index caught many people’s attention this month because C regained its No.1 position. Java, used to be No. 1 for years, dropped to No. 2. Although percentage wise Java is still very close to C, the declining of Java popularity can be eye-catching.
I just read a book by Ram Charan What The CEO Wants You to Know? Using Business Acumen to understand how your company really works. Having grown up in India, the author has earned D.B.A and M.B.A from Harvard Business School, and has taught at Harvard and Northwestern.
In the book, Ram coined a new term “business acumen” to describe the fundamental capabilities for business success. He claims, “Every business is the same inside, cutting through to cash margin, velocity, growth, and customers.”
Here are more quotes from the book:
When you come down to it, the business is very simple. There are universal laws of business that apply whether you sell fruit from a stand or are running a Fortune 500 company. Successful business leaders know them. They have what I call business acumen – the ability to understand the building blocks of how a one person operation or a very big business makes money. You, too, may learn the fundamentals of cash, margin, velocity, return on investment, growth, and customers.
You can develop your own business acumen. While these ideas may sound complex, they are not. Think more about your best teacher in a subject like chemistry. Once you understand that the atom was made up of protons, electrons, and neutrons, you then had the fundamentals to solve any problem in chemistry. I want to show you that it’s the same with business . When you know the fundamentals, you can “get” the basics for how any business works.
This made me think what the CTO wants you to know, and what “technical acumen” is. Here is my paraphrased version:
It’s been a while after VMware acquired Zimbra. In a VMware Console blog, VMware CTO Steve Herrod explained how Zimbra fits in VMware’s mission to simplify IT.
Today I read a blog by Martin Fowler, the author of the famous Refactoring: Improving the Design of Existing Code and other books. The blog explained why he declined the invitation to be part of the SEMAT (Software Engineering Method and Theory) initiative by Ivar Jacobson, Bertrand Meyer, and Richard Soley. Ivar Jacobson is known for his contribution to the UML, together with Grady Booch and James Rumbaugh. All of them worked for Rational Software, now part of IBM, which I was part of from year 2000 to 2005.
Martin added his rationale for his declining:
…From here I got the distinct impression that the central thrust of the initiative is to create a software meta-method-kernel – essentially a set of common process elements for software developments that you can rigorously compose into a method for your own project.
Java is a static typing language, meaning you have to define a type before you can use it and the compiler checks the types for you. Some people like the static typing and others don’t. People like it would like even more into the language. Some others would prefer less typing. The rest don’t have strong opinions and are OK with both.
In the last several years, we actually see two opposite trends in Java programming: stronger typing and weaker typing. This blog analyzes in depth why these two trends happened and what do they mean for you.
#7 Levarage vApp
vApp is a new addition to vSphere. It’s essentially a group of VMs that work together as a solution. You can manage them as a basic unit like a VM. It provides you higher level granularity for resource allocation and management.
This is an ideal container for your application if you have multiple virtual machines involved. They may or may not form a cluster, but are bundled together for a same goal.
The vApps are not only easily managed by the vSphere, but also imported and export as a bundle. Therefore you can easily move it without worrying what should be included while copying it.
VMware provides tools like VMware Studio using which you can create and configure vApps easily. The VMware Studio has Web based console, customization and build engine, build process automation with CLI (command line interface).
Other alternatives include:
Just read part of the book Founders At Work over the weekend. Although I haven’t decided to be a founder of a startup company, I found the stories there are trully inspirational. You can read part of the book at Google book.
One interview with Hotmail cofounder Sabeer Bahatia is very interesting with his thoughts on the differences of software and hardware designers:
#4 Scale Applications as Needed
Most time, people think scalability is to handle more workload when needed. This is true, but not enough. A truly scalable system should scale back. This is how you will save money. This is equally important as the first case where you get more revenue by serving more traffic.
There are different ways to scale:
- Up and down. This is unique in virtualized environment in which you adjust the memory or CPU allocation and use more or less of them instantly.
- Out & in. This means you include more machines either physical or virtual into your application.
You have to think over several architecture decision points:
This second part contains best practice No.1 ~ 3.
＃1 Move Up to Higher Level Software Stack
“If I have seen a little further it is by standing on the shoulders of Giants.”
Modern software development is all about leverage. You don’t want to build everything from bottom up. Whatever “giant shoulders” you can leverage, you should do so. Remember the keyword here is “giant shoulders.” You got to be selective on what is “a giant” and what is not, for the best quality of your system. Your application’s quality is a function of that of the systems underneath it.
The typical “giant shoulders” includes middleware, high level programming languages, tools. By leveraging these, you should expect your applications portable, and with much less code and higher developer productivity. The portability is very important when you want to deploy your applications in federated cloud environment.
I posted a short article after the cloud demo in VMworld 2009 keynotes. It’s reposted at SpringSource blog. The article introduced “DIY PaaS” concept which you could have a higher level of development platform inside your enterprise in a similar way as would you get from vendors like Google, but without vendor lock-in.
The “DIY PaaS” does not require you to use any specific platforms, middleware or framework. You could use any existing combination of systems on top of Java, .Net, Python, PHP. For example, you could use Java with Spring framework for building your web applications or enterprise integration frameworks. The choice is really yours, not of any vendors. When making a decision, you want to consider various factors like your team’s expertise and preference, total cost of software licenses, design constraints posted by for example existing investments on particular software.
Having decided the combination of software stack, you want to pack them into virtual machine templates that can be re-used by various teams. If you have multiple combinations, you can have multiple virtual machine templates in your catalog.
In general, you want as few templates as possible. Why?
Having less VM templates means less effort to build them, to manage, to upgrade, and to test. This might not seem like a big deal but could become a big deal in a longer term when you have to maintain multiple versions of these templates at the same time.
It also means less storage. vSphere has a special technology called linked clone. The new virtual machine doesn’t fully clone the disks, but links back to the template. If you have least templates, you can have a huge saving on the disk space. High quality storage can be very expensive.
Last but not least benefit is less memory. vSphere has memory page sharing technology which keeps one copy of same page contents, and converts others as pointers to the single copy. It’s only possible when you have identical memory pages. When you have virtual machines cloned from a same templates, the chance of identical memory pages increases dramatically.
There are several techniques to keep the least number of virtual machine templates:
With more data centers running on purely virtualized systems, more applications are therefore running on top of virtualized environment than ever before. These virtualized systems are interconnected with each other and become a cloud platform. Virtualization is the pre-requisite and starting point of the cloud computing at the IaaS level.
With SpringSource being part of VMware family, getting a Spring training is certainly a lot easier than before. For one thing, my boss doesn’t need to pay for it.:-)
I just finished my 4-day training starting from this Tuesday. It’s been pretty exhausting given that I had to get up before 7AM to match the central time. But what’s learnt worth the effort.
The coverage of the training includes:
Just came back from a SDForum meeting organized by its emerging technology SIG. The topic was about the 4 languages in the title. It’s not much about any emerging technology per se, but pretty controversial among the developers.
The organizers invited four panelists and one moderator:
- Clojure advocate – Amit Rathore, author of the forthcoming “Clojure In Action”
- Go advocate – Robert Griesemer, Google, co-author of Go
- Scala advocate – David Pollak, lead author of Lift
- Ruby advocate – Evan Phoenix, lead developer of Rubinius, a high performance Ruby VM
- Moderator – Steve Mezak, co-chair of the SDForum Software Architecture and Modeling SIG, author of Software without Borders
Each of the panelists had 10 minutes of introduction of the language in the first part. Then, they all answered questions ranging from language strength/weakness, library/tool/IDE support, application framework, advice on migrating existing codebase, to how these languages compare to each other.
Here are introductions from the languages’ homepages. See if you can map them to the languages.
WordPress is a great blogging software. I am very happy with it except that it does not have nice built-in support to include source code, which an absolutely needed feature for me.
Given the rich set of plug-ins WordPress has, I know there must be some plug-in there already. Today I spent a little time on research. After trying several plug-ins, I decided to use Google Syntax Highlighter for WordPress. You can check out how it looks like as follows.
In my previous blog, I talked about the object model of the vSphere API. Many people like the UML diagram that illustrates how the managed objects are inherited from each other.
Following that blog, I will introduce the object model of the open source Java API that is built on top of the Web Services, as well as some key design decisions I made while designing the API.
The following UML diagram is extracted from the overall model but adds much more details with properties and methods. If you can understand this diagram, you can then easily understand all other managed object types.
I mentioned the vSphere API self paced lab at PEX in my previous blog. Not all the people who are interested in learning the API made it to PEX last month. A reader asked me when it can be online in his comment.
Here is the VI Java API part in the tutorial. We had the environment set up all together for you in the PEX lab including the Eclipse and all the related jar files. So it’s very easy to get started there. Without going to PEX, you need to do something extra by yourself. But that is not too hard at all. I promise it won’t take you much time at all. To get the basic one done, you probably need 5 to 30 minutes depending on your familiarity with Java.
Ready to learn?
Are Your Lights On?: How to Figure Out What the Problem Really Is by Donald C. Gause; Gerald M. Weinberg
The Design of Everyday Things by Donald A. Norman
“But, they seem nothing to do with software!” You say.
You are right. But remember the blog title has a keyword “top.” If you want to stand out in any profession, some of the extra skills may well be outside your typical set as others expect.
The same is true for software profession. I assume you already know the basics of software programming, process, design patterns, etc., so another programming book doesn’t help you much to the top technically.
Let me explain why and how these two books help you.
Several years ago, I tried to install SAP NetWeaver. It took me more than a day, and N installations plus N-1 removals before I finally got it right. I searched with several search engines and read many forum postings on SDN. Hinted by one post, I renamed the 13 character machine name to 9 characters, then the magic happened all of sudden.
The result wasn’t too bad but one day of time wasted. Many things could be improved to avoid the pain there. The foremost is the installer – why didn’t it check the hostname and alert me of the limitation?
At that time, I didn’t know VMware. After joining VMware, I knew more about virtualization and realized that a virtual appliance (VA) could have been a big time saver for me had the NetWeaver been packaged as a VA.
The pain as such can easily push potential customers away. It would be a different story if you have somewhat dominance in the market like SAP in enterprise ERP – you can charge big bucks for consulting and training services. Most other ISVs are not in such a position. Even for SAP, it faces strong competitions from others like Oracle.
In general, ISVs can leverage virtual appliances in two different ways:
Inspired by the book Made to Stick – Why do some ideas thrive while others die? by Heath brothers, I would like to give it a try on software platforms rather than the ideas covered in the book. Although the computer industry is still relatively young compared with other industries, it’s quite dynamic and we’ve seen some platforms came and died while others came and thrive. So, what are the general characteristics for such sticky platforms?
The authors of the book summarized the 6 principals to make ideas stick, meaning the ideas change either the thoughts or/and behaviors of the receivers. These principals are Simplicity, Unexpectedness, Credibility, Concreteness, Emotions, and Stories. They are shortened to SUCCESs for easy memory.
Most of these principals don’t apply on software platforms. Unexpectedness, for example, may be the last thing you would like to see of a software platform. For software platform, we definitely need predictability, among other qualities.
After thinking the problem over, I summarized 4 basic principles for a software platform to stick: Simplicity, Extensibility, Ecosystem, and Developers, in short SEED.