Friday, June 12, 2015

New Job!

Is it related to Android? No! To Java? No! To GNOME then? No, not directly. Did I spin up a company? It could have been possible, but no, it's neither that!

So what am I upto?

It is great pleasure to announce that I now work for IBM, India.

I signed the joining letter on the 12th of May, 2015. Thereafter, I have been busy setting up my work environment on my IBM provided Lenovo ThinkPad and acquainting to the new(not very) city of Bangalore. I stick to Ubuntu for my development Linux distribution there so that I don't waste time on the learning curve. I installed Ubuntu with a bunch of software needed for my official work.

I work in the Linux Technology Centre (IBM-LTC), a part of IBM India Systems and Development Labs and my primary focus would be with the RAS (Reliability, Availability and Serviceability) team on OPAL (OpenPower Abstraction Layer) and related projects.

My first assignment is to build and install the upstream kernel master and boot-test and configure that using a Virtual machine. Sounds exciting, huh? :D
So, I installed my first Ubuntu guest virtual machine on top of my host Ubuntu following these steps and am getting comfortable with using the Virtual Machine Manager. I also had to enable BIOS settings for native KVM acceleration (Virtualization Technology and VT-d feature) for the VM to run at a usable speed. Then I followed simple kernel build steps (which I reserve for some other blog-post) and after some updates to grub configuration file, I could explicitly boot into a freshly built upstream kernel 14.1.0-rc5+.

Though my development machine is an Intel x86 machine but most of my patches are going to be tested on Power 8 machines eg. for enabling some functionality on PPC machines or checking some software compatiblity for PPC architecture, so if you don't have access to those machines, you might have to believe what I have to say.

I will describe my kernel fiddles and contributions to other open source tools/utilities in the coming posts so stay tuned! I'll mostly post patches with the email id: chandni[AT_SPAMFREE]linux.vnet.ibm.com

Saturday, February 28, 2015

Tapped on phone 7 times. Now an Android developer! :D

Nothing has been really tough so far! Just some little tweaks in the build.gradle files I had to make to the sunshine app to make it run, all have been listed in the documentation of the course.

Enabled USB Debugging on my android device and to check if my computer detected the device, ran the following command to obtain some result.

$adb devices


Thursday, February 26, 2015

Developing Android Apps: Installing Android Studio on Ubuntu 14.04 LTS

I followed the link: http://forums.udacity.com/questions/100238155/android-studio-and-ubuntu-1404-lts#ud853 with some modifications since the process described there seems expired.

  1. I had OpenJDK pre-installed so I continued using it.
  2. Installed Android Studio using these set of commands:
           
              $sudo add-apt-repository ppa:ubuntu-desktop/ubuntu-make
              $sudo apt-get update
              $sudo apt-get install ubuntu-make
                        //Note: ubuntu-make is the new name for ubuntu-developer-tools-center
              $umake android
  3. Installed Android Debug Bridge (adb)

              $sudo apt-get install android-tools-adb

              
  4. Installed Sqlite3

              $sudo apt-get install sqlite3

Then I launched the installed Android Studio and followed the steps for installing the SDK and accompanying software... This took a while.


We're going to build the "Sunshine" app in this course and I'll be only talking the highlights (which are meant to remove obstructions/induce motivation and to be taken along with the class videos, links to which I've provided in my previous post).

Sunshine is basically: https://github.com/udacity/Sunshine
and the branches are named and made chapter-wise.

UPDATE: All of the course code for Sunshine can be found here, on the Udacity GitHub page. This is the second version of the Sunshine codebase for the course and it was released on February 13th 2015. A change log can be found here.

Comeback

Hello Folks!

How are you doing?

My GNOME days are sort of behind me but that doesn't mean I've stop writing!

I've regained my health and am back to rocking the world with my chilling products and learning experiences.

What I've been up to in silence besides my job has been updated on my github repositories: SPOJ (which is about Sport Programming and past hackathons' problems involving Data Structures and Algorithms solved by me, a work in progress) and TestPOI (which is a tool for generating Data sets for a test database by shuffling records in an excel spreadsheet using Apache POI). Check them out! ;)

In the next few blogging sessions, I'll be talking about my growth as an android developer as I progress through classes on Developing Android Apps (Android Fundamentals) and UX Design for mobile Developers (Learn to design a 5-star Android App)!

So stay tuned!

Sunday, December 8, 2013

Tips for newcomers!

I composed a journal entry for the GNOME Journal sometime in June of 2011 but since the journal seems unrevivably dead, I thought, it's a good idea to share it on my blog.

