दसरा!! Dasara – The festival of joy & righteousness

Dasara greetings
In Marathi, there is one saying
"दसरा सण मोठा,
नाही आनंदा तोटा"

This means that Dasara is such a festival which is full of joy, happiness and commemorates the triumph of good over evil. We celebrate the nine days beginning from Ashvin Shuddha Pratipada as "Navaratri" and the tenth day is celebrated as "Dasara / Vijaya Dashami". In 2020 अश्विन शुद्ध प्रतिपदा falls on Saturday October 17th.

During this vowed religious observance, a pot is installed (घटस्थापना) at a sanctified place at home. A lamp is kept lit in the pot for nine days. The pot symbolizes the universe. The uninterrupted lit lamp is the medium through which we worship the effulgent Adishakti, i.e. Shree Durgadevi. During Navratri, the principle of Shree Durgadevi is more active in the atmosphere.

There are a lot of anectotes relevant to [!img] Navatri and Dasara. They say the demon "Mahishasur" started terrorising Swarga Loka (Heaven) and Prithvi Loka (Earth) after Brahma granted him a boon that no man or god would be able to conquer him. . He invaded Swarga Loka and defeated the king of gods Indra and took control of Swarga Loka. He drove all the Devas (Gods) out of heaven. Eventually, they created his nemesis in the form of a young woman, Durga, also known as Shakti or Parvati. She combined the powers of all the gods to fight Mahishasura. The goddess then attacked Mahishasura's empire, and after nine days of fighting, during which Mahishasura's army was decimated, he was finally killed on the tenth day of the waxing moon by her incarnation Kali (which appeared from her forehead). Durga was henceforth called Mahishasuramardini, the killer of Mahishasura.

Navaratri is celebrated to worship nine forms of Durga Maa with fervour and devotion. Navaratri is celebrated in different ways throughout India. In Gujrat, they try to please the Goddess by a special dance called "Ras-Garba". In Bengal the festival of Durga Puja is celebrated. In Kerala, the "Onam" festival represents Navaratri and Dasara. They believe that Bali raja was so kind, that even if he was pushed to Patal lok (The nether world), he would come to the earth to see if everybody is doing good on Dasara.

In Mysore (an ancient city in the south Indian state of Karnataka, around 125 Km from Bangalore) there is a tradition of holding a grand procession through the streets of the city with the idol of the goddess Chamundeshwari riding in a golden Ambaari (elephant-seat).


In North India, Dasara is the day when Prabhu Shree Ram killed the demon Ravan. So the nine days are dedicated to Ramlila i.e chanting Rama Bhajans and on the tenth day statue of Ravan is burnt. The burning of the effigies is symbolic to cleanse society of all evil by burning it.

There is a very interesting story about why we give the leaves of "Shami" to each other on Dasara. They say that when Pandavas went to "Adnyatwas" they hid their weapons on Shami tree. And when the Adnyatwas was about to end the Kauravas took away the cows of Raja Virat under whose shelter Pandavas lived. So to save the cows Arjun got his weapons back from the "Shami" tree and that was "Dasara"

There is another very interesting story about the "आपट्याची पानं" (Leaves of Shami tree) .
Aptachyi pane
It goes like this:

Once there was a boy names Koutsa, who wanted to offer Gurudakshina to his Guru. his guru after Koutsa insisted, asked for 14 crores (140 Million) of gold coins. now Koutsa didnt have as many coins so he went to King Raghuraja. To fulfill his demand, Raghuraja decided to attack Indra and get the money. But when Indra came to know that Raghuraja was going to fight him he was scared, later he knew the main reason of the fight. So he requested Kuber (Treasurer of God) to load the "Shami" tree with gold coins. Now Koutsa offered all the coins to his guru but Guru accepted only 14 crores of coins nad asked Koutsa to put the remaining back on the tree. Later on those coins were distributed among people, and since that day was "Dasara" we give each other the "Shami" leaves symbolically.

Indians give a lot of importance to start any project, journey, activity or make a purchase at an auspicious time. According to Hindu Mythology there three and a half very auspicious days (साडे तीन मुहूर्तांपैकी एक) in an year on which you can start any project or make any purchase without waiting for an auspicious moment. Dasara is one of those days. Therefore many people buy jewellery on the occasion of Dasara. The 9th day is "Ayudha Pooja" when everyone gives their tools of the trade -- pens, machinery, books, automobiles, school work, computers etc. a rest and ritually worships them. They start afresh from the next day, the 10th day which is considered as 'Vijaya Dashami'. Many teachers/Schools in south India start teaching Kindergarten children from that day onwards. Students also pay homage to their respective teachers as they are considered the third god (माता, पिता, गुरू आणि दैव - Mother, Father, Teacher & God).

Manipulating image position using CSS

Introduction

AI generated CSS3
CSS3 Image generated by AI

