Recently while building a Cordova based app, few users complained that they were seeing blank pages or cryptic error messages. Someone mentioned they were on iOS9. Over the weekend, as I ran the app on a simulator, I noticed an error in Safari. And, that’s when I realized ES6 features and syntax is not fully supported in iOS9. Please see here: ES6 Compatibility (check unstable platforms)

So be-aware of ES6 features compatibility (unless you can transpile/polyfill every bit of code)

I was very excited to know about the ‘parallel’ feature in Jenkins Pipeline, but, there are many gotchas while making use of the pipeline feature (many of which are documented here: Jenkins Pipeline Example). After trying and reading a few different solutions, following worked for me (notice in screenshot that the browser jobs run in parallel !)

- This is either due to a require() error during initialisation or failure to call AppRegistry.registerComponent.

I had been struggling with this for some time and the answer was right there… I had to make sure I called AppRegistry.registerComponent with the right params/appname – I had renamed my app and forgot to update the class name and also the name passed to registerComponent.

And, one way to rename a project is by renaming in package.json and then running react-native upgrade.

After upgrading a webserver running Apache to Debian Jessie (from Wheezy), I noticed that the system CPU usage was higher. Running an strace on one of the Apache processes was giving me very little info:

I had previously tried to spread interrupts across cores and also limited network activity – as they are something one can do to work out why System CPU is high – but they didn’t bring down the CPU usage.

One culprit remained: Futex/Mutex locks. I changed the default Mutex [1] to file and magically the System CPU usage went down.

Impressive throughput improvements (>100%) with the app that I am working on.

phpinfo() doesn’t output what you would expect.

xhprof output_dir doesn’t get read from ini files, need to set that up in the constructor of XHProfRuns_Default.

Set hhvm.server.thread_count to a high value (>=MaxRequestWorkers), otherwise a few slow MySQL queries could bring the server to halt, minimal doc here: HHVM server architecture (worker thread => hhvm.server.thread_count). Suggest to keep it higher while JITing is happening.

If using Newrelic, tough luck!Unofficial Newrelic HHVM extension uses XHProf internally, so cannot get any data out of your own XHProf usage.
The extension above relies on agent SDK that has no support for MySQL slow traces.
Very low MySQL time in transactions.
Strange traces in transactions.

CGI differences (apache_getenv not available use $_SERVER, SCRIPT_NAME will not be the same as REQUEST_URI).

Use realpath in imageftbox, relative paths for fonts don’t work.

Use Apache 2.4 as it has FastCGI support.

hhvm.log.header = true to have datetime in hhvm log.

HHVM log will also contain slow sql.

.hhbc was getting very huge, turned out it was due to Smarty file caching being enabled (the cached files were themselves php files that HHVM was compiling).

.hhbc file is sqlite(3) file that one can query (that is how I worked out the above).

High timeout values in memcached was leading to very high System CPU usage.

@ wasn’t suppressing (this could be Newrelic related)

Friendly folks in the hhvm IRC channel (get link from HHVM homepage), need to be online during daytime in the US.

After converting a site to be served over TLS, we noticed the drop off rates increasing on some pages. This was because: user was being redirected to a payment page on another domain that was also served over TLS. As, now both sites were served over TLS, Google Analytics was picking up the referrer (HTTPS -> HTTP would pass no referrer, HTTPS -> HTTPS does) and was counting the payment page/domain as a new source. Thus, counting the redirect as an exit. Fix was simple, I excluded the payment domain in the referral list.

Create phabricator user to be used in phabricator config
Grant the above user CREATE TABLESPACE permission so he can create DB
Grant all permissions on the phabricator tables to the above user (daemons/upgrade scripts require different permissions – the permission list from the doc wasn’t enough, so I granted all permission to the user)

CREATE USER 'phabricator'@'%' IDENTIFIED BY '{password}';
GRANT CREATE TABLESPACE ON `phabricator\_%` TO 'phabricator'@'%';
GRANT ALL ON `phabricator\_%`.* TO 'phabricator'@'%';