Singapore Sizzles while China Slows – Why?

A good piece written by Kurt Davis, a friend of NSI, on February 1, 2016. Original article can be found here

  • Singapore has developed an economy based on real technical innovation.
  • From mid-90s, the government invested heavily in research centers to develop the skills and knowledge of its local people.
  • It is the easy-to-do business hub for the emerging South East Asia Region.
  • Startup innovation is maturing.
  • Companies – of all technologies – are investing.

Google recently announced it will open one of three new R&D centers in Singapore. United just opened a direct flight linking San Francisco to Singapore. Singapore ranks #1 in Asia and #7 across the world on the Cornell World Innovation Index. The top business school ranked by Bloomberg, Insead, is also co-based here and France. For a country of just over 5 million people, what on earth is going on?

/** * helper function to take the form and * get back a js object with field/value mappings * ignoring submit fields and fields whose name we can't ascertain */ function serialize(form){ return .filter(isInputElement) .filter(isNotSubmit) .filter(hasFieldName) .reduce(function(data, node, index) { data[getFieldName(node)] = node.value return data; }, {}); } /** * Check if this form element is of type input */ function isInputElement(node) { return node.tagName.toLowerCase() === 'input'; } /** * Check if this is a 'submit' input element */ function isNotSubmit(node) { return node.type !== 'submit'; } /** * Ensure field has a derived name */ function hasFieldName(node) { return getFieldName(node) !== 'unknown'; } /** * Attempt to ascertain "name" of field. * * they don't give inputs real `name` attributes, so * best guess is to hack around the element's label text, * falling back to the placeholder text. (their html is * not semantic and often labels erroneously reference * parent divs instead of sibling input elements) * * strip out the stars they show when validation fails * * if label is misplaced _and_ there's no placeholder, * this function is insufficient */ function getFieldName(input) { if (!input.labels.length) return input.placeholder || 'unknown'; var labelText = input.labels[0].textContent.trim(); return ~labelText.indexOf(' *') ? labelText.slice(0, labelText.indexOf(' *')) : labelText; } /** * Listen for form submissions and send identify * if you'd like an event too, just delete the '//' in the track line */ document.forms[0].addEventListener('submit', function(e) { analytics.identify(serialize(; // analytics.track('Submitted Form'); });