Reflections From Matt Mullenweg Live In Singapore #MATTINSG

Reflections From Matt Mullenweg Live In Singapore #MATTINSG

Thanks to Singapore PHP User Group for organizing this. It was a rare opportunity to meet Matt. He’s one of my inspirations for a long time.

An awesome inspiration delivered by Matt on Open Source, WordPress and the early days of GPL (GNU Public License). WordPress was one of the modern web early adopters of GNU.

What’s GPL?

GPL was built on 4 freedoms:

  1. Freedom to use the software for any purpose
  2. Freedom to see how it works
  3. Freedom to build over and modify the software
  4. Freedom to distribute the original or modified version of the software

The key takeaway was:

  • The only reason WordPress survives in spite of all the commercial competition out there is only that of the community, Automattic’s passion for making the world a better place and their continuous contribution to open source

Some things I learned new from the talk:

  • WordPress today is built upon what was called B2 earlier, where Matt was one of the committers
  • WordPress was the first to introduce Pages on blogs. Earlier, people used to build multiple blogs for different pages. Remember MultiSite? People really used Multi-Site for this weird purpose!
  • One of the reasons for the success of WordPress was Akismet
  • Akismet was earlier known as Automattic Spam Machine
  • Socket.io is maintained by Automattic

Some notes:

  • The community of users is really important
  • Distributed employees do make sense. For a system this large and which is used by 22% of the Internet.
  • Even if you clone something – differentiate yourself by solving the pains that the other products don’t solve. (like Akismet)
  • Make stuff open source! and don’t make it proprietary. It will only improve your traction.
  • The day you start getting spam is the day you’ve made it.

No matter how little you think you know, there’s always someone who knows less – Matt Mullenweg

How Is My Experience With Titanium So Far

I started using Appcelerator Titanium for a personal project. Here I am with my experience so far with the platform.

This platform is really awesome if you structure the project well and you are an expert. For beginners, you might drift away from the best practices and write javascript in a bad way.

You need to learn nodejs concepts like async method calls and stuff. If you don’t know what I am talking about then this below video is a good introduction to nodejs:

Ryan Dahl: Original Node.js presentation

Keep this as a rule of thumb – don’t enable automatic updates right away. Otherwise, you would develop on one version and suddenly after an update, the project would stop working.

It is not cross platform!!! I’m telling this after a lot of bad experiences. Developing for iPhone and then “fixing” things for Android or the other way around is definitely a pain!

In a way, it is cross-platform and it could speed up your development time. But only for small petty projects. Not for larger ones.

That’s my conclusion. I quit using Titanium. Now I’m learning MeteorJS with PhoneGap. Would also explore to use famo.us

Software Project Estimation

Estimation of an IT project is not a pleasant exercise. However, it is part of project management.

Usually, the pain points are

  • Depending upon the role, we come up with own version of numbers.
  • Project Bidder, Project Governance intend to move the numbers down; Black sheep intends to move it north
  • Estimation implicitly mean a commitment to management
  • Estimation is made without clarity of requirements
  • Estimates are subject to stakeholders interests and personality

Some principles of estimation practice:-

  • Parkinson law – Work shall fill the time allocated for completion.
  • Today’s project is Tomorrow’s legacy
  • Quality/Reliability of Estimation cannot be better than the requirements
  • Poor congruence of stakeholders is a perfect recipe for disaster
  • Often one fails to understand the difference between –Effort and Duration in estimation.
  • Cost and Effort are associated with Work Breakdown structure while Duration associates to Critical Path.
    • Cost – Money Spent (Unit – Currency)
    • Effort – Work Time for a task (Unit – Person-Hours)
    • Duration – Calendar Time (Unit – Days)

Here’s one technique for estimation.

  • Discuss with responsible person of a task to identify – effort required when it’s all roses with no thorns in the path. Let’s call it – Optimistic (O) number.
  • Identify the effort when we, it’s all desert with no hope of oasis. Let’s call it – Pessimistic (P) number.
  • Pinch yourself, it’s a real world. Both of the above cases are unlikely, Identify the effort. Let’s call it – Realistic (R) number.

The estimated number (E) is (O + 4R + P)/6 with Uncertainty(U) as P – O.

Always Report Estimated number E with Uncertainty U. Plan and be prepared for, Uncertainty U.

A yardstick for self-review of estimation maturity :

Review and update your Estimates E and Uncertainty U in iterations; Uncertainty U should decline.

Joel Test

The Joel Test is a twelve-question measure of the quality of a software team.

  • Do you use source control?
  • Can you make a build in one step?
  • Do you make daily builds?
  • Do you have a bug database?
  • Do you fix bugs before writing new code?
  • Do you have an up-to-date schedule?
  • Do you have a spec?
  • Do programmers have quiet working conditions?
  • Do you use the best tools money can buy?
  • Do you have testers?
  • Do new candidates write code during their interview?
  • Do you do hallway usability testing?

Intalio Log4J Config Hack

It’s difficult to set multiple log categories to DEBUG or anything with the Intalio’s log4j configurator that comes with bpms-console.

I had to set like 10 different logs repeatedly. Every time it sucks to actually find the log category, choose DEBUG and then click the SET button, wait for the page to load again and continue the same thing!

Here you go geeks, a javascript method I wrote that you can use on the Javascript Console:

Go to “THIS” URL: https://:8443/bpms-console/log4j

function setDebug(log) {
var elems = document.getElementsByTagName(‘input’), i;
for (i in elems) {
if((‘ ‘ + elems[i].value + ‘ ‘).indexOf(log)
> -1) {
if(elems[i].parentNode.childNodes[1].value != “DEBUG”) {
elems[i].parentNode.childNodes[1].value = “DEBUG”;
elems[i].parentNode.childNodes[5].click();
}

}
}
}

setDebug(“httpclient.wire.”)

Now it’s just UP arrow ENTER, UP, UP, ENTER every time the page loads. Yes, of course, it can be further more optimized. Mind to do it?? post it in the comments!