Centering an image alongside text in a container might seem straightforward, but dealing with the differences between block and inline elements often complicates the task. While it's easy to position these elements separately, combining them can present unexpected challenges. I recently encountered this issue when trying to align an image to the left and center the heading within the same container. After experimenting with outdated techniques like float, I turned to modern CSS tools like Flexbox to find a cleaner, more efficient solution. This article explores my approach and the lessons learned along the way.

The challenge

The text I was using was my site heading with the HTML element <h1. which is a block-level element, which means that it doesn't play nice with other elements on the same line. It starts on a new line and needs to take up the entire line. Whereas the <img> element is an inline element which means it is happy to play with others on the same line. Of course, I could play with the CSS float property, but there is a problem. The moment I introduce float for an element, it takes that element out of the document flow. and it becomes hard to control the behavior of that element.

Options

As mentioned earlier, I tried using float: left and float: inline-start, but it doesn't always behave as I want. As a best practice, I try to use the latest techniques as much as possible and that's where the modern flex and CSS GridBox came in. Flexbox when assigned to the parent container, aligns all the content text to the left as shown below.

Text aligned to left with just flex
Text aligned to left with just flex

After a lot of trial and error, it came down to using specificity and going minimalist. I also wanted to have the option to style images that I might use on the site independently so I didn't apply any styling to the core img element. I created several classes to manipulate the images and applied those. During all this trial and error, another problem vexed me. I couldn't get the image to align to the middle of the parent container with all the techniques I knew. I researched and tried with align-self property. That finally worked. I didn't want to apply this to the core img element and I didn't want to create a class for this so I used the Child Combinator to target the specific img element which is a child of header element (header > img). That took care of the issue of image alignment.

The next issue was to align the header text in the center. I tried all the tricks I knew with text-align, align-self, align-items, justify-self, and justify-items. But because the parent header element was marked as flex, the subsequent styles didn't apply. Finally I tried a simple trick to center the content using margin: auto and that did the trick. Here's how the final output looks now.

This is the final result
This is the final result

Even when I change the height of the header container, the image and text are vertically in the middle of the element and stay where there on the x-axis.

Final code

HTML code:

<header class="flexi">
  <img class="round-img small" src="img/Mukul-2019.jpg" alt="Mukul Dharwadkar" caption="Picture of Mukul Dharwadkar" />
  <h1 class="center-align">
    Mukul Dharwadkar
  </h1>
</header>

CSS code:

header {
    width: 900px;
    margin: auto;
    height: 120px;
    background-color: antiquewhite;
  }

/* The CSS rule below is highly specific for an img element that is a child of the header element.
Typically there will be only one img element inside the header and therefore this is safe to keep */

header > img {
  align-self: center;
}

.flexi {
  display: flex;
}

.round-img {
  border-radius: 50%;
}

.small {
  width: 100px;
}

.flexi {
  display: flex;
}

.center-align {
  margin: auto;
}

The full code is on my Github repo. Feel free to use it.

Conclusion:

Achieving the perfect alignment of images and text in web design often requires experimenting with different CSS techniques. In this case, Flexbox proved to be the most efficient and modern solution for centering content within a container, while maintaining the flexibility to adjust styling independently. By using targeted selectors like the Child Combinator and leveraging Flexbox’s alignment properties, I was able to solve the issue cleanly and efficiently. This method not only streamlines the code but also ensures that future adjustments will be easier to manage. CSS can be tricky, but with the right approach, you can create polished, professional layouts.

Powered by AI

Introduction

AI
AI
Artificial Intelligence (AI) is the current buzz word in every industry, not only IT. No conversation between IT or business leader nowadays is complete with a reference to AI or ML. One would be not mistaken to think that AI is the magical wand that is going to solve all our problems. Or is it? This is my take on the use (or overuse / abuse) of the term AI in today's conversations and marketing. What does true AI mean? Where does the intelligence come in? How do you define intelligence? Does the word intelligence mean true intelligence which can somehow mimic human-like brain and decisions or does it mean intelligence like a lot of information as used in government agencies?

True AI, or artificial general intelligence (AGI), implies the ability to mimic human reasoning, adapt to new situations, and solve problems in a wide range of contexts. However, most of what is referred to as AI today is more about automation, data-driven decision-making, and machine learning, which excels in specific tasks but lacks the holistic understanding that real intelligence implies. Whereas Machine Learning (ML) focuses on algorithms that learn from data without being explicitly programmed

Powered by AI?

In more and more advertisements and marketing collateral are all peppered with AI, ML, Autonomous or some variant thereof. But when you think about it, what does powered by AI really means. So I decided to dive in. I examined three different services in some detail.

  • Workday's AI driven HR
  • Juniper's AI driven support
  • Duolingo's AI powered language learning

Workday's AI driven HR

