Home Page
Home
Search:

Welcome to the digital realm of Jeffrey Riaboy. Here, you’ll find a curated collection of my endeavors, musings, updates, and assorted reflections. As a self-taught programmer and avid computer enthusiast, I work in C++ as a favorite choice, though the realities of our digital world have led me to become proficient in dozens of other languages.

Programming has been a lifelong journey for me which I have been hacking on since before I can rememember. It is my passion, profession, first love, and my constant challenge, offering both fulfillment and frustration in equal measure.

This space is dedicated to sharing insights, innovations, and inspirations I’ve gathered along the way. My aim is for you to discover something here that sparks your interest or serves your needs, as that is the driving force behind my commitment to compile and share this content. Dive in and explore. Your presence is highly appreciated.

Dakusan~
The original (well... last) intro page to my website before this became the home. It is a flash portal to my personal sites of the past.
Intro
[1999-2001?] My ancient NES emulator made in Visual Basic (which was made to prove the power and flexibility [not speed] of the language).
HyNes
[2002] A chronicle of my experiences and tinkering from early ’02 to early ’04 on an addictive yet horribly crappy MMORPG. Site also has some nice “hacking”/reverse engineering tutorials.
Ragnarok Hacking
I’ve temporarily set this to link to the Projects section of this website until I’m ready to announce the new website this will link to.
Projects
Updates Archive

I updated the Checking permissions before updating Flatpaks post with the following changes:

  • Split post into the following sections:
    • My final updated copy of the script
    • List of the changes I made from the AI produced script
    • The commands I gave the AI
    • The final script the AI produced
  • Made more updates to the final script:
    • Added “askQuestion” function since there are now multiple places in the script that ask questions
    • Added $NoNewline to outputColor (for “askQuestion” function)
    • Changed get-updates command from “flatpak remote-ls --updates” to “echo n | flatpak update” (with a regex extraction). Also now confirms the update list with the user.
Updated:11/21/24

I added a live “total progress” progress bar to the MD5Sum List Script. It utilizes a temp fifo file and a backgrounded “pv”.

Updated:04/15/24
The nulltypes system has been overhauled so all null types are under a generic type named NullType in the top level package. For example, instead of using nulltypes.NullUint8 you would now use NullType[uint8]. This also really helped clean up the null types code. This is a version breaking change, hence the minor version number update.

Other minor changes:
  • Readme file and package information has been updated with the following changes:
    • The type support section has been redone for clarity
    • The structs in the code examples have had the members labeled to explain their used supported type
  • Marshled JSON strings are now properly json escaped
  • Added bypass for my RawBytes bug fix, now that it has been fixed in go v1.23
  • Removed test case that is no longer compatible with go 1.21+
Download Content
Post Archive
RSS Feed
My updated Tmux config

Tmux is a great alternative to gnu screen. I’ve previously posted my cygwin tmux config in 2020, and I figured I’d update with my additions since then, including running under real linux. So here it is. Its features include:

  • Uses ctrl+a, like gnu screen, instead of ctrl+b
  • Mouse interaction is enabled
  • Tab bar/windows:
    • Current tab is highlighted in cyan
    • Cycle through tabbed windows with a click on its tab or ctrl+shift+alt+arrow_keys
    • Reorder tabbed windows with a drag of its tab or alt+arrow_keys
    • ctrl+a,/ to rename a tab on the tab bar
    • Create new window with ctrl+a,c
  • Panes
    • Create split panes with vertical=ctrl+a,| and horizontal=ctrl+a,- (and start in the cwd)
    • Move around panes with click or ctrl+shift+arrow_keys
    • Resize panes by dragging on the separator bar or use alt+shift+arrow_keys
    • Swap panes directionally with alt+arrow_keys
    • Panes automatically resize to fit OS window
  • Clipboard/highlighting
    • Copy text to clipboard by highlighting it
    • Paste from clipboard with right click
    • Middle mouse button+drag highlights and copies too. I did this since nano takes over normal mouse click+drag.
  • Copy mode
    Key*Action
    Ctrl+PageUpStart copy mode, scroll page up
    Ctrl+PageDownStart copy mode
    EnterCopies selected text to clipboard and ends copy mode
    Shift+(Left/Right)Starts selection mode on previous/next character (or continues selection navigation like normal left/right)
    EscapeIf something is selected, end current selection. Otherwise, exit copy mode
    Ctrl+(Home/End)Go to top/bottom of the buffer
    Ctrl+(Left/Right)Moves to previous/next word like when not in copy mode
    Ctrl+F3, Ctrl+F3Start incremental search in copy mode
    F3/Shift+F3Search next/previous (Note, if you use gnome-terminal it may override this)
    * When bolded/cyan the key is for when in copy mode
  • Start the session on the current bash directory
  • Escape time is lowered for quicker response to copy mode access

