CodeMarvels

  • Easy Engine – change domain on WordPress website.

    I had recently lost my domain codemarvels.com; the warning emails from my domain provider was reaching a currently unused inbox, and thus had to spawn up the same website on codemarvels.in (the one that you are currently on).

    The only command that worked for me on my EasyEngine deployment (for my ssl enabled website) was:

    #upgrade to ee4 with this command
    wget -qO ee https://rt.cx/ee4 && sudo bash ee
    
    #clone existing website to new one.
    ee site clone codemarvels.com codemarvels.in --ssl=le
    
    

    If your new domain is mapped to this server, it should be ready for serving.

  • Clear Maven Cache: Solution to transitive dependencies not updating on clean install

    Follow these steps when maven clean install just doesn’t update the transitive dependencies in nested projects.

    rm -rf .m2/repository/path-to-your-library
    cd your-project-folder
    find . -maxdepth 2 -name "pom.xml"  -exec mvn clean -f '{}' \;
    mvn clean install -DskipTests=true
    #confirm if the versions are as you wanted
    mvn dependency:tree | grep -B 75 the-bugging-library
    

    If the above method doesn’t work, you might have missed to add the required version in the dependency management.

    Lets assume BL is the library which has been bugging you with these version issues 😉

    cd your-mvn-parent-project
    vi pom.xml
    #add
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>BL-group</groupId>
                    <artifactId>BL-artefact</artifactId>
                    <version>required-version-of-the-BL</version>
                </dependency>
            </dependencies>
        </dependencyManagement>

    Let me know if these steps helped.

  • Set timezone to India in Ubuntu

    Rather than a how to, written as a must do for our servers.

    Probably the most important command for 60% of developers out there 🙂

    sudo timedatectl set-timezone Asia/Kolkata
  • 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>

      

  • Tat Kim Bot : A twitter bot to transliterate Sanskrit

    Tat Kim Bot : A twitter bot to transliterate Sanskrit

    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!

  • 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!

  • Blocked when SSH’in due to startup error? SSH without running .bashrc

    In case a faulty script started by .bashrc or .profile is failing and crashing SSH initiation, you could still login and fix the issue by running shell directly via ssh.

    The command is –

    ssh -t {username}@{hostname} /bin/sh

  • 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

  • Flush DNS cache in Ubuntu 20.xx and above

    On bash, run –

    sudo systemd-resolve --flush-caches

    Should be done.

  • 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.