Thursday, October 26, 2023

Bookmark: How to set iTerm2/3 tabbing behavior to sequential order rather than recency

 Background:

iTerm2/3 has built-in functionality to switch between tabs between the most recently used one.  

Problem:

If you're used to changing tabs similar to how Chrome, Edge, and Firefox behave, this can be a frustrating experience in context switching how to move between tabs when working in iTerm in a multiple-tabbed session. 

Solution:

So, if you're not used to this behavior (i.e. you prefer incrementally switching tabs to the right via Ctrl-Tab or to the left via Ctrl-Shift-Tab), this can be remapped within the iTerm profile keyboard settings, to replace the internal intepretation of Ctrl-Tab to Next Tab and Ctrl-Shift-Tab to Previous Tab.


References:

Additional details available here including the original bug filed as well as a more-detailed steps in their solution:
https://gitlab.com/gnachman/iterm2/-/issues/8219


Monday, September 27, 2021

Install multiple versions of JDK and switch between them via CLI on MAC OSX:

(Updated to include newer JDK versions)

1.11: https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html
1.17: https://www.oracle.com/java/technologies/downloads/#JDK17


2) Add the following to the ~/.bashrc or ~/.zshrc
#Set JAVA_HOME to latest version of JAVA_HOME (recommended)
export JAVA_HOME=$(/usr/libexec/java_home)
 

#Set alias options to dynamically change JAVA_HOME to particular JDK
alias jdk6=
' export JAVA_HOME=$(/usr/libexec/java_home -v 1.6.0) '
alias jdk7=' export JAVA_HOME=$(/usr/libexec/java_home -v 1.7.0) '
alias jdk8=' export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0) '
alias jdk11=' export JAVA_HOME=$(/usr/libexec/java_home -v 11) '
alias jdk17=' export JAVA_HOME=$(/usr/libexec/java_home -v 17) '



3) To switch between the versions of JDK, run the command jdkXX, for example:

#Default version as listed above will always set the JAVA_HOME to the latest version as determined by java_home:
$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
 

$ jdk6
$ java -version
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-468-11M4833)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-468, mixed mode)
 

$ jdk7
$ java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)

jdk11
$ java -version
java version "11.0.11" 2021-04-20 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.11+9-LTS-194)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.11+9-LTS-194, mixed mode)

$ jdk17
$ java -version
java version "17" 2021-09-14 LTS
Java(TM) SE Runtime Environment (build 17+35-LTS-2724)
Java HotSpot(TM) 64-Bit Server VM (build 17+35-LTS-2724, mixed mode, sharing)



Monday, August 10, 2020

Show count and instance IDs of existing EC2 instances in all regions of AWS:

I'm kicking myself for not posting this earlier in my past life-- but here's a handy shell script that can list the number of instances in each region in AWS.


Show count and instance IDs of existing EC2 instances in all regions of AWS:


Single line:

Set my AWS profile to my personal account rather than work.  
To setup, use aws --profile personal configure   

$ export aws_profile=personal