When I looked at the services that Workday claims to provide by AI, the things that stood out for me were mostly around candidate matching, skills matching, and insights in several domains. Honestly, none of this is AI driven. All of this can be and has been done using analytics in spreadsheets on a smaller scale or BI tools for enterprise scale. As far as the matching is concerned, I believe it is more miss than hit. The beauty of humans is the unpredictability and un-repeatability. That's why there term human error is common place. It is very rare for a human to repeat the previous step / action exactly.

The other areas that the AI falls short is decision support system or sentiment analysis. Making decision based on varying data points is not easy. Humans can do it very easily but machines fail spectacularly in actually helping with decisions or sentiment analysis. The point I am trying to make is that everyone writes their resume and skills differently. Companies have tried to standardize it by providing drop down lists, but then they dilute it by allowing candidates to enter their skills as free text. This leads to a very low percentage of candidate matching using the Application Tracking System (ATS) which many companies use to screen resumes automatically.

Juniper's AI driven support

Being from IT operations background, this is was more interesting to me than the others. I read through Juniper's solution briefs, web pages as much as I could without giving my email or contact information and I came away a little disappointed. The whole pitch is based on analysis of past data and Juniper claims to use 9 years of reinforced learning to deliver that platform. I was looking for predictive detection and auto-heal / self heal of issues. All the solutions talked about were accurate troubleshooting help, quick deployments of solutions, and reduction of number of tickets by 90%. I admit 90% reduction in tickets is impressive, but do you really need AI for that?

Around 12 years ago, I built tools to automatically heal application instances and server instance when certain conditions were fulfilled. Those were simple shell scripts that I wrote based on a few months of observation and interaction. I also updated those scripts to handle different scenarios. This reduced tickets from 150 a month to 10 tickets that were real issues.
During the same time, I built tools to deploy applications to over 100 servers within 15 minutes instead of over 4 hours that it used to take before my automation.

It was not AI. It was just pure and simple common sense and a desire to avoid manual labor as much as possible.

Duolingo's AI powered language learning

I admit that this is a service that I have explored the least. I am learning a language using Duolingo. Duolingo claims that if I subscribe to their Super plan, I get AI driven insights into my mistakes and guidance on what mistakes I made. I tried their Super plan as a trial and during that it told me what mistake I made and what I should have used instead. To be fair, the way they are using the data that they gather from a learner, is to personalize the learning experience by focusing on the student's weak areas and trying to emphasize and reinforce those concepts. Which again is more of ML than true AI. It would be better to use the data to tailor the subsequent lessons to focus on the weaker concepts rather than just during the review of lesson. Generally speaking when learning a new language, grammar is the most difficult part. Use the data collected during lessons to focus on the students weak areas.

Conclusion:

AI Hype
AI and its Hype
With the explosion of Gen AI in the past couple of years, everyone is trying to get on the AI bandwagon. But in my humble opinion, the word intelligence used here is not the cognition or understanding that we term intelligence as, but rather it is a lot of information and based on that the computer will make some decisions. It indeed reduces a lot of workload, but I would strongly urge to stop using AI in every conversation or marketing collateral but rather focus on actually solving the problems and make human lives better. According to a 2023 Gartner report, only 6% of companies using ‘AI-powered’ solutions are deploying what experts would classify as advanced machine learning or artificial intelligence. The graphic in the report is very illuminating with GenAI being at the top of "Peak of Inflated Expectations".

Using AI in everything creates unrealistic expectations in people's minds. Rather than contributing to the AI hype, companies should be transparent about what their technologies actually do — whether it's data-driven automation or advanced machine learning. This will help set realistic expectations and foster trust in the potential of AI to truly improve human lives in meaningful ways. The customer should also be aware of the marketing techniques and really try to peel the layers of the solution being sold to understand what they are buying.

Beautify your terminal with Zsh and themes

Introduction

Oh MysZsh
Oh my zsh logo

I have been using Linux for a better part of two decades now but I won't say that I am an expert in Linux. Till recently I didn't even know that I could change shells and what capabilities other shells have. I was more of a functional and casual user than anything else who knew how to get a few things done but didn't know the internals and the intricacies of the operating system. One of the intricacies is to change the default Linux shell from bash to zsh. Zsh is indeed a powerful shell with a lot of extensions, customizations, and community support with themes to tailor the shell to ones own preferences. That was another thing I didn't know that there are themes for shell. I always used to think that bash shell is what you have and you have to use it without complaints.

Well, I was wrong and there are a lot of things you can change about your terminal and in this blog post, I am going to show you how to do it. I know there are a lot of tutorials around the web that show you exactly this and some are good than others. But this is more for me than anybody else. Really. When I started working for AWS, I got an opportunity to meet very smart people who have extended the capabilities of software tools to the limit of what they can do and then some. That is one of the reasons why I wanted to learn more and more about the basics so that I can have a very solid foundation.

Why Zsh?