Now that FOSS Outreach Program for Women internships is at it's verge of its action, what better time would it have been for this post to come.

Here it goes:

Becoming A New Contributor (Lessons from Empathy)

GNOME+Ubuntu was the first desktop and OS combo I ever used since installing the first linux distribution on my computer. GNOME made my transition from Windows very simple. As I explored more of it, I started to love the flexibility Linux provides and decided never to go back to the world of Windows which had always been hard on pocket. GNOME was my catalyst for this change!
Contributing to an Open Source project is more of a passion to learn and grow in an environment where all doors to knowledge are inherently open, rather than a compulsary chore that you are bound to complete in a set time duration. A community where everyone is willing to share his/her knowledge with you, without expecting anything in return, becomes an abundant, friendly sea which you are free to explore and collect the best of the pearls from, as you get to implement the aggregated knowledge mixed with your own skills and creative ideas and receive appreciation for every little effort of yours! The GNOME community is one such community I have witnessed :)

Getting started is the hardest part in any new endeavour. For a developer, the understanding of the development environment, having sound grasp of the developer tools and understanding the underlying APIs is what will lay the foundation for your contributions. The best way to learn them in fun manner is to exercise with them and to explore them as their need arises! GNOME's outreach program for Women and Google's Summer of Code are excellent programmes with which you can get in touch with experienced mentors who will help you overcome all sorts of fears of working on large projects with lines of code in some tens of thousands, and will be having a to-the-point answer to most of your queries. Also you'll simultaneously achieve a decent amount of stipend for your hard-work in return!
GNOME contribution becomes very easy for a FOSS enthusiast who uses it and takes it in high regard. You can contribute in many ways irrespective of you having a technical background. Contributions to GNOME can come in any of the designing, developing, documentating or marketing forms. I chose development simply as this was the most intutive way for me. I used to be just a daily user once. Slowly, I began reporting bugs as I experienced them and placing my desired feature for improvisation of applications I used and cared about. I also remember acting as a bugsquadder for a while.. And one fine day (which barely marked five months of first installing linux on my machine), I builded Empathy from source (thanks to Danielle and jhbuild :). It was tough for the first time and I started to code and debug using the Eclipse CDT IDE instead of using the in-built development environment Linux offers; I wish I had worked with "Beginning Linux Programming" by Niel Mathew and Richard Stones[1] or something similar beforehand! This book will prove an excellent reference if you are new at developing in Linux environment and want to boost up your development time through the fast and efficient tools your Linux distro has in store for you. After going through this, you will know how to be sure that your code is lint free and contains no memory leaks. My first developer contributions began with introducing improvements to my favorite application in GNOME- Empathy[2] which is mostly written in C programming language.

The foremost thing to begin is understanding the Git version controlling system[3] (GNOME uses that as do many worthy projects which you admire and use including the Linux kernel) which would be easy for anyone who had used any version controlling system in past (was not the case with me though). Next comes the APIs which the GNOME applications use. Most ubiquitous ones being, the GTK+ user interface API [4] and the core, GLib[5] and GObject[6] APIs. The An excellent mention over here would be the Andrew Krause's "Foundations of GTK+ development"[7]. For working on Empathy particularly, one has to understand the Telepathy specifications[8] aided with the Telepathy Developer's manual[9]. Yes they are huge but the approach should never be to understand all at once (I still keep unrolling them as need arises and when I feel like contributing more :).

People get to learn a lot with examples and I acknowledge the wealthiness of apt illustrations in almost all the important APIs you would need getting started ensuring a steep learning curve. To aid this, I also used to look up alternative full working examples for instance one might seek Tim-Philipp Müller's tutorial on GTK+ 2.0 TreeView[10] (you are right, I didn't came across the "Foundations of FTK+ development" till then).

The phase when I got involved in GNOME as a developer was a rocky one. GNOME was transitioning from version 2.32 to 3.0 and so were the many underlying core APIs. GTK 2.0 to 3.0 transition infused a series of API and ABI breaks rendering all applications built on top of it unbuildable and the developers were usually found adapting to the changes for most of the time. Albeit this, my starting was a lot eased with GNOME's Outreach Program for Women Internships 2010 and the supporting hand of an experienced Empathy and Telepathy developer, Danielle Madeley, who was my mentor. She was there to help me out whenever I got stuck and she is always ready to help even now! See how good and welcoming people of this community are! (One of the reasons I love GNOME so much! :)