If the buffer space can handle long entries, you can run this in a single line, otherwise there's a multi line below to run as a script.

    $ for i in $(aws --profile $aws_profile ec2 describe-regions --output json | grep "RegionName" | cut -d '"' -f4 | sort); do export buf=$(aws --profile $aws_profile ec2 --region $i describe-instances --output json | grep InstanceId | cut -d '"' -f4); export buf_num=$(echo $buf | grep -c .); echo "=== $i -> $buf_num instance(s) ===";echo $buf ; done

    Multi Line:

    Good for placing into a script to run, also listed this way for readability:
    1. #!/bin/bash export aws_profile=personal for i in $(aws --profile $aws_profile ec2 describe-regions --output json| grep "RegionName" | cut -d '"' -f4 | sort); do export buf=$(aws ec2 describe-instances \ --profile $aws_profile \ --region $i \ --output json | \ grep InstanceId | \ cut -d '"' -f4); export buf_num=$(echo $buf | grep -c .); echo "=== $i -> $buf_num instance(s) ==="; echo $buf; done

    Sample Output:

    1. === ap-northeast-1 -> 0 instances === === ap-northeast-2 -> 0 instances === === ap-south-1 -> 0 instances === === ap-southeast-1 -> 0 instances === === ap-southeast-2 -> 0 instances === === ca-central-1 -> 0 instances === === eu-central-1 -> 0 instances === === eu-north-1 -> 0 instances === === eu-west-1 -> 0 instances === === eu-west-2 -> 0 instances === === eu-west-3 -> 0 instances === === sa-east-1 -> 0 instances === === us-east-1 -> 0 instances === === us-east-2 -> 0 instances === === us-west-1 -> 0 instances === === us-west-2 -> 1 instances === i-012345678901234ab

    Friday, February 28, 2020

    Backing up dot files in my home folder

    In spending some time with customizing my machine, I have some heavily modified configuration files within my home folder.  As a good measure, here's a way to help backup dot files in your home folder:

    $ tar cvfz my_dotfile_backup-$(date +"%Y-%m-%d").tar.gz --exclude .file_to_exclude --exclude .vscode  ~/\.*

    The above will:
      • c = create a tarball
      • v = verbose
      • f = write the output to the specificed file
      • z = compress the output file with gzip. 
      • Output filename will be "my_dotfile_backup-" + the date the command was run in YYYY-MM-DD format + ".tar.gz"
      • Exclude files matching .file_to_exclude, and .vscode
      • ~ = My home folder
      • \.* Escaped dot character then wildcard (meaning the filename needs to start with a .)
    Here's an example output of when the command above was run:

    $ ls -l my_dot*

    -rw-r--r--  1 arojas  staff  30093272 Feb 28 12:17 my_dotfile_backup-2020-02-28.tar.gz

    Monday, February 10, 2020

    Update Sublime Text to automatically default a particular filetype



    Found this nugget today on Stack Overflow:
    https://stackoverflow.com/questions/7574502/set-default-syntax-to-different-filetype-in-sublime-text-2

    In a nutshell, Colin R a user from Stack Overflow suggested that the following steps can be used to set the defaults for all future new files opened in Sublime Text, which is much easier than having to hack around the JSON preferences.

    In a nutshell, Sublime Text -> View -> Syntax -> Open all with Current Extension As... ->  Select default option.

    Not exactly sure why certain options aren't available as a default, will continue digging into that:

    Thursday, October 24, 2019

    Windows 10 and EFI System Partitions

    I recently was trying to swap some SSD drives between laptops and still keep the same OSes on the respective machines, which involved some backup and disk cloning.  That wasn't difficult, it was the point when I couldn't leave well enough alone, I saw one of the SSD drives with ~ 500MB of a FAT32 partition that was unused, so I figured I could move around some partitions using a partition editor to shuffle up the hidden partitions, and expand the main OS partition.  Well that was well and good until I tried slightly extending the EFI partition, and that broke a lot of stuff.   Then I realized the hard way that the EFI partition is a special partition that can't be cloned to from another disk image that has a good EFI partition.  (I didn't wan't to clone the entire drive again because there was more work I did on the new system that wasn't on the backup, silly me).

    Thankfully, digging around the interwebs, I was able to find some resources from a few sites about EFI partitions and how to unfubar oneself.  (Credits and links to the original sites below):


    Per Wikipedia: https://en.wikipedia.org/wiki/EFI_system_partition:
    "The EFI (Extensible Firmware Interface) system partition or ESP is a partition on a data storage device (usually a hard disk drive or solid-state drive) that is used by computers adhering to the Unified Extensible Firmware Interface (UEFI)."


    EFI should really be renamed Eventually Fubared Instantly.



    If the EFI partition ever gets nuked, wrecked, or just plain fubar, consider running through these steps:


    To Delete the EFI System Partition in Windows 10:
    1. If you can't boot the system perform step 1a, then go to step 2.  If you can boot the system, skip step 1a and continue with step 1b:.

    1a. Boot using a Windows 10 USB Key, selecting Repair;  Go to Advanced Tools and select a Command Prompt.  

    1b. On the Start menu find and run the Command Prompt as Administrator

    2. Run DISKPART, the Windows Disk Partition Tool
    C:\> diskpart

    On the DISKPART> prompt, go through the following steps:
    3. List the disks that are detected:
    DISKPART> list disk

    4. After identifying the main disk containing the EFI partition (or where it used to be) select it:
    DISKPART> select disk 1

    5.List the disk partitions to identify which partition the EFI partition was or the partition you would like it to be:
    DISKPART> list part

    6. Select the partition:
    DISKPART> select part 1

    7. Delete the partition:
    DISKPART> delete part



    To Create the EFI System Partition in Windows 10:
    1. If you can't boot the system perform step 1a, then go to step 2.  If you can boot the system, skip step 1a and continue with step 1b:.

    1a. Boot using a Windows 10 USB Key, selecting Repair;  Go to Advanced Tools and select a Command Prompt.  

    1b. On the Start menu find and run the Command Prompt as Administrator

    2. Run DISKPART, the Windows Disk Partition Tool

    On the DISKPART> prompt, go through the following steps:
    3. List the disks that are detected:
    DISKPART> list disk

    4. After identifying the main disk containing the EFI partition (or where it used to be) select it:
    DISKPART> select disk 1

    5.List the disk partitions to identify which partition the EFI partition was or the partition you would like it to be:
    DISKPART> list part

    6. Select the partition:
    DISKPART> select part 1

    7. Create the partition:
    DISKPART> create partition efi

    8. Format the partition to FAT32:
    DISKPART> format quick fs=fat32

    9. Identify the volume where the Windows OS is installed (i.e. C:\WINDOWS).  Note the drive letter here may be different than C, this may be temporary:
    DISKPART> list volume

    10. Exit Diskpart and run the tool to copy the needed files to the EFT partition, noting the drive letter where Windows was installed on Step 9 above:  (Replace the D below with the proper drive letter):
    C:\> bcdboot D:\windows

    11:  Close out the command prompt and reboot the system, you should be good to go!


    Credit to AnyRecover for their original instructions:
    https://www.anyrecover.com/hard-drive-recovery-data/how-to-create-and-delete-efi-system-partition-in-windows/#tip1

    Tuesday, September 17, 2019

    Testing Gzipped Tarball in Bash

    Originally sourced from stack exchange. modified a bit:
    https://unix.stackexchange.com/questions/129599/test-tar-file-integrity-in-bash

    Modified from the source link above, the following command will iteratively test each .tgz file within the current directory for errors, and if any are detected, will report an error.

    $ for i in *.tgz; do echo "Testing $i..."; if tar xOfz $i &> /dev/null;  then echo "Error with tarball $i"; fi; done


    Options used:
     x  - Extract from archive
     O  - Write output to standard out instead of disk
     f  - Read input from a file
     z  - Tarball is compressed with Gzip (Some OSes may automatically detect Gzip and not need this option)
     &> /dev/null  -   Redirect both stdout and stderr to /dev/null