A new chapter

Today I was informed that my position was made redundant. I have been here for 3 years and I enjoyed it, but it will soon be over, and I will be on the market again looking for new job. I am a bit disappointed but other than that I’m fine – I’ve been through that before. When something ends, it also manifests a beginning of a new chapter. There is no use to obsess over what has already happened. Instead I need to look into the future and decide what I am going to do next.

As I know from my previous experiences, it starts with a feeling of euphoria. When a job ends, I would be overwhelmed with a feeling of freedom. “This time,” I would think, “I have a chance to find a job I will truly love. Oh maybe I will start my own business. I can do whatever I want — the sky is the limit!” But not long after that I would start applying for jobs exactly like the one I had before. After a few weeks a depression would slowly creep in. By that time I would be spending most of time on the job boards frantically refreshing the search page trying to pick up job ads which have just been posted. I would apply for multiple jobs a day, and still would be getting very few, if any, replies. Then after another couple of weeks I would become desperate. And the feelings of freedom and purpose I had in the beginning would be long gone…

However, I decided that this time it will be different. Here’s what I am going to do:

1. I will take time to learn new skills.

I have a few rare skills which used to pay good money, but the demand for them was falling over the last few years. In order to stay employable I need to increase the size of my professional markets, and that means learning skills which are in demand.

2. Whenever possible, I will avoid product-specific skills and concentrate on fundamental skills instead.

Specialising on particular product can be extremely financially rewarding. Specialisation allows you to build better skills in your particular area. And almost in any area highly skilled professionals earn more money. The problem with this approach is that the vendor of the product you are concentrating on may go out of business, or the product may become obsolete, and with that your expertise will become obsolete too. And for a professional with a narrow specialisation field it may be very hard to retrain into another knowledge area.

Fundamental skills, on the other hand, provide more breadth of application. Those are skills like programming languages or widely adopted platforms which are supported by more than one vendor. The best fundamental skills to adopt are the ones which present popular rapidly evolving technologies. Although it may be hard to keep up with them, it is unlikely that they will come out of existence soon.

3. Once I learn something, I will keep learning.

I enjoy learning almost above anything else. Whichever new professional field I choose, it will be the one that will force me to learn new things all the time, keeping me on my toes. That will satisfy my hunger for learning, and will increase my expertise at the same time. Hopefully it will result in better remuneration as well.

4. I will be selective about permanent job offers.

Although contract jobs may last for a long time, they are by definition temporary. Contractors agree to forego bonuses, salary increases, paid annual and sick leaves. In return, they are usually compensated for those things with money. Because company-driven career grown is mostly thing of the past anyway, I view contracts as more fair arrangements. Therefore, I will try to avoid dead-end permanent jobs. Instead I will prefer contracts or permanent jobs which present opportunities to learn valuable skills or provide genuine growth paths.

That’s it, quite a manifesto. I will report back here on how it is going.

How to install CyanogenMod on Oneplus One

I really like my OnePlus One phone. It is an exemplary engineering achievement proving that it is possible to design a mobile phone as powerful as leading brand’s flagship models but costing half of their price.

Oneplus One is powered by Cyanogen OS, an open source OS based on Android Open Source Project (AOSP). Cyanogen OS has its own update cycles, which OnePlus One receives via over-the-air (OTA) updates. When I bought the phone, it had Cyanogen OS 11 installed, based on Android™ 4.4 KitKat. Pretty much when I turned on, it received update to Cyanogen OS 12, based on Android™ 5. The update went without a hitch, and the phone performed flawlessly for a few months… until the next update came through.

12.1-YOG4PAS1N0 is Cyanogen OS 12.1 based on Android™ 5.1.1. Unfortunately, once that update installed on my OnePlus One, it rendered the phone practically unusable. The problems included LTE connection dropping out, random freezes and reboots, application crashing, you name it… And after a couple weeks I had enough and decided to do something about that. So, I said goodbye to Cyanogen OS and hello to CyanogenMod Nightly Builds.