To use this, save the file to ~/.tmux.conf

#Mouse interaction
set -g mouse on

#Lower escape timing from 500ms to 50ms for quicker response to copy-mode access
set -s escape-time 50

#Window always takes up largest possible max size
set-window-option -g aggressive-resize

#Highlight active window in tab-bar at bottom in cyan
set-window-option -g window-status-current-style bg=cyan

#Reorder windows in status bar by drag & drop
bind-key -n MouseDrag1Status swap-window -t=

#Copy to clipboard on text selection
bind -Tcopy-mode MouseDragEnd1Pane { send -X copy-selection-and-cancel; run-shell -b "tmux show-buffer | xclip -selection clipboard" }

#Paste from clipboard with right click
bind-key -n MouseDown3Pane { run-shell 'tmux set-buffer -b winclip "$(xclip -o -selection clipboard)"'; paste-buffer -db winclip }

#Middle drag runs copy (Since some programs like nano take control of the mouse for normal selection)
bind -n MouseDrag2Pane copy-mode -M
bind -Tcopy-mode MouseDragEnd2Pane { send -X copy-selection-and-cancel; run-shell -b "tmux show-buffer | xclip -selection clipboard" }
bind-key -n MouseDown2Pane run-shell -b "echo '' > /dev/null"

#Remap prefix to Control+a
set -g prefix C-a
unbind C-b
#bind 'C-a C-a' to type 'C-a'
bind C-a send-prefix

#Start in CWD when creating or splitting tabs; move the splitting planes keys to | and -
bind '|' split-window -h -c '#{pane_current_path}'  # Split panes horizontal
bind '\' split-window -h -c '#{pane_current_path}'  # Split panes horizontal
bind '-' split-window -v -c '#{pane_current_path}'  # Split panes vertically
bind c new-window -c '#{pane_current_path}' # Create new window
unbind '"'
unbind %

#Select next/prev window with Ctrl+Shift+Alt+(Left|Right)
bind-key -n C-S-M-Right next-window
bind-key -n C-S-M-Left previous-window

#Reorder panes with Alt+arrow
bind-key -n M-Left swap-pane -t '{left-of}' -d
bind-key -n M-Right swap-pane -t '{right-of}' -d
bind-key -n M-Up swap-pane -t '{up-of}' -d
bind-key -n M-Down swap-pane -t '{down-of}' -d

#Switch panes using Ctrl+shift+arrow - I rather would have used Ctrl+arrow, but that can interfeer with other programs like nano
bind -n C-S-Left select-pane -L
bind -n C-S-Right select-pane -R
bind -n C-S-Up select-pane -U
bind -n C-S-Down select-pane -D

#Resize panes using Alt+Shift+arrow
bind-key -n M-S-Up resize-pane -U 1
bind-key -n M-S-Down resize-pane -D 1
bind-key -n M-S-Left resize-pane -L 1
bind-key -n M-S-Right resize-pane -R 1

#Ctrl+F3 starts searching in copy mode
bind -n C-F3 { copy-mode; command-prompt -T search -ip'(search down)' -I'#{pane_search_string}' { send -X search-forward-incremental '%%' } }