By installing a different shell, you can actually decorate and customize your plain old command prompt to something fancy very easily and you have a lot of options. Of course, you can also customize and decorate your command prompt on bash shell, but for that you need to know a lot of configurations and parameters if not all. And you need to build the configuration file by hand as well.

As I mentioned earlier, there is a vibrant and strong community support and there are several themes available along with pre-made scripts that you can just run and choose options to configure and tailor. That's what I plan to show you in this post.

Preparation

All the Linux installations come with a bash shell by default. Depending on the distribution you use, there might be other shells also installed but we need to ensure that Zsh is installed. I am using Ubuntu to show the commands. The steps remain the same on a Red Hat clone as well. Red Hat clones use yum to install and maintain software whereas Debian and its clones use apt.

  • Ensure you have Zsh installed. Run the following command.
    sudo apt install zsh -y

  • Check if the Zsh installation is done properly and where it is installed by running the following command.
    which zsh
    It should show an output something like /usr/bin/zsh

  • Now that Zsh is installed, change your default shell to zsh by running the following command.
    chsh -s $(which zsh)

Once the command runs successfully, you will need to restart your session in order for the terminal to start in the new shell environment. Once the terminal starts, the Zsh configuration scripts starts automatically to enable the user to configure settings and preferences. We are not going to do any configurations at this time and will leave this for later once all the compoents are installed and ready. On the prompt, select 0 to Exit and create a placeholder .zshrc file so that the script doesn't run again.
(0) Exit, creating the file ~/.zshrc containing just a comment.
That will prevent this function being run again.

Install and setup

Now we are getting to the good part. First of all we need to install and download Oh-my-zsh. Oh-My-Zsh is a delightful, open source, community-driven framework for managing your ZSH configuration. Download and run it using the either of the commands below. Generally all Linux installations come with wget preinstalled and you will have to install curl. Curl is a powerful tool for testing and debugging and if you don't have it, don't worry about it and don't bother downloading it. If you don't have it and don't know about it, you probably won't need it.

sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
==OR==
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Next we need to make the terminal our own by installing and configuring themes. There are a lot of themes available for Zsh but my favorite is PowerLevel10K. To use it first clone the Powerlevel10K repo using git. If you don't have git, install it by running sudo apt install git -y on your terminal.

git clone https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k

Once this is done, we will clone auto-suggestions and syntax highlighting repos which are plugins which extend the capabilities of Zsh a lot. Again there a lot of plugins available for Oh-my-zsh but for now we will concentrate on these two.
git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting

Now that all the major components are downloaded and ready, it's time to personalize, configure and make the terminal prompt our own. Open .zshrc (It's located in your home folder) file in your favorite editor and add the following lines
ZSH_THEME="powerlevel10k/powerlevel10k"
POWERLEVEL9K_MODE="nerdfont-complete"

Uncomment the options to activate them as needed. I suggest the following options.
CASE_SENSITIVE="true" # Around line 21
ENABLE_CORRECTION="true" # Around line 45

Finally add the plugins that we cloned earlier for autosuggestions and syntax-highlighting at around line 71
plugins=(git zsh-autosuggestions zsh-syntax-highlighting sudo)

Once done, save and exit. We are not done yet. We need to install a font that will allow us to use cool fonts and icons to spice up the prompt. The font that we need is Fira mono font. While the font itself is free from Google, we need the patched version. The entire fonts library is available on Github. The fonts library is a huge one and you don't really need all of those. I recommend downloading Firamono medium font from my [site](Internal link here) and install it. To install it, you can either double-click on the font file and open it in File manager and click install or create a .fonts directory in your home folder and copy it there. I recommend the first option to install it system wide.

Once installed configure Terminal app preferences --> Profile --> Text to use Fira mono font to harness the power of Oh-my-zsh

At this point you need to log out and log back in to ensure the changes made so far are persistent.

After logging back in launch Terminal. The P10K configure will run for the first time. Follow the prompts. My suggestions are:

  • For Prompt Style choose (3) Rainbow
  • For Character Set choose (1) Unicode
  • Choose whether you want to show current time on the command prompt or not. I suggest (3) 12 hour format
  • For prompt separators choose (1) Angled
  • For prompt heads choose (1) Sharp
  • For prompt tails choose (1) Flat
  • For prompt height choose (1) One line
  • For prompt spacing choose (1) Compact
  • For Icons you can choose your preference. I like a lot of fonts and I recommend (2) Many icons
  • For Prompt flow choose (1) Concise. Again this is a personal choice. I recommend Concise
    • Choose (y) to select Transient Prompt to provide a clean work area
  • Choose (2) to have Quiet Instant prompt mode
    Choose to save to .zshrc and apply the changes we just made.

And that's it. You are done! You now have a fantastic command prompt.

How to create a bootable USB drive on MacBook

Introduction

Bootable USB Drive for MacBook
Bootable USB Drive

