Tat Kim Bot : A twitter bot to transliterate Sanskrit

tat kim bot

Glad to write about a twitter bot I had written and launched during the last Independence day – Tat Kim. For those who are not in the know, Tat Kim means “What’s that?” in Sanskrit – a very apt name for a Bot and allied service which answers questions of Sanskrit enthusiasts.

What does the Tat Kim Bot do?

Currently Tat Kim bot can be used to read Sanskrit tweets in your own script (Eg, Malayalam or Kannada) – there by taking away the need to know how to read Hindi (or Devanagari) to be able to consume these tweets.

Why?

Sanskrit is a pan-Indian language and it should be free from the constraints of a regional Lipi like Devanagari. Also, it helps to remember that some of the seminal works in Sanskrit were recorded not in Devanagari, but in Grantha Lipi (more or less Malayalam of our times)

Usage

If you happen to find a Sanskrit tweet from your favourite Sanskrit tweeple, comment on that tweet in the below format

@TatKimBot {languageCode}

Where language could be one from:
en, hi, bn, gu, kn, ml, or, pa, te, ta, mr

Details of Language codes:

Codescript
enEnglish
hiDevanagari (Kept to support translations to Hindi at a later point of time)
bnBengali
guGujarati
knKannada
mlMalayalam
orOriya
paPunjabi
teTelugu
taTamizh (The transliterations will be lossful due to Tamil script not being elaborate enough to represent all sounds of Sanskrit)
mrMarathi (Kept to support translations to Marathi at a later point of time)

Example:

@TatKimBot ml
And the bot responds in 15 seconds as in the below screenshot:

Archives of the transliterations

The archives of the transliterations done by Tat Kim Bot will be available at the web portal https://tat.kim

(A sample screenshot below)

Look forward to people finding and using it during the next few months!

Fix the error: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags during maven builds

Problem: Maven package gives this compile time error when using Open JDK.

Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> [Help 1]

Reason: Lombok version included in the project seemingly had a dependency on Oracle JDK, which is fixed in 1.18.2

Fix: Upgrade lombok to 1.18.2 in the POM file.

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.2</version>
			<scope>provided</scope>
		</dependency>

Migrate data from one Cassandra server to another using medusa

Here are the steps I followed to get my dev instance of cassandra copied to a new server (both single node instances)

I’ve used medusa tool for the same. You can read more about it here

Installation

Install medusa on both source and destination cassandra-servers, by running the following commands on both –

curl -1sLf   'https://dl.cloudsmith.io/public/thelastpickle/medusa/setup.deb.sh'   | sudo -E bash

sudo apt update
sudo apt-get install cassandra-medusa

Export Data from Source DB

#ssh into source server and do these

mkdir ~/cassandra-bkup
sudo cp /etc/medusa/medusa-example.ini /etc/medusa/medusa.ini
sudo vi /etc/medusa/medusa.ini

# Search for, and set these values in the ini file
storage_provider = local
base_path = /home/{username}/cassandra-bkup
# Save and Exit

medusa backup --backup-name=dev-db-data --mode=full

#compress output folder
tar -czf dev-db-bkup-tar ~/cassandra-bkup

# SCP the backup directory to destination server
scp -r -i <key-file> dev-deb-bkup-tar {dest-user}@{dest-server}:~/

Import data in Target DB

# ssh into target serer and do these
tar -xzf dev-deb-bkup-tar

ls ls /home/{username}/cassandra-bkup/cassandra_backups/
#note down the folder name parallel to the folder index, let it be {sourceHostLocalName}
sudo /etc/hosts
#add an entry with local nodes IP and host name as {sourceHostLocalName}. 
#You can remove this later
# save /etc/hosts and Exit Vim.
sudo medusa restore-node --keyspace={keyspace of intereset} --backup-name=dev-db-data

Verify Imported data

cqlsh {targetNodeIp}
desc keyspaces #verify you have the source keyspace created
use {keyspaceOfInterest}
desc tables; #verify all your tables in the source are recreated here.

That’s it. You should now be able to work with your new Cassandra node!

A JS assistant to remind us to exercise during WFH days

Here is a weekend hack I wrote to remind me to get up from my workstation and do some lightweight exercises during the WFH days – Fit@WFH

Some of the features are –

  • Purely in browser side JS (your data stays at your computer)
  • Reminds you to workout during the tail end of every hour
  • Reminder both in Voice and Browser Notification
  • You can select the exercises you are comfortable with from a list
  • Built for desktop (i.e, for serious WFH’ers )

I guess someone else might also find tremendous value from it. So if you too are caught in a sedentary lifestyle and want to move more, go ahead – book mark and use it !

Launch WFH Fitness Utility

Change the datacenter set in cassandra-rackdc on Ubuntu

Problem: Changing just the datacenter name in cassandra-rackdc.properties gives the error:

Cannot start node if snitch's data center [newName] differs from previous data center [oldName]. Please fix the snitch configuration, decommission and rebootstrap this node or use the flag -Dcassandra.ignore_dc=true.

Solution:
If you are just beginning to setup you cassandra cluster, and is ok to reset the data to bootstrapped state, do this

sudo service cassandra stop
sudo rm -R /var/lib/cassandra
sudo mkdir /var/lib/cassandra
sudo chown cassandra /var/lib/cassandra
sudo service cassandra start

If you need to persist the existing data, do this

sudo vi /etc/cassandra/cassandra-env.sh
# edit the JVM_OPTS line to make it look like below
JVM_OPTS=\"$JVM_OPTS -Dcassandra.ignore_rack=true -Dcassandra.ignore_dc=true\"

sudo service cassandra restart

This should normally resolve the dc name correction in rack-dc properties file.

RabbitMQ installation fails in in the last leg of setting up in ubuntu 20.04

Error:

Setting up rabbitmq-server (3.8.16-1) …
Job for rabbitmq-server.service failed because the control process exited with 
error code.
See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.
invoke-rc.d: initscript rabbitmq-server, action "start" failed.

Reason: libtinfo.so library missing.

Solution:

sudo apt install libncurses5

Note: No need to reattempt the installation.

An “eat dosa!” reminder for busy kids :)

Here is a one hour HTML app that you can use to repeat recorded audio to remind your busy kids they have to finish that food on the table, while watching their favorite videos on YouTube.

Launch Dosa Reminder HTML App

To use the app is this simple –

  • Click on record button. Give permission to access microphone if it asks for it.
  • The recording automatically stops in 4 seconds and replays what it recorded. You can re-record till you are satisfied with the playback.
  • Now you can set the number of seconds of interval, between which the above audio has to be repeated.
  • Click on “Start Reminder” button to start the reminders.
  • When your kid is done eating, you can stop the reminders by clicking “Stop Reminder” button

Happy parenting !