தங்கியிருந்த விடுதியில் காலை 7 மணியிலிருந்தே சரணாலத்தைப் பார்வையிடலாம் என்று தகவல் சொன்னார்கள். முதல் ஆளாய்ப் போய் பார்த்து விட்டு வந்து விடலாம் என்று சரணாலயத்தை நெருங்க 8:10 ஆகி விட்டது. ஆனால் 8:30-லிருந்து தான் பார்வையாளர்களுக்கு அனுமதி; நுழைவு மறுக்கப்பட்டது. அதுவரை அருகிலிருந்த பறவைகளைக் கவனிக்க ஆரம்பித்து பறவை நோக்குதலை அங்கேயே துவங்கியாயிற்று. அப்போது ஒரு சிறிய மின்சிட்டு(Small Minivet) சட்டென்று முன் தோன்றி மரத்தின் உச்சியில் அமர்ந்தது; முதல் முறையாக மின்சிட்டைப் பார்க்கின்றேன்(Lifer). நுழைவு மறுக்கப்பட்டதும் நன்மைக்கே! 8:30-க்கு முதல் ஆளாய் நுழைந்தாயிற்று. சரணாலயத்துக்குள் சென்று அவ்வளவு பறவைகளைப் பார்த்ததும் மட்டற்ற மகிழ்ச்சி. முதல் முறையாக இரு இந்திய சாம்பல் இருவாச்சிகளைக் கண்டதில் இரட்டிப்பு மகிழ்ச்சி. முந்தைய தினம் மைசூரு மிருகக் காட்சி சாலையிலும் இதே இருவாச்சிகளைக் கண்டிருந்தேன்; ஆனால் அதை லைஃபர் கணக்கில் நான் சேர்க்கவில்லை. பயணச்சீட்டில் ஏற்பட்ட சிறிய குளறுபடியால் படகு சுற்றுப்பயணம் செல்ல சற்று தாமதமானது. படகு சுற்றுப்பயணம் குடும்பத்தினர் அனைவருக்கும் பிடித்திருந்தது. மிக அருகில் மஞ்சள் மூக்கு நாரை(Painted Stork), கூழைக்கடா(Spot-billed Pelican), கரண்டி வாயன்(Eurasian Spoonbill), நத்தைக்குத்தி நாரை(Asian Openbill), ராக்கொக்கு(Black-crowned Night Heron) ஆகிய பறவைகளையும், சதுப்புநில முதலைகள், பழ வௌவால்களையும்(Fruit Bats) வெறும் கண்களால் வேறெங்கும் காண இயலாது. நேரம் கிடைத்தால் மைசூரு செல்லும் போது கண்டிப்பாக சென்று வாருங்கள் என்று பரிந்துரைக்கிறேன். நன்று!
நேற்று ஸ்ரீ சாமராஜேந்திர விலங்கியல் தோட்டத்தில் என் விருப்பப் பட்டியலில் இருந்த பறவைகளை நேரில் கண்டேன். ஆனால் பார்க்க விரும்பிய பறவைகளை இப்படி இரும்புக் கம்பிகளுக்குள் கண்டதில் சற்று வருத்தமே. பறவை நோக்குதலில் ஈடுபாடு கொண்டு கடந்த இரண்டு வருடங்களாக அலைந்து திரிந்து ஒவ்வொரு பறவையாகப் பார்த்து வருகின்றேன். இப்படி வரித்தலை வாத்து(Bar-headed Goose), இருவாச்சி(Great hornbill), சாரஸ் கொக்கு(Sarus Crane), சின்ன போதா நாரை(Lesser Adjutant) போன்ற பறவைகளை ஒரு சேர அங்கே பார்த்தது சரிவர சமைக்காத பிடித்த இனிப்பை வயிறு முட்ட திணித்தது போல் இருந்தது.
இன்று Tour De 100 2022-ல் பங்கேற்று சவாலை 3493 புள்ளிகளுடன் நிறைவு செய்ததற்காக இரும்புப் பதக்கம் வந்து சேர்ந்தது. தங்கப் பதக்கத்தைக் குறி வைத்து ஆரம்பித்த இந்த நூறு நாட்கள்(அக்டோபர் 01,2022 – ஜனவரி 08, 2023) மிதிவண்டி சவால், ஒரு கட்டத்தில் சவாலை நிறைவு செய்யத் தேவையான குறைந்தபட்ச புள்ளிகளையாவது கடப்பேனா என்கிற நிலையில் இருந்தது. நூறு நாட்களை இருபது நாட்களாகப் பிரித்து ஐந்து கட்டமாக இந்த சவால் நடைபெறும். ஒவ்வொரு கட்டத்திற்கும் 20 நாட்களுக்கான சவால்களும் அதற்கு தகுந்தவாறு புள்ளிகளும் வழங்கப்படும் (உதாரணத்திற்கு முதல் கட்டத்தில் 5 நாட்கள் 10 கி.மீ தூரத்திற்கு மிதிவண்டியை ஓட்டியிருந்தால் அதற்கு 100 புள்ளிகள், குறைந்தது 5 கி.மீ 10 நாட்கள் ஓட்டியிருந்தால் 100 புள்ளிகள்). ஒவ்வொரு கட்டமாக செல்லச் செல்ல சவால்கள் சற்றுக் கடுமையாகிக் கொண்டே போகும். சவாலை நிறைவு செய்ய குறைந்தது 2500 புள்ளிகளைத் தொட வேண்டும். 2021-ல் 6813 புள்ளிகளுடன் வெள்ளிப் பதக்கத்தை அடித்திருந்ததால், அப்போதே அடுத்த வருடம் தங்கத்தைத் தட்டித் தூக்க வேண்டும் என்று நினைத்திருந்தேன். ஆனால் 2022 நம்மை இயல்பு நிலைக்குத் திருப்பி, அலுவலகம், பள்ளிக்கூடம் எல்லாம் ஆரம்பித்த பின் மிதிவண்டியைத் தொடுவதற்கே நேரத்தைத் தேட வேண்டியிருந்தது. சவால் நான்காம் கட்டத்தை நெருங்கியிருந்த போது தான், இந்த முறை ஏதாவது ஒரு பதக்கத்தை அடைவதற்காவது வாய்ப்பேதும் இருக்கின்றதா என்று கூட்டிக் கழித்துப் பார்த்தேன்; மீதியுள்ள 40 நாட்களில் பெரும்பாலான நாட்கள் மிதிவண்டியை அழுத்தினால் கொஞ்சம் வாய்ப்பு இருப்பது போல் தெரிந்தது. நான்காம் கட்டத்தில் அதிகாலை 5;30 மணிக்கு எழுந்து 20 நாட்களும் விடாமல் குறைந்தது 5 கி.மீ அழுத்தினேன். ஜந்தாம் கட்டத்திலும் அதையேத் தொடர்ந்து ஆக மொத்தம் 494 கி.மீ-களைக் கடந்து இரும்புப் பதக்கத்தை ஒரு வழியாகக் கைப்பற்றி இருக்கிறேன். 2023 சவாலில் இதை விட சிறப்பாக பங்கேற்று, இன்னும் விலாவரியாக சவாலை விவரித்து, கட்டம் கட்டமாக கட்டுரை வரைகிறேன். மகிழ்ச்சி!
கொஞ்சம் கொஞ்சமாக கொரானாவின் பிடி தளர்ந்து இயல்பு நிலைக்கு 2022 நம்மை நகர்த்தியிருந்தது. எழுதுவதற்கு நிறைய இருந்தும் 2022 நிகழ்வுகளில் எதையும் பதிவிடாததால், சுருக்கமாக ஓட்டம், மிதிவண்டி ஓட்டுதல் மற்றும் பறவை நோக்குதலில் சென்ற வருடம் கடந்ததை ஒரு படத்திற்குள் அடக்கி பதிவேற்றுவதற்குள்ளாகவே 2023-ல் ஒரு மாதம் ஓடி விட்டது. இன்னும் நாட்களை இழுக்காமல் 2022-ன் நினைவாக ஒரு குட்டி பதிவு.
I have been using the Netspeed widget on my KDE Plasma installations for a long time to display the network download and upload speed in the Plasma panel. When I upgraded to Kubuntu 22.04 a few months ago, I found that it stopped working. After doing some research, I found that the KSysGuard package that the widget depends on has been removed from the Debian and Ubuntu repositories as it is unmaintained (Debian bug).
Thanks to a useful suggestion on Reddit, I was able to recreate the functionality of this widget using the System Monitor Sensor widget. Here is what I did to achieve it.
Add the System Monitor Sensor widget to the panel.
Right-click the widget and click on the Configure System Monitor Sensor option in the menu
In the Appearance tab, load the Network speed preset, set the Display style to Text Only and set the Minimum Time Between Updates to 1 second. Apply the changes before proceeding to the next step.
Open the Sensors Details tab and in the Text Only Sensors field, search for the Download Rate sensor. I chose the Download Rate (B/s) version. There is also a Download Rate (b/s) sensor, if you prefer that.
Click on the small pencil icon edit button just after the name of the widget, Download Rate, to edit it. Specify the down arrow symbol, ↓, as the name. Apply the changes.
Now you have a widget that shows the current download speed on the panel, updated once every second.
Add another System Monitor Sensor widget to the panel and configure it to display the Upload Rate by following the steps above, tweaked for displaying the upload rate.
The result of doing these steps should look like what is shown in the screenshot below.
With this, I have a good replacement for the NetSpeed Widget on my Kubuntu install.
I am a big fan of Willi Mutschler‘s btrfs-luks full disk encryption installation guides on his site, https://mutschler.dev, and have used them for installing Manjaro and Ubuntu 20.04 and newer versions. Recently, I set up Kubuntu 22.04 full disk encryption by following the same guide and noticed a couple of changes that had to be done to get it working. So I am documenting those here till he writes a new guide for Ubuntu 22.04.
In the step 3 of his excellent guide, the optimized mount options for SSD and NVMe drives are listed. The space_cache option mentioned in that section no longer works on Ubuntu 22.04 because the option has been renamed in the newer versions of the Linux kernel. So one has to specify the option as space_cache=v2. Otherwise, the Ubiquity installer will crash, and the installation will fail.
Also, in the Install the EFI bootloader section, it is a good idea to use the HWE Linux kernel package names corresponding to 22.04 instead of 20.04 since the packages containing the old LTS version in their name are ‘dummy transitional packages’. So the corresponding command can to be updated to
At the time of writing this post, the HWE package installs the same kernel version as the one that shipped with Ubuntu 22.04 since there isn’t a newer kernel released yet – these are usually backported from newer LTS versions.
With these minor changes, it should be possible to follow the steps in that documentation to set up full disk encryption with btrfs and luks on Ubuntu 22.04.
As a bonus, I have used the same guide for installing Kubuntu 20.04, 21.10 and 22.04, with appropriate substitutions, wherever needed.
I have usually skipped the last section in this guide, Install Timeshift, timeshift-autosnap-apt and grub-btrfs, in favour of using my tools of choice to do the same – Snapper and snapper-gui, both of which are available in the official Ubuntu repositories. I will write a blog post about it in the future.
சமீபத்தில் வெளியான ‘திருச்சிற்றம்பலம்’ திரைப்படத்தில் ‘மேகம் கருக்காதா’ எனத் துவங்கும் பாடலை பொயட்டு தனுஷ் எழுதியிருக்கிறார். அதில் ‘பெண் தோகை வருடுதே’ என்று ஒரு வரி வருகிறது. தோகை என்றவுடன் நம் நினைவுக்கு வருவது நமது தேசியப் பறவை மயில். ஆனால் ஆண் மயிலுக்குத் தான் அழகியதோர் தோகை இருக்கும்; இணையைக் கவர அதை விரித்து ஆடும். ‘பெண் தோகை’ – பெண்ணின் முடியைத் தான் குறிக்கிறதோ என்றால், அதற்கு முன்னதாக வரும் ‘பறக்க பறக்க துடிக்குதே’ வரியினால் பறவையின் தோகையையேக் கூட குறிப்பதாக இருக்கலாம். இப்பாடலில் வரும் ‘பெண் தோகை’ இல்பொருள் உவமையணியாக இருக்குமோ?
I was taken virtually to 1996 Mt. Everest disaster, where 12 climbers didn’t make home. Jon gave excruciating details on the events unfolded during summit assault and descend. The author, himself a climber, reached Mt. Everest and returned safely was plagued with loss of lives – that includes his guide Rob Hall.
</amp-fit-text>
This book gave me a view of ambitious mountain climbers, whose passion and endurance are beyond normalcy. Various stages and journey before the summit were clearly explained – starting from Kathmandu, Namche bazaar, Lobuje, Base Camp at 17,600 feet, Khumbu Icefall, Camp One, Camp Two, Camp Three, Camp Four and summit at little higher than 29,000 feet.
The author gave stories about his fellow climbers and their personalities that clearly helped visualizing the human side of them. I felt I was traveling with Sherpas, the real heroes of Mt. Everest, under-appreciated, hard-working, astonishing, helpful climbers – who setup the tents, setup ladders and ropes on for climbing, cook the food, serve the tea and haul all the goods.
I know I won’t climb any mountain of this caliber, but I’m humbled to learn the grit and perseverance shown by the determined climbers after reading this book.
This blog now integrates with the Fediverse using the ActivityPub protocol. This means that you can follow this blog by searching for lguruprasad@www.lguruprasad.in and following that account from any of the supported platforms mentioned here!
Matrix is a modern, decentralized, federated real-time communication protocol and open standard. It has a thriving ecosystem of servers, clients, and applications. Synapse is the reference server and Element is the reference client for the web, desktop and mobile platforms.
This is something that I have been interested in using and self-hosting for a few years now. I have had an account on the main matrix.org instance for a while now and wanted to switch to a self-hosted instance.
Since I have been using docker, docker-compose, and Ansible to deploy and run a wide range of self-hosted applications for my personal use, the spantaleev/matrix-docker-ansible-deploy was my choice for setting up my instance. I chose to use Synapse over Dendrite, the second-generation server because though it is lightweight, it is not feature-complete. All the other third-party implementations have a lot of catching up to do as well, at the time of writing this post.
I learned a bit of Terraform in my previous job, but never had a chance to learn it properly or build something from scratch using it. So armed with my little knowledge of Terraform, I created a small Terraform project to automate setting up a new Matrix instance. It provisions the DNS records needed for Matrix on Namecheap — my domain registrar and DNS host, provisions an appropriately sized Hetzner cloud instance with a floating IP address, and runs the deployment playbook in the matrix-docker-ansible-deploy repository with the provided Ansible variables file. I used the hcloud and the namecheap Terraform providers to do this.
With this, I was able to provision and set up my Matrix instance in under 10 minutes by just running
$ terraform plan -out=matrix-plan
$ terraform apply "matrix-plan"
I have released the source code for this project here on GitLab under the GNU Affero General Public License v3.0 (AGPLv3) or later. Since this project contains the matrix-docker-ansible-deploy repository as a git submodule, running git submodule update --init should automatically pull in a known good commit of that repository to use for the deployment. The README file has the instructions for using the project to set Matrix instances from scratch.
I hope it is useful for those who are looking to set up a new Matrix instance.
Mr. Brian Whittaker was a great colleague that I had the opportunity to work with at McAfee. He was from the Aylesbury office. Today marks 2 years since the passing of Brian, and I have a few words to share.
When I joined the EWS team at McAfee in late 2010, Brian was already a very senior engineer. PN, one of the managers at that time, use to say, "For any given technology or programming language (that we were using), it is safe to assume Brian knows better than us". Specifically, if we ran into a problem that is unixy, a running joke in the team was to say "Well, man Brian", a reference to the Unix man pages being the ultimate source of information on anything in Unix/Linux. Brian could help with a solution for everything from a messed-up merge to process synchronisation problems. He maintained a fairly sophisticated build system for several years, created many useful utilities for the product and the engineering team and gave really useful feedback in code reviews.
For several years, the engineering team was also responsible for creating the Release notes for every release. And the team used to use Bugzilla at that time for issue tracking. Brian had written a utility that would parse comments from each bug that is meant for a release and create the HTML/PDF release notes. For doing that, to ensure that the comments that get into the release notes are unambiguous and easy enough for the customers to understand, Brian took upon himself the task of correcting the vocabulary, structure, and grammar of the bug comments. When we made mistakes that are not very obvious to us non-native English speakers, he famously quips "As my high-school English teacher used to say, …."
Brian also wrote the backup utility that the team had been using for well over a decade when I left McAfee. It was a home-grown Perl-based solution that handled daily/weekly backups of several TeraBytes of data.
When I first met him in person in 2013 during an official visit to the UK office, I was amazed at how he had organised this workstation’s desktop. There used to be dozens of small terminal sessions, each serving its own purpose (and only Brian knew which terminal is for what). You go ask him a question, he will get to the right terminal type in a few commands (at times obscure commands), and get the results that you had asked for. His work ethic/discipline is something that all of us could learn from.
Likewise, the build system that he created (along with AJ, SchCr, SiCr?) was extremely complex and sophisticated. At one point in the past, the set of Makefiles, triggered from a top-level make file used to generate 3 ISOs, 3 zips (patch install), and 1 source ISO.
By late 2019, Brian started to show signs of illness and needed frequent visits to the hospital. But his sense of commitment and nonchalance remained intact. I remember a specific incident where when a build failed for no apparent reason, I asked around and no one could figure out why. And Brian was in the hospital. While we worked around by creating a formal build off of our Jenkins, Brian was kind enough to login from the hospital to tell us that there is an intermediate IT-owned file server to which the build gets copied and that seems to be the point of failure.
I had the opportunity to meet him in person again in January 2020, just before the COVID-19 menace started. We (HB, SV, KSh, and I) had been to the UK office to transition a few products over to India. We had planned a few transition (a.k.a KT or TOI) sessions with Brian. But he was quite unwell by then and managed to share only a subset of what was planned (and that was of course quite useful). A few short weeks after we returned back to India, we were informed of Brian’s passing by PN. Though he was quite senior to us by age and experience, it was still a case of "gone too soon".
Brian, along with AJ, spent a significant part of his time improving developer/programmer experience (PX). And he was inspirational in many ways. A true "senior engineer", as the industry calls them.
PS: I could not find a LinkedIn profile for Brian, nor could I find any photos. I’ll share those if I manage to find any publicly available ones. Also, this is more of a "thought dump" than a proper blog post.
In my ~14 years of experience in the software industry, I have worked in 3 companies (currently in my third). Prior to my current job, I spent a little over 2 years at Motorola Solutions (July 2008 - Nov 2010) and a little over 10 years at McAfee (Nov 2010 - Jun 2021).
While I had made some awesome friends at Motorola, I did not spend enough time to experience growth.
Nor did I have the opportunity to witness products/programs growing from scratch to being used by thousands of end-users.
However, I had an excellent mentor in PRam and some excellent friends, some of whom I am still in touch via social networks.
On the other hand, I spent over 10 years at McAfee, grew in my career, along with a mature, awesome product. Also, I was witness to a new product line being started from scratch and growing into a well-received popular set of products. I joined McAfee in November 2010, shortly after Intel announced its intention to acquire it (but not because of that), and worked there until June 2021.
In those 10 years, McAfee moved from being a public company to a subsidiary of Intel, then a private company that was spun off from Intel owned by private equity firms, then again went public and then part of it was sold to another
private equity firm….
In those 10 years, the team that I belonged to moved from being part of Network BU to Content BU, back to Network BU, to Cloud Security BU to Cloud & Content Security BU to Network, Web and Data Protection
In those 10 years, the team worked on Email and Web Security (earlier known as WebShield), then the product was renamed to McAfee Email Gateway, which was eventually EOL in 2016, with support until 2021. Meanwhile, the focus in
the company shifted to Data Protection and the team started working on the Network Data Loss Prevent solution/product suite.
In those 10 years, as seen above a lot of things changed.
But what did not change was the team - the people that worked together. This team was spread across 2 geos - Bangalore, India and Aylesbury, England. Between January 2011 and December 2018, the team of 20+ had about 4 people leaving voluntarily. As of January 2020, more than half the team members had spent over 15 years in the same team.
I used to tell those who joined our team more recently - This is not just a team, this is like an extended family. Those words aren’t rhetoric. The team was highly cohesive, cross-functional, supportive of each other, and backed each other without anyone asking them to do so, and in most cases knew each other personally. Work wasn’t always great - We had our share of mundane tasks. But the team spirit was always high. And the seniors in the team were quite willing to share their knowledge and experience.
I have the great fortune of having some great mentors - AJ, PN, HB, SchCr to name a few. I made life-long friends - AKR, HB, ACh, SV to name a few. I also had the opportunity to help and guide several junior members - TK, AM, DT, DMR to name a few.
In simple terms, it is the people that I worked with that made this job really great. A lot of what I want to say in these blog posts will be as much about the team, as about the learnings and experiences. The managers, colleagues, and friends there were extremely supportive of my career transition from a QA Engineer, to an Automation engineer, to an SDET, finally to being the Lead Developer.
I’ll end this first post with an expression of gratitude: To AK, ACh, and AR for hiring me; HB, SV, AR for trusting my abilities to transition from QA to other roles; ACh, PN, and HB for giving me the freedom to try doing things differently and trying new things; AKR for being my partner-in-craziness for many many years in trying to create some excellent tools, utilities, and frameworks; SSut for being the greatest QA Engineer-turned-Dev-turned-Architect that I’ve ever met; KSh, ACh, PN, BuSen, and SShre for role-models being automation engineers. SchCr for the design skills that I learned from his code; AJ for being the most humble, yet supremely knowledgeable mentor that one could imagine; and PN for tolerating all my tantrums and guiding me and mentoring me from my very early days at McAfee.
To be Continued… :)
To protect against social engineering attacks, where ever names of people are involved, I’ve used initials (or a variant to avoid ambiguity) instead of the full/real names of people. But most of my ex-colleagues who read these posts will be able to understand who I am referring to. :)
PS: I was part of McAfee Enterprise, which has since become Trellix
Edit 1: The tenure at McAfee was incorrectly mentioned as June 2022 in the 3rd paragraph. Corrected the typo.
I started blogging around May 2006. I started with blogger, then moved on to wordpress and then eventually to self-hosted wordpress. This time around, when I decided to blog again, I have setup a static blog site built using Nikola - A static site generator written in Python. Nikola comes with a wide range of plugins and themes and helps us create beautiful websites and blogs with very minimal effort. And more importantly, Nikola is a Free/Libre Open Source Software.
Static Site Generators
Static Site Generators are tools that transpile contents written in some light-weight markup language like ReST, MarkDown, or AsciiDoc into HTML and CSS. They do this usually by using a templating engine behind the scenes. The templates of a templating engine define both the layout and the look & feel of a web page. These templates have placeholders and variables, CSS and the base HTML structure. A static site generator transpiles text from the input document into HTML by replacing variables and placeholders in these templates. Jinja and Mako are the most popular templating engines in the Python eco-system.
Most static site generators come with dozens of themes to choose from. Here, a theme is a collection of templates, CSS and possibly images. This site uses a common Nikola theme.
Why self-hosting? and why static?
A common question the several people ask me is why am I self-hosting when there are excellent platforms like Medium and even cloud-hosted wordpress. And some people go on to ask why I am using a static site when we can self-host something as powerful as wordpress.
The answer for the first one is simple. I want to own my data. And, I write blogs to share thoughts, opinions, stories and experience. I don’t want ads on my blog. The first point rules out blogger/blogspot and the last one rules out cloud-hosted wordpress.
The reason why I chose a static site is a little difficult to explain. But here it is anyway - My blog consists of several blog posts, comments for each of those and an about page. The only dynamic content in my blog is the comments section. Now, why would I want to have a sophisticated PHP + Apache/nginx + MariaDB ecosystem when about 95% of my web site is just HTML+CSS. All I need is a small sqlitedb for comments and some version control tool like git to maintain my blogs. So instead of setting up and maintaining something complex, vulnerable to attackers and sophisticated to use, I just use emacs + make + rsync.
Comments
Comments have become ubquituous in the modern web and so comments are an essential part of blogs too. Since this is a static web site, comments aren’t possible by default. But there is an amazing tool called isso that integrates well with Nikola. This amazing FLOSS supports comment moderation too. So that’s what is powering the commenting system in this blog.
Finally, if you are running your own self-hosted blog using a sophisticated tool and you want to move to a static site, feel free to reach out to me :)
Hello again, after a hiatus of a little over 7 years and 4 months :) A lot has happened between this blog post, and my previous blog post made on the 18th of August, 2014. I got married, moved into a new home, nephews and nieces were born, made some very good friends, moved to a new company, and I could go on and on. But between work, life and everything in between, blogging wasn’t something that I was actively thinking about. But it has been too long a break and I am eager to get started with blogging again.
One big change is this new blog site. I’ve moved away from my old Wordpress based blog to this statically generated blogs. I’ll be adding the ability to add comments very soon and this will be just like any other blog going forward. And the experiences that the last 7 years have given me are worthy of dozens of blog posts. I intend to have a series of posts dedicated to my time with McAfee (now McAfee Enterprise, as of 2022-01-18). There will be posts on some interesting people that I had the chance to work with (some only remotely), some on the tools and techniques that I have learned over the years, a few on COVID-19 and its impact on us, a few on climate change etc.
So, please don’t give up on my blogging this time :) I do hope to stay more consistent and share some interesting, useful, thoughtful, funny articles in the weeks and months to come.
I have a dual-display setup for my desktop and I usually set up custom keyboard shortcuts in KDE Plasma to allow moving windows between the displays easily. However, the KWin shortcuts section of the Plasma System Settings app has multiple shortcuts named in a confusingly similar way.
So I am writing this post to just document what I did to get my custom Ctrl +Alt + <left/right> arrow shortcut working.
Set up custom shortcuts for the Window to Previous Screen and the Window to Next Screen entries to get this working. As mentioned above, I use Ctrl + Alt + <left arrow> for the former and Ctrl + Alt + <right arrow> for the latter.
Screenshot showing the shortcut entries to change.
I have a WireGuard server running on a Raspberry Pi 4B at my home, exposed to the internet via a static IP address and port forwarding. I set it up using the Linuxserver.io WireGuard docker container, which is straightforward to use and manage.
As I am in a different city now, I had been postponing the updates to the docker container since it is risky to do so remotely. Any issue in the upgrade process could lock me out of my home network till I am physically present in my home.
As I hate deferring updates, I decided to apply the update remotely. To prepare for that, I logged into the Raspberry Pi via the WireGuard VPN and set up a remote forwarding SSH tunnel on a server of mine hosted in the cloud, using a command like,
This command forwards the 2222 port on the remote server to 127.0.0.1:22 on the Raspberry Pi, thereby allowing access to it from the remote server. The -N flag prevents the execution of any remote command (like say, starting the user’s shell) and is useful for just forwarding ports.
Then I logged in directly to that server and logged in to the Raspberry Pi using the forwarded port on that server. Now I could destroy and re-create the WireGuard container without the fear of being locked out since I was connected to the device using SSH and not the WireGuard VPN itself. So, I ran the following command.
The UserKnownHostsfile=/dev/null option prevents the saving of the remote host’s SSH key in the ~/.ssh/known_hosts file, the StrictHostKeyChecking=no option prevents the checking of the remote host key, and the CheckHostIP=no option prevents the checking of the remote host’s IP address. These options disable a lot of important security measures that SSH provides by default . But since we are connecting to a known host through a forwarded host, and don’t want to save any local data about it, these options are fine to use.
This command my remote SSH session, and I was worried that I had missed something important and was locked out. So, I disconnected the SSH session using the escape sequence (<enter>~.) and reconnected to my cloud server and then to the Raspberry Pi. It worked and I heaved a sigh of relief and was glad to have pulled this off without any issues. I verified that updated WireGuard container was running without any issues and that I was able to connect to the VPN.
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.
இரண்டு வாரங்களுக்கு முன்பு மிதிவண்டி பயிற்சியின் போது சற்றும் எதிர்பாராத விதமாக ஒரு நாய் குறுக்கே வந்தது; வண்டியைக் கட்டுப்படுத்த நேரமின்றி நாயின் மீது மோதி மிதிவண்டி ஒருபுறமும் நான் மறுபுறமும் சாலை நடுவே விழுந்தோம். நாடியில் நல்ல அடி; கை, கால்களிலும் விழுப்புண்கள். ஓரளவுக்குத் தேறி விட்டாலும், இன்று வரை மிதிவண்டியை இன்னும் தொடவில்லை. இரண்டு மாதங்களாகத் தொடர்ந்து வந்த ஒரு பழக்கம் சிறு வேகத்தடையால் முடங்கிப் போய் கிடக்கின்றது. பழக்கங்களை இந்த இடைவளிகள் சோம்பலால் நிரப்பி பாழாக்கி விடுகின்றன. ஒரே இடத்தில் கல் போல் நில்லாது, விரைவில் தடைகளைத் தாண்டி ஆறாய் ஓடட்டும் எந்தன் மிதிவண்டி.
நாடடங்கு அறிவிக்கப்பட்டு பெரும்பாலான நாட்கள் வீட்டிற்குள்ளேயே கழிந்ததால், இயல்பு வாழ்க்கை பாதிக்கப்பட்டது. நேரம் ஒரு தடையல்ல என்பது நன்கு புரிந்தது; எவ்வளவோ நேரம் கிடைத்தாலும் சில செயல்களை அடுத்த கட்டத்திற்கு நகர்த்தவே முடியவில்லை. எல்லாவற்றிலும் ஒரு குறிப்பிட்ட காலத்துக்கு மேல் தொடர்ந்து செயலாற்ற இயலவில்லை; எனவே மனம் போன போக்கில் எல்லாவற்றையும் இஷ்டத்துக்கு முயற்சிக்க முடிந்தது.
புத்தகங்கள் ~ இந்த வருடம் 20 புத்தகங்களை வாசிக்க வேண்டும் என ஆரம்பித்து 15 புத்தகங்களே வாசித்திருக்கின்றேன். வாசித்தவற்றில் பல வருடங்களாக வாசிக்க நினைத்த ஒரு புளிய மரத்தின் கதை, புதுமைப்பித்தனின் பகடி எழுத்தில் நாரத ராமாயணம், தொ.பரமசிவனின் அழகர் கோயில், அலோக் கெஜ்ரிவாலின் Why I Stopped Wearing My Socks குறிப்பிடத்தகுந்தவை. கிடைத்த நேரத்தில் இன்னும் சில புத்தகங்களை வாசித்திருக்கலாம்.
திரைப்படங்கள் ~ மார்ச், ஏப்ரல் மாதங்களில் ஏகப்பட்ட படங்களைப் பார்த்தேன்; பின்னர் வேகம் தானாகவே குறைந்து விட்டது. பார்த்தவற்றில் ஈர்த்தவை Section 375, Dia, The Platform மற்றும் Article 15. இணையத் தொடர்கள், காணொலிகளையும் இதே கணக்கில் சேர்த்துக் கொள்வதா எனத் தெரியவில்லை; ஆனால் அவையும் கணிசமான அளவு நேரத்தை இவ்வருடம் ஆக்கிரமித்துக் கொண்டன. பார்த்த இணையத் தொடர்களில் Paatal Lok மற்றும் Mr.Robot(இன்னும் சில சீசன்கள் பாக்கி இருக்கின்றன) நன்றாக இருந்தன.
எழுத்து ~ மேலே குறிப்பிட்டபடி ஆகஸ்டு மாதம் அதிகபட்சமாக 11 பதிவுகள் எழுதினேன்; அவ்வளவு தான் அடுத்தடுத்த மாதங்களில் தொடர முடியாமல் 18 பதிவுகளுடனே வருடம் முடிந்து விட்டது. கடந்த பத்து வருடங்களில் பார்வையாளர்களின் வருகை இவ்வருடமே அதிகமாயிருந்திருக்கிறது. இது தொடர்ந்து எழுதத் தேவையான உத்வேகத்தை அளிக்கிறது. இந்த வருடம் நாடடங்கின் துவக்கத்தில் குறும்பட முயற்சியில் ஆரம்பித்து, காணொலிகளை(vlogging) எனது யூட்யூப் சேனலில் வெளியிட்டு வருகிறேன். காணொலிகளில் பெரும்பான்மையிடத்தை மகளதிகாரம் நிரப்பியிருக்கின்றது. அதில் தொழில்நுட்பம் சார்ந்த எனக்குத் தெரிந்த தகவல்களையும் பகிரலாம் என்று இருக்கிறேன். இவ்வருடம் ஒரு மின்னூல் வெளியிட்டிருந்தால் இன்னும் நன்றாக இருந்திருக்கும்.
மிதிவண்டி ~ ஓட்டமும் நடையுமாக இருந்தவன் மிதிவண்டி ஒன்றை வாங்கி கடந்த ஒரு மாத காலமாக ஊர் சுற்றி வருகிறேன். கிட்டத்தட்ட 15 வருடங்களுக்குப் பிறகு இப்போது தான் தொடர்ந்து மிதிவண்டி ஓட்டுகிறேன். இதுவரை ~500 கி.மீ வரை ஓட்டி இருக்கிறேன். நடக்கும் போதும், மிதிவண்டியில் போகும் போதும் ஒலியோடைகளையோ, பாடல்களையோ கேட்டபடி செல்கின்றேன். ஓர் ஒலியோடை துவங்கலாம் என்று யோசனை உள்ளது; 2021 முடிவில் பார்ப்போம் என்ன நடந்திருக்கிறதென்று.
இவை தவிர மொபைலில் வானையும், பறவைகளையும் படம் பிடிக்கப் பிடித்திருந்தது. குழந்தைகளுடன் அதிக நேரத்தை செலவிட்டது மகிழ்ச்சியாகவும், நிறைவாகவும் உள்ளது. ஒரு வழியாக 2020-ஐத் தள்ளியாகி விட்டது; கொரோனாப் பெருந்துயரிலிருந்து, 2021 அனைவரையும் மீட்கட்டும்! புத்தாண்டு வாழ்த்துகள்!
சில வருடங்களாக நடைப்பயிற்சியை அவ்வப்போது கடைபிடித்து வருகிறேன். பெரும்பாலும் வருடத் துவக்கத்தில் எடுக்கப்பட்ட உறுதிமொழிக்காகவோ அல்லது கலந்து கொள்ளப் போகும் பத்து கி.மீ ஓட்டப்பந்தயத்துக்கான பயிற்சிக்காகவோ தொடரும் பயிற்சி, சில நாட்களிலேயே கைவிடப்படும். அதிகபட்சமாக உபயோகப்படுத்தும் செயலியில் நாளுக்கு ஒரு கி.மீ வீதம் ஒரு வருடத்தில் 365கி.மீ தூரத்தையாவது தொட வேண்டும் என்பதே, எட்ட முடியாத இலக்காக இருந்து வந்தது. இந்த வருடம் உறுதிமொழிகள் எதுவும் எடுக்காததினாலோ என்னவோ, இலக்கைத் தாண்டி மீட்டர் ஓடிக்கொண்டிருக்கின்றது. கொரோனா தொற்றால் நாடடங்கு அறிவிக்கப்பட்டு தனித்திருந்த நிலையில் ராபின் சர்மா-வின் The World-Changer’s Manifesto புத்தகத்தை வாசிக்க நேர்ந்தது. அதில் குறிப்பிட்டிருந்த 20/20/20 சூத்திரத்தின் படி எழுந்தவுடன் முதல் 20 நிமிடத்தை உடற்பயிற்சிக்காக ஒதுக்க ஆரம்பித்தேன். அடுத்தடுத்த 20 நிமிடங்களை வாசிப்பதற்காகவும், அன்றைய தின அலுவல்களைத் திட்டமிடவும் செலவிட்டேன். இதை அடுத்த நிலைக்கு எடுத்துச் செல்வதற்கு தோதாக, அலுவலகத்தில் தனிப்பட்ட மற்றும் குழுவினருக்காக குறைந்தது நாள் ஒன்றுக்கு 6000 அடிகள் வீதம் கிட்டத்தட்ட இரண்டு மாத காலம் கடக்க வேண்டும் என WalkerTracker செயலியில் சவால்கள் நடத்தப்பட்டன. பணி நேரம் போக மற்ற எல்லா நேரங்களிலும் நடக்க ஆரம்பித்தேன். இரண்டே மாதங்களில் கடந்த அடிகளைக் கணக்கிட்டுப் பார்த்தால் அவை 365கி.மீ-ஐத் தாண்டி ஓடி விட்டன. அலுவலகத்தில் நடத்தப்பட்ட சவால்கள் காலாவதியாகி விட்டாலும், இன்னமும் பயிற்சி தொடர்ந்து கொண்டுதான் இருக்கின்றது. அடியேன் கடந்த மாதம் ஒரு மிதிவண்டி வேறு வாங்கி ஊர் சுற்றிக் கொண்டிருக்கிறேன். அதைப் பற்றி வேறு ஒரு பதிவில் பார்ப்போம். கடந்து ஐந்து மாதங்களாக தொடர்ந்து பயிற்சி செய்வதால், 365*2 கி.மீத் தாண்டி மீட்டர் ஓடிக் கொண்டிருக்கின்றது. மகிழ்ச்சி!
Today is my wife’s birthday and after hearing that her nephew had made her a greeting card, my 32-months-old daughter decided that she had to do something to top that.
So she took her scribbling notepad, took all her crayons and scribbled all the colors she had one by one singing “Happy birthday to you amma!” for each color and gifted the result as her greeting card immediately after.
வீட்டை விட்டு ஓடிப் போன ஆமை, 74 நாட்களுக்குப் பின் கண்டுபிடிக்கப்பட்டதாக ஒரு செய்தி கண்ணில் பட்டது. ஓடிப் போன ஆமையை யோசித்துப் பார்த்தேன்; கிட்டத்தட்ட இரண்டரை மாதங்கள்; வீட்டிலிருந்து எட்டு மைல் தொலைவிலேயே கண்டுபிடிக்கப்பட்டிருக்கிறது. ஆமையின் வேகத்தைக் கணக்கிலெடுத்துக் கொண்டால், அது அருகிலேயே எங்காவது தான் இருக்கும் என்று கணித்திருப்பார்கள். அப்படியே ஆமையின் வேகத்தைத் தானாகவே என் மனது தமிழ்த் தொலைக்காட்சி நெடுந்தொடர்களுடன் ஒப்பிட்டுக் கொண்டது. இதே போல இரண்டு-மூன்று மாதங்கள் கழித்து ஒரு தொடரைப் பார்த்தால், பெரிதாக கதை நகர்ந்திருக்காது; எதுவரைப் பார்த்திருந்தோமோ அதிலிருந்து தொடர்வது போலவே இருக்கும். உதாரணத்திற்கு நாடடங்கு நேரத்தில் சில மாதங்கள் நெடுந்தொடர்கள் ஒளிபரப்பப்படாமல் இருந்தனவல்லவா? அப்படியே தொடர்ந்து ஒளிபரப்பப்பட்டு இருந்தாலும், தொடரின் ஓட்டம் இந்த ஓடிப் போன ஆமையின் வேகத்தில் தான் நகர்ந்திருக்கும்; சில மாத இடைவெளியால் எந்தவொரு வித்தியாசமும் இருந்திருக்கப்போவதில்லை.
புதுமைப்பித்தனின் ‘நாரத ராமாயணம்‘, குறுநாவல் அல்லது நீள்கதை வடிவிலான சிறிய புத்தகம். ஒரே மூச்சில் வாசித்து விடலாமென்றால், வரிக்கு வரி பகடி; சில வரிகளை மீண்டும் வாசித்துப் புரிந்து கொள்ள வேண்டியதாயிருக்கிறது. ராமனது காலத்திலிருந்து காலனிய இந்தியா வரை காலச்சக்கரத்தில் ஒரு விரைவுப் பயணம், நாரத ராமாயணம்.
வாசிப்பின் போது எடுத்த சில குறிப்புகள்:-
மேலும், சீதாபிராட்டியின் மீது ஒரு தனிக் கோபம் இருந்தது. அசோகவனத்திலிருக்கும் பொழுது, என்ன சொல்கிறோம் என்றுகூட கவனிக்காமல் அவள் அவசரப்பட்டுக் கொடுத்த வரத்தினால், தனக்குச் செத்துப் போகவும் வழி இல்லாமல் செய்துவிட்டதை, அவரால் மன்னிக்க முடியவே இல்லை.
சுமந்திரபாலனும், கிரந்தத்தை மேலாகப் பார்த்து, அது பகைவர் வந்தவுடன் நடத்தவேண்டிய யுக்திகளாக இருந்ததால், இப்பொழுது அதைப்பற்றிக் கவலை இல்லை என்று அரசாங்கப் புத்தகசாலையில் வைத்துப் பூட்டினான்.
சில கெட்டிக்கார அயோத்தி வாசிகள் தங்களிடம் இருந்த படைக்கலங்களின் இரும்பு வீணாவதைக்கண்டு, தோசைக் கற்களாகவும் இரும்புக் கரண்டிகளாகவும் உருக்கி வார்த்துக்கொண்டனர்.
ஒருநாள் பூராவாகவும், வெள்ளியம்பலத் தம்பிரான்களுடனும் அவர்கள் அரசாங்கத்துடனும் ‘டு’ போட்டுவிட்டால் வழிக்கு வந்துவிடுவார்கள் என்று நினைத்து, மூலைக்கு மூலை போய்ப் பேசி ஜனங்களைத் தன்வசப்படுத்த ஆரம்பித்தான்.
எல்லையற்ற சுருள்(Infinite Scroll) வடிவமைப்பு தற்போது பரவலாக எல்லா கருவிகளிலும், முகநூல், ட்விட்டர் உள்ளிட்ட சமூக வலைதளங்களிலும் காணப்படுகிறது. செயலியைத் திறந்தவுடன் சமீபத்திய அல்லது பயன்படுத்தப்படும் வழிமுறைக்கேற்ப சில செய்திகள் காட்டப்படும். கீழிலிருந்து மேலாக தொடு திரையைத் தள்ள(scroll) அடுத்ததாக சில செய்திகள் காட்டப்படும். நாம் செயலிக்குள்ளாகவே கட்டுண்டு கிடப்போம்; இப்படியாக முடிவிலியாய் சுருண்டு கிடக்கும் பெரும் நாகம் ஒன்று நம் நேரத்தை விழுங்கிக் கொண்டிருக்கும். முன்பெல்லாம் இவற்றையே பக்கவாரியாக பார்க்கும் போது, ஒரு கணக்கு வழக்கு இருக்கும்; பத்து பக்கங்களை இப்போதைக்குப் புரட்டுவோம் என்று நமக்குள் ஒரு எல்லைக்கோட்டை வரைந்து கொள்ளலாம். இந்த எல்லையற்ற சுருள் வடிவமைப்பில் அதே வழியைப் பின்பற்ற இயலாது. தற்போது நேர விரயத்தைத் தவிர்க்க, சமூக வலைதளங்களைப் பயன்படுத்தும் போது அவற்றிற்கென்று நேரம் ஒதுக்கி அப்போது மட்டும் பயன்படுத்துவது நன்று. அதற்காக நேர மேலாண்மைக்கான செயலி ஒன்றை கைபேசியில் நிறுவிக் கொள்ளலாம். நேரத்தின் மதிப்பை உணர்ந்து செலவிடுவோம்.
ஒரு மனிதன் ஒரே நதிக்குள் இருமுறை இறங்குவது சாத்தியமல்ல, அது அதே நதியல்ல; அவனும் அதே மனிதனல்ல.
மாற்றம் ஒன்றே நிலையானது. ஓடிக் கொண்டேயிருப்பதால், நாம் பார்த்துக் கொண்டிக்கும் போதே நகரும் நதி அதே நதியல்ல; அதே போன்று மனிதனும் மாறிக் கொண்டேயிருக்கிறான். புறத்தோற்றத்தில் நிகழும் மாற்றங்களான வளர்ச்சி, முடி திருத்தம் இத்யாதி… இத்யாதி மட்டுமல்லாது சூழல், கற்று கொள்ளும் பாடங்கள், சக ஜீவராசிகள் என அனைத்தும் ஒரு சிறு அளவிலாது அகத்தளவில் மாற்றங்களை நிகழ்த்தியபடியே தான் உள்ளன. இவை வெளியில் தெரிவதில்லை என்பதை விட அவற்றை நாமே அறிவதில்லை என்பதே நிதர்சனம். இந்த பொன்மொழியில் சற்றே வரிகளை மாற்றி அமைத்துப் பார்த்தால்:-
ஆற்றுக்குள் இறங்கிய அதே மனிதனல்ல கரையேறுபவன்; கரை ஒட்டி ஓடும் ஆறும், அவன் இறங்கிய அதே ஆறல்ல.
நேற்றைய நான், இன்று இல்லை. இன்றைய நான், நாளை இல்லை. நாளை ஒருநாள் நானே இல்லை. தத்துவம்னா அப்படி தான்; கண்டுக்காதீங்க.
ஒரே நேரத்தில் பலதரப்பட்ட பணிகளைச்(multitasking) செய்யும் போது ஏற்படும் செயல்திறன் இழப்பு பற்றி இக்கிகாய் புத்தகத்தில் சில பக்கங்கள் பேசப்பட்டிருந்தன. அது கணிணிகளுக்கு வேண்டுமானால் ஒத்து வரும்; ஆனால் மனிதர்களுக்கு சரிப்பட்டு வராது. ஒரு நேரத்தில் ஒரு செயலில் மட்டுமே கவனத்தைக் குவிக்கும் போது அதை சிறப்பாகச் செய்ய முடியும் என்று விவரித்திருந்தார்கள். அப்போது அஷ்டவதானிகள் அப்படியே சிந்தனையில் வந்து போனார்கள்; அவர்களால் மட்டும் எப்படி ஒரே சமயத்தில் எட்டு செயல்களை செய்ய முடிகிறது என்று. அப்படியே நம்மைப் பற்றியும் யோசித்துப் பார்த்தேன். ஒரே நேரத்தில் செய்வது இருக்கட்டும்; அடுத்தடுத்தாவது எத்தனை செயல்களைச் செய்ய முடிகிறது; ஏதாவது ஒரு செயலையாவது முடிக்க முடிகிறதா? இப்படி எதையுமே முழுவதுமாக முடிக்காமல் multitasking என்ற பெயரில் தன் இஷ்டத்துக்கு இழுத்தடிக்கும் நபர்களை ‘இஷ்டாவதானி‘ என்றழைக்கலாமா என யோசித்து வருகிறேன். செய்யணுமே என்று கடனுக்கு அச்செயலை செய்பவர்கள், செய்முறை அறியாது அல்லது அறிய விழையாது இஷ்டத்துக்கு செய்பவர்கள் இத்யாதி… இத்யாதிகளையும் இஷ்டாவதானிகளாக் கொள்ளலாம்.
‘இயற்கை’ எனக்குப் பிடித்தத் திரைப்படங்களில் ஒன்று. டூரிங் டாக்கீஸ் யூட்யூப் சேனலில் ‘சாய் வித் சித்ரா’ நிகழ்ச்சியில் ‘இயற்கை’ திரைப்படம் உருவான விதத்தை இன்று ஜனநாதன் எடுத்துரைத்தது நன்றாக இருந்தது. அதிலும் ‘வெண்ணிற இரவுகளை’ப் பற்றி சொன்ன விதம் அருமை ‘இல்ல சார் அப்படி ஒரு ஆள் கதை எழுதிருக்கான். வெண்ணிற இரவுகள்னு ஒரு கதை. தஸ்தயேவஸ்கினு ஒருத்தன். சும்மா உடம்பு சரியில்ல குழந்தைக்கி; 150ரூ-க்கி ஒரு கதை எழுதிருக்காரு. உலகமே வியக்கும் கதை சார். ரெண்டு பேருமே சிறந்தவன்; அதில யாரத் தேர்ந்தெடுப்பா? அப்டின்றது அந்தக் கதையின் சாராம்சம்‘. பார்த்த போது ‘வெண்ணிற இரவுகள்’ நாவலை நான் புத்தகக் கண்காட்சியில் தேடி அலைந்தது தான் ஞாபகத்துக்கு வந்தது. புத்தகத்தின் பேரைக் கேட்டதும் அப்படியே மேலும் கீழும் பார்ப்பர். அடுத்ததாக யார் எழுதியது என்று கேட்பர். நான் கஷ்டப்பட்டு தஸ்தயேவ்ஸ்கினு சொல்வேன். அவர்கள் இல்லையென்று கையை விரிப்பர். பின்னர் ஒரு கடையில் தஸ்தயேவ்ஸ்கியின் குறுநாவல்கள் புத்தகத்தில் வெண்ணிற இரவுகளைப் பார்த்து வாங்கி வந்து சேர்ந்தேன். தஞ்சை பின்னணியில் அவர் சொல்லப் போகும் கதை எப்படி இருக்கும்னு யோசித்துக் கொண்டிருக்கிறேன்; பார்ப்போம்.
விமான நிலையத்தில் இந்தி தெரியாததால் ‘நீங்கள் இந்தியரா?‘ என ஓர் அலுவலர் கனிமொழியை வினவியதாக சமூக வலைதளத்தில் பதிவிட்டுள்ளார். பெங்களூரு விமான நிலையத்திலும் இதே போல இந்தியிலேயே பேசும் அதிகாரிகளைப் பார்த்திருக்கிறேன். முதலில் அவர்கள் சொல்ல வருவதைப் புரிந்து கொள்ள முனைந்தேன். எனக்கு தமிழ், ஆங்கிலம், ஓரளவிற்கு கன்னடமும் தெரியும்; இவற்றையெல்லாம் விட்டு விட்டு அதுவும் ஆங்கிலம் தெரிந்த நபர்கள் அம்மாநில மொழியையும் தவிர்த்து விட்டு இந்தியில் பேசும் போது ஏனோ அதை என் மனம் ஏற்றுக்கொள்ள மறுத்தது. போகப் போக ‘இந்தி தெரியாது. கன்னடம் அல்லது ஆங்கிலத்தில் பேசுங்கள்‘ என்று சொல்ல ஆரம்பித்தேன். அதற்கு எனக்கு கிடைக்கும் பதில் ‘மதராஸியா?‘. பொது இடங்களிலும் சிலர் இந்தியில் வந்து பேச ஆரம்பிப்பார்கள்; இந்தி தெரியாது என்று சொன்னாலும் கேட்க மாட்டார்கள். அதிலும் சிலர் தேசிய மொழி இந்தி தெரியாமல் எப்படி? என்று கேட்பார்கள். அவர்களுக்கு நாம் இந்தி தேசிய மொழி அல்ல என்று பாடம் எடுத்து விட்டு நகர வேண்டி இருக்கும். இந்த மாதிரி நபர்களிடம் இந்தி தெரியாது என்று சொல்லும் போது கர்வமும் கூட வந்து ஒட்டிக் கொண்டு ஒருவித மகிழ்ச்சியை இரட்டிப்பாக்கும்.
பொதுவாக மேடைப் பேச்சுகள், கட்டுரைகளில் மேற்கோள்கள், புள்ளிவிவரங்களைச் சேர்க்கும் போது அவை சொல்ல வரும் கருத்துகளை வலுவாக முன்வைக்க உதவியாக இருக்கும். ஆனால் தற்போது சமூக வலைதளங்களில் பரவும் செய்திகளையும், காணொளிகளையும் பார்த்தால், அதில் தரவுகளைத் தாரை தாரையாகக் கொட்டி விட்டிருக்கின்றனர். அப்படி வாரி வழங்கப்படும் தரவுகளிலிருந்து, புதிதாக நாம் தெரிந்து கொள்பவையும், நம்பகத்தன்மையும் மிகக் குறைவு. பார்வையாளர்களின் சொந்தக் கருத்துக்கு ஏற்ப அவற்றிற்கு லைக்ஸூம், டிஸ்லைக்ஸூம். புள்ளியியலில் இருக்கும் தரவுகளை வளைத்து எந்த ஒரு கருத்துக்கும் சாதகமாகக் கூற முடியும். உதாரணத்திற்கு இன்று கொரேனாவால் புதிதாக பாதிக்கப்பட்டோர் எண்ணிக்கையை எடுத்துக் கொள்வோம். நேர்மறையாக சொல்ல விழையும் போது இதையே நேற்றைய எண்ணிக்கையை விட இன்று புதிதாக பாதிக்கப்பட்டோர் எண்ணிக்கை குறைவு எனச் சொல்லலாம். அதையே எதிர்மறையாகச் சொல்ல நினைத்தால், அதை மற்ற மாநிலங்களுடன் ஒப்பிட்டு புதிதாக பாதிக்கப்பட்டோர் எண்ணிக்கையில் மாநிலங்களிலேயே அதிகம்(முதலாவதோ/இரண்டாவதோ) என்றும் கூறலாம். ஒரே தரவை கருத்துக்கு ஏற்றவாறு திரித்துக் கொள்ளலாம். அதிலும் சிலவற்றில் கூறப்படும் தரவுகளைக் காணும் போது, ஒருமுறை என் நண்பர் சொன்ன ‘நான் தான் இரண்டாவது மூணாவதா வந்தேன்‘ வாக்கியம் தான் ஞாபகத்துக்கு வருகிறது(நான்காவது என்பதை இப்படியும் கூறலாம் போல).
சில மாதங்களாக கிண்டிலில் புத்தகங்கள் வாசிக்கும் போது எடுக்கும் குறிப்புகளை டிவிட்டரில் பகிர்ந்து கொள்ள இயலவில்லை. முன்னதாக புத்தகங்களின் அட்டையுடன் குறிப்புகளை ட்விட்டரில் கிண்டிலிலிருந்து பகிரலாம். பகிரும் போது தெரிவிக்கப்படும் பிழை குறித்த செய்திகளாலும் எந்த பயனும் இல்லை; ஒன்றும் புரியவும் இல்லை. வாடிக்கையாளர் சேவை மையத்தைத் தொடர்பு கொள்வதைத் தள்ளிப்போட்டுக் கொண்டே வந்தேன். இடையில் ஒருமுறை அவர்களது தளத்தில் இதுபோன்ற பிரச்சனைகளை யாராவது சந்தித்துள்ளார்களா என்று தேடிப் பார்த்தேன்; எதுவும் சிக்கவில்லை.
இன்று முதலாவதாக அமேசான் இந்தியாவினுடைய வாடிக்கையாளர் சேவையைத் தொடர்பு கொண்டேன். என்னுடன் உரையாடியவர் கருவியை மீட்டமைக்க(reset) அறிவுறுத்தினார். எனக்கு அதில் உடன்பாடு இல்லாததால் அவரிடம் வேறு பதில்கள் இல்லையென்றும், என்னுடைய கருவி அமெரிக்காவில் வாங்கப்பட்டிருப்பதால் மேலதிக விவரங்களுக்கு வேண்டுமானால் அந்நாட்டினுடைய வாடிக்கையாளர் சேவையைத் தொடர்பு கொள்ளச் சொன்னார். நானும் விடாமல் அடுத்ததாக அமெரிக்க வாடிக்கையாளர் சேவையைத் தொடர்பு கொண்டேன். அவர்களிடமிருந்து கிடைத்த பதில் ‘அமேசான் கிண்டிலிலிருந்து புத்தகக் குறிப்புகளை ட்விட்டருக்குப் பகிரும் வசதி தற்காலிகமாக நிறுத்தி வைக்கப்பட்டுள்ளது. அவ்வசதியை இனி உபயோகிக்க முடியாது.‘. அவருடன் உரையாடிக் கொண்டிருக்கும் போதே இம்முறை இணையத்திலும் அதே பதிலை காண முடிந்தது. சரியான வார்த்தைகளைப் பயன்படுத்தித் தேடாவிட்டால் அமேசான், கூகுளால் கூட நமக்கு உதவ முடியாது எனத் தெளிந்தது. இந்திய வாடிக்கையாளர் சேவை மையத்திலிருப்பவரால் இந்த பதிலளிக்க முடியாதது தான் சற்று வேதனை அளிப்பதாக இருந்தது. ஆக ட்விட்டரில் புத்தகக் குறிப்புகளைக் கிண்டிலிலிருந்து பகிர வேறு வழியைத் தான் யோசிக்க வேண்டும்.
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.
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!
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.
கோரங் விழித்துப் பார்க்கும் போது எண் 48 என்று குறியிடப்பட்ட ஓர் அறைக்குள் இருக்கிறான். அந்த அறையில் உடனிருக்கும் ட்ரிமகாசியின் உதவியால் மெல்ல மெல்ல அந்த இடத்தைப் பற்றி தெரிய வருகிறது.
பூஜ்யத்தில் ஆரம்பித்து ஏகப்பட்ட தளங்கள் கீழ்நோக்கி செல்கின்றன.
ஒவ்வொரு தளத்திலும் இருவர் இருக்கின்றனர்.
அவ்விடத்திற்கு வரும் போது ஏதாவது ஒன்றை தங்களுடன் கொண்டு வரலாம்.
குறிப்பிட்ட நேரத்தில் உணவு மேடை பூஜ்ய தளத்தில் ஆரம்பித்து கீழ்நோக்கி வர ஆரம்பிக்கும். ஒவ்வொரு தளத்திலும் சிறிது நேரம் நிற்கும்; அதற்குள் அத்தளத்திலிருப்பவர்கள் உணவருந்தி விட வேண்டும்.
உணவை எடுத்து அறையில் வைத்துக் கொண்டால், அறையின் வெப்பநிலை உச்சத்திற்கோ அல்லது உறைய வைக்குமளக்கு கீழோ மாறிக் கொண்டே, அறையிலிருப்பவர்களை நிலைகுலையச் செய்யும்.
ஒவ்வொரு தளத்தில் இருப்பவர் உண்டது போக மிச்ச மீதிகளே கீழ்நோக்கி செல்லும். தளத்தின் எண் அதிகரிக்க அதிகரிக்க உணவு மேடையில் வெறும் பாத்திரங்களே எஞ்சும்.
ஒரு தளத்தில் ஒரு மாதம் கழித்த பின்னர் அவர் வேறொரு தளத்திற்கு மாற்றப்படுவர்; அது அவர் இருக்கும் தளத்திற்கு மேலோ அல்லது அதளபாதாளத்திலோ கூட இருக்கலாம். உதாரணத்திற்கு 23, 119, 45, 171, 6 … என்று ஒழுங்கற்று அந்த தள வரிசை மாதமாதம் நீளும்.
அறை எண் 48-ல் ஒரு மாதம் கழித்த பின்னர் 171-வது தளத்திற்கு கோரங்கும், ட்ரிமகாசியும் மாற்றப்படுகிறார்கள். உணவு மேடை அத்தளத்திற்கு வரும் போது எதுவும் எஞ்சியிருக்காது. அத்தளத்தில் ஒரு மாத காலம் எப்படி அவர்கள் தாக்குபிடிக்கிறார்கள்? அத்துளையில் ஆறு மாதம் கோரங் எப்படி சமாளிக்கிறான்? உணவை எல்லா தளங்களுக்கும் கிடைக்கும் படி செய்ய நினைக்கும் கோரங்கால், அத்துளையில் அவன் இருக்கும் ஆறு மாத காலத்திற்குள் அந்த மாற்றத்தைக் கொண்டு வர முடிந்ததா? என்பதை ‘துளை’ (The Platform) துளைத்துச் சொல்கிறது.
Parasite (ஒட்டுண்ணி) – சென்ற வருடம் வெளியாகிய இக்கொரியத் திரைப்படம், வாங்காத விருதுகளே இல்லை என்று சொல்லுமளக்கு விருதுகளைக் குவித்திருக்கின்றது (சிறந்த திரைப்படத்துக்கான ஆஸ்கர் விருதும் அதில் அடக்கம்). விமர்சன ரீதியாகவும், வசூல் ரீதியாகவும் வெற்றி பெற்ற இத்திரைப்படத்தில் அப்படி என்ன இருக்கிறது?
வறுமையில் வாடும் கிம் குடும்பத்தினருக்கு, கிம்மின் மகன் கி வூ-வின் நண்பன் வாயிலாக ஒரு பணக்கார வீட்டுப் பெண்ணுக்கு வீட்டில் சென்று சொல்லிக் கொடுக்கும் வேலைக்கான வாய்ப்பு கிடைக்கிறது. அதைப் பயன்படுத்தி, அதே வீட்டிலேயே தன் குடும்பத்தினர் அனைவருக்கும் வெவ்வேறு வேலை கிடைக்கச் செய்கிறான், கி வூ (தமிழ்த் திரைப்படம் ‘மின்சார கண்ணா’ பாணியில்). கிம் குடும்பத்தினருக்கு நாட்கள் நன்றாக நகர்ந்து கொண்டிருந்த வேளையில், ஒருநாள் பார்க் குடும்பம் தன் மகன் டா சாங்கின் பிறந்தநாளைக் கொண்டாட வெளியூர் செல்கிறார்கள். அவர்கள் ஊரில் இல்லாததால், இரவில் கிம் தன் குடும்பத்தினருடன் பார்க் வீட்டில் பார்ட்டியில் ஈடுபடுகிறார். பெருமழை காரணமாக பயணத்தைத் தொடர முடியாமல், பார்க் குடும்பத்தினர் விரைவிலேயே வீடு திரும்புகின்றனர். கிம் குடும்பத்தினர் பார்க் குடும்பத்தினரின் கண்களில் படாமல் தப்பினார்களா? தொடர்ந்து நிகழும் சம்பவங்களை, திரைப்படத்தில் கண்டுகளியுங்கள்.
திரைப்படத்தின் கதை, திரைக்கதை, ஒளிப்பதிவு எல்லாம் ஒருபுறமிருக்க, உலக நாடுகளில் இத்திரைப்படம் பலத்த வரவேற்பைப் பெற்றதற்கான காரணம், அது ஏழை-பணக்கார வாழ்க்கை முறைகளை சித்தரித்து, பொருளாதார ஏற்றத்தாழ்வுகளை கண் முன் நிறுத்தியதாகக் கூட இருக்கலாம்; இதனால் உலகெங்கும் வசிக்கும் மக்கள், தங்களை படத்தின் கதாபாத்திரங்களோடு பொருத்திப் பார்த்து, படத்துடன் ஒன்றிப் போக முடிந்திருக்கலாம்.
முதல் பாதியில், கிம் குடும்பத்தினர் பார்க்கின் வீட்டிற்குள் நுழையும் போது, அவர்கள் பார்க் குடும்பத்தினரை சார்ந்திருப்பதாலும், பெறும் ஊதியத்தாலும் அவர்கள் ஒட்டுண்ணி போலத் தோன்றுகிறார்கள். ஆனால் படம் நிறைவுறும் போதோ, பார்க் குடும்பத்தினர் எல்லா விதமான அன்றாட வேலைகளுக்கும் கிம் குடும்பத்தினரையேச் சார்ந்திருப்பதால், அவர்கள் கிம் குடும்பத்தினரின் உழைப்பை உறிஞ்சி வாழும் ஒட்டுண்ணிகளாகத் தெரிகிறார்கள்.
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.
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.
Today, we took our 20-month-old daughter to a toy store for the the first time. She was excited to be there and was eagerly looking at everything. While she pointed to a few things that caught her eye and said that she wanted it, she didn’t cry or protest when we ignored her requests.
A free balloon given to her in that shop was all that she needed to have an unerasable grin on her face for the next few hours and ignore everything else!
மதுரையில் நேற்று ஆரம்பித்த 14-வது புத்தகத் திருவிழா செப்டம்பர் 9 வரை நடைபெற இருக்கிறது. இன்று புத்தகத் திருவிழாவிற்கு அனலிகாவுடனும், கிஷோருடனும் சென்று வந்தேன்.
அவ்வப்போது கிண்டிலிலேயேப் புத்தகங்களை வாங்கி வருவதால் இவ்வருடம் விருப்ப பட்டியலேதும் இல்லை. இருப்பினும் அத்தனை புத்தகங்களைப் பார்த்ததும் எதுவும் வாங்காமல் இருக்கவும் முடியவில்லை. இன்று வாங்கிய புத்தகங்கள்:-
ஓர் இலக்கியவாதியின் அரசியல் அனுபவங்கள் – ஜெயகாந்தன்
ஓர் இலக்கியவாதியின் பத்திரிக்கை அனுபவங்கள் – ஜெயகாந்தன்
ஓர் இலக்கியவாதியின் கலையுலக அனுபவங்கள் – ஜெயகாந்தன்
சங்கச் சித்திரங்கள் – ஜெயமோகன்
நாய்கள் – நகுலன்
ஆட்கொல்லி – க.நா.சு
இந்தியாவில் சாதிகள் – டாக்டர் அம்பேத்கர்
ஒரு கடலோர கிராமத்தின் கதை – தோப்பில் முகமது மீரான்
கண்களைக் கட்டிப் போட்டு, குனிந்த தலை நிமிராமல் நம்மை வளைத்துப் போட்டிருக்கும் கைபேசிகள் நம் உறுப்புகளுள் ஒன்றாகி வெகு நாட்களாகி விட்டன. ஏதோ சிந்தனையில் இன்று ஆழ்ந்திருந்த போது, என்னென்ன கைபேசிகள் வைத்திருந்தேன், அவற்றை எப்போது வாங்கினேன் என்று எண்ணிப் பார்த்தேன். 2006-ம் ஆண்டிலிருந்து கைபேசியை உபயோகித்து வரும் நான், இதுவரை உபயோகித்த கைபேசிகளில் ஒரே நிறுவனத்தின் கைபேசியை ஒருமுறைக்கு மேல் வாங்கியதில்லை என்பது வியப்பு! நான் பயன்படுத்திய/பயன்படுத்தும் கைபேசிகள்:-
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.
2018 is almost over and it was an unbelievable year! It took me through a myriad of situations, experiences and emotions and I can barely believe that I was able to get through.
My daughter was born in the beginning of the year and it was an amazing experience being a parent for the first time, in spite of being clueless about bringing a baby up. Holding the tiny bundle of joy in my hands for the first time and the days gone by seeing her grow up very fast, have all been surreal.
Just a week after the birth, while I was on paternity leave, I was laid off along with hundreds of others in a workforce reduction and the division I was working for, was wiped out from Bangalore without a trace. It came out of the blue and though there were attempts by the local management to re-hire and re-purpose at least some of those affected, it was too little too late. It was an unbelievable shock and it took everyone affected, a long time to recover.
I had injured my shoulder while playing badminton towards the end of 2017 and was advised a surgery to fix it. I had planned to get it done during my paternity leave and was in tatters due to the layoff.
I applied for some jobs via referrals of friends and acquaintances and got a couple of job offers. But there were some issues to consider before I could accept any of them – daily commute to office being one of the major factors. I received a job opportunity from my previous company to work for a different team and given my circumstances, I chose to accept it and joined in a new role soon after.
I was a part of a new team with everyone else in the team including my manager working in remote locations, with a couple of interns/new joinees expected to join me a few months later. The work was in a totally different domain and I was never able to mingle with the folks and the work environment didn’t feel the same.
I took a fortnight off and had my shoulder surgery which was a minor procedure. It was a very traumatic experience because of the poor care provided at the hospital in spite of me repeatedly warning them about it. I was advised to do physiotherapy for 2 months to regain full movement of my right shoulder and that didn’t go well after a while – the hospital was too far from my home and the hospital refused to provide on-site physiotherapy after a while. Later, the hospital had some issues at the management level and almost all the doctors including the one I was consulting, quit the hospital and moved to a different hospital which was even farther.
I read the monthly ‘Ask HN: Who’s hiring?’ posts on Hacker News regularly and came across a job posting for an interesting remote job as a senior open source developer. Just out of curiosity, I applied for it and though I never expected to get a response, I got one in a fortnight’s time. I had an interview with the company’s CEO and I was given a job offer soon after.
The next couple of weeks when I had to think about the job offer and make a decision were tough. Though I was laid off and re-hired immediately after, I was in a very comfortable and familiar job with a lot of employment benefits. On the other hand, I would have to work on an hourly basis as a self-employed contractor in the new job and without any employment benefits like paid leave, medical/life insurance etc. But it would allow me to permanently work from home, spend time with my daughter and also avoid the headache of daily commute in the mad Bangalore traffic.
I bought a used car (a silver grey Hyundai i20, 2009 model) to gain more driving experience after my driving classes in the previous year and also to be able to drive my family when required. I had vowed to never buy a car since, imho, I would be inconveniencing myself and everyone else on the road given the Bangalore. But the incessant pressure from my wife made me cave in.
During this time, a close relative who was ill for the past few months passed away. He was a fatherly figure to me and I was very close to him right from my childhood, having been brought up in a joint family he was a part of. It was an unbearable loss that shook the whole family and I was no exception.
All the chaos in the first half of the year till that point made me decide to continue with the status quo and continue in my current job. But a last-minute call with my colleague, friend and a mentor changed my mind and I ended up writing my resignation letter instead of an email rejecting the job offer.
I joined the new job in the second half of the year. Though the work and pay were very good, there was a two-month trial period which made me very nervous till I successfully completed it.
My wife went back to work after her maternity leave and though there was support from my in-laws to take care of our daughter, it was always going to be temporary given their preferences and way of life. Given, my parents continued to keep away from us, thanks to my father still being mad about my marriage (even the sight of my daughter didn’t change that), we had to take whatever help was offered under any condition.
I took my wife, daughter and a cousin on a long drive towards the end of the year in my car and it was an amazing (but tiring) experience and helped me get more comfortable with my car (My wife is still fighting with it ) I also bought myself a new laptop, but haven’t set it up fully for work yet.
This month, we did our daughter’s first hair shaving and ear piercing ceremony and it was heartbreaking to see her cry continuously and be very cranky for many days after the ceremony, thanks to her fever and a bout of common cold.
Next year is going to be very challenging as she grows up. She is already very active and naughty and things are only going to get worse My wife’s office is not willing to support her to take care of our daughter any more and with my in-laws planning to go back some time in the middle of the next year, it is just going to be the three of us and one heck of a journey.
Before getting into the details of running these images, let us see how these images are organized and what are the packages available via these images.
The lava-server only docker images will be officially supported by the LAVA project team and there will be regular releases of these images whenever there are updates or new releases. As of this writing there are two images released - production and staging. These docker images are based on Debian Stretch operating system, which is the recommended operating system for installing LAVA.
lava-server production docker images
The production docker image of lava-server is based on the official production-repo of LAVA project. The production-repo holds the latest stable packages released by LAVA team for each of the LAVA components.The production docker image will be available in the following link:
The staging docker image of lava-server is based on the official staging-repo of LAVA project. The staging-repo holds the latest packages built everyday by LAVA team for each of the LAVA components, which is also a source for bleeding edge unreleased software. The staging docker image will be available in the following link, which is built daily:
Having seen the details about the lava-server only docker images, let us now see how to run these docker images to create a LAVA server instance.
running production lava-server docker image
$ sudo docker run -p 8080:80 --privileged --name lava-2018.7-1 linaro/lava-server-production-stretch-amd64:2018.7-1 Starting postgresql... Starting PostgreSQL 9.6 database server: main. Starting lava-coordinator... Starting lava-coordinator : lava-coordinato. Starting apache2 server... Starting Apache httpd web server: apache2AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message . Creating admin account Superuser created successfully. Set initial password for admin account as: changeit spawn lava-server manage changepassword admin Changing password for user 'admin' Password: Password (again): Password changed successfully for user 'admin' Starting lava-server-gunicorn...
Once the docker image is started visit the instance using the url http://localhost:8080/ or http://172.17.0.2 from the host machine. The IP address 172.17.0.2 is obtained from the output above.
running staging lava-server docker image
$ sudo docker run -p 8080:80 --privileged --name lava-latest linaro/lava-server-staging-stretch-amd64:latest Starting postgresql... Starting PostgreSQL 9.6 database server: main. Starting lava-coordinator... Starting lava-coordinator : lava-coordinato. Starting apache2 server... Starting Apache httpd web server: apache2AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message . Creating admin account Superuser created successfully. Set initial password for admin account as: changeit spawn lava-server manage changepassword admin Changing password for user 'admin' Password: Password (again): Password changed successfully for user 'admin' Starting lava-server-gunicorn...
Thus we have our lava-server docker image up and running in docker container. In order to login to this instance use the default user 'admin' and the password 'changeit'. The admin user has administration privileges, hence ensure you change the password to keep your instance secure.
Linaro Automated Validation Architecture a.k.a LAVA project has released official docker images for lava-dispatcher only containers. This blog post series explains how to use these images in order to run inpdependent LAVA workers along with devices attached to it. The blog post series is split into three parts as follows:
Before getting into the details of running these images, let us see how these images are organized and what are the packages available via these images.
The lava-dispatcher only docker images will be officially supported by the LAVA project team and there will be regular releases of these images whenever there are updates or new releases. As of this writing there are two images released - production and staging. These docker images are based on Debian Stretch operating system, which is the recommended operating system for installing LAVA.
lava-dispatcher production docker images
The production docker image of lava-dispatcher is based on the official production-repo of LAVA project. The production-repo holds the latest stable packages released by LAVA team for each of the LAVA components.The production docker image is available in the following link:
The staging docker image of lava-dispatcher is based on the official staging-repo of LAVA project. The staging-repo
holds the latest packages built everyday by LAVA team for each of the
LAVA components, which is also a source for bleeding edge unreleased software.The staging docker image is available in the
following link, which is built daily:
Unlike regular installations of LAVA workers, installations via the above docker images will use a package called lava-lxc-mocker instead of lxcDebian package. lava-lxc-mocker is a pseudo implementation of lxc which tries to mock the lxc commands without running the commands on the machine, but providing the exact same output of the original lxc command. This package exists to provide an alternative (pseudo alternative) to lxc and also to avoid the overheads of running nested containers, which simplifies things without losing the power to run LAVA job definitions that has LXC protocol defined, unmodified.
Having seen the details about the lava-dispatcher only docker images, let us now see three different use cases where jobs are run within a docker container with and without using LXC protocol on attached device such as a Nexus 4 phone.
In demonstrating all these use cases we will use lava-dispatcher only staging docker images. We will use https://lava.codehelp.co.uk instance as the LAVA master to which the docker based LAVA worker will connect to. https://lava.codehelp.co.uk is an encrypted LAVA instance which accepts connections, only from authenticated LAVA workers. Read more about how to configure encrypted communication between LAVA master and LAVA worker in https://staging.validation.linaro.org/static/docs/v2/pipeline-server.html#using-zmq-authentication-and-encryption The following is a preparation step in order to connect the docker based LAVA slave to the encrypted LAVA master instance.
Creating slave certificate
We will name the docker based LAVA worker as 'docker-slave'. Let us create a slave certificate which could be shared to the LAVA master. In a previously running LAVA worker, issue the following command to create a slave certificate,
stylesen@hanshu:~$ sudo /usr/share/lava-dispatcher/create_certificate.py \ docker-slave-1 Creating the certificate in /etc/lava-dispatcher/certificates.d - docker-slave-1.key - docker-slave-1.key_secret
Then login to lava.codehelp.co.uk to do the actual copy as follows (since we need sudo rights to copy directly, this is done in two steps):
stylesen@hanshu:~$ ssh lava.codehelp.co.uk stylesen@codehelp:~$ sudo mv /tmp/docker-slave-1.key /etc/lava-dispatcher/certificates.d/ [sudo] password for stylesen: stylesen@codehelp:~$ sudo ls -alh /etc/lava-dispatcher/certificates.d/docker-slave-1.key -rw-r--r-- 1 stylesen stylesen 364 Jun 18 00:05 /etc/lava-dispatcher/certificates.d/docker-slave-1.key
Now, we have the slave certificate copied to appropriate location on the LAVA master. For convenience, on the host machine from where we start the docker based LAVA worker, copy the slave certificates to a specific directory as shown below:
stylesen@hanshu:~$ mkdir docker-slave-files stylesen@hanshu:~$ cd docker-slave-files/ stylesen@hanshu:~/docker-slave-files$ cp /etc/lava-dispatcher/certificates.d/docker-slave-1.key* .
Similarly, copy the master certificate's public component to the above folder, in order to enable communication.
stylesen@hanshu:~/docker-slave-files$ scp \ stylesen@lava.codehelp.co.uk:/etc/lava-dispatcher/certificates.d/master.key . master.key 100% 364 1.4KB/s 00:00 stylesen@hanshu:~/docker-slave-files$ ls -alh total 20K drwxr-xr-x 2 stylesen stylesen 4.0K Jun 18 05:48 . drwxr-xr-x 17 stylesen stylesen 4.0K Jun 18 05:45 .. -rw-r--r-- 1 stylesen stylesen 364 Jun 18 05:45 docker-slave-1.key -rw-r--r-- 1 stylesen stylesen 313 Jun 18 05:45 docker-slave-1.key_secret -rw-r--r-- 1 stylesen stylesen 364 Jun 18 05:48 master.key stylesen@hanshu:~/docker-slave-files$
We are all set with the required files to start and run our docker based LAVA workers.
This is the
first use case in which we will look at starting a docker based LAVA
worker and running a job that requests a LXC device type. The following
command is used to start a docker based LAVA worker,
Lets have a closer look at the 'docker run' command above and see what are the options used:
'-v /home/stylesen/docker-slave-files:/fileshare' - mounts the directory /home/stylesen/docker-slave-files from the host machine, inside the docker container at the location /fileshare This location is used to exchange files from the host to the container and vice versa.
'-v /var/run/docker.sock:/var/run/docker.sock'
- similarly the docker socket file is exposed within the container. This
is optional and may be required for advanced job runs and use cases.
'-e'
- This option is used to set environment variables inside the docker
container being run. The following environment variables are set in the
above command line which is consumed by the entrypoint.sh script inside
the container and starts the lava-slave daemon based on these variable's values.
HOSTNAME - Name of the slave
MASTER - Main master socket
SOCKET_ADDR - Log socket
LOG_LEVEL - Log level, default to INFO
ENCRYPT - Encrypt messages
MASTER_CERT - Master certificate file
SLAVE_CERT - Slave certificate file
We can see the docker based LAVA worker is started and running,
stylesen@hanshu:~$ sudo docker ps -a CONTAINER ID IMAGE \ COMMAND CREATED STATUS PORTS \ NAMES 522f07964981 linaro/lava-dispatcher-staging-stretch-amd64:latest \ "/entrypoint.sh" About a minute ago Up 58 seconds \ 0.0.0.0:2222->22/tcp ld-latest stylesen@hanshu:~$
If
everything goes fine, we can see the LAVA master receiving ping
messages from the above LAVA worker as seen below on the LAVA master
logs:
The
worker will also get listed on
https://lava.codehelp.co.uk/scheduler/allworkers in the web UI. The docker
based LAVA worker host docker-slave-1 is up and running. Let us add a
LXC device to this worker on which we will run our LXC protocol based
job. The name of the LXC device we will add to docker-slave-1 is 'lxc-docker-slave-01'.
Create a jinja2 template file for lxc-docker-slave-01 and copy it to
/etc/lava-server/dispatcher-config/devices/ on the LAVA master instance,
stylesen@codehelp:~$ cat \ /etc/lava-server/dispatcher-config/devices/lxc-docker-slave-01.jinja2 {% extends 'lxc.jinja2' %} {% set exclusive = 'True' %} stylesen@codehelp:~$ ls -alh \ /etc/lava-server/dispatcher-config/devices/lxc-docker-slave-01.jinja2 -rw-r--r-- 1 lavaserver lavaserver 56 Jun 18 00:36 \ /etc/lava-server/dispatcher-config/devices/lxc-docker-slave-01.jinja2 stylesen@codehelp:~$
In
order to add the above device lxc-docker-slave-01 to the LAVA master
database and associate it with our docker based LAVA worker
docker-slave-1, login to the LAVA master instance and issue the
following command:
Docker based LAVA Worker running Nexus 4 job with LXC protocol
This is the second use case in which we will look at starting a docker
based LAVA worker and running a job that requests a Nexus 4 device type with LXC protocol.
The following command is used to start a docker based LAVA worker,
There is not much difference in the above command from what we used in use case one, except for couple of new options.
'-v /dev:/dev' - mounts the host machine's /dev directory inside the docker container at the location /dev This is required when we deal with actual (physical) devices in order to access these devices from within the docker container.
'--privileged' - this option is required to allow seamless passthrough and device access from within the container.
Once
we have the docker based LAVA worker up and running with the new
options in place, we can add a new nexus4 device to it. The name of the
nexus4 device we will add to docker-slave-1 is 'nexus4-docker-slave-01'.
Create a jinja2 template file for nexus4-docker-slave-01 and copy it to
/etc/lava-server/dispatcher-config/devices/ on the LAVA master instance,
stylesen@codehelp:~$ sudo cat \ /etc/lava-server/dispatcher-config/devices/nexus4-docker-slave-01.jinja2 {% extends 'nexus4.jinja2' %} {% set adb_serial_number = '04f228d1d9c76f39' %} {% set fastboot_serial_number = '04f228d1d9c76f39' %} {% set device_info = [{'board_id': '04f228d1d9c76f39'}] %} {% set fastboot_options = ['-u'] %} {% set flash_cmds_order = ['update', 'ptable', 'partition', 'cache', \ 'userdata', 'system', 'vendor'] %} {% set exclusive = 'True' %} stylesen@codehelp:~$ sudo ls -alh \ /etc/lava-server/dispatcher-config/devices/nexus4-docker-slave-01.jinja2 -rw-r--r-- 1 lavaserver lavaserver 361 Jun 18 01:32 \ /etc/lava-server/dispatcher-config/devices/nexus4-docker-slave-01.jinja2 stylesen@codehelp:~$
In
order to add the above device nexus4-docker-slave-01 to the LAVA master
database and associate it with our docker based LAVA worker
docker-slave-1, login to the LAVA master instance and issue the
following command:
Docker based LAVA Worker running Nexus 4 job without LXC protocol
This is the third use case in which we will look at starting a docker
based LAVA worker and running a job that requests a Nexus 4 device type without LXC protocol.
The following command is used to start a docker based LAVA worker, which is exactly same as use case two.
Hope this blog series helps to get started with using lava-dispatcher only docker images and running your own docker based LAVA workers. If you have any doubts, questions or comments, feel free to email the LAVA team at lava-users [@] lists [dot] linaro [dot] org
வண்ணநிலவனின் ‘கடல்புரத்தில்’ எனக்குப் பிடித்தமான நாவல்களில் ஒன்று. ‘ரெயினீஸ் ஐயர் தெரு’ என்று புத்தகத்தின் பெயரே வித்தியாசமாக இருந்ததால் கிண்டிலில் வாங்கி வாசிக்க ஆரம்பித்தேன். இந்தச் சிறிய நாவல் ரெயினீஸ் ஐயர் தெருவையும், அங்கு வாழ் மக்களையும், அவர்களது அன்றாட வாழ்க்கையையும் நம் கண் முன் விரிய வைக்கின்றது. நாவலில் வரும் காட்சிகளும், கதாபாத்திரங்களும் சிறு வயதில் நான் குடியிருந்த ஆர்.சி.தெருவினரை ஒத்திருந்ததால், ரெயினீஸ் ஐயர் தெருவுக்குள் இன்னும் எளிதாக சென்று வர முடிந்தது. கி.ரா வின் ‘கோபல்ல கிராமம்’ கிராமத்தைச் சுற்றி வருகிறதென்றால், ‘ரெயினீஸ் ஐயர் தெரு’ ஒரு தெருவைச் சுற்றி விரிகின்றது. நன்று!