I like to tinker around with technology. I think that much will be evident from my website and the type of posts that I write here. Sometime back, I was trying to play around with a Raspberry Pi. It was a RPi zero so it didn't have a lot of capabilities, but I figured out that I could run Raspbian Buster or Debian Buster on it and also ran this website on it till recently when I migrated it to AWS.

The problem

For quite some time now, I have been using a MacBook as my primary computer and while it is a great machine for personal productivity and development, I didn't really dive deep on system administration. I needed to figure out how to format a USB drive and a SD card on Mac and write a bootable image on it.

I did a lot of research and I came across a site from a Microsoft engineer who had written a very nice article on this and I used that article to very easily achieve my task. But I can't find that anymore so instead of relying on someone else, I thought I will document it myself and also add some additional details so that others can benefit. I could have very easily used my Windows computer but that wouldn't be integral with my tinkerer nature.

Recently, I had revived an old 2009 laptop which refused to run any of newer OSes so I did another research on possible OSes that could run on it and figured that I could run Lubuntu on it easily. So I went ahead and downloaded the latest version of Lubuntu - Focal Fossa and set to the task of creating a bootable USB drive.

The technical details

To achieve this, I would need only two tools from my MacBook

  1. diskutil
  2. dd

Let's take a look at the details now.

The first thing that needs to be done is to determine the device details of the USB drive. To do that, first insert the drive in your USB port and run the command below:

diskutil list

[image here]

This command will show an output of the disks mounted. Determine the device details by looking at the disk size and note down the device details which will be in the form /dev/diskN where N is a number. Once the device number is determined, run the following command under root (sudo) privileges

sudo diskutil eraseDisk FAT32 LABEL MBRFormat /dev/diskN

[image here]

Make sure to replace the LABEL with the name you want and N with the number noted above.

It will take a few minutes to complete the process and once it is complete, run the following command:

diskutil unmountDisk /dev/diskN

Again taking care to replace N with the appropriate number.

Once the disk is unmounted, we are now ready to write the bootable image to the USB drive. To do so, run the following command:

sudo dd bs=1m if=/Path/to/fileimage.iso of=/dev/diskN

[image here]
Depending on the size of the image, this can take several minutes. You can check the progress of the process by pressing Ctrl+T on the screen. Once finished, run the following command to eject the disk from the computer gracefully.

diskutil eject /dev/diskN

Don't forget to replace the N!

Even more deeper details