Although they are closely related, Cyanogen OS and CyanogenMod are not the same. The technical difference, though, is very minor. However, because CyanogenMod is not endorsed by OnePlus, it does not receive OnePlus updates, it does not contain applications bundled with Cyanogen OS (which are mostly crapware anyway, with an exception of excellent CameraNext). Oh, and installing CyanogenMod may void your warranty. You’ve been warned. Instead, CyanogenMod has a useful feature of incremental updates. More on that later.

Although CyanogenMod makes kind-of stable “snaphot” builds from time to time, they are rare and can be quite outdated. And I had experience with my previous phones when snapshot releases stopped being updated altogether. Because of that I opted for nightly builds. They are exactly what they sound like - automatic nightly builds of CyanogenMod, including all the code changes made during that day. Although they are untested and technically “unstable”, in practice, as I discovered, they are more stable than official releases of Cyanogen OS.

The first thing you need to do to install CyanogenMod on a stock OnePlus One is to unlock the bootloader and root the phone.

There is an excellent DaxNagtegaal’s guide on how to do exactly that.

The most “painful” part of it is unlocking the bootloader, because doing that effectively factory resets the phone, wiping all the data including the flash partition. If you want to avoid a pain of reinstalling and reconfiguring all your application from scratch, you’ll probably want to back them up with Helium. This backup method isn’t perfect, it doesn’t always work, and you may not be able to restore some of your applications, but unfortunately that’s the only one that works on stock unrooted devices. Once you root the phone, you’ll have much more powerful Titanium Backup Pro at your disposal. But not now. You can also use TotalCommander with ADB plugin to copy files from your phone. To my liking that is a bit more convenient than via Windows Explorer.

Once the bootloader is unlocked, follow the steps to flash TWRP recovery. After that follow the guide to flash CyanogenMod nightly build. Skip flashing a kernel and go on to rooting the phone. Once rooting is completed, you’re done!

A couple of finishing touches:

  • Grab CameraNext apk or CameraNext mod and install it. This camera works much better on OnePlus One than the stock CyanogenMod’s one.
  • Install CM Downloader and you’ll have an option of incremental OS updates. Do not forget to backup your system with TWRP before updating!
  • And do not forget to backup your applications with Titanium Backup!


James Sinegal: Costco’s Winning Formula

Jim Sinegal, co-founder and former CEO of Costco, is one of the most influential business leaders of our time. Motley Fool recently recorded an interview with him, “Costco’s Winning Formula”. The whole conversation is packed with wisdom. But one quote caught my particular attention:

If you find yourself involved in something that you don’t truly love and feel passionate about, run, don’t walk, to the fastest exit and get out of there and get yourself involved in something you truly can become passionate about. Because if you do that, you’ll never have to work another day in your life.

- James Sinegal, co-founder and former CEO of Costco.

How to identify Oracle sessions consuming CPU time

Identifying sessions consuming CPU time is a common task in Oracle performance tuning. However, as simple as it sounds, it is not that straightforward. Oracle recommends using Enterprise Manager or Automatic Workload Repository for that. The problem is that in real-life situations Enterprise Manager is often not installed, or you may not have access to it. You may not also have necessary privileges to run AWS. Besides, running AWS reports for such a simple task sounds like overkill.

Oracle database reports each session’s CPU usage in V$SYSSTAT performance view. However, it only indicates a total CPU time used since the session’s log in. And because different sessions may have logged in at different times, you can’t compare the reported figures as they are. After all, it is obvious that a session logged in a few days ago cumulatively may have used more CPU time than a session started just a few minutes ago.

However, there is a workaround.

I wrote a script which accurately measures CPU time consumed by Oracle sessions within the given period (30 seconds by default). It works by taking a snapshot of CPU stats at the beginning of the interval, and then another one at the end. It then calculates the CPU time used during the interval and presents the sorted list.

It prints the result into dbms_output in the following CSV format: sid, serial#, cpu_seconds

Once you identified the top CPU consuming sessions, you can use a script like this one to find out what they are doing.

You can download cpu_usage.sql script from my GitHub page.

Subscribe and receive an email when I publish a new article

* indicates required