Empathy is a multi-protocol messaging client which offers one-to-one and multi-user text chats and one-to-one voice and video calls over supporting protocols. At the first view of Empathy's code, nothing seemed familier to me except the C language constructs. I was clueless about how the pieces were put together. The overall design was utterly uncomprehendable with over 96k lines of code increasing at a tremendous rate. Now with huge applications like this, getting to know the entire application is not possible in a short duration if one has to be immediately productive so I decided to maintain my focus on multi-user chat features and bugs for the internship duration. Having sound knowledge of object oriented systems helps and with a little understanding of GObject one can begin to relate things, associate them and see how data flows among modules. Due to its object-oriented design, Empathy has all the advantages of any modular piece of work just like any other project based on GTK. Each file is a single class having certain set of private encapsulated data it works upon, and only a required subset of the data is accessible to other "classes" by means of public getter and setter "methods" while abstracting other data. Classes inherit other GObject classes and implement GObject interfaces. C immitating C++ ! Sounds cool, doesn't it? I was immediately a fan of GObject and its umbrella- generic C library, GLib, which besides Empathy is used by many other GNOME applications.

Owing to the fact that Empathy makes use of a lot of open source projects and libraries, one might wonder how can anyone actually begin to work without spending days of learning on it. The answer to it is Devhelp[11], a GTK+/GNOME browser for API documentation. It works natively with a library's gtk-doc generated documentation. It has this extremely useful search tool using which you can find the exact class/constant/function/signal you are looking for, almost instantly, for say, implementing some new feature. One easy way to keep devhelp updated with the latest documentation is to build the latest versions of libraries with "--enable-gtk-doc" option before installing and modifying the XDG_DATA_DIRS environment variable to include the "library_install_prefix/share" path before launching devhelp. Another useful tool is Git's grep tool using which you can locate the exact line of code you want to be at in a snap! So no more getting lost in the maze-like repository! Debugging and tracking sessions make one learn a lot! Among others, for debugging solely I got to experience new and useful tools like D-Feet[12], the D-Bus debugging tool to check values returned by methods on system/session buses and Wireshark[13] to monitor packets sent to and received from a network. Knowledge of these makes a prolific developer.

The work I completed under internship spanned a wide range of bugs the details of which have nicely been listed in my blog-posts[14] between December 2010 and March 2011. You can also track them from the slides of my talk titled "Contributions made by a newbie to the free desktop's Empathy" at GNOME.Asia Summit 2011[15]. All of my work branches have been merged upstream now and you'll be able to enjoy them in Empathy 3.2 :) Do let me know if you like and appreciate them. It keeps me motivated to contribute even more and gives me the satisfaction of impacting a large audience- the rare feeling which GNOME contributions can bring to someone!

Being a part of the GNOME community allows you to be with highly motivated people and think like them. If you are still wondering, or if there is still something stopping you from contributing, just know for once, that being here requires you to be ambitious and if you are here, you'll see yourself as a worthier person who is learning something new each day!

GNOME is lovable. GNOME reciprocates if you love it. Hope to see you soon; happy contributing!




LINKS
[1] http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764544977.html
[2] http://live.gnome.org/Empathy
[3] http://git-scm.com
[4] http://developer.gnome.org/platform-overview/stable/gtk
[5] http://developer.gnome.org/glib/stable/
[6] http://developer.gnome.org/gobject/stable/
[7] http://www.gtkbook.com/home.php
[8] http://telepathy.freedesktop.org/spec/
[9] http://telepathy.freedesktop.org/doc/book/
[10] http://scentric.net/tutorial/treeview-tutorial.html
[11] https://live.gnome.org/devhelp
[12] https://live.gnome.org/DFeet/
[13] http://www.wireshark.org/
[14] http://chandniverma.blogspot.com/
[15] https://live.gnome.org/GnomeAsia/2011Summit/Slides

Wednesday, October 30, 2013

Mentoring for Empathy

It's a great pleasure for me to announce that I will be mentoring for Empathy for this round of Outreach Program for Women Internships.

So come on #empathy on GIMPNet and show us you are interested.

Cheers!

Monday, September 30, 2013

Got some perks

Yesterday, Dr. M.C. Saxena visited my residence.

On the auspicious occasion of Navratre beginning (which is 5 days from now), an IT Centre is to be inaugurated in MCS Group of Colleges campus. He asked me if I could join the same and help run it, and I agreed.

So, with effect from the 7th of October, I'll be working on a UK based project that we have accepted (details not yet disclosed). I'll have more time for participating in algorithm competitions (again, yay!). Looking forward to new schedules!

PS: I still love GNOME and will continue contributing to it and underlying technologies in free time. Cheers!