Category: FOSS

  • Bye Tiny Tiny RSS, hello FreshRSS!

    Update (April 2021): I switched back to Tiny Tiny RSS after fixing the abandoned LinuxServer.io Tiny Tiny RSS docker codebase to work with the latest Tiny Tiny RSS changes in my fork.

    I have been using feed readers to consume RSS feeds for more than a decade now, starting with Liferea and then moving on to the web-based Google Reader (RIP) and NewsBlur. I used the free tier of NewsBlur for a long time and even contributed some bug fixes to it. The Android app was available on F-Droid and worked pretty well. However, as a self-hosting enthusiast, I wanted to self-host NewsBlur, and it was very difficult to do so. So I started searching for alternatives again.

    I found Tiny Tiny RSS and fell in love with it as it was full of useful features and very easy to self-host. The project’s author can often be a very difficult person to deal with and is very opinionated. Fortunately, I had to ask for support on the official forums just a few times in the many years that I used Tiny Tiny RSS.

    The TTRSS-Reader app on F-Droid proved to be a very good companion Android app, followed by a fork of the official version. When I moved all my self-hosted applications to a docker-compose based setup a couple of years ago, the LinuxServer.io tt-rss container image was very easy to set up and migrate to. Then the project stopped maintaining the container because the upstream author didn’t like them packaging his software and asked them to stop doing so. 🙁

    The source for the container image was available on GitHub and I continued to use it to build and update the tt-rss container that I self-hosted. However, a month or so ago, there were some breaking changes to the configuration method used by Tiny Tiny RSS and my builds stopped working. Then I started checking if I could use the officially supported docker-based installation method documented here. However, that installation method required Tiny Tiny RSS to be run as a sub-folder under a top-level domain and not as a sub-domain like I wanted.

    So I attempted to build my own Tiny Tiny RSS container and while doing so, realized that it is not worth doing so. I decided against spending any more time trying to get Tiny Tiny RSS to work as it was clearly not intended to be used in the way that I wanted to (according to the author). I started looking for alternatives again and liked FreshRSS. To be honest, it didn’t feel as polished and mature as Tiny Tiny RSS or NewsBlur, but was close enough.

    I used the LinuxServer.io FreshRSS container to set up my instance and migrated all my feeds from Tiny Tiny RSS to it. As the web interface felt a bit clunky to me, I started using it via the client apps – NewsFlash on my desktop and Readrops from F-Droid on my phone and the experience has been okay.

    Before I chose FreshRSS, I checked and investigated the current status of NewsBlur and if the self-hosting scenario had improved. The project has a docker-based deployment method now in the dashboard3 branch, but it looks like it might take a while for it to have first-class support. And the project has and uses a lot of bells and whistles which are not needed for a small instance or a single-user setup. I briefly considered subscribing to the premium plan on the official NewsBlur site, but didn’t do so out of subscription fatigue and also because I already pay for infrastructure which can be used for self-hosting many services.

  • Fixing the rough edges of my Plasma setup

    I use KDE Plasma on my Arch desktop and I’ve had some issues with getting my dual-monitor, mixed DPI setup to work properly as mentioned in my previous post.

    I nuked and paved my existing installation a few weeks ago and set up Arch afresh on the same computer on a new SSD. On the previous install, I had set up the root filesystem on a hard drive with LVM and the system startup was very slow – ~45 seconds to reach SDDM, an additional ~30 seconds to drop to a usable desktop, and then ~5 seconds to run my xrandr script.

    The boot time and the time taken to reach a usable desktop was significantly lesser with the SSD – ~8 seconds to start SDDM, ~5 seconds to the desktop, ~3 seconds to run the xrandr script. So I was happy.

    As exciting as that was, I still had many rough edges and paper cuts, most of them persisting across multiple re-installations. Thanks to the posts by various posts by fellow Plasma users, I was able to solve them 🙂

    SDDM

    Monitor layout

    When SDDM started, it always did with my monitor layout and DPI configured wrong. My secondary 1080p monitor is placed to the left of my primary 4K monitor and SDDM always placed the former to the right of the latter.

    Thanks to this useful post, I was able to create a custom Xsetup script by adding the xrandr command from my previous post and configuring SDDM to run it when starting the display server.

    # /etc/sddm.conf
    [XDisplay]
    DisplayCommand=/usr/share/sddm/scripts/Xsetup

    Theme

    I don’t like the default theme used by SDDM, maui. Since Arch is a DIY distro, it doesn’t automatically set up the default Plasma theme, breeze, like many other distros do when Plasma is installed.

    Previously, I was using the Chili login theme to make the SDDM greeter look nice. I was unsure why and how, the Manjaro installation on my laptop, had a nice Plasma theme for SDDM. But I didn’t spend any time investigating at all till now.

    I checked the Arch wiki page on SDDM theming to check if there are nice themes listed there that I could use and found that it is possible to configure the SDDM theme using the Plasma System Settings application after installing the sddm-kcm package. I found the default Breeze theme which I liked very much and set it as the theme. But that didn’t work. So I went ahead and configured it manually in sddm.conf and voilà, it worked! 😀

    # /etc/sddm.conf
    [XDisplay]
    DisplayCommand=/usr/share/sddm/scripts/Xsetup
    
    [Theme]
    Current=breeze

    Desktop scaling

    I was pleasantly surprised to see that Plasma automatically scaled my 4K monitor without having to configure scaling manually via the Display settings application. Everything in the secondary monitor looked large as expected and I had to run my xrandr command from the previous post, with some changes to restart Plasma shell for making the wallpaper fit the scaled display, manually every time due to something in the Plasma startup process resetting the screen configuration irrespective of when my xrandr auto-start script ran.

    Thanks to this post on Reddit by a fellow Plasma user, I found that the kscreen2 service was the culprit and disabling it ensured that the display configuration set up by the SDDM Xsetup script persisted and as a result, I didn’t have to manually run my xrandr script 😀 😌

    There could be some side-effects caused by disabling the kscreen2 service, but I haven’t run into any till now 🙂

    Emoji picker

    The built-in emoji picker, introduced in Plasma 5.18, is very convenient and something that Plasma was sorely missing before. However, in spite of installing an appropriate emoji font, the emoji picker had a lot of missing emoji with blank squares and the color/gender variants of some emoji looked broken with those showing up as two separate symbols (one for the emoji and the other for the color/gender variant) overlapping each other.

    Thanks to this Reddit post, I was able to solve the issue by creating a custom fontconfig configuration file, ~/.config/fontconfig/fonts.conf, with the configuration below and by forcefully rebuilding the font info cache files by running fc-cache -f.

    <?xml version='1.0'?>
    <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
    <fontconfig>
    	<match target="font">
    		<edit mode="assign" name="rgba">
    		<const>rgb</const>
    		</edit>
    	</match>
    	<match target="font">
    		<edit mode="assign" name="hinting">
    		<bool>true</bool>
    		</edit>
    	</match>
    	<match target="font">
    		<edit mode="assign" name="hintstyle">
    		<const>hintfull</const>
    		</edit>
    	</match>
    	<match target="font">
    		<edit mode="assign" name="antialias">
    		<bool>true</bool>
    		</edit>
    	</match>
    	<match target="font">
    		<edit mode="assign" name="lcdfilter">
    		<const>lcddefault</const>
    		</edit>
    	</match>
    	<match target="font">
    		<edit name="autohint" mode="assign">
    		<bool>false</bool>
    		</edit>
    	</match>
    	<match target="pattern"> 
    		<edit name="family" mode="prepend"> 
    		<string>Noto Color Emoji</string> 
    		</edit> 
    	</match> 
    </fontconfig>

    It looks nice after the fix 👌🏼

  • How to get a dual monitor setup with mixed DPI working on Xorg

    Last year, I purchased a new 4K monitor to use as my primary display in addition to my existing 1080p monitor. Like with most 4K monitors, this one required scaling to display text and interface elements in a readable size. While the dual monitor setup worked okay out of the box on Windows 10, it didn’t on my Arch install running an up-to-date KDE Plasma.

    1.5x scaling in the Display settings on Plasma made everything look okay on the primary 4K monitor but look large and ugly on the 1080p monitor. I was aware that Wayland supports mixed DPI environments very well but I was stuck on Xorg due to having an Nvidia GPU and Plasma’s support for EGLStreams still being a work in progress.

    I read multiple recommendations on the internet to scale (mentioned correctly in a few places as “upscaling”) the 1080p display using xrandr to compensate for the scaling done by the desktop environment so that everything looks okay on both displays. What confused me a long time is that “scaling” meant different things when it came to xrandr and the desktop environment. Scaling in the desktop environment translated to zooming in the desktop by 1.5x (“downscaling”) to make everything look larger and (up)scaling the display using xrandr meant zooming out the Xorg display for the monitor 1.5x to make everything look smaller.

    A lot of different xrandr commands were given as examples. However, all of those were for setups different from mine and used a lot of parameters and flags without a general explanation of what they do and how to adapt them for other scenarios. This was very important for someone like me who isn’t familiar with the terminology. So for a while, I had to resort using just konsole on the secondary 1080p monitor with the font size reduced to make it look okay and the interface elements still looking large and ugly.

    Eventually, I found out the solution that I needed – scale the desktop environment 1.5x which reduced the effective resolution of the 4K (3840×2160) monitor to 1440p (2560×1440) and that of the 1080p (1920×1080) monitor by 1.5x to 720p (1280×720). That made everything on the 4K monitor look properly sized and large on the 1080p monitor. To fix that, I had to use xrandr to upscale the 1080p display by 1.5x (2880×1620) to compensate for the desktop environment’s 1.5x scaling. With that, everything looked good on both monitors. Below is the xrandr command that I used.

    xrandr --fbmm 6720x3780 --output DP-0 --pos 2880x0 --mode 3840x2160 --scale 1x1 --primary --output HDMI-0 --pos 0x0 --mode 1920x1080 --scale 1.5x1.5

    The fbmm flag sets the reported physical size of the X screen as a whole. In this case it is (3840+2880)x(2160+1620), which is the sum of the resolutions of both monitors after running the xrandr command. The --pos flag is used to position the monitors in the 6720x3780 display. Since the 1080p monitor is present to the left of the primary 4K monitor, its position is at 0x0. The starting position of the 4K monitor is 2880x0, where 2880 is the horizontal resolution of the 1080p monitor, so that it is positioned right after the latter ends.

    This still caused an issue on the 1080p monitor where the Plasma desktop screen was reduced in size by 1.5x and was not filling the whole display. This also meant that the wallpaper was not filling the whole display. The unfilled area in that display was black in color. (Update May 2020: this can be fixed by restarting the Plasma Shell) To work around this issue, I used black color as the wallpaper for that screen and removed all the elements on that desktop. Till very recently, I continued using black color as the wallpaper and when I found that this was fixed in a recent Plasma update (not sure when and which version), I was able to use a proper wallpaper on the 1080p monitor as well.

    While this solved the major problem with mixed DPIs, the GUI toolkits (Qt 5, GTK 3) and some applications like Firefox needed some additional scaling tweaks to get them looking okay. For this I used the excellent documentation on HiDPI in the Arch wiki which covered almost everything. Steam and VirtualBox were a couple of notable exceptions that didn’t work okay. The former didn’t support fractional scaling and only worked with 2x scaling which makes everything noticeably larger. The latter was broken and had a lot of issues with the menus appearing in the wrong places and the guest VMs unable to use a proper resolution. Fixing this issue required setting QT_SCREEN_SCALE_FACTORS to 1.0.

  • Getting encryption to work on Redmi Note 4 with LineageOS 15.1 and newer

    I have been using LineageOS on my Redmi Note 4 phone from the day I bought it. Till yesterday, I was running LineageOS 15.1 on it with encryption enabled. Since I wanted to try out the new Pie release, I tried installing the Resurrection Remix 7.0 ROM based on the Android Pie release. After setting everything up and restoring all the apps and data using Titanium Backup, I tried encrypting the device. However the encryption process failed and caused the phone to do a quick restart.

    Since this was totally unexpected, I checked the error messages using the adb logcat command. The error message was

    E Cryptfs : Bad magic for real block device /dev/block/bootdevice/by-name/userdata
    E Cryptfs : Not a valid ext4 superblock
    Orig filesystem overlaps crypto footer region.  Cannot encrypt in place.

    This was strange because the userdata partition that is mounted at /data was formatted normally using the ext4 filesystem. Searching the internet lead me to this Reddit post which gave some useful pointers about the issue.

    I tried to resize the userdata partition by formatting it from the bootloader and voilà the encryption succeeded on the next boot after a clean install. So I started restoring the apps and data from the backup and when it was about to complete, I got an error notification which said internal storage running out, some system functions may not work.

    I was surprised by this since my phone had 64 GB of internal storage and there is no way for all of it to get used up. I also wondered if it was due to the encryption of the new apps and data (like what Bitlocker does on Windows by showing the disk to be 100% full while it is doing the initial encryption). (After resolving this issue later, I found this to be this reported issue). I started to suspect that something is broken with the installed ROM. I wanted to flash the stock MIUI ROM to check the partition size but it was difficult to find a working download link for the official fastboot ROM files because of issues (intentional?) with the Xiaomi site as usual.

    After flashing the stock ROM via the fastboot interface and then flashing TWRP and then the ROM, GApps and Magisk, I booted into the OS to find the internal storage size detected correctly. However, when I tried to encrypt the phone it failed again with the initial error.

    Suspecting some issue with the ROM, I installed LineageOS 15.1 because the encryption was working fine on it. But unfortunately, even with LineageOS 15.1, the encryption was failing with the same error. Since I had already spent too much time trying to fix this, I gave up for the time being and went to sleep.

    This morning, I researched this issue further and found this post, which revealed this to be an issue with TWRP 3.2+ not formatting the /data partition properly and the solution was to use a 3.1 version to format the userdata partition and then use the latest TWRP to flash Oreo ROMs or newer because of the compatibility requirements. Luckily for me, it worked perfectly and now my phone can run the Pie-based ROM with data encrypted.

    One important lesson I learned from this experience is to be conservative when flashing/switching ROMs because I often end up spending a lot of time to get everything working as expected and also have to suffer phone downtime. Another thing I reminded myself (again!) to do is to periodically download and keep backups of the stock fastboot ROMs because of how unreliable the official site can be.

  • Setting up Synergy 1.8.8 with SSL on OS X El Capitan as the server and Ubuntu 16.04 as the client

    Update (May 2020): Use Barrier, which is a maintained fork of Synergy that supports SSL by default and has builds for Windows, macOS and Linux.

    Synergy is a free and open source software (licensed under GPLv2) for sharing one keyboard and mouse between multiple computers. The source is hosted here on GitHub and the Synergy website provides compiled, installable releases with support for SSL encryption for a fee.

    At work, I have a Macbook Pro laptop running OS X El Capitan and an Ubuntu 16.04 desktop connected to a monitor which I use daily. Working on two separate computers at the same time is laborious and thanks to Hiemanshu, I came to know about Synergy.

    Eager to try it out, I built it from source after patching (to use the Qt installed on my Macbook using Macports) and with minimal configuration, I was able to get it to work. But since my computers were connected to the corporate network, I did not want my keystrokes to be sent through the network in plaintext. So till today, I used an SSH tunnel between my Macbook acting as the server and the Ubuntu desktop acting as a client. It was a little bit inconvenient having to setup the SSH tunnels every time and I didn’t want to use something like autossh.

    Imho, in the post-Snowden era, any software sending sensitive plaintext data through the network is broken by design. Since Synergy is free software, I was hoping to patch it to allow SSL communication without requiring a license. With some help from the comments and pull requests on the Synergy GitHub repository and some additional tweaking, I was able to build Synergy 1.8.8 with support for SSL irrespective of the licensing status.

    The following details of how I managed to do it are primarily for my reference and I am sharing it on my blog in the hope that it might be useful for others as well. That said, Synergy is a very useful free/libre software and I recommend purchasing a license to support the development. One of the Synergy developers has committed to enable SSL communication by default in the 2.0 version.

    Steps to be followed on OS X El Capitan

    • Clone the Synergy GitHub repository from  and checkout the 1.8.8-stable branch
    • Apply this patch to fix the Qt related paths and also to enable SSL without license check. For Qt installed without using Macports, tweak the frameworkRootDir variable in the patch to point to the correct directory. Also tweak the path to the Info.plist to point to a valid path.
    • If the Mac OS X 10.11 SDK is not present under the /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs directory, Download it from this GitHub repository and copy it to that directory.
    • Install the dependencies of Synergy (cmake, qt5) using Macports.
    • Navigate to the top-level directory of the repository and run ./hm.sh conf -g2 --mac-sdk 10.12 --mac-identity ElCapitan where the current OS is El Capitan and the available default Mac OS X SDK is 10.12. Modify the parameters based on the available SDKs and the OS version.
    • After the previous command completes without errors, run ./hm.sh build to start the build process.
    • To create a Mac app, run ./hm.sh dist mac.
    • The Synergy.app is available under bin/Release/Synergy directory. Drag and drop it to the /Applications directory.
    • Create the SSL certificate needed by the Synergy server by running the following commands
      mkdir -p ~/.synergy/SSL/Fingerprints
      openssl req -x509 -nodes -days 365 -subj /CN=Synergy -newkey rsa:1024 -keyout ~/.synergy/SSL/Synergy.pem -out ~/.synergy/SSL/Synergy.pem
      openssl x509 -fingerprint -sha1 -noout -in ~/.synergy/SSL/Synergy.pem > ~/.synergy/SSL/Fingerprints/Local.txt
      mkdir -p ~/Library/Synergy/SSL/.
      cp ~/.synergy/SSL/Synergy.pem ~/Library/Synergy/SSL/.
      sed -e "s/.*=//" -i ~/.synergy/SSL/Fingerprints/Local.txt
      
    • Enable Accessibility permissions for the Synergy app from the Security and Privacy dialog under System Preferences.
    • Start the Synergy app and run it as a server. The app window should indicate that SSL is turned on and the logs should not have any errors.

    Steps to be followed on Ubuntu 16.04

    • Clone the Synergy GitHub repository from  and checkout the 1.8.8-stable branch.
    • Apply this patch to fix the Qt related paths (not needed on Ubuntu) and also to enable SSL without license check.
    • Install the dependencies by running the following command
      sudo apt-get install cmake make g++ xorg-dev libqt4-dev libcurl4-openssl-dev libavahi-compat-libdnssd-dev libssl-dev libx11-dev
      
    • Navigate to the top-level synergy repository directory and run
      ./hm.sh conf -g1; ./hm.sh build; ./hm.sh; ./hm package deb
      

      This builds Synergy and creates a .deb package file under the bin directory.

    • Install the .deb file using dpkg.
    • Start the Synergy app from the Unity launcher (or alternatively using its full path).
    • Configure it as a client and set the server address to that of the computer running the server.
    • The app will display the server’s certificate fingerprint with a prompt to trust or reject it. Trust the fingerprint after carefully verifying it. If there are any errors with the server fingerprint or trusting it, copy the Local.txt file generated on the server and save it under ~/.synergy/SSL/Fingerprints and restart the client.

    References:

  • Getting rid of Truecaller from Cyanogen OS 12.1

    Cyngn has struck a deal with TrueCaller to integrate it with the default dialer app on Cyanogen OS 12.1. For a privacy-conscious person like me, it was totally unacceptable given the notorious reputation of TrueCaller. Read this post on XDA-Developers for more details.

    Cyngn Logo

    TrueCaller Logo

    Here is how I got rid of TrueCaller. Before installing the OTA on my OnePlus One, I turned off mobile data and Wi-Fi so that I could prevent any internet access till I removed TrueCaller. The phone rebooted after installing the Cyanogen OS 12.1 OTA update (which has been pulled due to some issues at the time of writing this). Immediately after that, I opened the dialer and was prompted to enable TrueCaller. I refused it by selecting Not Now.

    TrueCaller opt-in dialog

    I also went into the settings menu of the dialer app to make sure there was nothing related to TrueCaller enabled by default. All this just disables TrueCaller but does not remove it entirely. Read on if you want to completely remove it.

    Since the TrueCaller app does not show up in the App Drawer, go to Settings ? Apps ? All and scroll down to the TrueCaller Service app. Tap on it and uninstall it from the App Info page that shows up.

    Uninstall TrueCaller App

    Now your phone should be free of TrueCaller and its privacy issues. If you go to the settings menu of the dialer app, you can verify that there are no settings related to TrueCaller.

    This should work for any device for which Cyanogen OS 12.1 is released.

    In case you have a change of mind after doing this and want to reinstall TrueCaller, you can do that by navigating to /system/vendor/bundled-app/TrueCaller folder using the File Explorer app and installing the APK that is there. The /system/vendor/bundled-app/ folder contains the APK files for all the other pre-loaded (but removable) apps like Boxer, Browser as well.

    Hope this helps 🙂

  • Enabling captive portal detection in GNOME 3.14 on Debian Jessie

    Enabling captive portal detection in GNOME 3.14 on Debian Jessie

    GNOME 3.14 supports captive portal handling but it is not enabled by default in Debian Jessie probably due to the privacy concerns. To enable it, create a file /etc/NetworkManager/conf.d/20-connectivity-debian.conf with the following content:

    [connectivity]
    uri=http://network-test.debian.org/nm
    response=NetworkManager is online
    interval=300

    Then restart NetworkManager using the command service network-manager restart as root user (or use sudo if your non-root user has sudo privileges). Once this is done, whenever you connect to a network with a captive portal, GNOME will automatically open the captive portal login page where you can login to get access to the internet. Please note that the requests to the connectivity test URL could be logged and be aware of its privacy implications though no personally identifiable information is sent.

    This is very helpful for me since my ISP ACT Fibernet requires its users to login to its captive portal before allowing internet access. Hope this is helpful for others. The configuration given above tries to reach the specified URL once every 300 seconds and tries to open the captive portal login page if it is not reachable. This could cause the NetworkManager applet to try opening the login page if there are any issues with the internet connectivity. So feel free to tweak the interval according to your needs.

  • Disabling automatic download of software updates in GNOME 3.14 on Debian Jessie

    GNOME Software application automatically downloads the packages to be updated and presents a notification in the notification area. It might be a good idea to disable it avoid excessive data usage on metered internet connections.

    To do it from the command-line

    $ gsettings set org.gnome.software download-updates false
    

    Or open dconf-editor and navigate to

    org -> gnome -> software

    and unselect this key

    download-updates

  • My contributions to Mozilla Input

     

    Apart from writing Free/Libre Open Source Software, I have tried to contribute to existing ones whenever I can – mainly in the form reporting bugs, fixing documentation errors and so on. But I have always had the dream of making non-trivial contributions in addition to what I have been doing. In pursuit of that dream, I have been searching websites like OpenHatch for projects to contribute to, without finding a good starting point.

    A few months back, I read somewhere (could be Hacker News, Planet Python or one of the many open source Planet feeds that I am subscribed to) about how the author made his first contribution to a Mozilla project. That inspired me to try and do something similar. So I went to the Bugs Ahoy website linked to from that article.

    These days, almost all the code I write has been in Python and more often than not involves web development with Django. So I filtered the bugs using the criteria “Python” and “Simple bugs”. I looked at the summary of the listed bugs and tried to assess if I could fix any of them. There was a bug related to improving the 404 error page in a project called Input. I had never heard of the project before and only knew the popular Mozilla projects like Firefox, Thunderbird, Firefox OS. Still I decided to give it a try since the project was built using the Django web framework which I have used for my projects.

    Firefox Input

    I read the bug report and the comments and could see from the history that a lot of people took up the bug to work on, but never completed it. It was a mentored bug and Will Kahn-Greene, working for Mozilla, (whom I had known earlier as the person behind pyvideo.org) was the mentor. He had requested interested developers to contact him on #input channel on Mozilla’s IRC network.

    Will Kahn-Greene
    Will Kahn-Greene

    I contacted him only to find that someone else had started working on the same bug a few days back. Will told me more about mentored bugs and how to find them. With his help, I browsed through the list of mentored and simple bugs in the Input project and picked up a bug that appeared easy to solve.

    At that point, I didn’t even know what the project was about and hadn’t read its wonderful documentation. Once Will pointed me to it, I started reading immediately. I came to know that ‘Fjord’ is the software that runs Mozilla Input (that collects actionable feedback from various Mozilla products in different states of development and offers a set of analysis methods for looking at the resulting data). I had to setup the dev environment virtual machine using Vagrant (which I had only heard about before). I read the steps mentioned in the ‘Getting Started’ section of the docs and completed the setup, understanding each step in detail.

    firefox-happy-sadWhen I was about to start assessing the code changes to be made, I saw that the VM was running Ubuntu 13.10 which had already reached end-of-life. I informed Will that I will fix it to use the LTS version of Ubuntu which is supported for 5 years from the time of its release. After reading up a little bit on Vagrant and with Will’s help, I made the fix and verified it. Will immediately reviewed my pull request and merged my first non-trivial contribution to any open source software that I had not developed.

    Will encouraged me to help with other dev environment related bugs which some times involved just testing if things work. Slowly I was able to fix more issues surrounding the dev environment and even provide Will a few ideas in resolving some longstanding ones. Despite the encouraging beginning, I got distracted after about a fortnight and drifted off. It wasn’t until the beginning of this month that I regained some focus and wanted to contribute again to Fjord.

    Will, as welcoming and encouraging as ever, helped me with fixing more bugs related to the development environment. Though Python and Django were the reasons that led me to Fjord, it wasn’t until 10+ merged commits that I even wrote a single line of Python 🙂 In the past week, I hung out on #input every night and informed Will regarding the things I wanted to work on. Then I did the code changes and sent pull requests. Will patiently reviewed all my changes and merged them. Whenever there were issues with my code, he helpfully suggested ways to fix them.

    I wanted to continue doing this every day for as long as I could, but with Will’s year-end vacation coming up, I had to pause my contributions till the beginning of the next year. So I am eagerly waiting for the new year! 🙂

    I have the annual year-end vacation from Christmas to New year and I intend to use some time to plan the work to be done in Fjord and also my own Xpens.

    Whatever contributions that I have been able to make, I have to thank Will for being a tireless and enthusiastic mentor in spite of having his plate full. He has always encouraged and mentored me. He has nothing but praise for those who want to contribute to Fjord (case in point – see this and this). Without him, none of this would have been possible. I am glad and grateful to have such a great mentor! I hope to continue in the same vein and do much more and make a difference.

    I hope my story inspires many more people to contribute to open source projects!

  • Moving away from Ubuntu after 5 years

    Ubuntu’s Amazon search “feature” fiasco (Probably I have enough in my mind to write another big post) was the last thread in the straw for me. Switched to Debian Testing with GNOME 3. Surprisingly, GNOME 3 isn’t that bad at all and not much different from Unity. Yeah having to install extensions to achieve some functionality expected to be out of the box, is a bit weird, but is something you can live with.

    One thing that isn’t quite up to the mark is the notifications system. Most of the commonly used applications in Ubuntu, like Pidgin, Thunderbird, Gwibber, Transmission, Empathy, make use of the notification system created by Ubuntu. In GNOME 3, that sadly isn’t the case. A lot of work still needs to be done in integrating the applications with the notification system.

    Since I have a 8 mbps internet connection at home, installing the proprietary drivers for my NVIDIA GeForce 8600M GS graphics card and proprietary firmware for my Intel® PRO/Wireless 3945ABG wifi adapter was a breeze and went without any issues. I even tweaked GRUB’s resolution and enabled a cool bootsplash screen featuring the Joy theme.

    All these years of using my laptop, a couple of times, I did try to move out of Ubuntu, but there was always something that made me come back to Ubuntu in no time. But this time I am having a good experience with Debian Wheezy and GNOME 3 and it’s highly unlikely I will come back to Ubuntu any time soon. Ciao Ubuntu, without doubt you were very good and worked without issues for me ever since I started with Feisty Fawn and I am very happy about that. But now it is time to go.

    You have root? I have Debian!

    P.S. It’s been a while since I wrote a blog post and to insert this image, I was struggling for minutes together to find the button to do it. It was on the top of the editor and not as a button in the toolbar as I was expecting 🙂