#prefix, / -- Renames window, but starts blank
bind-key / command-prompt "rename-window '%%'"

#---Copy mode---

#Enter key in copy mode copies to clipboard and ends copy mode
bind-key -Tcopy-mode Enter { send -X copy-selection-and-cancel; run-shell -b "tmux show-buffer | xclip -selection clipboard" }
#Ctrl+PageUp = Copy mode, scroll page up
bind-key -n C-PageUp copy-mode -u
#Ctrl+PageDown = Copy mode
bind-key -n C-PageDown copy-mode 
#Shift+Left = Start selection mode on previous character (if selection mode is active, do not restart selection)
bind-key -Tcopy-mode S-Left { run-shell "tmux display-message -p \"#{selection_active}\" | awk '{print ($0 == 1) ? \"\" : \"tmux send -X begin-selection\"}' | sh"; send -X cursor-left }
#Shift+Right = Start selection mode on current character (if selection mode is active, do not restart selection)
bind-key -Tcopy-mode S-Right { run-shell "tmux display-message -p \"#{selection_active}\" | awk '{print ($0 == 1) ? \"\" : \"tmux send -X begin-selection\"}' | sh"; send -X cursor-right }
#Escape = If something is selected, end current selection. Otherwise, exit copy mode.
bind-key -Tcopy-mode Escape run-shell "tmux display-message -p \"#{selection_active}\" | awk '{print ($0 == 1) ? \"tmux send -X clear-selection\" : \"tmux send -X cancel\"}' | sh"
#Ctrl+Home = Go to top of buffer
bind-key -Tcopy-mode C-Home send -X history-top
#Ctrl+End = Go to bottom of buffer
bind-key -Tcopy-mode C-End send -X history-bottom
#Ctrl+Left = Previous work
bind-key -Tcopy-mode C-Left send -X previous-word
#Ctrl+Right = Next work
bind-key -Tcopy-mode C-Right send -X next-word
#Ctrl+F3 = Start incremental search
bind -Tcopy-mode C-F3 { command-prompt -T search -ip'(search down)' -I'#{pane_search_string}' { send -X search-forward-incremental '%%' } }
#F3 = Search next (Note, if you use gnome-terminal it may override this)
bind -Tcopy-mode F3 send -X search-again
#Shift+F3 = Search previous (Note, if you use gnome-terminal it may override this)
bind -Tcopy-mode S-F3 send -X search-reverse
Taking screenshots of Google Maps [Street View]
The following are the steps to take a screenshot without overlays inside Google Maps Street View or Google Maps.
  1. Collapse the left side window if visible with the arrow
  2. Press F11 to go full screen
  3. Open up the dev console [F12]
    Optional: You may need to open the dev console in another window (undocked). Leaving it docked with the window could cause problems.
  4. Run the following command in the dev console:
    document.querySelectorAll('*').forEach(el => el.style.display='none');
    for(let c=document.getElementsByTagName('canvas')[0];c.parentNode;c=c.parentNode) c.style.display='';
    This should be pretty foolproof, but you may need to change the [0] to another number if the primary canvas element isn't the first canvas.

    If that doesn't work, you can also try the following, which is a bit more specialized, but may not catch all the elements on the screen (including the Google logo).
    document.querySelectorAll('[jsaction^="mouseover:"],[jsaction^="mouseout:"],button,[role="navigation"],.scene-footer-container,#omnibox-container,[aria-label="Sign in"],[aria-label="Google apps"]')
    	.forEach(el => el.style.display = 'none');
    document.querySelectorAll('[aria-label="Interactive map"]').forEach(el => el.parentNode.style.display='none');
  5. Close the dev console (or Alt+tab back to the chrome window if undocked)
  6. Move the mouse to the sky (or a portion that won't trigger possible popups)
  7. Wait for a few seconds for icons to disappear
  8. Take screenshot
Goodbye Pidgin
You served me well for 15 years.