Now that you understand the commands, let's take a detailed look at the verbs and the switches we used in the commands.

  • diskutil: We used the following verbs with this command.

    • list: This option lists all the drives that are attached and mounted on the operating system
    • eraseDisk (note the capital D): This option will erase the disk that is provided as an option. It also takes the following arguments:
      • Filesystem Type: Choose from FAT32, NTFS, EXT4 etc.
      • Label: The name to be given to the disk
      • Format: The format type of the disk. Valid Values are: APM (Apple Partition map), GPT (GUID Partition Table) and MBR (Master Boot record). Using MBR will ensure that the drive will be bootable on non-Mac machines as well.
      • Device: The device number that we noted earlier.
        Note: This option needs sudo or root privileges to run.
    • unmountDisk: This will unmount the entire disk including all the volumes that may be present on the disk. It needs the device argument to work.
    • eject: This will eject the disk from the computer and make it safe for the removal media to be removed from the computer without the risk of data corruption.
  • MARKDOWN_HASH1aabac6d068eef6a7bad3fdf50a05cc8MARKDOWNHASH: **[dd](https://en.wikipedia.org/wiki/Dd(Unix))* stands for data duplicator* and is used to copy and transform data from one device to another. It is a low level Linux command line utility which will be a great addition in any system administrator's toolkit. We used the following verbs and switches in this exercise:

    • bs: Stands for block size. The default block size for dd utility is 512 bytes and there's not one right size for setting a block size. There is a good discussion here. This operand sets both the input block size and output block size to the desired value which I have used as 1 mb.
    • if: Denotes the input file where the dd should read from instead of standard input.
    • of: Denotes the destination where dd should write to instead of standard output.

Conclusion:

That's it for now. I hope this short tutorial has been helpful to you. Instead of using the GUI tools, I have found that using these command line utilities provide a lot of flexibility and power to the system administrator but can be confusing at times and have potential to destroy data if used incorrectly

Return to office v/s Remote work

Introduction

RTO or Remote
A person working in office and a person working at home

COVID! It was a less than once in a life time incident and it has changed a lot of things for humans, especially in tech jobs. COVID resulted in tech workers working remotely all the time. Tech workers had always been working from home either partially or after hours to get the job done. But the pandemic made that mandatory. This shift in working conditions created a sea-change in not only how we deliver our work, but also changed peoples' expectations, especially the folks who were just joining the workforce.

What changed?

Technology changed. That's for sure. Also people's work habits changed. But more on that later. Telecommuting includes endless conference calls, video calls which include whiteboarding, collaborating on documents in real time, screen sharing. All of which take a lot of bandwidth. With the internet connection most people had till recently, it made remote collaboration very difficult leading to productivity loss and frustration. It was better to do it in person in the office. Innovation and inventions drove a remarkable improvement in network equipment and network protocols giving rise to better, more reliable, and faster WiFi connections. Fast wireless connections meant that it was no longer needed to have wired connection to get a stable and fast internet access. At the same time the retail internet connection speeds and reliability also improved dramatically from few 10s Mbps to several 100s Mbps. All of these changes gave rise to a retail market for better collaboration platforms.

Rise of telecommuting platforms

For a long time now, companies have been advocating to reduce or avoid travel and use tele / video conferencing to conduct meetings as it not only saved costs but also was good for our planet. The introduction of Zoom, GoToMeeting, BlueJeans (now being sunset) and the like revolutionized the workplace interactions and made it easy to telecommute and still have the same office like experience when collaborating with colleagues. In fact it started becoming the preferred method to interact with global and local colleagues alike. But the working was still primarily office-centric.

Here comes COVID

In late 2019 and early 2020 COVID hit the world and everything was locked down and governments issues shelter-in-place advisories. All companies closed their offices and directed their employees to operate remotely. Initially it was expected the pandemic was expected to end within a few months. But it stretched in to couple of years and everyone was forced to work remotely and collaborate with their colleagues through online collaboration tools. Initially people had difficulties adjusting to working from home and were missing the human interaction and social connections at office. As the lockdowns continued into several phases, people started getting used to working from home and liked the convenience of no commute, sleeping in, working in pajamas etc. They also built their own social bubbles to meet with friends. They also started thinking that this was going to be a permanent arrangement.

On the other hand, the companies already had long term leases to their buildings and although a few started terminating their leases and not renewing other leases, return to office (RTO) was always going to be on the cards. As the impact of pandemic started to erode through vaccinations and herd immunity, companies started calling their employees back to office. As the calls to RTO began to grow so did the resistance from employees.

Resistance

Remote working was always going to be temporary arrangement while the pandemic was raging. But humans are wired in such a way that they always strive for local optima and extrapolate their current situation as being the long term or permanent solution giving rise to the term, "New normal" It was never going to be normal working remotely. Some companies like Tesla, or Broadcom took a hardline stand, a few like Amazon, Wells Fargo took a phased approach to ease the workforce back to office, and a few made their operations fully remote. With this we started seeing a lot of reactions / posts/ videos from people about the vices of working from office claiming there is loss of productivity by forcing the employees to return to office due to time spent in commute, hallway ambushes, noise in office, loud hallway conversation, etc. Some even state and rightly so that with the distributed workforce, none of their immediate teams are located in their location so what is the point in going to office.

Around the time the internet connections were improving, the work habits of millennials who were just entering the workforce were also changing giving rise to the Gig Economy where young people preferred freelancing to full time roles. The younger workforce was used to working remotely and when they wanted to.

Issues with the remote work

While it is good to have flexibility and not have to go office, it has a lot of detrimental effects, especially on the younger generations who are just entering the workforce as compared to the more experienced people. Working in office and interacting in person allows a wide variety of human dynamics. There are different types of personalities, different mental states, moods, etc which are kind of obfuscated by remote collaboration. You can't really understand the tone differences, body languages over a video call that you can understand in person. Even if none of the immediate team members are in the same location, but there are other employees who are working for the same company in the location and the human interaction along with the experience is invaluable. The younger generations are missing out on those experiences that shape and hone their own personalities teaching them how to interact with different people while handling varying situations. Everyone is now interacting online through social media where it is easy to ignore several things. Being able to handle situations and interacting with people while resolving conflict is an important skill that everyone should have and must be considered when defining productivity. Additionally, employees (even the individual contributors) can't always deliver their work product alone all the time. They need to interact with other people from their own teams and different teams, even other organizations to be effective. Asynchronous is not always the answer.

Conclusion

Work was always performed from office and it will continue to be so for the foreseeable future. Of course technology will continue to evolve and eventually it may make working in an office obsolete (but I don't think so). However till the time that happens going to office is going to be our reality. I support in-office (although hybrid) work. There is more accountability, better collaboration, improved communication, and effective working. Of course, this is my own humble opinion. I am not representing any company or group.

Tea

A picture of cups of tea
A cup of tea
Tea. Such a simple beverage. And I am not talking about the Chamomile Tea or Mint Tea or Lemon Tea or the Boba tea. I am talking about the tea you get in subcontinent especially in India. The tea that is made out of actual tea leaves, milk, ginger, and a bunch of optional spices. Yes, you got it. I am talking about the Masala Chai but also a lot more than that! At its simplest, it has only four ingredients - Milk, Water, Sugar, and Tea Leaves.

Tea is such an integral part of Indian culture and a lot of things make or break over tea. Friendships are forged, relationships discussed, marriages fixed, business deals finalized, gossip, and what not. Having tea in the middle of the day when the temperatures are soaring is not about the tea, but about a chat with a friend or if alone, just unwinding from whatever is bothering you at that time.

But in its simplicity lies the complexity. Even with just four ingredients, it is not easy to get it right. True that it is basically just boiling a cup of water, but still not everyone can get it right. In fact, I am a big fan of tea and can drink tea at any time of the day and any number of times. But till recently, I was not able to get it right. That tells you how much I love tea.

Even with just four ingredients, the quantity of ingredients added and the order they are added is very important. In quantity depends on how much tea is being made, but basically, you add one teaspoon of tea leaves to 1/2 cup of water and 1/2 cup of milk to make one cup of tea. Sugar is up to the individual's taste, but generally 1 teaspoon or less is what is recommended. Just recently I figured out the order as well and since then the tea has been heavenly.

I used to boil the tea leaves with the water thinking that the tea flavor and fragarence will steep in. But I was overcooking it and the tea was losing its taste. What you need to do is to bring the water to a hard boil and then add milk to it. Once milk is added, add the tea leaves at that time and stir the concoction and stir it well. You can add sugar anytime. When the final product is about to come to boil, that's when you add the crushed ginger and other spices. That's when the tea leaves and ginger release their flavor and make the tea, Tea.

Fix 404 errors in Laravel application authenication

Introduction

I am not a Laravel programmer by any stretch of imagination but I like to think that I am a pretty good engineer who can solve problems regardless of the situation. Recently I faced a situation where I was working with one of my clients on setting up a validated environment for their customers using a standard operating procedure (SOP). They had gotten the application developed from a third party vendor. Long story short, since their target market is highly regulated industry, they must have detailed and exhaustive documentation of all steps of setting up and tearing down of the computer systems.

It's not easy to write SOPs

There is a video where a father is asking his kids for some instructions to make a peanut butter and jelly sandwich. While for most of us making a peanut butter and jelly sandwich is highly intuitive and easy, for a person who doesn't know what is to be done, it can be stupefying. When we write instructions, we know a lot of things as we have already done the task successfully and assume that the reader is already aware of a lot of things that we know about and do not include those steps in our documentation.
Sometimes it is different. We miss some steps in our documentation and when someone else finds out and reports the gaps, we quickly make the change and do not update the documentation, hoping the problem will not recur. That exacerbates the actual problem. In case someone else has to reproduce the environment using those SOPs then they are basically stuck.
Therefore it is very important to have accurate and correct documentation updated. Admittedly, it is tedious and cumbersome, but in the long run it definitely is the right thing to do.

Laravel and Apache server

I had a Laravel application that was front ended by an Apache server and the backend was MySQL database. The developer had setup an instance and my job was to replicate the same using the SOP that they had built to ensure they are accurate and the process is predictable and repeatable. I followed the steps exactly as documented. I was able to get to the login screen. So far so good. But when I tried to log in using the test credentials, I was shown a 404 - Page not found error. Initially, I worked with the developer and they did something and fixed it. Interestingly, they failed to mention it to me what they did and neither was it documented in the SOP. So as it happened, I had to rebuild the server to try and get the SOP working. I again faced that issue and this time, instead of reaching out to the developer, I did my own research and Voila' I was able to solve the problem.
The research led me far and wide and in one of the forums I found the possible answer which suggested setting AllowOverride All on the parent directory of the application. In my case it was /var/www. The post suggested to set it at the main Apache configuration file. But I always try to localize these solutions and not make global changes if I can help it in order to keep the installation secure. So I added a Directory directive in the VHost configuration file which enables AllowOverride All for that VHost only while leaving the original configuration untouched.

Conclusion

They say that Laravel is a programming language for coding artists with elegant frameworks. But these issues are pretty simple and will be prevalent in all applications that require authentication. Why is this not better documented? More importantly why does the authenticate or login action in Laravel return a 404 error?
I wonder...

Responsible and Trustworthy AI

Introduction

Smart City Powered by AI
A futuristic view of Smart City powered by AI
Recently, AI technologies have seen explosive growth. With more genAI applications being built it is important to understand the impact and consequences of AI. I saw an interesting quote recently: "We wanted AI to do our mundane tasks so that we could focus on creativity and not that AI to do creative tasks so that we can do our mundane tasks”.

There is also a risk of using AI as GenAI is exciting and will open up many opportunities to add to the global economy. But it also opens up a lot of risks and dangers to corporations and individuals alike. Responsible GenAI is not only the government's responsibility, but we all are collectively responsible for generating more benefits with genAI. I built a genAI-powered application to provide educators with a platform to develop personalized lesson plans. That experience gave me a first-hand perspective of the power of genAI and the responsibilities that come to us as technology leaders to ensure we use AI safely and that it is trustworthy.

Problems with AI.

As AI’s power increases, it also opens up several risks and problems. This is in no way a comprehensive list but I am just scratching the surface.

  • Inappropriate use: A technology can be used beneficially or maliciously. We have seen a lot of issues come up with deep fakes and misinformation that are known. There are several which are unknown.
  • AI Race: We have seen the negative consequences of the arms race and if governments get into an AI race who’s to say where it will end? The impact of the arms race was visible and I am afraid that with AI technology, we won’t even see the impact as it can be highly targeted and obfuscated.
  • Rogue AIs: Humans have been trying to build an autonomously intelligent robot for several decades. While the objective is to benefit the human race and planet Earth, the risk comes from if and when the AI becomes truly autonomous and humans lose control over them.
  • Misalignment: For now, the AI is a robot that does what it is told. If the instructions provided are not accurate and aligned with the desired objective, the results could be unexpected to catastrophic.
  • Hallucinations: GenAI LLMs are compared to parrots. Sometimes they listen / read other people’s work and parrot it back without any validation even if it is incorrect. There was a very famous and hilarious incident where the chat bot declared that Australia didn’t exist.
  • Conformism: Even today, the AI LLMs conform to human intelligence. I asked the bot what 20+20 was and it correctly responded that it is 40 and confirmed it when I asked if it was sure about it. However, when I said that I think 20+20 was 42, it corrected itself and said that it made a mistake. If the bots can do this with absolute truths, then I am worried about the veracity of the results in subjective situations.

Conclusion:

AI and Machine Learning (ML) has made a lot of progress in the past few years, but it still has a long way to go. Especially the LLMs. There are other key and more impactful applications of AI, but the risks of using AI at this time can be extremely dangerous for humans. AI and ML can help in accelerating and eliminating mundane tasks, but it requires strong human oversight to ensure the results are not only accurate and actually helpful for people but also solving the intended problems and not creating a cobra effect.

My views on 70 hour week

Bottom Line on Top (BLOT): I am against Mr. Murthy's missive that people should work for 70 hours or more to be productive. People can stop reading here. The rest of the narrative just explains my thought process. If interested, read on!

Background: The legendary Mr. Narayan Murthy - one of the founders and Chairman Emeritus of Infosys created a debate in the white collar professional world by stating that people should not think twice even they have to work 70 hours a week. He also mentioned that the young people today are lazy and India's productivity has gone down. Predictably, it created a huge uproar with folks coming out in support of and against Mr. Murthy in equal measure. Known personalities supported Mr. Murthy by quoting examples of Sachin Tendulkar, Virat Kohli, Amitabh Bachchan and how they created their position by working hard and not just for 8 hours a day. I agree. You can't be the GOAT without a great deal of sacrifice.

My Perspective: Let me first start by saying that I myself have worked for 80 hours or more with my previous company. Not for a month or two, but for 3-4 years at end. While I progressed professionally, I ended up moving out of that organization. So you can imagine how that ended. And it also hurt me personally. I missed a lot of events in my children's lives and my wife was left raise our children as a single parent which is not a good experience for anybody.

When I look back at those years, I ask myself, for whom did I work this hard and sacrificed what I did? What did I get in return for my sacrifices? Yes, I was promoted and my salary increased, but honestly was I compensated commensurate with the effort I put in? I was working for a global corporation who made impressive profits. All I got was 2-3% annual raise and a capped bonus. Sometimes not even that and we got maybe 70 cents on the dollar instead of the expected bonus.

As opposed to the majority of the workforce, Mr Murthy was working for himself after he quit his job and started Infosys with Rs. 10000. So he had everything to lose and couldn't afford to fail. Ironically, it was the same Mr. Murthy who had emailed all the Infosys staff to leave office at 5 pm and ensure that there is work-life balance. So you have to wonder what changed Mr. Murthy's opinion. Mr. Murthy's sage advice is spot on for entrepreneurs and startup employees who have a skin in the game in terms of equity as they stand to gain big if the startup turns out to be one of the rare unicorns that we hope. The average employee has no incentive to work for more than what they get paid. They have fixed salaries, the promotions are hard to come by, career prospects are bleak among other reasons. Yes, they also can work for themselves by picking up some freelance work, but companies put a clause in the employment contract and prohibit employees from doing independent work to safeguard proprietary information. They even put a no-compete clause in the contract. And wasn't it Mr. Murthy himself who spoke out against freelancing when the top leaders of the companies effectively do the same when they sit on the boards of various companies?

Conclusion: To be clear, I greatly respect Mr. Murthy and I believe he is one of the greatest minds India has ever produced. But that doesn't necessarily mean we all agree with all his views. This is just one small dissenting voice in the myriad of others. Finally I am happy to work extended hours when there is a need. But it cannot be standard operating environment.

Disclaimer: These are my own personal views and it does not represent views of my current or former employers, colleagues or even friends. If you disagree with me, I am OK with it.

Verified by MonsterInsights