Table of Contents
Canonical
Written interview with Canonical Ltd for Senior Software Engineer - Linux Engineering in Sustaining Engineering team.
Interview date 29-06-2022.
Experience
Question:
We are interested in complex technical challenges you have had to resolve. Walk us through your thought process on choosing the tooling, programming language or colleagues to solve those challenges. How did you meet the quality requirements and how did you ensure this knowledge is passed on? We are particularly interested in any challenges you had with OpenStack, Kubernetes, Linux kernel or Ceph. In absence of experience with any of these, pick some other technology you found most fascinating. Please make sure to call out experience with various programming languages (C, C++, Python, Golang, Rust…).
Answer:
In my experience I have worked on several complex and interesting problems. I have found elegant solutions for most of the problems I had solved. My most recent challenge was to implement a way to authenticate a user before changing their own password or others in case of ‘admin’ account. Along with this I need to add support for account lockout and password complexity requirements. I started with exploring the code around user authentication and password change commands for the database daemon in Sandvine’s ActiveLogic product. Initially I added an extra argument (i.e. current password) to the user change password command and validated this in the database. Then later changed it to use a new command to preserve the backwards compatibility with the older firmwares as pointed out in the code review. I learnt to always think about how my changes would impact the larger ecosystem and the users where a product is used. I have added the core logic to authenticate the user in C language as it used is in the backend database daemon. I have added the frontend GUI code in C++ and Qt5 to provide the user’s current password before changing the password. For the same feature I have added the support for Python API which is used in scripts to control and automate the ActiveLogic product. To verify this feature I have added relevant unit tests in C for the backend code and in Python using pytest for Python API. Another complex feature I have worked on is “Skip Qsync”. For this feature I had to skip shaping the internet traffic for selected ShapingObjects in the ActiveLogic product. The ShapingObjects are the user defined rules which control how the traffic through the ActiveLogic node gets shapped. Also added unit tests to verify the multi priority feature for shaping the traffic in ActiveLogic product.
Similarly I have worked on several features for WebRTC Gateway in my previous company Mavenir which develops telecom products. In this company I have worked on implementing “Aggregated IMDN” feature for WebRTC Gateway software which acts as gateway between REST API based clients and the IMS network. For this feature I had to send the IMDN (Instant Message Disposition Notification) for multiple IMs (Instant Message) as an aggregate IMDN in a single request. This is done to reduce the number of requests and response cycles between the client and the WebRTC Gateway nodes. This feature is implemented entirely in C++. It involved mainly constructing json body for sending requests to SIP server from WebRTC Gateway node and parsing the XML body from SIP response. Unit tests were added to automate the testing of public interfaces that executes these operations for this feature. Another feature that I have worked on in this company is simple poll and vote function for chat clients using the WebRTC Gateway as the chat server. This was very interesting problem as it involved a real world use case which I can “talk” about with non engineers. But techinically it involved understanding the WebRTC, lightpd http server, WebSockets, HTTP and SIP protocols.
In summary I have written code for more useful and complex features for the products in all previous companies. I have not yet worked on Linux kernel or Kubernetes officially but have learnt about them in my free time as part of my routine to expand my knowledge base to provide unique and elegant solutions to interesting real world problems. I am comfortable with any programming languages as I think about the problem and provide solutions. I want to work with Kubernetes, Docker, Cloud. Containers and network softwares as I see these are the ever evolving engineering marvels.
Question:
Also, please tell us about any involvement you have with Open Source projects.
Answer:
I have contributed a tiny patch to LibreOffice software as I use this software extensively and want to contribute to develop features and improvements for this. This is possible due to my experience with documents and files formats from my past employer Toshiba. Apart from this I have raised several issue tickets for the open source softwares e.g. QTerminal I use/wanted. I have also created my own open source repositories which benefits the software engineers and myself in most of my daily routine tasks as developer. I want to be involved with Debian software development and package maintenance. I have studied the relevant chapters in Debian admin handbook which helped me gain significant knowledge about how to use and maintain Debian system.
Here is the list of relevant courses / books completed:
- The Debian Administrator’s Handbook
- Advanced Package Management in Kali Linux
- Introduction to Kali Linux Revealed
Here is the list of my open source contributions:
- gerrit.libreoffice.org/c/core/+/112652
- github.com/manid2/vim-ypclipboard
- github.com/manid2/vim-grep-replace
- github.com/manid2/vim-cscope-settings
- github.com/manid2/dotfiles
- github.com/manid2/linux-tools
- manid2.gitlab.io/docs/devnotes
Career development
Question:
In this section we’d like to hear more about your career aspirations and long term goals. We’d like to understand what are your passions at work, what inspires you to come back to your workstation every day. Tell us what is your preferred programming language and why? We are also interested to know how and why did you start using Linux professionally? And, in the end, walk us through some of the proudest moments in your career and some of the downfalls.
Answer:
I am focused on gaining more technical skills in linux system software development for small desktop, large servers, network of servers or servers running on containers i.e. the cloud. I have chosen Debian based linux systems to work with as it is the most popular and easy to use or maintain. As computers are now important part of every aspect of work and personal life so it is important for me to have good skills in commanding them. I use linux for almost all my tasks. Linux makes it easy to edit files, browse internet and most importantly allows me to modify it as per my needs. This is possible due to the license for linux GNU GPL. Because of this license we can gain great knowledge about how the system works, use it, modify and re-distribute it as per my likeness. This is what motivates to go to work everyday and be excited about what I work on.
Regarding my choice of programming languages I default to C language as easy to remember and can be used for most system software development. But when solving higher level problems which requires me to think in abstractions and interfaces then I switch to C++ if high speed is required and Python if speed is not important. I also use Bash scripting to write / modify helper scripts and build scripts that aid with the development tasks. I have also used several other programming languages such as Java, Javascript, C#, VimScript etc in the past for developing different software applications. As of now I am comfortable with C, C++, Python and Bash as my primary programming languages as these are used in my daily work tasks.
I started programming in my high school and was able to write code in Java and make it run. I was successful at getting output for most programs and was able to fix the compilation errors that cannot be fixed from reading text books but by understanding what the error message says and knowing the language syntax and semantics. This is one of my proudest moments as it was my beginner’s phase. From here it was a very long and tedious journey to be able to write professional quality code. I had faced several countless pitfalls and failures which helped me to shape into better professional later. I learnt to write large code by writing smaller and easy to read code i.e. small functions or units and then combine them into another small function / unit. This is how I can write fairly large code and be able to make it work. In my work experience I have been noticed for handling large and intricate problems from early. I have solved problems related to image and file format manipulation in Multi Functional Peripheral at Toshiba, also solved problems related to handling and parsing HTTP and SIP requests and response in Mavenir. Currently I am working on solving problems related to handling the internet packets, configuring the Ethernet NICs, IPv4 and IPV6 network configuration and bug fixes. Here the work is very exciting and almost all problems are intricate and hard to solve. If the problems are too easy to solve or repetitive then I don’t find them interesting and try to move on to other exciting opportunities.
Education
Question:
Please discuss and describe your educational background in detail. What were your strongest subjects in hard sciences? What leadership roles did you take on? What degree and university did you choose, any why? What were your strongest or favorite courses? Do you have any exceptional achievements to share?
Answer:
I have graduated with Bachelors in Engineering (B.E.) in Electronics and Communications Engineering in 2016 from one of the most prestigious colleges in my state Karnataka in India. Maths and engineering subjects like electronics and computers where my strongest subjects. As I like to work on hard to solve problems on daily basis so any topics or subjects that feed me with these problems are my strongest preferences. In my college I did most of my projects and technical on my own with little help from colleagues and lecturers. I chose my own topics for my technical work in college and then led the development efforts to complete the work on this topic. For my final semester project I had decided to work on latest publications at that time on computer vision algorithms. Computer vision and ML/AI are still most researched topics for engineers and researchers. I had worked on pedestrian detection system using Raspberry Pi as the processor. I had researched the problem, algorithms and possible solutions for this and wrote the code on my own. This was then complimented with a presentation to explain the concept and implementation in detail to the reviewers. It was received well and helped me to gain the maximum credits for this important course work.
Context
Question:
Outline your thoughts on the mission of Canonical. What is it about the company’s purpose and goals which is most appealing to you? What do you think is risky or unappealing? Are there any elements of the company goals that you are unsure about? Which other companies are building the sort of products you would like to work on? Why do you most want to work for Canonical?
Answer:
I know about Canonical as I started using a linux system with Ubuntu OS. Ubuntu Desktop OS is very user and beginner friendly. I like the Canonical company’s effort to make the Linux easy to use for every ordinary person not just for the developers and engineers. There are many initiatives by Canonical to make the linux systems and services useful such as the Launchpad and PPA offerings. The Launchpad provides the developers with platform to publish linux software applications. Personal Package Archive (PPA) enables the developers to provide the latest version of the software that may not be included in the linux distribution. PPA also enables the users to gain access to latest version of the softwares they most need. There are several other features and patches applied to linux kernel, debian system under the Ubuntu system that makes it great Desktop OS. I want to be involved in the development activities of such a company whose products I use and highly recommend. The other companies I know which work on similar products are RedHat Enterprises, Offensive-Security (Kali Linux parent company). In general I prefer to work with Debian based system as it is a lot closer to Free and Open Source Softwares (FOSS) and very user friendly.