if( document.querySelector( '.myDivClass' ) !== null )
{
// it exists
}
for( var x in window )
{
if( window[x] instanceof Function) console.log( x );
}
for( var x in document )
{
if( document[x] instanceof Function) console.log( x );
}
for( var property in element )
{
console.log( element[property] );
}
let score = 91;
let grade = (score >= 90) ? "A" :
(score >= 80) ? "B" :
(score >= 70) ? "C" :
(score >= 60) ? "D" : "F";
console.log( grade ); // output: A
// Function to get scrollbar width
function getScrollbarWidth( )
{
const outer = document.createElement( 'div' );
outer.style.visibility = 'hidden';
outer.style.overflow = 'scroll';
outer.style.position = 'absolute';
outer.style.top = '-9999px';
outer.style.width = '100px';
outer.style.height = '50px';
document.body.appendChild( outer );
const inner = document.createElement( 'div' );
inner.style.height = '200px'; // Force scrolling
outer.appendChild( inner );
const scrollbarWidth = outer.offsetWidth - outer.clientWidth;
document.body.removeChild( outer );
return scrollbarWidth;
}
The **Event Loop** is the mechanism that allows JavaScript to perform non-blocking operations despite being single-threaded. It manages the execution stack, the heap (memory allocation), and the queue system.
setTimeout(), AJAX, DOM events).setTimeout callbacks) waiting to be pushed to the stack.queueMicrotask(). The event loop prioritizes draining the Microtask Queue *before* checking the Callback Queue.A zero-delay setTimeout(fn, 0) doesn't run immediately. It runs only after the current stack is completely empty, ensuring asynchronous tasks wait for synchronous code to finish.
this binding)null or undefined)
#] root@web:~ 21:47:16 0 [# cat /usr/sbin/apacheAccessLog.sh
#!/bin/bash
filename="/var/log/apache2/access.log.1"
hostname="localhost"
username="apache"
password="******"
database="apache"
sqltable="accessLog"
mysql -h${hostname} -u${username} -p${password} ${database} << EOQ
LOAD DATA LOCAL INFILE "${filename}" INTO TABLE $sqltable
FIELDS TERMINATED BY '\t'
EOQ
mysql> select substring( datetime, 1, 10 ) as dt, filename as fn, count(*) as ct from accessLog where datetime > date_sub( now( ), interval 30 day ) and filename = '/var/www/html/us/panes/index.html' group by dt, fn; mysql> select substring( datetime, 1, 10 ) as dt, filename as fn, substring( request, 1, 64 ) as rq, count(*) as ct from accessLog where datetime > date_sub( now( ), interval 30 day ) and filename = '/var/www/html/us/panes/index.html' group by dt, fn, rq order by ct desc; mysql> select * from accessLog where datetime > date_sub( now( ), interval 1 day) and status = 404; mysql> select count(*), substring( request, 1, 64 ), filename from accessLog where datetime > date_sub( now( ), interval 1 day) and status = 404 group by request, filename order by count(*) desc; mysql> select * from accessLog where datetime > date_sub( now( ), interval 1 day) and status not in( 401, 404 ); mysql> select count(*), substring( request, 1, 64 ), filename from accessLog where datetime > date_sub( now( ), interval 1 day) and status not in( 401, 404 ) group by request, filename order by count(*) desc; mysql> select filename, count(*) from accessLog where datetime > date_sub( now( ), interval 1 day ) and status <> 404 group by filename order by count(*) desc; mysql> select filename, count(*) from accessLog where datetime > date_sub( now( ), interval 1 day ) and status not in( 401, 404) group by filename order by count(*) desc; mysql> select substr( filename, 1, 29 ), count(*) from accessLog where datetime > date_sub( now( ), interval 1 day ) and status not in( 401, 404 ) and filename regexp '/var/www/html/us/kohlmeyer/[cekp]' group by substr( filename, 1, 29 ) order by count(*);

.sh). These scripts automate complex or repetitive tasks, combining multiple system commands with logical programming constructs like loops (for, while) and conditional statements (if/else).
ls, grep, find, awk, etc.
|): It excels at chaining commands, where the output of one command serves as the input for the next. This allows for complex data processing.
$PATH, $HOME) that define the session, influence program behavior, and determine where the system looks for executable files.
>) or use a file as input (<).
In essence, BASH is the glue that connects the user, the system utilities, and the operating system kernel, making it an indispensable tool for system control and automation.
shopt -s expand_aliases). This is why you can use an alias to override almost anything, including built-ins, but it is not a part of the standard PATH search.
./script.sh or /bin/ls), BASH assumes you provided the path and tries to execute that file directly.
$PATH. This is a common method for overriding system commands (e.g., creating a function named ls that always includes your favorite options).
cd, echo, read). They are faster than external executables.
$PATH every time.
$PATH environment variable in order, executing the first matching file it finds.
command_not_found_handle: If all searches fail, BASH calls this function if it is defined (often used by distributions to suggest packages to install).
| Built-in Command | Purpose | Precedence Used |
|---|---|---|
builtin <name>
|
Forces BASH to use the shell built-in of that name, bypassing aliases and functions. | Forces (4) Shell Built-in |
command <name>
|
Forces BASH to use a built-in or search the $PATH, bypassing aliases and functions.
|
Skips (1) & (3), executes (4) or later. |
/path/to/command
|
Forces BASH to use a specific executable file on disk, bypassing all other lookups. | Forces (2) Explicit Path |
The provided cleanup and debugging tools (unalias, unset, hash -d, hash -t) are the correct BASH commands for managing the namespace and the command hash table. Knowing how to use hash -t to check a cached path is particularly useful for debugging stale path issues.
#] kemiko@box:~ 09:47:15 0 [# cat .xinitrc /usr/bin/xmodmap /home/kemiko/.xmodmap #] kemiko@box:~ 09:47:16 0 [#
#] kemiko@box:~ 09:47:18 0 [# cat .xmodmap ! Swap caps lock and escape...awesome for VI, but can be a pain for other apps remove Lock = Caps_Lock keysym Escape = Caps_Lock keysym Caps_Lock = Escape add Lock = Caps_Lock #] kemiko@box:~ 09:47:19 0 [#
#] kemiko@box:~ 12:55:36 0 [# cat .inputrc set editing-mode vi set keymap vi-command set enable-bracketed-paste Off # fixes/changes full line paste to the shell "executing" the newline...BASH 4.4 and newer #] kemiko@box:~ 12:55:37 0 [#
#] kemiko@box:~ 09:49:10 0 [# cat .vimrc " color scheme to use color kemiko set paste set softtabstop=2 set expandtab set shiftwidth=2 " macro definitions let @y = "YP" let @z = "YPj" syntax on set list au BufRead /tmp/psql.edit.* set syntax=sql " set listchars=tab:>-,trail:~,extends:>,precedes:<,nbsp:␣ " set listchars=tab:→\,trail:•,extends:»,precedes:«,eol:↲,nbsp:␣ set listchars=tab:➜➜,trail:∙,precedes:«,extends:»,eol:↲,nbsp:␣ syntax match NonAscii "[^\x00-\x7F]" highlight NonAscii ctermbg=red guibg=red " Highlight tabs as errors. match Error /\t/ command! NonAscii /\v[^\x00-\x7F] command! SpaceAll /^ \+$/ command! SpaceEnd / \+$/ " SOP: System Integrity - Automatic Squirrel/Graffiti Removal " Decided against because oftag content "autocmd BufWritePre /var/www/html/us/panes.dev/* :%s/\s\+$//e "autocmd BufWritePre /var/www/html/us/panes.dev/**/* :%s/\s\+$//e "autocmd BufWritePre */panes.dev/* :%s/\s\+$//e #] kemiko@box:~ 09:49:11 0 [#
#] kemiko@box:~ 09:53:31 0 [# cat .vim/colors/kemiko.vim " local syntax file - set colors on a per-machine basis: " vim: tw=0 ts=2 sw=2 " Vim color file " Maintainer: Kent M Kohlmeyer " Last Change: 2018-09-05 hi clear set background=dark if exists("syntax_on") syntax reset endif let g:colors_name = "kemiko" highlight Comment term=bold ctermfg=darkgray highlight Constant ctermfg=14 cterm=none guifg=#00ffff gui=none highlight Identifier ctermfg=6 guifg=#00c0c0 highlight Statement ctermfg=3 cterm=bold guifg=#c0c000 gui=bold highlight PreProc ctermfg=10 guifg=#00ff00 highlight Type ctermfg=2 guifg=#00c000 highlight Special ctermfg=12 guifg=#0000ff highlight Error ctermbg=9 guibg=#ff0000 highlight Todo ctermfg=4 ctermbg=3 guifg=#000080 guibg=#c0c000 highlight Directory ctermfg=2 guifg=#00c000 highlight StatusLine ctermfg=11 ctermbg=12 cterm=none guifg=#ffff00 guibg=#0000ff gui=none highlight Normal guifg=#ffffff guibg=#000000 highlight Search ctermbg=3 guibg=#c0c000 #] kemiko@box:~ 09:53:32 0 [#
#] kemiko@box:~ 10:16:51 0 [# cat ~/.ssh/config Host * ServerAliveInterval 600 ServerAliveCountMax 5 #] kemiko@box:~ 10:16:52 0 [#
#] kemiko@box:~ 09:49:07 0 [# cat .gdbinit # .gdbinit; 2024-12-09; Kent M Kohlmeyer (kemiko) # alias gdb='gdb --quiet' # show, info, help # b = break # d = delete # l = list # n = next # q = quit # r = run # ! = rerun history command #for suggestion/completion...even shows user defines # set prompt (gdb) set prompt \033[1m(gdb) \033[0m set height 36 set listsize 36 set pagination 0 # on|off set print array # on|off set print pretty set history filename ~/.gdbhist # on|off set history save # on|off set history expansion set history size 256 define clr shell clear end define pin shell printf "\033[%d;%dH" "$arg0" "$arg1" end #] kemiko@box:~ 09:49:08 0 [#
#] kemiko@box:~ 00:39:53 0 [# cat .bashrc # generic/default lines removed for this example umask 0002 LS_COLORS='di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31:mi=0:ex=35:*.rpm=90' export LS_COLORS set -o vi bind -m vi-command 'Control-l: clear-screen' bind -m vi-insert 'Control-l: clear-screen' export EDITOR='/usr/bin/vi' export PAGER='/usr/bin/less -SX' PATH=${PATH}:/data/bin fnFileBase( ) { BASENAME=$(basename ${1}) echo ${BASENAME} | awk -F'.' '{print $1}' } fnFileExt( ) { BASENAME=$(basename ${1}) echo ${BASENAME##*.} } fnDate( ) { date +%Y%m%d } fnDateLog( ) { date +%Y-%m-%d } fnTime( ) { date +%H%M%S } fnTimeLog( ) { date +%H:%M:%S } fnAbsoluteValue( ) { if [ "${1}" -eq "${1}" ] 2>/dev/null then [ $1 -lt 0 ] && echo $((-$1)) || echo $1 else : fi } # return 1 = true and 0 = false fnInteger( ) { local integer="$1" if [ "${integer}" -eq "${integer}" ] 2>/dev/null then return 1; else return 0; fi } if [ -f ~/.defines ]; then . ~/.defines fi if [ -f ~/.aliases ]; then . ~/.aliases fi if [ -f ~/.functions ]; then . ~/.functions fi function fnPrompt { EXITSTATUS="$?" BOLD="\[\e[1m\]" RED="\[\e[1;31m\]" BLACK="\[\e[30;1m\]" GREEN="\[\e[32;1m\]" BLUE="\[\e[34;1m\]" YELLOW="\[\e[33;1m\]" WHITE="\[\e[37;1m\]" GRAY="\[\e[90;1m\]" OFF="\[\e[m\]" # 1. Define the non-printing title sequence inside the function TITLE_PROMPT='\[\e]0;\u@\h:\w\a\]' # Define or just use the string directly # 2. Define the visible part of the prompt PROMPT="${GRAY}#] ${RED}\u${GRAY}@${YELLOW}\h${GRAY}:${BLUE}\w ${WHITE}\t" # 3. Inject TITLE_PROMPT right before the PROMPT variable in the PS1 assignment if [ "${EXITSTATUS}" -eq 0 ] then PS1="${TITLE_PROMPT}${PROMPT} ${GREEN}0 ${GRAY}[#${OFF} " else PS1="${TITLE_PROMPT}${PROMPT} ${RED}1 ${GRAY}[#${OFF} " fi PS2="${BOLD}>${OFF} " } PROMPT_COMMAND=fnPrompt # PROMPT_COMMAND runs just milliseconds before your prompt appears #] kemiko@box:~ 00:39:54 0 [#
#] kemiko@box:~ 12:56:56 0 [# cat .aliases # .aliases; 2024/06/17; Kent M Kohlmeyer (kemiko) alias cp='cp -i' alias mv='mv -i' alias rm='rm -i' alias ls='ls -latr' #alias grep='grep -Iind skip' # -n, --line-number can get annoying especially when piping to another alias grep='grep -Iid skip' alias www-data="chown -R www-data:www-data ." alias swpls='ls -latr .*.sw?' alias swpfnd='find . -name ".*.sw?"' alias backup='/usr/local/bin/backup.sh' alias du='du -h --max-depth=1 . | sort -h' alias job='fnJob' alias tsls='ls -l --time-style=+%Y-%m-%d@%H:%M' alias tssort='sort -k6,6' # tsls | tssort alias free='/usr/local/bin/free.sh' alias topc="top -o COMMAND" # sort by field "%COMMAND"...if already in top press 'C' alias topm="top -o %MEM" # sort by field "%MEM"...if already in top press 'M' alias topp="top -o %CPU" # sort by field "%CPU"...if already in top press 'P' alias topu="top -o USER" # sort by field "%USER"...if already in top press 'U' alias less='/usr/bin/less -SX' # --chop-long-lines, --no-init alias gdb='gdb -q' # -quiet #] kemiko@box:~ 12:56:57 0 [#
#] kemiko@box:~ 22:39:27 0 [# cat .defines # .defines; 2024/06/17; Kent M Kohlmeyer (kemiko) BOLD="\e[1m" BASE="\e[0m" BLK="\e[30;1m" RED="\e[31;1m" GRN="\e[32;1m" YLW="\e[33;1m" BLU="\e[34;1m" WHT="\e[37;1m" GRY="\e[90;1m" #] kemiko@box:~ 22:39:28 0 [#
#] kemiko@box:~ 11:22:03 0 [# cat .functions # .functions; 2024/06/17; Kent M Kohlmeyer (kemiko) fnFileExtension( ) { BASENAME=$(basename ${1}) echo ${BASENAME##*.} } fnFileBasename( ) { basename=$(basename ${1}) extension=$(fnFileExtension $basename) echo $basename | awk -F".$(echo $extension)" '{print $1}' } fnDate( ) { date +%Y%m%d } fnDateLog( ) { date +%Y-%m-%d } fnTime( ) { date +%H%M%S } fnTimeLog( ) { date +%H:%M:%S } fnAbsoluteValue( ) { if [ "${1}" -eq "${1}" ] 2>/dev/null then [ ${1} -lt 0 ] && echo $((-${1})) || echo ${1} fi } function fnPrompt { # In your initialization file (.bashrc) source this function and add "PROMPT_COMMAND=fnPrompt" EXITSTATUS="$?" BOLD="\[\e[1m\]" RED="\[\e[1;31m\]" BLACK="\[\e[30;1m\]" GREEN="\[\e[32;1m\]" BLUE="\[\e[34;1m\]" YELLOW="\[\e[33;1m\]" WHITE="\[\e[37;1m\]" GRAY="\[\e[90;1m\]" OFF="\[\e[0m\]" PROMPT="${GRAY}#] ${RED}\u${GRAY}@${YELLOW}\h${GRAY}:${BLUE}\w ${WHITE}\t" if [ "${EXITSTATUS}" -eq 0 ] then PS1="${PROMPT} ${GREEN}0 ${GRAY}[#${OFF} " else PS1="${PROMPT} ${RED}1 ${GRAY}[#${OFF} " fi PS2="${BOLD}>${OFF} " export PS1 PS2 } function fnJob( ) { # Awesome function for bringing a background job, by name NOT number, to the foreground... # I couldn't use an alias (issues with pipes, etc) or shell script ("jobs" command doesn't work) # An argument, jobs command string, must be entered..."-/+" work like with the "fg" command # The first "match" will be brought to the foreground # If there isn't a "match" in the background the argument entered will be opened with "vi" if [ ${#} -eq 0 ] then # Can't use the standard shell script "${0}" to get the function name printf '\e[1mUsage: %s <filename>\n' "${FUNCNAME[0]}\e[0m" return 1 fi jobNumber=$(jobs | "grep" "${1}" | cut -d] -f1 | cut -c2- | head -n 1) fileName=$("ls" | "grep" "${1}" | head -n 1) if [ "${jobNumber}" != "" ] then fg "${jobNumber}" elif [ "${fileName}" != "" ] then eval vi "${fileName}" else eval vi "${1}" fi } function fnDecodeURL( ) { echo "$@" \ | sed -E 's/%([0-9a-fA-F]{2})/\\x\1/g;s/\+/ /g' } function fnEncodeURL( ) { # Conform RFC 3986 echo "$@" \ | sed \ -e 's/ /%20/g' \ -e 's/:/%3A/g' \ -e 's/,/%2C/g' \ -e 's/\?/%3F/g' \ -e 's/#/%23/g' \ -e 's/\[/%5B/g' \ -e 's/\]/%5D/g' \ -e 's/@/%40/g' \ -e 's/!/%21/g' \ -e 's/\$/%24/g' \ -e 's/&/%26/g' \ -e "s/'/%27/g" \ -e 's/(/%28/g' \ -e 's/)/%29/g' \ -e 's/\*/%2A/g' \ -e 's/\+/%2B/g' \ -e 's/,/%2C/g' \ -e 's/;/%3B/g' \ -e 's/=/%3D/g' } #] kemiko@box:~ 11:22:04 0 [#
#] kemiko@web:/usr/local/bin 18:52:28 0 [# cat termTitle.sh #!/bin/bash #set -x # termTitle.sh; 2025/10/11; Kent M Kohlmeyer (kemiko) # Initialize title parts title="" # Set options U="${USER:-$(whoami)}" H="${HOSTNAME:-$(hostname -s)}" P="${PWD:-$(pwd)}" T=$(tty) # Strip the leading "/dev/" using pure Bash expansion T=${T##/dev/} args=("$@") # Check if arguments are empty (no positional parameters passed) if [ ${#args[@]} -eq 0 ] # Use ${#args[@]} for robust array size check then # Assign the default options as SEPARATE array elements #args=("-h" "-t" "-p") # Instead set the default title as... title="${U}@${H}:${P}" echo title=$title echo -ne "\033]0;${title}\007" exit 0 fi # Print the arguments for debugging (using quotes for best practice) #echo "Arguments to process: ${args[@]}" # Loop through all elements of the array correctly for arg in "${args[@]}" do case "$arg" in -h|--host) title+="${H}:" ;; -p|--pwd) title+="${P}:" ;; -t|--tty) title+="${T}:" ;; -u|--user) title+="${U}:" ;; *) title+="$arg:" ;; esac done # Trim trailing colons title=$(echo "$title" | sed 's/:*$//') echo title=$title # Set terminal title echo -ne "\033]0;${title}\007" #] kemiko@web:/usr/local/bin 18:52:30 0 [#
#] kemiko@web:/usr/local/bin 08:51:35 0 [# cat backup.sh #!/bin/bash #set -x # backup.sh; 2017/07/18; Kent M Kohlmeyer (kemiko) # source environment file(s) . /usr/local/bin/.defines > /dev/null 2>&1 . /usr/local/bin/.functions > /dev/null 2>&1 if [ ${#} -eq 0 ] then printf "\e[1;29mUsage: %s <file>\e[0m\n" "${0}" exit 1 fi if [ ! -s ${1} ] then printf "\e[1;29mFile \"${1}\" does not exist with size!\e[0m\n" exit 1 fi dir=".backup" date=$(fnDate) file=$(basename ${1}) if [ -s ${file} ] then if [ ! -d ${dir} ] then mkdir ${dir} chmod 750 ${dir} fi cp -ip ${file} ${dir}/${file}.${date} chmod 440 ${dir}/${file}.${date} fi #] kemiko@web:/usr/local/bin 08:51:36 0 [#
#] kemiko@web:/usr/local/bin 20:56:51 0 [# cat integerTest.sh #!/bin/bash # integerTest.sh; 2025/09/21; Kent M Kohlmeyer (kemiko) if [ -n "${1}" ] && [ "${1}" -eq "${1}" ] 2>/dev/null then echo number else echo not a number fi #] kemiko@web:/usr/local/bin 20:56:53 0 [#
#] kemiko@web:/usr/local/bin 20:30:25 0 [# cat lines.sh #!/bin/bash #set -x # lines.sh; 2024/06/15; Kent M Kohlmeyer (kemiko) # display range of lines from a file # source defines . /usr/local/bin/.defines > /dev/null 2>&1 if [ ${#} -lt 3 ] then printf "${BOLD}Usage: $(basename ${0}) <file> <start line> <stop line>${BASE}\n" exit 1 fi if [ ! -s ${1} ] then printf "${BOLD}\"${1}\" is not a regular file with size!${BASE}\n" exit 1 fi if [ "${2}" -eq "${2}" ] 2>/dev/null && [ "${3}" -eq "${3}" ] 2>/dev/null then : else printf "${BOLD}\"${2}\" (start) and/or \"${3}\" (stop) is not an integer${BASE}\n" exit 1 fi if [ ${2} -le 0 ] || [ ${3} -le 0 ] then printf "${BOLD}\"${2}\" (start) and/or \"${3}\" (stop) can't be zero/negative${BASE}\n" exit 1 fi if [ ${3} -gt $(wc -l ${1} | cut -d' ' -f1) ] then printf "${BOLD}\"${3}\" (stop) shouldn't be greater than the file line count of \"$(wc -l ${1} | cut -d' ' -f1)\"${BASE}\n" exit 1 fi if [ "${2}" -gt "${3}" ] 2>/dev/null then printf "${BOLD}\"${2}\" (start) can't be greater than \"${3}\" (stop)${BASE}\n" exit 1 fi head -n ${3} ${1} | tail -n $(expr ${3} - ${2} + 1) #] kemiko@web:/usr/local/bin 20:30:26 0 [#
#] kemiko@web:/usr/local/bin 08:57:18 0 [# cat free.sh #!/bin/bash #set -x # 2024-07-26; free.sh; Kent M Kohlmeyer (kemiko) # This script shows memory usage in... # bytes, kibibytes, mebibytes, or gibibytes # Add seconds argument to pause until... # <enter> is pressed # don't echo key presses to screen stty -echo # don't show cursor tput civis trap 'tput cnorm; stty echo; exit 1' 0 1 2 15 # set defaults size=m seconds=86400 if [ ${#} -eq 0 ] then printf "\e[1mUsage: %s <b|k|m|g> [seconds]\e[0m\n" "${0}" exit 1 fi if [ ${1} != b ] && [ ${1} != k ] && [ ${1} != m ] && [ ${1} != g ] then printf "\e[1mArgument one, \"${1}\", is not \"b|k|m|g\"\e[0m\n" exit 1 else size=${1} fi # test if argument two is set if [ -z ${2+x} ] then : else # test if argument two is an integer if [ "${2}" -eq "${2}" ] 2>/dev/null then seconds=${2} else printf "\e[1mArgument two, \"${2}\", is not an integer\e[0m\n" exit 1 fi fi clear while [ 1 ] do printf "\e[1m%s\e[0m\n" "$(date '+%Y-%m-%d @ %H:%M:%S (%A)')" free -w${size} read -t ${seconds} done #] kemiko@web:/usr/local/bin 08:57:19 0 [#
#] kemiko@web:/tmp 23:47:18 0 [# cat glibc.c #include <stdio.h> #include <gnu/libc-version.h> int main( void ) { puts( gnu_get_libc_version ( ) ); return 0; } #] kemiko@web:/tmp 23:47:19 0 [#
#] kemiko@web:/usr/local/bin 09:13:01 0 [# cat highlight.sh #!/bin/bash #set -x # 2025-01-06; highlight.sh; Kent M Kohlmeyer (kemiko) # This script highlights pattern(s) in file(s) if [ ${#} -eq 0 ] then printf "\e[1mUsage: %s <regex> <file(s)>\e[0m\n" "${0}" exit 1 fi init=0 filesValid="" filesError="" errors=0 for file in "${@}" do echo file: ${file} if [ ${init} -eq 0 ] then init=1 else if [ -f ${file} ] then filesValid=$(printf "%s %s" "${filesValid}" "${file}") else errors=$(expr ${errors} + 1) filesError=$(printf "%s \"%s\"" "${filesError}" "${file}") fi fi done if [ ${errors} -gt 0 ] then printf "\e[1mError: %s file(s) are not valid...%s\e[0m\n" "${errors}" "${filesError}" exit ${errors} fi "egrep" -iIn --color=auto "${1}|$" ${filesValid} /dev/null exit 0 #] kemiko@web:/usr/local/bin 09:13:02 0 [#
#] kemiko@web:/usr/local/bin 17:55:52 0 [# cat commentsRemoveWebPage.sh #!/bin/bash #set -x # 2024-11-23; commentsRemoveWebPage.sh; Kent M Kohlmeyer (kemiko) # Removes HTML and CStyle (JavaScript) comments # If running a large file this will take a lot of "time" # Usage: [time] cat <input file> | commentsRemoveWebPage.sh > <output file> scriptHead=0 scriptTail=0 commentSingle=0 commentMultiHead=0 commentMultiTail=0 commentHTMLHead=0 commentHTMLTail=0 if [ -t 0 ] then printf "\e[1mPlease supply stdin\e[0m\n" exit 1 fi # Setting "IFS='' (Field Splitting) prevents readline from # stripping leading and trailing whitespace from the line. # Use "read -r" to not interpret a backslash (\) character while IFS='' read -r line do echo "${line}" | "grep" '<script>' > /dev/null 2>&1 if [ ${?} -eq 0 ] then scriptHead=1 fi echo "${line}" | "grep" '</script>' > /dev/null 2>&1 if [ ${?} -eq 0 ] then scriptTail=1 fi if [ ${scriptHead} -eq 1 ] && [ ${scriptTail} -eq 1 ] then echo "${line}" scriptHead=0 scriptTail=0 elif [ ${scriptHead} -eq 1 ] then if [ ${#line} -eq 0 ] then echo "${line}" else echo "${line}" | "grep" '\/\*' > /dev/null 2>&1 if [ ${?} -eq 0 ] then commentMultiHead=$(expr ${commentMultiHead} + 1) fi echo "${line}" | "grep" '\*\/' > /dev/null 2>&1 if [ ${?} -eq 0 ] then commentMultiTail=1 fi if [ ${commentMultiHead} -eq 1 ] && [ ${commentMultiTail} -eq 1 ] then output=$(echo "${line}" | sed 's; *\/\*.*\*\/ *;;') if [ ${#output} -ne 0 ] then echo "${output}" fi commentMultiHead=0 commentMultiTail=0 elif [ ${commentMultiTail} -eq 1 ] then output=$(echo "${line}" | sed 's;.*\*\/ *;;') if [ ${#output} -ne 0 ] then echo "${output}" fi commentMultiHead=0 commentMultiTail=0 elif [ ${commentMultiHead} -ge 1 ] then if [ ${commentMultiHead} -eq 1 ] then output=$(echo "${line}" | sed 's; *\/\*.*;;') if [ ${#output} -ne 0 ] then echo "${output}" fi fi commentMultiHead=$(expr ${commentMultiHead} + 1) else commentSingle=0 echo ${line} | "grep" '\/\/' > /dev/null 2>&1 if [ ${?} -eq 0 ] then commentSingle=1 fi url=0 echo ${line} | "grep" ':\/\/' > /dev/null 2>&1 if [ ${?} -eq 0 ] then url=1 fi if [ ${commentSingle} -eq 1 ] && [ ${url} -ne 1 ] then output=$(echo "${line}" | sed 's; *\/\/.*;;') if [ ${#output} -ne 0 ] then echo "${output}" fi else echo "${line}" fi fi fi elif [ ${scriptTail} -eq 1 ] then echo "${line}" scriptHead=0 scriptTail=0 else echo "${line}" | "grep" '<!--' > /dev/null 2>&1 if [ ${?} -eq 0 ] then commentHTMLHead=$(expr ${commentHTMLHead} + 1) fi echo "${line}" | "grep" '\-\->' > /dev/null 2>&1 if [ ${?} -eq 0 ] then commentHTMLTail=1 fi if [ ${commentHTMLHead} -eq 1 ] && [ ${commentHTMLTail} -eq 1 ] then output=$(echo "${line}" | sed 's/ *<!--.*--> *//') if [ ${#output} -ne 0 ] then echo "${output}" fi commentHTMLHead=0 commentHTMLTail=0 elif [ ${commentHTMLTail} -eq 1 ] then output=$(echo "${line}" | sed 's/.*--> *//') if [ ${#output} -ne 0 ] then echo "${output}" fi commentHTMLHead=0 commentHTMLTail=0 elif [ ${commentHTMLHead} -ge 1 ] then if [ ${commentHTMLHead} -eq 1 ] then output=$(echo "${line}" | sed 's/ *<!--.*//') if [ ${#output} -ne 0 ] then echo "${output}" fi fi commentHTMLHead=$(expr ${commentHTMLHead} + 1) else echo "${line}" fi fi done #] kemiko@web:/usr/local/bin 17:55:53 0 [#
#] kemiko@web:/usr/local/bin 23:36:25 0 [# cat swap1Backup.sh #!/bin/bash # swap1Backup.sh; 2024/09/15; Kent M Kohlmeyer (kemiko) # backup all vi swap files with "backup.sh" script ls .*sw? | cut -c2- | awk -F'.sw' '{print $1}' | while read file do /usr/local/bin/backup.sh ${file} < /dev/tty done #] kemiko@web:/usr/local/bin 23:36:26 0 [#
#] kemiko@web:/usr/local/bin 23:36:29 0 [# cat swap2Recover.sh #!/bin/bash # swap2Recover.sh; 2024/09/15; Kent M Kohlmeyer (kemiko) # recover vi files with command switches ls .*sw? | cut -c2- | awk -F'.sw' '{print $1}' | while read file do echo ${file} vi -X -r ${file} -c "w!" -c "q!" < /dev/tty &&> /dev/null done #] kemiko@web:/usr/local/bin 23:36:30 0 [#
#] kemiko@web:/usr/local/bin 23:36:33 0 [# cat swap3Diff.sh #!/bin/bash # swap3Diff.sh; 2024/09/15; Kent M Kohlmeyer (kemiko) # diff command all vi recovered files # | grep "^<" or "^>" for viewing old vs new sparately date=$(date +%Y%m%d) ls .*sw? | cut -c2- | awk -F'.sw' '{print $1}' | while read file do echo ${file} diff .backup/${file}.${date} ${file} done #] kemiko@web:/usr/local/bin 23:36:34 0 [#
#] kemiko@web:/usr/local/bin 23:36:36 0 [# cat swap4Remove.sh #!/bin/bash # swap4Remove.sh; 2024/09/15; Kent M Kohlmeyer (kemiko) if [[ ${#} -eq 0 || (${1} != 'y' && ${1} != 'Y' && ${1} != 'n' && ${1} != 'N') ]] then printf "\e[1mUsage: ${0}("y" = prompt, "n" = no prompt)\e[0m\n" exit 1 fi ls .*sw? | while read file do if [[ ${1} == 'y' || ${1} == 'Y' ]] then rm -i ${file} < /dev/tty else \rm ${file} fi done #] kemiko@web:/usr/local/bin 23:36:37 0 [#
#] kemiko@box:~/src 19:42:47 0 [# cat itop.ec
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
static char SourceID[] = "itop.ec; 2016/12/03; Kent M Kohlmeyer";
/*
This program displays the top processes the Informix engine is currently running.
To "make" the executable with debugging symbols or not
esql -G itop.ec -o itop
OR
esql itop.ec -o itop
To Do:
1)
catch SIGINT ctrl-c...fclose( fp ); AND pin( cursor, 0 );
#include <signal.h>
static volatile int keepRunning = 1;
void intHandler(int dummy) {
keepRunning = 0;
}
// ...
int main(void) {
signal(SIGINT, intHandler);
while (keepRunning) {
// ...
2)
Take argv[0] out of the output
*/
#define pin( row, col ) printf( "%c[%d;%dH", 27, ( row ), ( col ) )
#define SIDRECS 30
#define PIDRECS 1500
struct recordsid
{
int sid;
int pid;
char hostname[16+1];
char username[32+1];
char connected[25+1];
int ops;
};
struct recordpid
{
int pid;
int ppid;
char command[64+1];
};
int compare( const void *a, const void *b )
{
struct recordsid *orderA = (struct recordsid *)a;
struct recordsid *orderB = (struct recordsid *)b;
if( orderA->ops < orderB->ops )
{
return 1;
}
else if( orderA->ops > orderB->ops )
{
return -1;
}
else
{
return 0;
}
}
int clear( int line )
{
printf( "%c[%d;%df", 27, line, 0 );
printf( "%c[0J", 27 );
}
void rtrim( char *string )
{
int i;
for( i = strlen( string ) - 1; i > 0; i-- )
{
if( string[i] == ' ' )
{
string[i] = '\0';
}
else
{
break;
}
}
}
void lpad( char *string, int width )
{
int i;
int j;
char buffer[15+1] = "";
strcpy( buffer, string );
for( i = 0; i < width - strlen( buffer ); i++ )
{
string[i] = ' ';
}
for( j = 0; j < width - i; j++ )
{
string[i+j] = buffer[j];
}
string[j+i] = '\0';
}
int main( int argc, char **argv )
{
/*
struct recordpid
{
int pid;
int ppid;
char command[64+1];
};
*/
struct recordsid sidold[SIDRECS];
struct recordsid sidnew[SIDRECS];
struct recordsid siddelta[SIDRECS];
struct recordpid pidrec[PIDRECS];
memset( &sidold, '\0', sizeof( sidold ) );
memset( &sidnew, '\0', sizeof( sidnew ) );
memset( &siddelta, '\0', sizeof( siddelta ) );
EXEC SQL BEGIN DECLARE SECTION;
int sid;
int pid;
char hostname[15];
char username[15];
char connected[25];
int ops;
EXEC SQL END DECLARE SECTION;
int i;
int j;
int k;
int display;
char line[128+1];
int looppid = 1;
int loopppid = 1;
//EXEC SQL END DECLARE SECTION;
int argr = 15;
int args = 5;
//int argt = 0;
int argb = 0;
char system[16+1];
FILE *fp;
char batch[64+1];
int loopmain = 0;
int iops = 0;
time_t seconds;
struct tm *datetime;
char datesystem[20];
int cursor = 0;
int foundpid = 0;
int foundppid = 0;
sprintf( system, "%s", getenv( "SYSTEM_NAME" ) );
for( i = 1; i < argc; i++ )
{
if( strstr( argv[i], "-h" ) )
{
printf( "%c[1m", 27 );
printf( "\nUsage: %s -[hrs]\n\n", argv[0] );
printf( "-h ...help\n" );
printf( "-rX ...records to display (default is 15)\n" );
/*
printf( "-s ....display SQL\n" );
*/
printf( "-sX ...seconds to refresh (default is 5)\n\n" );
printf( "-b ...batch mode\n\n" );
printf( "%c[0m", 27 );
exit( 1 );
}
if( strstr( argv[i], "-r" ) )
{
sscanf( argv[i] + 2, "%d", &argr );
if( argr <= 0 || argr > 30 )
{
argr = 30;
}
}
/*
if( strstr( argv[i], "-t" ) )
{
argt = 1;
}
*/
if( strstr( argv[i], "-s" ) )
{
sscanf( argv[i] + 2, "%d", &args );
if( args < 0 || args > 60 )
{
args = 5;
}
}
if( strstr( argv[i], "-b" ) )
{
sscanf( argv[i] + 2, "%d", &argb );
if( argb < 0 || argb > 60 )
{
argb = 5;
}
}
}
if( argb )
{
sprintf( batch, "%s.log", argv[0] );
if( (fp = fopen( batch, "w" )) == NULL )
{
printf( "Can not open file %s\n", batch );
exit( 1 );
}
/*
else
{
fprintf( stdout, "HELLO" );
fflush( stdout );
}
*/
}
else
{
clear( 0 );
}
for( ; ; )
{
memset( &sidnew, '\0', sizeof( sidnew ) );
cursor = 2;
EXEC SQL WHENEVER SQLERROR STOP;
EXEC SQL CONNECT to 'sysmaster';
EXEC SQL declare sysmastercursor cursor for
SELECT FIRST 30 s.sid, pid, trim(hostname), trim(username), dbinfo('utc_to_datetime',connected), isreads+bufreads+bufwrites+pagreads+pagwrites
INTO :sid, :pid, :hostname, :username, :connected, :ops
FROM syssessions s, syssesprof p
WHERE s.sid = p.sid
ORDER BY 6 DESC;
EXEC SQL open sysmastercursor;
memset( &pidrec, '\0', sizeof( pidrec ) );
FILE *ps = popen( "ps -ef", "r" );
for( i = 0; fgets( line, sizeof( line ), ps ) != 0; i++ )
{
if( i > 0 )
{
pidrec[i].pid = atoi( &line[9] );
pidrec[i].ppid = atoi( &line[15] );
strcpy( pidrec[i].command, &line[48] );
}
}
pclose( ps );
for( i = 0; i < SIDRECS; i++ )
{
EXEC SQL fetch sysmastercursor;
if( strncmp( SQLSTATE, "00", 2 ) != 0 )
{
break;
}
sidnew[i].sid = sid;
sidnew[i].pid = pid;
memcpy( &sidnew[i].hostname, &hostname, strlen( hostname ) + 1 );
memcpy( &sidnew[i].username, &username, strlen( username ) + 1 );
memcpy( &sidnew[i].connected, &connected, strlen( connected ) + 1 );
sidnew[i].ops = ops;
}
EXEC SQL close sysmastercursor;
EXEC SQL free sysmastercursor;
EXEC SQL disconnect current;
memcpy( &siddelta, &sidnew, sizeof( struct recordsid ) * SIDRECS );
for( i = 0; i < SIDRECS; i++ )
{
for( j = 0; j < SIDRECS; j++ )
{
if( siddelta[i].sid == sidold[j].sid )
{
siddelta[i].ops -= sidold[j].ops;
/* This causes some rows to be off between hostname and username
siddelta[i].hostname[10] = '\0';
siddelta[i].username[10] = '\0';
siddelta[i].connected[19] = '\0';
changed later before output */
}
}
}
qsort( siddelta, SIDRECS, sizeof( struct recordsid ), compare );
if( !argb )
{
clear( 2 );
//printf( "Host: %-29sDate: %-41sIops: %10d\n", system, "2016-12-19 20:01:14", iops );
printf( "\n" );
cursor++;
}
/* Output the records to screen or file */
for( i = 0, iops = 0; i < argr; i++ )
{
if( siddelta[i].ops )
{
if( strstr( siddelta[i].hostname, system ) )
{
rtrim( siddelta[i].username );
lpad( siddelta[i].username, 12 );
rtrim( siddelta[i].hostname );
rtrim( siddelta[i].connected );
if( !argb )
{
printf( "%c[1m%8d %7d%s@%-10s %22s %35d%c[0m\n",27,siddelta[i].sid,siddelta[i].pid,siddelta[i].username,siddelta[i].hostname,siddelta[i].connected,siddelta[i].ops,27 );
cursor += 2;
}
else
{
fprintf( fp, "%8d %7d%s@%-10s %22s %35d\n",siddelta[i].sid,siddelta[i].pid,siddelta[i].username,siddelta[i].hostname,siddelta[i].connected,siddelta[i].ops );
}
/* find and print first parent */
for( j = 0, foundpid = 0, foundppid = 0, looppid = 1; j < PIDRECS && looppid == 1; j++ )
{
if( siddelta[i].pid == pidrec[j].pid )
{
foundpid = 1;
if( !argb )
{
printf( " %7d %7d %s", pidrec[j].pid, pidrec[j].ppid, pidrec[j].command );
cursor++;
}
else
{
fprintf( fp, " %7d %7d %s", pidrec[j].pid, pidrec[j].ppid, pidrec[j].command );
}
/* find and print second parent */
for( k = 0, loopppid = 1; k < PIDRECS && loopppid == 1; k++ )
{
if( pidrec[j].ppid == pidrec[k].pid )
{
foundppid = 1;
if( !argb )
{
printf( " %7d %7d %s\n", pidrec[k].pid, pidrec[k].ppid, pidrec[k].command );
cursor++;
}
else
{
fprintf( fp, " %7d %7d %s\n", pidrec[k].pid, pidrec[k].ppid, pidrec[k].command );
}
loopppid = 0;
}
}
looppid = 0;
}
}
if( !foundpid )
{
if( !argb )
{
printf( "\n\n" );
cursor++;
}
else
{
fprintf( fp, "\n\n" );
}
}
if( !foundppid )
{
if( !argb )
{
printf( "\n" );
cursor++;
}
else
{
fprintf( fp, "\n" );
}
}
}
else // isn't going to have local PPIDs
{
rtrim( siddelta[i].username );
lpad( siddelta[i].username, 12 );
rtrim( siddelta[i].hostname );
rtrim( siddelta[i].connected );
if( !argb )
{
printf( "%c[1m%8d %7d%s@%-10s %22s %35d%c[0m\n\n\n\n",27,siddelta[i].sid,siddelta[i].pid,siddelta[i].username,siddelta[i].hostname,siddelta[i].connected,siddelta[i].ops,27 );
cursor += 4;
}
else
{
fprintf( fp, "%8d %7d%s@%-10s %22s %35d\n\n\n\n",siddelta[i].sid,siddelta[i].pid,siddelta[i].username,siddelta[i].hostname,siddelta[i].connected,siddelta[i].ops );
}
}
iops += siddelta[i].ops;
}
else // make the screen and file fixed length
{
if( !argb )
{
printf( "\n\n\n\n" );
cursor += 4;
}
else
{
fprintf( fp, "\n\n\n\n" );
}
}
}
memcpy( &sidold, &sidnew, sizeof( struct recordsid ) * SIDRECS );
/*
loopmain++;
if( argb == loopmain )
{
fclose( fp );
return( 0 );
}
*/
// printf( "Host: %-29sDate: %-41sIops: %10d\n", system, "2016-12-19 20:01:14", iops );
seconds = time( 0 );
datetime = localtime( &seconds );
sprintf( datesystem, "%04d-%02d-%02d %02d:%02d:%02d", datetime->tm_year + 1900, datetime->tm_mon + 1, datetime->tm_mday, datetime->tm_hour, datetime->tm_min, datetime->tm_sec );
//clear( );
if( argb )
{
//chg fprintf( fp, "Host: %-29sDate: %-41sLoad: %10d\n", system, datesystem, iops );
fprintf( fp, "Host: %-31sDate: %-39sLoad: %10d\n", system, datesystem, iops );
fprintf( fp, "--------------------------------------------------------------------------------------------------\n" );
fflush( fp );
}
else
{
pin( 0, 0 );
//chg fprintf( stdout, "Host: %-29sDate: %-42sLoad: %9d\n", system, datesystem, iops );
fprintf( stdout, "Host: %-31sDate: %-39sLoad: %10d\n", system, datesystem, iops );
pin( cursor, 0 );
fflush( stdout );
}
loopmain++;
if( argb == loopmain )
{
fclose( fp );
return( 0 );
}
sleep( args );
}
}
#] kemiko@box:~/src 19:42:51 0 [#
Alpha and Omega Semiconductor Limited, or AOS, is a designer, developer and global supplier of a broad range of power semiconductors, including a wide portfolio of Power MOSFET, IGBT and Power IC products. AOS has developed extensive intellectual property and technical knowledge that encompasses the latest advancements in the power semiconductor industry, which enables it to introduce innovative products to address the increasingly complex power requirements of advanced electronics. AOS differentiates itself by integrating its Discrete and IC semiconductor process technology, product design, and advanced packaging know-how to develop high performance power management solutions. AOS's portfolio of products targets high-volume applications, including portable computers, flat panel TVs, LED lighting, smart phones, battery packs, consumer and industrial motor controls and power supplies for TVs, computers, servers and telecommunications equipment. For more information, please visit www.aosmd.com. For investor relations, please contact So-Yeon Jeong at investors@aosmd.com.
CONTACT:
Alpha and Omega Semiconductor Limited
Investor Relations
So-Yeon Jeong
408-789-3172
investors@aosmd.com
Xiaomi Titans Metal is a proprietary alloy developed by Xiaomi that is used in their electric vehicles, achieving high strength and resilience while being about 17% lighter than traditional aluminum. This material is part of Xiaomi's innovative approach to manufacturing, which includes advanced die-casting techniques to enhance production efficiency and vehicle performance.
Xiaomi Titans Metal is a proprietary alloy developed by Xiaomi for use in their electric vehicles (EVs). This innovative material plays a crucial role in enhancing the performance and efficiency of their vehicles.
Xiaomi Titans Metal represents a significant advancement in automotive materials, combining lightweight properties with high strength. This innovation, alongside advanced manufacturing techniques, positions Xiaomi as a competitive player in the electric vehicle market.
The Modena platform is a self-developed technology by Xiaomi used in their electric vehicles, specifically the SU7 sedan and the YU7 crossover, which integrates the battery pack as a structural component for enhanced safety and performance. This innovative design features upside-down battery cells to improve safety by directing potential fire or force away from occupants during a crash.
The Modena platform is an innovative technology developed by Xiaomi for their electric vehicles, specifically the SU7 sedan and the YU7 crossover. This platform integrates the battery pack as a structural component, enhancing both safety and performance.
| Vehicle Model | Type | Key Features |
|---|---|---|
| SU7 | Sedan | Upside-down battery cells, structural battery pack |
| YU7 | Crossover SUV | Enhanced safety features, integrated battery design |
The Modena platform represents Xiaomi's commitment to safety and innovation in the electric vehicle market, setting a new standard for vehicle design and engineering.
1. Filter for interactive SSH logins
bash> grep sshd.\*Failed /var/log/auth.log | less
2. Filter for failed connections (i.e. no login attempted, could be a port scanner, etc)
bash> grep sshd.\*Did /var/log/auth.log | less
|
;)u | winky tongue |
|
^^)u | silly tongue |
|
;3* | kissy |
|
(bb) | bear (brown) ... pairs well with "huggy" |
|
(bp) | bear (panda) ... pairs well with "huggy" |
|
(^^8)) | huggy |
|
**^o^ | heart eyes |
|
:(? | thought |
|
:'( | sad |
|
:8^v^ | embarrassed |
|
^^8) | blush |
|
:8| | rolling eyes |
|
'><8 | very upset |
|
^^)*** | three hearts (kisses) on face |
\set meta-command (backslash). Referenced with :variableName
\set QUIET true
\set PROMPT1 '%[%033[37m%]psql%[%033[33m%]://%[%033[37m%]%n%[%033[33m%]@%[%033[37m%]%M%[%033[33m%]:%[%033[37m%]%>%[%033[33m%]/%[%033[37m%]%/ %[%033[K%]%[%033[0m%]%[%033[33m%]%#%[%033[0m%] '
\set PROMPT2 '%[%033[37m%]%l %[%033[33m%]>%[%033[0m%] '
\set PROMPT1 '%[%033[33m%]%n@%M:%> [%/] > %[%033[0m%] '
\set PROMPT1 '%[%033[33m%]%M:%> %n@%/ >%[%033[0m%] '
\set PROMPT2 '%[%033[33m%]%l >%[%033[0m%] '
\set setConnections 'SELECT * FROM pg_stat_activity;'
\set setDatabase 'SELECT current_database( );'
\set setExtensions 'SELECT * from pg_available_extensions ORDER BY name;'
\set setSchema 'SELECT current_schema;'
\set setTablesPostgres 'SELECT * FROM pg_catalog.pg_tables WHERE schemaname = \'pg_catalog\' OR schemaname = \'information_schema\';'
\set setTablesUser 'SELECT * FROM pg_catalog.pg_tables WHERE schemaname != \'pg_catalog\' AND schemaname != \'information_schema\';'
\set setUptime 'SELECT pg_postmaster_start_time( );'
\set setUser 'SELECT current_user;'
\set setUserSession 'SELECT session_user;'
\set setVersion 'SELECT version( );'
\set nopager '\\pset pager off'
\set pager '\\pset pager on'
\set pwd '\\echo `pwd`'
\set ls '\\echo `ls`'
\pset meta-command (backslash) is used to set various output options for query results.
\pset null '(NULL)'
\pset linestyle unicode
\pset border 2
\pset unicode_border_linestyle single
\pset unicode_header_linestyle single
\pset unicode_column_linestyle single
\pset format wrapped
\set QUIET false
--\echo `hostname` @ `date '+%Y-%m-%d %H:%M:%S'`
--\echo You are on server `printf "^[[1;33m"``hostname``printf "^[[0m"` on `printf "^[[1;33m"``date '+%Y-%m-%d'``printf "^[[0m"` at `printf "^[[1;33m"``date '+%H:%M:%S'``printf "^[[0m"`
--\echo `printf "\n^[[1mWelcome to PostgreSQL!^[[0m"`
--\echo `printf "^[[1mSettings from: \"/home/kemiko/.psqlrc\"^[[0m"`
\echo `printf "\n^[[1mSettings from: "``echo ~``printf "/.psqlrc\"^[[0m"`
\conninfo
\echo `printf "\n"`
\set QUIET true
--shows base table information
SELECT
*
FROM
pg_catalog.pg_tables
--WHERE
-- tableowner = current_user
--WHERE
-- schemaname NOT IN ('public','pg_catalog','information_schema')
--WHERE
-- schemaname IN ('public','pg_catalog','information_schema')
--ORDER BY
-- schemaname DESC, tablename
;
┌────────────────────┬─────────────────────────┬────────────┬────────────┬────────────┬──────────┬─────────────┬─────────────┐
│ schemaname │ tablename │ tableowner │ tablespace │ hasindexes │ hasrules │ hastriggers │ rowsecurity │
├────────────────────┼─────────────────────────┼────────────┼────────────┼────────────┼──────────┼─────────────┼─────────────┤
│ ... │ ... │ ... │ (NULL) │ t │ f │ f │ f │
│ public │ exampleTable │ dba │ (NULL) │ t │ f │ f │ f │
│ pg_catalog │ pg_aggregate │ postgres │ (NULL) │ t │ f │ f │ f │
│ ... │ ... │ ... │ (NULL) │ t │ f │ f │ f │
│ information_schema │ sql_features │ postgres │ (NULL) │ f │ f │ f │ f │
│ ... │ ... │ ... │ (NULL) │ t │ f │ f │ f │
└────────────────────┴─────────────────────────┴────────────┴────────────┴────────────┴──────────┴─────────────┴─────────────┘
(999 rows)
--shows "table catalog" and "table type", but not "table owner" compared to previous query
SELECT
*
FROM
information_schema.tables
--WHERE
-- table_schema = 'public'
--WHERE
-- table_schema NOT IN ('public','pg_catalog','information_schema')
--WHERE
-- table_schema IN ('public','pg_catalog','information_schema')
ORDER BY
table_schema DESC, table_name
;
┌────────────────┬────────────────────┬───────────────────────────────────────┬────────────┬──────────────────────────────┬──────────────────────┬───────────────────────────┬──────────────────────────┬────────────────────────┬────────────────────┬──────────┬───────────────┐
│ table_catalog │ table_schema │ table_name │ table_type │ self_referencing_column_name │ reference_generation │ user_defined_type_catalog │ user_defined_type_schema │ user_defined_type_name │ is_insertable_into │ is_typed │ commit_action │
├────────────────┼────────────────────┼───────────────────────────────────────┼────────────┼──────────────────────────────┼──────────────────────┼───────────────────────────┼──────────────────────────┼────────────────────────┼────────────────────┼──────────┼───────────────┤
│ exampleCatalog │ public │ exampleTable │ BASE TABLE │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ YES │ NO │ (NULL) │
│ ... │ ... │ ... │ BASE TABLE │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ YES │ NO │ (NULL) │
│ ... │ pg_catalog │ pg_aggregate │ BASE TABLE │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ YES │ NO │ (NULL) │
│ ... │ information_schema │ administrable_role_authorizations │ VIEW │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ NO │ NO │ (NULL) │
│ ... │ ... │ ... │ BASE TABLE │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ (NULL) │ YES │ NO │ (NULL) │
└────────────────┴────────────────────┴───────────────────────────────────────┴────────────┴──────────────────────────────┴──────────────────────┴───────────────────────────┴──────────────────────────┴────────────────────────┴────────────────────┴──────────┴───────────────┘
(999 rows)
CREATE VIEW tables AS
SELECT
table_catalog,
table_schema,
table_name,
table_type
FROM
information_schema.tables
WHERE
table_schema NOT IN ('pg_catalog', 'information_schema')
;
SELECT * FROM tables ; ┌────────────────┬───────────────┬──────────────────┬─────────────┐ │ table_catalog │ table_schema │ table_name │ table_type │ ├────────────────┼───────────────┼──────────────────┼─────────────┤ │ exampleCatalog │ exampleSchema │ exampletable │ exampleType │ │ ... │ ... │ ... │ ... │ │ postgres │ public │ tables │ VIEW │ └────────────────┴───────────────┴──────────────────┴─────────────┘ (999 rows)
CREATE VIEW objects AS
SELECT
nsp.nspname AS SchemaName
,cls.relname AS ObjectName
,rol.rolname AS ObjectOwner
,CASE cls.relkind
WHEN 'r' THEN 'TABLE'
WHEN 'm' THEN 'MATERIALIZED_VIEW'
WHEN 'i' THEN 'INDEX'
WHEN 'S' THEN 'SEQUENCE'
WHEN 'v' THEN 'VIEW'
WHEN 'c' THEN 'TYPE'
ELSE cls.relkind::text
END AS ObjectType
FROM
pg_class cls
JOIN pg_roles rol
ON rol.oid = cls.relowner
JOIN pg_namespace nsp
ON nsp.oid = cls.relnamespace
WHERE nsp.nspname NOT IN ('information_schema', 'pg_catalog')
AND nsp.nspname NOT LIKE 'pg_toast%'
ORDER BY nsp.nspname, cls.relname
;
--shows non system objects owned by current user
SELECT
nsp.nspname AS object_schema,
cls.relname AS object_name,
CASE cls.relkind
WHEN 'r' THEN 'table'
WHEN 'm' THEN 'materialized view'
WHEN 'i' THEN 'index'
WHEN 'S' THEN 'sequence'
WHEN 'v' THEN 'view'
WHEN 'c' THEN 'type'
ELSE cls.relkind::text
END AS object_type,
rol.rolname AS object_owner
FROM
pg_class cls
JOIN pg_roles rol ON rol.oid = cls.relowner
JOIN pg_namespace nsp ON nsp.oid = cls.relnamespace
WHERE nsp.nspname NOT IN ('information_schema', 'pg_catalog')
AND nsp.nspname NOT LIKE 'pg_toast%'
AND rol.rolname = current_user
ORDER BY
nsp.nspname, cls.relname
;
┌───────────────┬─────────────────────┬─────────────┬──────────────┐
│ object_schema │ object_name │ object_type │ object_owner │
├───────────────┼─────────────────────┼─────────────┼──────────────┤
│ public │ tables │ view │ postgres │
│ ... │ ... │ ... │ ... │
│ exampleSchema │ example │ table │ dba │
│ exampleSchema │ example_id_seq │ sequence │ dba │
│ exampleSchema │ example_pkey │ index │ dba │
└───────────────┴─────────────────────┴─────────────┴──────────────┘
(XXX rows)
SELECT r.usename AS grantor, e.usename AS grantee, nspname, privilege_type, is_grantable FROM pg_namespace JOIN LATERAL (SELECT * FROM aclexplode(nspacl) AS x) a ON true JOIN pg_user e ON a.grantee = e.usesysid JOIN pg_user r ON a.grantor = r.usesysid WHERE e.usename = current_user ; ┌──────────┬──────────┬────────────────────┬────────────────┬──────────────┐ │ grantor │ grantee │ nspname │ privilege_type │ is_grantable │ ├──────────┼──────────┼────────────────────┼────────────────┼──────────────┤ │ postgres │ postgres │ pg_catalog │ USAGE │ f │ │ postgres │ postgres │ pg_catalog │ CREATE │ f │ │ postgres │ postgres │ public │ USAGE │ f │ │ postgres │ postgres │ public │ CREATE │ f │ │ postgres │ postgres │ information_schema │ USAGE │ f │ │ postgres │ postgres │ information_schema │ CREATE │ f │ └──────────┴──────────┴────────────────────┴────────────────┴──────────────┘ (6 rows)
SELECT * FROM pg_stat_activity ; ┌───────┬───────────┬───────┬──────────┬──────────┬──────────────────┬─────────────┬─────────────────┬─────────────┬───────────────────────────────┬───────────────────────────────┬───────────────────────────────┬───────────────────────────────┬─────────┬────────┬─────────────┬──────────────┬─────────────────────────────────────────────────────────────────────────────┐ │ datid │ datname │ pid │ usesysid │ usename │ application_name │ client_addr │ client_hostname │ client_port │ backend_start │ xact_start │ query_start │ state_change │ waiting │ state │ backend_xid │ backend_xmin │ query │ ├───────┼───────────┼───────┼──────────┼──────────┼──────────────────┼─────────────┼─────────────────┼─────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼───────────────────────────────┼─────────┼────────┼─────────────┼──────────────┼─────────────────────────────────────────────────────────────────────────────┤ │ 12411 │ postgres │ 16459 │ 24655 │ dba │ psql │ 127.0.0.1 │ (NULL) │ 49568 │ 2024-11-28 13:39:41.091595-08 │ 2024-12-01 20:09:47.198842-08 │ 2024-12-01 20:09:47.198842-08 │ 2024-12-01 20:09:47.198847-08 │ f │ active │ (NULL) │ 4838 │ SELECT * FROM pg_stat_activity; │ │ 12411 │ postgres │ 23698 │ 10 │ postgres │ psql │ (NULL) │ (NULL) │ -1 │ 2024-11-30 11:51:07.192089-08 │ (NULL) │ 2024-11-30 11:51:58.141689-08 │ 2024-11-30 11:51:58.156049-08 │ f │ idle │ (NULL) │ (NULL) │ select table_name, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ table_schema as schema_name, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ pg_database_size(current_database()) as total_database_size, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ pg_total_relation_size(table_name) as total_table_size, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ pg_relation_size(table_name) as table_size, ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ pg_indexes_size(table_name) as index_size ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ from information_schema.tables ↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ where table_schema=current_schema() and table_name like 'table_%'↵│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ order by total_table_size; │ │ ... │ ... │ ..... │ ..... │ ........ │ .... │ ......... │ ......... │ ..... │ ............................. │ ............................. │ ............................. │ ............................. │ . │ ...... │ ...... │ ...... │ ...... │ │ 24732 │ xxxxxxx │ 1015 │ 10 │ postgres │ psql │ (NULL) │ (NULL) │ -1 │ 2024-11-27 20:21:49.750157-08 │ (NULL) │ 2024-11-27 20:21:58.891633-08 │ 2024-11-27 20:21:58.900124-08 │ f │ idle │ (NULL) │ (NULL) │ select * from xxx.ledger; │ └───────┴───────────┴───────┴──────────┴──────────┴──────────────────┴─────────────┴─────────────────┴─────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴───────────────────────────────┴─────────┴────────┴─────────────┴──────────────┴─────────────────────────────────────────────────────────────────────────────┘ (XXX rows)
SELECT pg_terminate_backend( pid );
"Debugging with GDB - Summary of GDB" - web.mit.edu/gnu/doc/html/gdb_1.html ... "Debugging with GDB - Summary of GDB" - web.mit.edu/gnu/doc/html/gdb_25.html ~~~ #] kemiko@box:~ 19:32:56 0 [# cat ~/.gdbinit # shit can be shortened...like "i b" is really "info breakpoints"... # which shows all breakpoints, etc # use tab completion # type ctrl-alt-j to toggle-editing-mode between Emacs and Vi # type ctrl-l to clear the screen # b = set breakpoint at current line # b [file:]<line> if <variable> <comparison> <value> = breakpoint at a line # c = continue (executing code) # clear = delete all breakpoints # define = user defines...see below # d = disable (breakpoints) # disable [integer] = disable all/certain breakpoint(s) # enable [integer] = enable all/certain breakpoint(s) # f = frame (show stack frame) # finish = finish executing current function # h [command] = help # i = info # i b = info breakpoints # i h = info handle (signals table) # l [line] = list (code) current/certain line # n = next (execute one line) # p [item] = print content of variable, memory location, or register # q = quit (gdb) # r = run (program) to breakpoint or end # return [value] = return from a function without execution # show [command] = show environment or a certain type/item # show commands = command history # show user = user defines # !! = rerun last command # !<integer> = rerun certain command in history # watch <expression/variable> = watch an expression/variable # set prompt to bold "(gdb) " set prompt \033[1m(gdb) \033[0m set height 36 set listsize 36 set pagination 0 # <Tab> for suggestion/completion...even shows user defines # on|off set print array # on|off set print pretty set history filename ~/.gdbhist # on|off set history save # on|off set history expansion set history size 256 define clr shell clear end define pin shell printf "\033[%d;%dH" "$arg0" "$arg1" end
The root "tele" traces its origins to the ancient Greek word τῆλε (tēle), meaning "far" or "distant." It first emerged in classical literature, describing geographic distances. With the technological advancements of the 19th and 20th centuries, "Tele" gained new life, becoming a cornerstone in terms such as "telegraph" and "television." These inventions redefined human communication and access to information.
The root "phon" originates from the Greek word phōnē, meaning "voice" or "sound." Ancient Greek philosophers used it to describe both spoken words and musical tones. Over time, phon traveled through Latin and into English, appearing in words related to sound, speech, and communication. Technological advances in the 19th and 20th centuries, such as the phonograph, brought new prominence to this root.
| Transmission Medium | Bandwidth | Range | Notes |
|---|---|---|---|
| Twisted Pair (Copper) | Up to 10 Gbps (Cat6/Cat7) | ~100 m | Common for Ethernet LANs and DSL. Susceptible to EMI. Cat5e: 1 Gbps, Cat7: up to 40 Gbps. |
| Coaxial Cable | Up to 1 Gbps | ~500 m–1 km | Used for cable TV and broadband. Less EMI than twisted pair, higher attenuation than fiber. |
| Fiber Optics (FiOS) | 10–100+ Gbps | 550 m–100 km | Fiber Optic Service. High bandwidth, low loss, EMI-immune. Ideal for long-distance backbones and FTTH. |
| Trunk Lines (Core Interconnect) | 100+ Gbps (OC-192/SND) | Inter-Exchange (IXC) | High-capacity communication channels connecting central switching offices, tandems, and major network hubs. |
| Radio Waves (Wi-Fi) | Up to 9.6–46 Gbps (Wi-Fi 6/7) | 50–300 m | Wireless Fidelity. Short-range local data networks operating across unregulated 2.4/5/6 GHz spectrum architectures. |
| Radio Waves (Cellular) | 2 Mbps–1 Gbps (3G/5G) | 1–10 km (per cell) | Varies by generation (3G: ~2 Mbps, 5G: up to 1 Gbps). Cell-based, depends on tower proximity. |
| Microwave (Terrestrial) | 100–400 Mbps (up to 1 Gbps) | 50–100 km (LOS) | Line-of-sight required. Used for point-to-point links (e.g., AT&T Long Lines legacy towers). Weather-sensitive. |
| Microwave (Satellite) | 1 Mbps–1 Gbps | Global (via orbits) | High latency (20–600 ms) due to distance (e.g., GEO at ~35,786 km). Suitable for remote areas. |
| Free-Space Optical / Li-Fi | Up to 200 Gbps | ~1–2 km / Indoor Short-Range | Light Fidelity & FSO. Employs visible/infrared light spectrums. Ultra-high security, zero RF emission, line-of-sight. |
"Bell System Hierarchy" pane
"Copper Carriers" pane
THE BELL SYSTEM AS OF MAY, 1977
List of North American Numbering Plan area codes (Assignment actions by year)
Original North American area codes (Numbering plan areas)
| Generation | Name | Technology | Key Features | Max Speed | Launch Year |
|---|---|---|---|---|---|
| 0G | Pre-cellular | Analog radio | Car-based voice-only systems | ~2.4 kbps | 1946 |
| 1G | First Generation | Analog (AMPS, NMT, TACS) | Voice calls only, poor quality | ~2.4 kbps | 1979 |
| 2G | Second Generation | GSM, CDMA, TDMA | Digital voice, SMS, basic data | ~64 kbps | 1991 |
| 2.5G | GPRS | Packet-switched GSM | MMS, email, basic internet | ~115 kbps | 2000 |
| 2.75G | EDGE | Enhanced GPRS | Faster data, multimedia messaging | ~384 kbps | 2003 |
| 3G | UMTS, CDMA2000 | WCDMA, EV-DO | Mobile internet, video calls | ~2 Mbps | 2001 |
| 3.5G | HSPA | HSDPA, HSUPA | Improved mobile broadband | ~14.4 Mbps | 2006 |
| 3.75G | HSPA+ | Enhanced HSPA | Higher data rates | ~42 Mbps | 2008 |
| 3.95G | LTE (Pre-4G) | OFDMA | High-speed data, IP-based services | ~100 Mbps | 2009 |
| 4G | LTE Advanced | OFDMA, MIMO | HD streaming, VoLTE, gaming | ~1 Gbps | 2011 |
| 4.5G | LTE Advanced Pro | Carrier aggregation | Enhanced LTE, IoT support | ~3 Gbps | 2015 |
| 5G | NR (New Radio) | mmWave, Massive MIMO | Ultra-low latency, IoT, smart cities | ~10 Gbps | 2018 |
| 6G (Future) | TBD | THz bands, AI integration | Holographic calls, real-time digital twins | ~100 Gbps (expected) | ~2030 (est.) |
| Generation of Computer | Time Period | Key Technology | Characteristics |
|---|---|---|---|
| First Generation | 1940–1956 | Vacuum Tubes | Large, power-intensive, slow, machine language |
| Second Generation | 1956–1963 | Transistors | Smaller, faster, used assembly language |
| Third Generation | 1964–1971 | Integrated Circuits | Compact, introduced keyboards and monitors |
| Fourth Generation | 1971–Present | Microprocessors | Personal computers, GUIs, networking |
| Fifth Generation | Present & Beyond | AI and Nanotechnology | Self-learning, natural language processing |
| Sixth Generation | Emerging & Future | Quantum Computing | Qubits, superposition, future potential |
Cascading Style Sheets (CSS) were developed in the early 1990s to address the need for a dedicated styling language for the web. Before CSS, web design was primarily controlled by HTML, which lacked the capability to manage layout and presentation effectively.
Håkon Wium Lie: Proposed the first CSS specification in 1994 while working at CERN. His goal was to separate content from presentation, allowing for more flexible web design.
Bert Bos: Collaborated with Lie to refine the CSS concept, leading to the development of the first official CSS specification, CSS1, released in 1996.
CSS was created to enable web designers to control the layout, colors, and fonts of their websites. This separation of content (HTML) and style (CSS) simplified web development and improved the accessibility and maintainability of web pages.
CSS has evolved through several versions:
Today, CSS is a cornerstone technology of the web, used alongside HTML and JavaScript to create visually appealing and functional websites.
In a CSS rule, the term "declaration" refers to the property and value pairs that define how an element should be styled. Each declaration consists of a property name followed by a colon and a value, ending with a semicolon.
h1 targets all <h1> elements.{} and contains one or more declarations.:. For example, color: blue; sets the text color to blue.Property: This is the aspect of the element you want to style, such as color, font-size, or margin.
Value: This specifies how the property should be styled, like red, 16px, or auto.
css code
h1 { color: blue; font-size: 24px; }
In this example:
h1 is the selector.{ color: blue; font-size: 24px; } is the declaration block containing two declarations.This structure allows you to define how specific elements on a webpage should be styled.
CSS order of precedence determines which styles are applied to an element when multiple rules conflict. The order is based on specificity, the location of the styles, and the use of the !important rule.
The specificity of CSS selectors is calculated based on the types of selectors used. The hierarchy from lowest to highest specificity is as follows:
| Selector Type | Example | Specificity Weight |
|---|---|---|
| Type Selector | div, p |
0-0-1 |
| Class Selector | .class |
0-1-0 |
| Attribute Selector | [type="text"] |
0-1-0 |
| Pseudo-class Selector | :hover |
0-1-0 |
| ID Selector | #id |
1-0-0 |
| Inline Style | style="color:red;" |
1-0-0 |
When selectors have the same specificity, the order in which they appear in the CSS file matters. The last declared style will take precedence. The general order of CSS sources from least to most specific is:
<style> tags in the HTML)!importantThe !important rule can override any other styles, regardless of specificity. However, it is best used sparingly, as it can make debugging and maintaining CSS more difficult.
Understanding this order helps in effectively managing styles and resolving conflicts in CSS.
element(s)/class(es)/etc { outline dashed red; } # temporary
element(s)/class(es)/etc { background-color: rgba( 255, 0, 0, 0.1 ); } # temporary
The main difference between display and visibility properties in CSS is that "display: none;" completely removes an element from the document flow, meaning it takes up no space, while "visibility: hidden;" makes an element invisible but still occupies space in the layout. This distinction affects how surrounding elements are rendered on the page.
Unlike JavaScript, which is Strict (Fragile), CSS and HTML are designed to be Fault-Tolerant (Robust). This design choice is the reason the web doesn't "crash" when new features are invented or when a developer makes a typo.
| Language | Philosophy | When a mistake happens... |
|---|---|---|
| JavaScript | Strict / Fragile | Execution stops. One missing } or a typo can break the entire app. (The "Caltrop" effect) |
| HTML | Forgiving / Fluid | The browser "guesses" intent. Forgot </div>? It closes it for you. Unknown tags are treated as generic spans. |
| CSS | Fault-Tolerant | If the browser doesn't recognize a property or selector, it silently discards that line and moves on. (The "Pothole" effect) |
This allows us to write "Future-Proof" CSS. When a 2017 browser hits a 2025 property, it doesn't crash; it simply ignores the unknown line (property).
.container
{
display: block; /* Supported by all */
display: flex; /* Chrome 59 understands this */
scrollbar-gutter: stable; /* Modern only; Chrome 59 ignores this safely */
}
Browsers parse from top to bottom. The last recognized version of a property defined overwrites the previous ones.
.action-item
{
cursor: hand; /* IE 5.5 - 7 logic */
cursor: pointer; /* Modern Standard - Overwrites 'hand' in modern browsers */
}
In IE6, 'pointer' is unknown and ignored, so 'hand' stays active. In Chrome, 'pointer' is known and replaces 'hand'.
While properties fail silently on a per-line basis, grouped selectors are a single unit. If one selector in a list is unknown, the entire block is invalidated.
The "Poison Group" (Avoid This):
/* This fails in ALL browsers because no browser recognizes every prefix */
textarea::placeholder,
textarea::-webkit-input-placeholder,
textarea:-ms-input-placeholder
{
color: red;
}
The "Graffiti" Method (Correct Practice):
/* Separate blocks ensure each browser finds its own and ignores the rest */
textarea::-webkit-input-placeholder { color: red; } /* Chrome/Safari */
textarea:-moz-placeholder { color: red; } /* Firefox 18- */
textarea::-moz-placeholder { color: red; } /* Firefox 19+ */
textarea:-ms-input-placeholder { color: red; } /* IE 10+ */
Modern CSS uses Feature Queries to ask the browser if it supports a capability before providing the code.
@supports( scrollbar-gutter: stable )
{
html
{
scrollbar-gutter: stable;
}
}
For experienced developers, "Silent Failures" are maddening because Silence is Hard to Debug.
clor: red; instead of color: red;, the browser gives no error. It just ignores it.<tabe> instead of <table>, the browser renders a generic element. Your data shows up, but the layout is destroyed.Despite the frustration, this "Silent Fail" is the only reason the web works. If CSS were Strict:
scrollbar-gutter.panes.css entirely.Instead, because it is fault-tolerant, Chrome 59 simply says "I don't know what that is," throws that one line in the trash, and continues to style the rest of your beautiful pane.
Summary: High fault tolerance prevents web "crashes" but makes debugging harder. A typo like clor: red; provides no console feedback; the browser simply treats it as an unknown property and moves on.
style="list-style-type: none;" /* then give it some decent style */

 in html /* works for a newline an element's title attribute (tooltip) */
style="font-size: 0;" to a <div> /* allows no spacing between contained elements... */
getComputedStyle( ) method in JavaScript is used to retrieve the computed CSS properties and values of a specified HTML element after all styles have been applied. It returns a CSSStyleDeclaration object that contains the resolved styles, allowing you to access individual property values.
.thisReset
{
animation: none;
animation-delay: 0;
animation-direction: normal;
animation-duration: 0;
animation-fill-mode: none;
animation-iteration-count: 1;
animation-name: none;
animation-play-state: running;
animation-timing-function: ease;
backface-visibility: visible;
background: 0;
background-attachment: scroll;
background-clip: border-box;
background-color: transparent;
background-image: none;
background-origin: padding-box;
background-position: 0 0;
background-position-x: 0;
background-position-y: 0;
background-repeat: repeat;
background-size: auto auto;
border: 0;
border-style: none;
border-width: medium;
border-color: inherit;
border-bottom: 0;
border-bottom-color: inherit;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border-bottom-style: none;
border-bottom-width: medium;
border-collapse: separate;
border-image: none;
border-left: 0;
border-left-color: inherit;
border-left-style: none;
border-left-width: medium;
border-radius: 0;
border-right: 0;
border-right-color: inherit;
border-right-style: none;
border-right-width: medium;
border-spacing: 0;
border-top: 0;
border-top-color: inherit;
border-top-left-radius: 0;
border-top-right-radius: 0;
border-top-style: none;
border-top-width: medium;
bottom: auto;
box-shadow: none;
box-sizing: content-box;
caption-side: top;
clear: none;
clip: auto;
color: inherit;
columns: auto;
column-count: auto;
column-fill: balance;
column-gap: normal;
column-rule: medium none currentColor;
column-rule-color: currentColor;
column-rule-style: none;
column-rule-width: none;
column-span: 1;
column-width: auto;
content: normal;
counter-increment: none;
counter-reset: none;
cursor: auto;
direction: ltr;
display: inline;
empty-cells: show;
float: none;
font: normal;
font-family: inherit;
font-size: medium;
font-style: normal;
font-variant: normal;
font-weight: normal;
height: auto;
hyphens: none;
left: auto;
letter-spacing: normal;
line-height: normal;
list-style: none;
list-style-image: none;
list-style-position: outside;
list-style-type: disc;
margin: 0;
margin-bottom: 0;
margin-left: 0;
margin-right: 0;
margin-top: 0;
max-height: none;
max-width: none;
min-height: 0;
min-width: 0;
opacity: 1;
orphans: 0; /* minimum number of lines in a block container that must be left at the bottom of the page */
outline: 0;
outline-color: invert;
outline-style: none;
outline-width: medium;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
padding: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
page-break-after: auto;
page-break-before: auto;
page-break-inside: auto;
perspective: none;
perspective-origin: 50% 50%;
position: static;
/* May need to alter quotes for different locales (e.g. fr) */
quotes: '\201C' '\201D' '\2018' '\2019';
right: auto;
tab-size: 8;
table-layout: auto;
text-align: inherit;
text-align-last: auto;
text-decoration: none;
text-decoration-color: inherit;
text-decoration-line: none;
text-decoration-style: solid;
text-indent: 0;
text-shadow: none;
text-transform: none;
top: auto;
transform: none;
transform-style: flat;
transition: none;
transition-delay: 0s;
transition-duration: 0s;
transition-property: none;
transition-timing-function: ease;
unicode-bidi: normal;
vertical-align: baseline;
visibility: visible;
white-space: normal;
widows: 0; /* minimum number of lines that must be left at the top of the second page */
width: auto;
word-spacing: normal;
z-index: auto;
/* basic modern patch */
all: initial;
all: unset;
}
The generic font families (serif, sans-serif, monospace, cursive, and fantasy) must NOT be quoted in a CSS rule.
Any other font family name (like "Times New Roman", or a custom font) should be quoted if it contains spaces, punctuation, or starts with a number.
Initial or Inherit), the browser will fail to apply the rule because it mistakes the name for a system command. Quoting these names turns them into strings, protecting them from the parser.
/* Bad: Browser thinks you're trying to reset the property */ font-family: Initial, sans-serif;
/* Good: Browser knows "Initial" is the name of a font file */ font-family: "Initial", sans-serif;
For diagrams, it's best to use sans-serif fonts as they are cleaner and easier to read. Popular choices include Arial, Helvetica, and Roboto, which help ensure clarity in visual presentations.
Blank horizontal bar (verical spacer)
/* works */
<p style="height: 6px; margin: 0;"> </p>
/* works, better */
<div style="height: 6px;"></div>
Create full layer between background and content
#background-graffiti
{
position: fixed;
/* 1. Essential to take up the whole screen width */
width: 100vw;
/* 2. Key to expanding the usable vertical space */
height: 100vh;
display: flex; /* Turn on Flexbox */
justify-content: center; /* Center horizontally */
align-items: center; /* Center vertically */
/* OPTIONAL: Center the text content itself */
text-align: center;
font-size: 20rem;
font-weight: bold;
color: rgba(0, 0, 0, 0.05);
z-index: -1;
pointer-events: none;
}
The CSS pointer-events property controls how an element responds to mouse events, such as clicks and hovers. By setting pointer-events to none, the element will not respond to any pointer interactions, allowing events to pass through to elements behind it.
function getDefaultStyle( tagName, property = null )
{
if( tagName === undefined )
{
console.warn( 'Usage: ' + getDefaultStyle.name + '( "tagName", "property" )' );
return false;
}
// List of common properties affected by User Agent stylesheets
const COMMON_DEFAULTS = [
'display', 'margin', 'padding', 'border', 'fontSize',
'fontWeight', 'fontFamily', 'color', 'lineHeight',
'listStyleType', 'textAlign', 'verticalAlign'
];
// 1. Create the element
const el = document.createElement( tagName );
document.body.appendChild( el );
// 2. Get the computed style object
const style = window.getComputedStyle( el );
let result = {};
if( property )
{
// --- Single Property Mode ---
result = style[property];
}
else
{
// --- All Properties Mode ---
// Iterate through the common list and store the computed value
COMMON_DEFAULTS.forEach( prop => {
// NOTE: Use camelCase for JS access (e.g., 'font-size' becomes 'fontSize')
const jsProp = prop.replace( /-([a-z])/g, (g) => g[1].toUpperCase( ) );
result[prop] = style[jsProp];
});
}
// 3. Clean up the element
document.body.removeChild( el );
return result;
}
CSS
CSS Introduction - GeeksforGeeks
CSS Tutorial - GeeksforGeeks
How to calculate CSS specificity of your style rules - DEV Community
A Modern CSS Reset • Josh W. Comeau
CSS Tools: Reset CSS
Normalize.css: Make browsers render all elements more consistently.
Cross-multiplication is a mathematical technique used to solve equations involving fractions. It involves multiplying the numerator of one fraction by the denominator of the other fraction and setting the two products equal to each other.
A fund is making 33% interest per 1.5 years. What percentage would be for X years? Dividing 33 by 1.5 equals 22 which is the yearly percentage. Then multiplying 22 by X years for the answer.Unit price is the price of a standard amount of a good, as of weight or volume.
Compare 2 item prices with each other. Find a comparable unit between the 2 items. Which one has a better unit price?| Item | Size | Unit | Calculation | Conversion | Price | Calculation | Price/Unit |
| 1st | 1.5 | lbs | 1.5 lbs x 16 oz | 24 oz | $3.69 | $3.69 / 24 oz | $0.153 / oz |
| 2nd | 7 | oz | none | 7 oz | $1.49 | $1.49 / 7 oz | $0.212 / oz |
Interest is the cost of borrowing money, typically expressed as a percentage of the principal amount borrowed
Future: calculate interest including principal...principal x interest rate (rate plus "1" being the principal). e.g. $1,000 x 1.25% = $1,250| Civilization | Time Period | Region | Key Contributions & Legacy |
|---|---|---|---|
| Mesopotamia | c. 3500–539 BCE | Middle East | Writing (cuneiform), law codes (Hammurabi), urban planning |
| Minoan civilization | c. 3100–1100 BCE | Crete, Aegean Sea | Art, architecture, and trade |
| Ancient Egypt | c. 3100–30 BCE | Nile Valley, Africa | Hieroglyphics, pyramids, centralized monarchy, early medicine |
| Indus Valley Civilization | c. 2600–1900 BCE | South Asia | Advanced sanitation, grid cities, trade networks |
| Maya Civilization | c. 2000 BCE–1697 CE | Mesoamerica | Astronomy, calendar systems, pyramids, glyph writing |
| Ancient China | c. 1600 BCE–1912 CE | East Asia | Paper, printing, compass, Confucianism, dynastic rule |
| Ancient Greece | c. 800–146 BCE | Mediterranean | Democracy, philosophy, architecture, Olympic Games |
| Roman Empire | 27 BCE–476 CE (West) | Europe, Mediterranean | Law, engineering, military strategy, Latin language |
| Islamic Caliphates | c. 632–1258 CE | Middle East, North Africa | Algebra, medicine, architecture, preservation of classical texts |
| Mongol Empire | 1206–1368 CE | Eurasia | Largest contiguous empire, trade (Silk Road), military innovation |
| Ottoman Empire | 1299–1922 CE | Middle East, Europe | Architecture, legal systems, cultural synthesis |
| Inca Empire | c. 1438–1533 CE | Andes, South America | Road systems, terrace farming, centralized economy |
| British Empire | 1583–1997 CE | Global | Industrialization, global trade, parliamentary governance |
LibreWolf is a free and open-source web browser based on Firefox, designed with a strong emphasis on privacy and security. It removes telemetry, disables certain features for enhanced privacy, and includes tools like uBlock Origin to block ads and trackers, making it a popular choice for users seeking a more secure browsing experience.
Menu ➜ Tools ➜ Tools Browser for some useful items. Also use the following URL links for other useful pages.
| URL | Purpose |
|---|---|
about:about |
meta-list of all available about pages |
about:config |
advanced settings editor—modify hidden preferences |
about:support |
system info, troubleshooting, profile details |
about:preferences |
main settings UI (LibreWolf-hardened) |
about:preferences#privacy |
direct link to privacy settings |
about:preferences#search |
search engine configuration |
about:preferences#librewolf |
LibreWolf-specific settings panel |
about:profiles |
view and manage browser profiles |
about:networking |
inspect DNS, sockets, and network stats |
about:cache |
view browser cache contents |
about:memory |
analyze memory usage and GC behavior |
about:performance |
live tab performance metrics |
about:processes |
process-level breakdown (sandboxing, threads) |
about:logins |
saved passwords (if enabled) |
about:downloads |
download history |
about:certificate |
certificate viewer |
about:crashes |
crash reports (telemetry disabled in LibreWolf) |
about:policies |
enterprise policies (LibreWolf uses overrides.cfg) |
about:debugging#/runtime/this-firefox |
tabs, extensions, and workers grouped together |
| URL | Purpose |
|---|---|
about:preferences#librewolf |
exposes LibreWolf’s hardened defaults and toggles |
about:config |
pre-hardened with privacy/security tweaks from LibreWolf team |
about:preferences |
stripped of Firefox Sync, Pocket, and telemetry options |
about:addons |
manage extensions, themes, and plugins |
| Name | Author | Purpose | Notes / Configuration |
|---|---|---|---|
| Auto Tab Discard | tlintspr | Reduce memory by unloading inactive tabs | Default settings fine; discard delay optional |
| Chameleon | sereneblue | Fingerprint randomization & privacy hardening | Set to “Random on startup”; disable timezone spoofing (you use PST) |
| Firefox Multi-Account Containers | Firefox | Isolate identities, cookies, and logins | Create Work / Personal / Shopping containers; assign auto‑rules |
| Stylus | Stylus Team, Jeremy Schomery | Custom CSS for websites | Import your nightTab theme; optional tweaks for panes.us |
| Terms of Service; Didn’t Read | ToS;DR | Quick privacy & terms summaries | No configuration needed; passive reference tool |
| nightTab | zombieFox | Custom new‑tab dashboard | Import your JSON theme; enable local storage backup |
| Setting | Value | What it actually does |
|---|---|---|
browser.startup.page |
3 |
Tells the browser to "Resume previous session" on start. |
privacy.clearOnShutdown.history |
false |
Crucial. If this is true, it wipes the session |
privacy.clearOnShutdown.cookies |
false |
Keeps you logged into sites like Gmail or Gemini. |
privacy.clearOnShutdown.sessions |
false |
Prevents the "tabs" themselves from being cleared. |
identity.fxaccounts.enabled |
true |
Optional. If you want to use Firefox Sync to keep extensions/bookmarks in sync. |
#!/usr/bin/env bash
set -euo pipefail
#set -x
# tabs.sh; 2026-05-04; Kent M Kohlmeyer
usage( )
{
printf '\e[1;33mUsage: %s [head] [form] [wide] [kill]\e[0m\n' "$(basename "$0")" >&2
exit 2
}
re='^[0-9]+$'
gigibytes=""
head=0
form=0
wide=0
kill=0
for arg in "$@"; do
if [[ $arg =~ $re && -z $gigibytes ]]
then
gigibytes=$arg
continue
fi
case $arg in
head) head=1 ;;
form) form=1 ;;
wide) wide=1 ;;
kill) kill=1 ;;
*) ;; # ignore any other token silently
esac
done
[[ -n $gigibytes ]] || usage
mebibytes=$(( gigibytes * 1048576 ))
pids=$(for p in /proc/[0-9]*
do
pid=${p#/proc/}
grep -q Isolate "$p/comm" 2>/dev/null && printf '%s\n' "$pid"
done || true)
if [[ -z $pids ]]
then
printf '\e[1;32mNo Isolated Web Content processes found.\e[0m\n'
exit 0
fi
if (( head ))
then
output=$(top -o '%MEM' -b -n1 | grep -E "^[tT%M]|^$|PID|Isolate\+$")
header="$(echo "$output" | grep -v 'Isolate+' | wc -l)"
echo "$output" | head -n $(($header + $gigibytes))
exit 0
fi
# Get PID, RSS, CMD for those PIDs and filter by RSS threshold
output=$(ps -o pid=,rss=,cmd= -p $pids 2>/dev/null | awk -v threshold="$mebibytes" '$2 > threshold')
if [[ -n $output ]]
then
if (( form ))
then
printf "%7s %-7s %s\n" "PID" "RSS" "CMD"
if(( wide ))
then
printf '%s\n' "$output"
else
echo "$output" | cut -c1-128
fi
printf "%7s " "CNT"
printf "%d\n" $(awk 'END {print NR}' <<< "$output")
elif (( kill ))
then
awk '{print $1}' <<< "$output" | xargs -r -n1 -- kill --
pidsKilled=$(awk '{printf "%s ", $1}' <<< "$output")
printf '\e[1;31mKill sent to: %s\e[0m\n' "$pidsKilled"
else
printf '%s\n' "$output"
fi
else
printf '\e[1;32mNo tab(s) are over %s gigibyte(s).\e[0m\n' "$gigibytes"
fi
Address bar: about:config ➜ browser.backspace_action ➜ default = "2" # change to "0" to have "Backspace" navigate to previous page (Alt + Left Arrow)
Shift + Esc for Task Manager
file_cheatsheets/shortcut/librewolf.cht at main · scillidan/file_cheatsheets · GitHub
A desktop environment (DE) is a comprehensive suite of applications and tools that provide a graphical interface for users. It includes:
Examples of DEs include KDE, GNOME, and Xfce. These environments are designed to be user-friendly and require minimal setup.
A window manager (WM) is a more lightweight software component that manages the placement and appearance of application windows. It focuses on:
Examples of WMs include i3, Openbox, and Fluxbox. They can be used independently or alongside a desktop environment.
| Feature | Desktop Environment | Window Manager |
|---|---|---|
| Complexity | More complex, includes many components | Simpler, focuses on window management |
| Resource Usage | Generally higher resource usage | Lower resource usage |
| User Experience | Integrated and user-friendly | Requires more setup and customization |
| Customization | Limited to provided options | Highly customizable |
Both options have their advantages, and the choice depends on user needs and preferences.
The companies that own and operate the inherited, old copper wire local phone networks—known as Incumbent Local Exchange Carriers (ILECs)—are the ones who still hold the Baby Bell and GTE/Independent Telephone Company copper infrastructure.
| Category Name | Telecom Term | Description | Examples |
| I. Bell System Legacy | RBOCs / Baby Bells | The companies created from the 1984 breakup of AT&T (the Regional Bell Operating Companies). They own the original copper in the densest, most profitable areas. | AT&T (SBC/BellSouth) and Verizon (Bell Atlantic, plus acquired GTE areas). |
| II. Independent Legacy | Major Independent ILECs | Large telephone companies that were never part of the original Bell System monopoly but had their own incumbent monopolies in rural and less-dense areas. | CenturyTel (now Lumen/Brightspeed), GTE (now part of Verizon/Frontier/Ziply), and Frontier's original markets. |
| III. Modern ILEC Buyers | New ILEC/Spin-Offs | Companies formed recently to purchase, consolidate, and eventually upgrade large chunks of copper infrastructure from the two categories above. | Brightspeed (purchased assets from Lumen) and Ziply Fiber (purchased assets from Frontier/Verizon). |
| Carrier Category | Remaining ILEC Copper Owner | Original Legacy Copper | States Where They Operate Copper |
| The Big Two | AT&T (SBC/BellSouth) | Southwestern Bell, BellSouth, Pacific Telesis, Ameritech, etc. | Primarily the 22 original Baby Bell states (outside the former US West/Qwest area). |
| The National ILEC | Lumen Technologies (FKA CenturyLink) |
Former US West/Qwest and CenturyTel ILEC territories. | Retains the copper network for the remaining 16 states (primarily the old US West/Qwest region). |
| The Focused ILEC | Verizon | Former Bell Atlantic and some GTE territories (primarily in the Northeast and Mid-Atlantic). | Limited footprint; largely focused on their fiber build-out (FiOS) and wireless. |
| New ILEC Buyers | Brightspeed | Former Lumen/CenturyLink copper assets. | 20 states, primarily the former CenturyTel footprint. |
| Regional Players | Ziply Fiber | Former GTE/Frontier assets. | Pacific Northwest (OR, WA, ID, MT). |
| Frontier Communications | Former Verizon assets (mainly in the South/Midwest/West) and other independents. | Select rural and suburban markets across many states. |
Frames per second (FPS) measures how many frames are rendered in one second. To convert milliseconds per frame (ms/frame) to FPS, use the inverse relationship, since there are 1,000 milliseconds in a second:
FPS = 1000 / ms per frame
Example: For 100 ms per frame, FPS = 1000 / 100 = 10 FPS.
Reasoning: If each frame takes 100 ms, you can fit 10 frames in 1,000 ms (1 second). Round to 2 decimals for precision, but whole numbers are common for simplicity. Lower ms = higher FPS (smoother); higher ms = lower FPS (choppier).
This formula is linear and direct—no advanced math needed. For a table, I selected common intervals (1-500 ms) to show the range from ultra-fast to slow.
| ms per Frame | FPS |
|---|---|
| 1 | 1000.00 |
| 8 | 125.00 |
| 16 | 62.50 |
| 33 | 30.30 |
| 50 | 20.00 |
| 100 | 10.00 |
| 167 | 6.00 |
| 250 | 4.00 |
| 333 | 3.00 |
| 500 | 2.00 |
<head>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="A brief description of your webpage for SEO.">
<meta name="keywords" content="HTML, CSS, JavaScript, your, keywords, here">
<meta name="author" content="Your Name">
<title>Your Page Title</title>
<!-- Favicon Links -->
<link rel="icon" href="/favicon.ico" type="image/x-icon"> <!-- Fallback -->
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<!-- CSS Stylesheets -->
<link rel="stylesheet" href="styles.css">
<!-- Internal Styles -->
<style>
body
{
font-family: Arial, sans-serif;
}
/* Add any other internal styles here */
</style>
<!-- JavaScript Scripts -->
<script src="script.js" defer></script> <!-- Defer attribute ensures it loads after the HTML -->
<script>
// Internal JavaScript can also go here
console.log( 'Page loaded!' );
</script>
</head>
<meta charset>: Specifies the character encoding.<meta name="viewport">: Makes your site responsive.<meta> tags: Useful for SEO, such as description, keywords, and author.defer attribute to ensure scripts load after the HTML is parsed without blocking the page rendering.This structure allows for clarity and organization within the <head>, helping with both page performance and maintainability.
jq . filename.json
jq < filename.json
cat filename.json | jq
echo '{"key": "value"}' | jq
| Operation | Command Example | Description |
|---|---|---|
| Pretty-print JSON |
jq . file.json
|
Formats JSON for better readability. |
| Extract a field |
jq '.field' file.json
|
Retrieves the value of a specific field. |
| Filter arrays |
jq '.array[]' file.json
|
Outputs each element in an array on a new line. |
| Combine filters |
jq '.field1, .field2' file.json
|
Retrieves multiple fields at once. |
jq is an essential tool for anyone working with JSON data, especially in scripting and data processing tasks. Its ability to handle complex queries and transformations makes it invaluable for developers and data engineers.
This categorization helps in understanding the complexity and application of different programming languages.
Understanding these levels helps in choosing the right programming language for specific tasks and projects.

Alphabets: Latin, Greek & Cyrillic
Related:
List of writing systemsU.S. Freight Companies
| Company Name | Founded | Revenue (USD) | Employees | Headquarters |
|---|---|---|---|---|
| UPS Inc. | 1907 | 97.3 billion | 543,000 | Atlanta, Georgia |
| FedEx Corp. | 1971 | 20.6 billion | 850,000+ | Memphis, Tennessee |
| XPO Logistics | 1989 | 12.8 billion | 44,000 | Greenwich, Connecticut |
| J.B. Hunt Transport Services Inc. | 1961 | 12.16 billion | 29,056 | Lowell, Arkansas |
| Knight-Swift Transport Services | 1990 | 4.67 billion | 28,000+ | Phoenix, Arizona |
U.S. Freight Companies (Train)
| Company Name | Headquarters Location | States Operated | Key Features |
|---|---|---|---|
| BNSF Railway | Fort Worth, Texas | 28 | Extensive network, significant intermodal services |
| CSX Transportation | Jacksonville, Florida | 23 | Focus on intermodal and bulk transport |
| Canadian National Railway (CN) | Montreal, Canada | 20 (U.S. routes) | Operates in both Canada and the U.S. |
| Canadian Pacific Kansas City (CPKC) | Calgary, Canada | 20 (U.S. routes) | Cross-border operations with Mexico |
| Norfolk Southern Railway | Norfolk, Virginia | 22 | Strong presence in the eastern U.S. |
| Union Pacific Railroad | Omaha, Nebraska | 23 | Largest rail network in the U.S. |
U.S. Logistics Companies
| Rank | Company | Gross Revenue (Millions) | Services Offered |
|---|---|---|---|
| 1 | Amazon Logistics | $28,600 | E-commerce fulfillment, last-mile delivery |
| 2 | UPS (United Parcel Service) | $17,600 | Integrated logistics, supply chain management |
| 3 | C.H. Robinson | $15,647 | Third-party logistics, freight brokerage |
| 4 | Kuehne + Nagel | $7,156 | Sea, air, and road logistics |
| 5 | Total Quality Logistics | $6,884 | Full truckload, LTL, intermodal services |
| 6 | FedEx Logistics | $1,590 | Express shipping, freight services |
| 7 | CEVA Logistics | $3,580 | Contract logistics, air and ocean freight |
| 8 | DB Schenker | $2,850 | Supply chain management, freight forwarding |
| 9 | Penske Logistics | $4,308 | Transportation, logistics management |
| 10 | Echo Global Logistics | $3,700 | Freight brokerage, supply chain solutions |
The main semiconductor equipment manufacturers include ASML, Applied Materials, Lam Research, and Tokyo Electron. These companies are leaders in providing the tools and systems necessary for semiconductor manufacturing.
| Rank | Company | Ticker | Area/Step | Specialty | Key Products | Country | Headquarters | Year Founded | Founder(s) | Employees | Sales ($B) | Market Cap ($B) | Market Share % | 2025 AI Strategic Notes |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | ASML | ASML | Lithography | EUV Monopoly | EUV/DUV Scanners | Netherlands | Veldhoven | 1984 | Philips & ASMI | 44,000+ | 35.0 | 399.4 | 83% | High-NA EUV is the gatekeeper for 2nm chips. |
| 2 | Applied Materials | AMAT | Deposition | "Semiconductor Supermarket" | Endura, Centura | USA | Santa Clara, CA | 1967 | M. McNeilly | 35,700+ | 28.6 | 216.6 | 25% | Essential for Backside Power Delivery (BSPDN). |
| 3 | Lam Research | LRCX | Etch | NAND & HBM Etch King | Sense.i, Kiyo | USA | Fremont, CA | 1980 | David K. Lam | 18,600+ | 19.6 | 211.0 | 52% | Vital for 12-layer HBM3e/HBM4 memory stacks. |
| 4 | Tokyo Electron | 8035.T | Litho/Etch | EUV Track Monopoly | Clean Track, Tactras | Japan | Tokyo | 1963 | Higashi/Kubodera | 16,000+ | 16.0 | 91.0 | 90% (Tracks) | Mandatory partner; every ASML unit needs a TEL track. |
| 5 | KLA Corp | KLAC | Metrology | The "Eyes" of the Fab | Archer, SpectraShape | USA | Milpitas, CA | 1975 | Levy & Anderson | 15,200+ | 12.5 | 166.6 | 50%+ | AI-driven inspection for 2nm yield management. |
| 6 | ASM Intl | ASM.AS | ALD | ALD Market Leader | Pulsar, Synergos | Netherlands | Almere | 1968 | A. del Prado | 4,600+ | 3.8 | 27.5 | 55% | Primary supplier for Atomic Layer Deposition. |
| 7 | SCREEN | 7735.T | Cleaning | Wet Processing Leader | SU-3300 | Japan | Kyoto | 1943 | T. Ishida | 6,000+ | 3.3 | 8.4 | 45% | Dominates cleaning for massive AI GPU dies. |
| 8 | Advantest | 6857.T | Test | HBM Memory Testing | V93000, T5833 | Japan | Tokyo | 1954 | I. Takeda | 6,500+ | 3.2 | 91.2 | 50% (Memory) | Primary tester for NVIDIA's AI memory stacks. |
| 9 | Teradyne | TER | Test | Logic & SoC Testing | UltraFLEX, J750 | USA | N. Reading, MA | 1960 | D’Arbeloff/Nichols | 6,500+ | 2.9 | 30.3 | 40% (SoC) | Primary tester for custom AI accelerators. |
| 10 | Kokusai Elec | 6525.T | Thermal | Batch Furnace Leader | Large Batch Furnaces | Japan | Tokyo | 1949 | N/A (Hitachi) | 5,000+ | 1.6 | 7.1 | 20% | Leading thermal bonding for 3D packaging. |
| 11 | Varian (AMAT) | AMAT | Ion Implant | Doping Monopoly | VIISta Trident | USA | Gloucester, MA | 1959 | Varian Brothers | ~1,500 | 1.1 | N/A | 70% | Standard for ion implantation in logic chips. |
| HM | AOSL | AOSL | Power Management | AI Server Power Specialist | MOSFETs, DrMOS, Power ICs | Bermuda (USA Ops) | Sunnyvale (Fab: Hillsboro) | 2000 | Mike Chang | 2,500+ | ~$0.7B | ~$0.85B | Niche Leader | Critical for NVIDIA 800V AI rack power delivery. |
These companies play a vital role in the semiconductor supply chain, impacting technology development and production capabilities globally.
This pane documents a complete, clean LMDE7 (Linux Mint Debian Edition 7 'Gigi') installation and configuration. It captures the intended state of the system — the architecture, identity, mounts, scripts, and conventions that define how this workstation is built and maintained.
This manual reflects the ideal, curated environment of a fresh LMDE7 install. Temporary files, editor swap files, timestamped backups, and other ephemeral artifacts are intentionally omitted to avoid noise and preserve clarity. Only meaningful, intentional components are documented.
The goal is to provide a reproducible, narrative‑driven reference that future‑you can use to rebuild the system exactly, without re‑debugging or rediscovering decisions.
bash-5.2$ ls -ld /lost+found
drwx------ 2 root root 16384 Jan 28 22:43 /lost+found
bash-5.2$ printf "$(ls -lct /etc | tail -1 | awk '{print $6, $7, $8}') $(date +%Y)\n"
Jan 28 22:44 2026
bash-5.2$ ls -lct /boot/
total 151660
-rw-r--r-- 1 root root 142887732 Jan 28 22:50 initrd.img-6.12.48+deb13-amd64
drwxr-xr-x 6 root root 4096 Jan 28 22:49 grub
-rw-r--r-- 1 root root 12109760 Jan 28 22:47 vmlinuz-6.12.48+deb13-amd64
-rw-r--r-- 1 root root 283306 Jan 28 22:44 config-6.12.48+deb13-amd64
-rw-r--r-- 1 root root 83 Jan 28 22:44 System.map-6.12.48+deb13-amd64
drwxr-xr-x 2 root root 4096 Dec 31 1969 efi
bash-5.2$
#] kemiko@lmde:~ 20:10:26 0 [# fastfetch
`.-::---.. kemiko@lmde
.:++++ooooosssoo:. -----------
.+o++::. `.:oos+. OS: LMDE 7 (gigi) x86_64
:oo:.` -+oo: Host: HP Compaq Elite 8300 SFF
`+o/` .::::::-. .++-` Kernel: Linux 6.12.48+deb13-amd64
`/s/ .yyyyyyyyyyo: +o-` Uptime: 11 days, 20 hours, 51 mins
`so .ss ohyo` :s-: Packages: 1994 (dpkg)
`s/ .ss h m myy/ /s`` Shell: bash 5.2.37
`s: `oo s m Myy+-o:` Display (DELL ST2420L): 1920x1080 @ 60 Hz in 24" [External]
`oo :+sdoohyoydyso/. DE: Cinnamon 6.4.13
:o. .:////////++: WM: Muffin (X11)
`/++ -:::::- WM Theme: Mint-L-Dark-Orange-kemiko (Mint-Y)
`++- Theme: Mint-L-Darker-Orange [GTK2/3/4]
`/+- Icons: Mint-Y-Sand [GTK2/3/4]
.+/. Font: Ubuntu (10pt) [GTK2/3/4]
.:+-. Cursor: Bibata-Modern-Classic (24px)
`--.`` Terminal: GNOME Terminal 3.56.2
Terminal Font: DejaVu Sans Mono (10pt)
CPU: Intel(R) Core(TM) i5-3470 (4) @ 3.60 GHz
GPU: Intel Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller @ 1.10 GHz [Integrated]
Memory: 16.91 GiB / 31.23 GiB (54%)
Swap: 0 B / 16.00 GiB (0%)
Disk (/): 28.38 GiB / 197.34 GiB (14%) - ext4
Disk (/media/kemiko/Kent): 45.67 GiB / 57.75 GiB (79%) - exfat [External]
Local IP (eno1): 192.168.1.6/24
Locale: en_US.UTF-8
#] kemiko@lmde:~ 20:32:40 0 [#
#] kemiko@lmde:~ 20:15:48 0 [# ls /var/log/journal/ 08f04386adf845ac8a5373839e927012 #] kemiko@lmde:~ 20:15:55 0 [# ls /var/log/journal/08f04386adf845ac8a5373839e927012/ system.journal user-1000.journal #] kemiko@lmde:~ 20:15:58 0 [# file /var/log/journal/08f04386adf845ac8a5373839e927012/ /var/log/journal/08f04386adf845ac8a5373839e927012/: setgid, directory #] kemiko@lmde:~ 20:16:08 0 [# ls -la /var/log/journal/08f04386adf845ac8a5373839e927012/ total 40976 drwxr-sr-x+ 2 root systemd-journal 4096 Jan 29 00:54 . drwxr-sr-x+ 3 root systemd-journal 4096 Jan 28 23:52 .. -rw-r-----+ 1 root systemd-journal 33554432 Feb 10 20:15 system.journal -rw-r-----+ 1 root systemd-journal 8388608 Feb 10 20:15 user-1000.journal #] kemiko@lmde:~ 20:16:16 0 [# ls -lah /var/log/journal/08f04386adf845ac8a5373839e927012/ total 41M drwxr-sr-x+ 2 root systemd-journal 4.0K Jan 29 00:54 . drwxr-sr-x+ 3 root systemd-journal 4.0K Jan 28 23:52 .. -rw-r-----+ 1 root systemd-journal 32M Feb 10 20:15 system.journal -rw-r-----+ 1 root systemd-journal 8.0M Feb 10 20:15 user-1000.journal #] kemiko@lmde:~ 20:16:19 0 [# journalctl --disk-usage Archived and active journals take up 40M in the file system. #] kemiko@lmde:~ 20:17:10 0 [# ls -lh /var/log/journal total 4.0K drwxr-sr-x+ 2 root systemd-journal 4.0K Jan 29 00:54 08f04386adf845ac8a5373839e927012 #] kemiko@lmde:~ 20:17:34 0 [# ls -lh /var/log/journal/08f04386adf845ac8a5373839e927012 total 41M -rw-r-----+ 1 root systemd-journal 32M Feb 10 20:20 system.journal -rw-r-----+ 1 root systemd-journal 8.0M Feb 10 20:15 user-1000.journal #] kemiko@lmde:~ 20:20:37 0 [# sudo mkdir -p /etc/systemd/journald.conf.d [sudo] password for kemiko: #] kemiko@lmde:~ 20:21:40 0 [# sudo vi /etc/systemd/journald.conf.d/99-journal.conf #] kemiko@lmde:~ 20:22:21 0 [# sudo cat /etc/systemd/journald.conf.d/99-journal.conf [Journal] Storage=persistent SystemMaxUse=200M SystemKeepFree=500M MaxFileSec=1month Compress=yes Seal=yes SyncIntervalSec=5m #] kemiko@lmde:~ 20:22:26 0 [# sudo systemctl restart systemd-journald #] kemiko@lmde:~ 20:22:34 0 [# journalctl --disk-usage Archived and active journals take up 40M in the file system. #] kemiko@lmde:~ 20:22:40 0 [#
#] kemiko@lmde:~ 20:38:19 0 [# systemd-analyze blame
3min 1.083s getty@tty3.service
9.460s blueman-mechanism.service
9.380s e2scrub_reap.service
6.740s dev-sda6.device
5.691s udisks2.service
4.576s systemd-journal-flush.service
4.135s accounts-daemon.service
3.813s NetworkManager.service
3.676s NetworkManager-wait-online.service
3.627s ModemManager.service
3.584s debian-system-adjustments.service
3.531s sysfsutils.service
3.509s apparmor.service
3.216s lvm2-monitor.service
3.114s apt-daily.service
3.101s polkit.service
3.095s avahi-daemon.service
3.023s bluetooth.service
2.945s thermald.service
2.904s dbus.service
2.579s fwupd.service
2.537s dkms.service
2.387s switcheroo-control.service
2.249s systemd-udevd.service
2.242s xfs_scrub_all.service
1.982s networking.service
1.858s plymouth-start.service
1.839s systemd-modules-load.service
1.822s rsyslog.service
1.806s sysstat.service
1.718s boot-efi.mount
1.679s home-kemiko.mount
1.581s systemd-tmpfiles-setup-dev-early.service
1.423s plocate-updatedb.service
1.349s systemd-tmpfiles-setup.service
1.282s systemd-logind.service
1.247s systemd-fsck@dev-disk-by\x2duuid-6B65\x2d512B.service
1.218s lm-sensors.service
1.171s grub-common.service
1.089s wpa_supplicant.service
1.036s systemd-random-seed.service
965ms run-rpc_pipefs.mount
939ms man-db.service
864ms rpcbind.service
690ms apt-daily-upgrade.service
656ms nfs-blkmap.service
630ms plymouth-read-write.service
535ms ifupdown-pre.service
513ms systemd-udev-trigger.service
501ms power-profiles-daemon.service
457ms systemd-binfmt.service
453ms colord.service
452ms rpc-statd-notify.service
441ms ufw.service
418ms logrotate.service
384ms systemd-udev-load-credentials.service
352ms systemd-sysctl.service
#] kemiko@lmde:~ 20:38:22 0 [# systemd-analyze critical-chain
The time when unit became active or started is printed after the "@" character.
The time the unit took to start is printed after the "+" character.
graphical.target @24.081s
└─power-profiles-daemon.service @23.578s +501ms
└─multi-user.target @23.576s
└─getty.target @23.576s
└─getty@tty1.service @23.576s
└─plymouth-quit-wait.service @23.309s +264ms
└─systemd-user-sessions.service @23.269s +36ms
└─remote-fs.target @23.193s
└─home-kemiko.mount @21.513s +1.679s
└─network-online.target @21.511s
└─NetworkManager-wait-online.service @17.833s +3.676s
└─NetworkManager.service @14.017s +3.813s
└─dbus.service @11.106s +2.904s
└─basic.target @10.902s
└─paths.target @10.901s
└─systemd-ask-password-wall.path @4.097s
└─-.mount @4.009s
└─-.slice @4.009s
#] kemiko@lmde:~ 20:38:34 0 [# systemd-analyze time
Startup finished in 5.946s (kernel) + 24.081s (userspace) = 30.027s
graphical.target reached after 24.081s in userspace.
#] kemiko@lmde:~ 20:38:40 0 [#
#] kemiko@lmde:~ 00:35:01 0 [# sudo fallocate -l 16G /swapfile #] kemiko@lmde:~ 00:35:03 0 [# sudo file /swapfile swapfile: data #] kemiko@lmde:~ 00:35:05 0 [# sudo ls -la /swapfile -rw-r--r-- 1 root root 16G Jan 29 00:35 /swapfile #] kemiko@lmde:~ 00:35:07 0 [# sudo chmod 600 /swapfile #] kemiko@lmde:~ 00:35:09 0 [# ls -la /swapfile -rw------- 1 root root 16G Jan 29 00:45 /swapfile #] kemiko@lmde:~ 00:35:11 0 [# sudo mkswap /swapfile Setting up swapspace version 1, size = 16 GiB (17179865088 bytes) no label, UUID=ec7c51b0-fd71-4e5e-a813-b0600c21a248 #] kemiko@lmde:~ 00:43:13 0 [# file /swapfile /swapfile: Linux swap file, 4k page size, little endian, version 1, size 4194303 pages, 0 bad pages, no label, UUID=ec7c51b0-fd71-4e5e-a813-b0600c21a248 #] kemiko@lmde:~ 00:35:15 0 [# sudo swapon /swapfile #] kemiko@lmde:~ 00:35:15 0 [# sudo swapon --show NAME TYPE SIZE USED PRIO /swapfile file 16G 0G -2 #] kemiko@lmde:~ 00:35:17 0 [# sudo echo -e "\n/swapfile none swap defaults 0 0" >> /etc/fstab #] kemiko@lmde:~ 00:35:19 0 [#
#] kemiko@lmde:~ 00:37:05 0 [# cat /proc/sys/vm/swappiness 60 #] kemiko@lmde:~ 00:37:06 0 [# sudo sysctl vm.swappiness=20 vm.swappiness = 20 #] kemiko@lmde:~ 00:37:08 0 [# vi /etc/sysctl.d/99-swappiness.conf #] kemiko@lmde:~ 00:37:12 0 [# cat /etc/sysctl.d/99-swappiness.conf # LMDE7 tuned swappiness for HDD-backed swap # 60 — default; the kernel starts swapping earlier than necessary on large‑RAM systems # 45 — moderate; delays swapping but still uses it under load # 20 — conservative; RAM is preferred strongly, swap used only when memory is genuinely cold # 10 — very conservative; swap becomes a safety net rather than an active tool vm.swappiness=20 #] kemiko@lmde:~ 00:37:13 0 [#
#] kemiko@lmde:~/doc 21:03:24 0 [# cat /etc/fstab #### Static Filesystem Table File proc /proc proc defaults 0 0 # /dev/sda6 UUID=23d11aea-dccd-4fb7-ac4a-468a31c5351f / ext4 rw,errors=remount-ro 0 1 # old /dev/sdb2 entry removed # UUID=D51A-5103 /boot/efi vfat defaults 0 1 # /dev/sda5 UUID=6B65-512B /boot/efi vfat defaults 0 1 # swap file UUID=ec7c51b0-fd71-4e5e-a813-b0600c21a248 /swapfile none swap defaults 0 0 #192.168.1.3:/share/homes/LMDE7 /home/kemiko nfs4 rw,noatime,_netdev 0 0 #192.168.1.3:/share/homes/LMDE7 /home/kemiko nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 # ============================== # NAS – NFS Mounts (192.168.1.3) # ============================== ############################################################################### # Home directory mount (NFSv4) # # This mount remains intentionally unchanged. While the rest of the NAS # subsystem has been unified under NFSv3 for clarity and consistency, the # /home/kemiko directory continues to use the NAS’s NFSv4 pseudo-root path: # # /share/homes/LMDE7 → /home/kemiko # # Rationale: # - This mount is stable and functioning correctly under NFSv4. # - It is isolated from the unified NFSv3 mounts and does not introduce # namespace ambiguity or mixed-path conflicts. # - Migrating the home directory is optional and can be done later without # affecting the unified NFSv3 subsystem. # # This block documents the decision to preserve the existing behavior. ############################################################################### 192.168.1.3:/share/homes/LMDE7 /home/kemiko nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 ############################################################################### # Unified NFSv3 configuration # # After investigating the NAS’s mixed NFSv3/NFSv4 behavior, all shares have # been migrated to NFSv3 for clarity, consistency, and predictable behavior. # # Rationale: # - The NAS exports all shares cleanly via NFSv3 using literal paths: # /homes, /Multimedia, /3D-Models, /Public # - NFSv4 on this NAS uses a pseudo-root (/share/NFSv=4) and only mapped # some shares (homes, Multimedia, 3D-Models) into the virtual namespace. # - /Public was *not* mapped into the NFSv4 namespace, causing /share/Public # to fail even though the directory existed. # - NFSv3 avoids pseudo-root complexity, vendor quirks, and inconsistent # namespace mapping. All shares behave uniformly under NFSv3. # # New unified mounts (alphabetized): 192.168.1.3:/3D-Models /media/nas/models nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 192.168.1.3:/homes /media/nas/homes nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 192.168.1.3:/Multimedia /media/nas/media nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 192.168.1.3:/Public /media/nas/public nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 # # End unified NFSv3 block. ############################################################################### /home/kemiko.localbind/.cache /home/kemiko/.cache none bind 0 0 /home/kemiko.localbind/.mozilla /home/kemiko/.mozilla none bind 0 0 /home/kemiko.localbind/.thumbnails /home/kemiko/.thumbnails none bind 0 0 /home/kemiko.localbind/Apps /home/kemiko/Apps none bind 0 0 /home/kemiko.localbind/.opera/opera /home/kemiko/.config/opera none bind 0 0 /home/kemiko.localbind/.chromium/chromium /home/kemiko/.config/chromium none bind 0 0 /home/kemiko.localbind/.librewolf/librewolf /home/kemiko/.config/librewolf none bind 0 0 #] kemiko@lmde:~/doc 21:03:29 0 [#
] kemiko@lmde:~ 21:21:59 0 [# cat /etc/default/grub
# If you change this file or any /etc/default/grub.d/*.cfg file,
# run 'update-grub' afterwards to update /boot/grub/grub.cfg.
# For full documentation of the options in these files, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`( . /etc/os-release && echo ${NAME} )`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
# If your computer has multiple operating systems installed, then you
# probably want to run os-prober. However, if your computer is a host
# for guest OSes installed via LVM or raw disk devices, running
# os-prober can cause damage to those guest OSes as it mounts
# filesystems to look for things.
#GRUB_DISABLE_OS_PROBER=false
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE/GOP/UGA
# you can see them in real GRUB with the command `videoinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
#] kemiko@lmde:~ 21:22:02 0 [#
#] kemiko@lmde:~ 21:32:06 0 [# cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 lmde # The following lines are desirable for IPv6 capable hosts ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts 192.168.1.1 rtr 192.168.1.2 web 192.168.1.3 nas 192.168.1.4 box 192.168.1.5 vmw 192.168.1.6 lmd #] kemiko@lmde:~ 21:32:08 0 [#
#] kemiko@lmde:~ 21:32:08 0 [# cat /etc/hostname lmde #] kemiko@lmde:~ 21:32:09 0 [#
#] kemiko@lmde:~ 20:51:31 0 [# df -h Filesystem Size Used Avail Use% Mounted on udev 16G 0 16G 0% /dev tmpfs 3.2G 1.5M 3.2G 1% /run /dev/sda6 198G 29G 159G 16% / tmpfs 16G 353M 16G 3% /dev/shm tmpfs 5.0M 8.0K 5.0M 1% /run/lock tmpfs 16G 161M 16G 2% /tmp /dev/sda5 512M 4.0K 512M 1% /boot/efi 192.168.1.3:/share/homes/LMDE7 1.1T 825G 234G 78% /home/kemiko tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty1.service tmpfs 3.2G 6.0M 3.2G 1% /run/user/1000 /dev/sdc1 58G 46G 13G 80% /media/kemiko/Kent 192.168.1.3:/3D-Models 1.1T 825G 234G 78% /media/nas/models 192.168.1.3:/homes 1.1T 825G 234G 78% /media/nas/homes 192.168.1.3:/Multimedia 1.1T 825G 234G 78% /media/nas/media 192.168.1.3:/Public 1.1T 825G 234G 78% /media/nas/public LibreWolf.x86_64.AppImage 117M 117M 0 100% /tmp/.mount_LibreWbcNNNp tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty4.service tmpfs 1.0M 0 1.0M 0% /run/credentials/getty@tty3.service tmpfs 1.0M 0 1.0M 0% /run/credentials/systemd-journald.service #] kemiko@lmde:~ 20:51:32 0 [#
#] kemiko@lmde:~/doc 20:57:44 0 [# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 465.8G 0 disk
├─sda1 8:1 0 100M 0 part
├─sda2 8:2 0 262.9G 0 part
├─sda3 8:3 0 750M 0 part
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 513M 0 part /boot/efi
└─sda6 8:6 0 201.6G 0 part /home/kemiko/.config/librewolf
/home/kemiko/.config/chromium
/home/kemiko/.config/opera
/home/kemiko/Apps
/home/kemiko/.thumbnails
/home/kemiko/.cache
/home/kemiko/.mozilla
/
sdb 8:16 1 0B 0 disk
sdc 8:32 1 57.8G 0 disk
└─sdc1 8:33 1 57.7G 0 part /media/kemiko/Kent
sr0 11:0 1 1024M 0 rom
#] kemiko@lmde:~/doc 20:57:48 0 [# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1 ntfs System AC26EA3D26EA07E2
├─sda2 ntfs Windows DAE2EB50E2EB2F85
├─sda3 ntfs Recovery image AA9CEC0A9CEBCF3F
├─sda4
├─sda5 vfat FAT32 6B65-512B 512M 0% /boot/efi
└─sda6 ext4 1.0 23d11aea-dccd-4fb7-ac4a-468a31c5351f 158.9G 14% /home/kemiko/.config/librewolf
/home/kemiko/.config/chromium
/home/kemiko/.config/opera
/home/kemiko/Apps
/home/kemiko/.thumbnails
/home/kemiko/.cache
/home/kemiko/.mozilla
/
sdb
sdc
└─sdc1 exfat 1.0 Kent C04D-548C 12.1G 79% /media/kemiko/Kent
sr0
#] kemiko@lmde:~/doc 20:57:52 0 [#
Selection Path Priority Status ------------------------------------------------------------ 0 /usr/bin/vim.basic 30 auto mode 1 /usr/bin/vim.basic 30 manual mode 2 /usr/bin/vim.tiny 15 manual mode
The browser environment is optimized for performance and stability. All high‑churn browser profiles live on local SSD storage and are bind‑mounted over the NFS‑backed home directory. This removes NFS latency from profile operations while preserving the expected paths under /home/kemiko. All browser caches live under ~/.cache, which is also SSD‑local.
| Browser | Profile Path (User View) | SSD‑Local Source Path | Cache Location | Notes |
|---|---|---|---|---|
| Firefox | /home/kemiko/.mozilla |
/home/kemiko.localbind/.mozilla |
/home/kemiko/.cache/mozilla |
Native package; stable profile structure. |
| Opera | /home/kemiko/.config/opera |
/home/kemiko.localbind/.opera/opera |
/home/kemiko/.cache/opera |
Includes built‑in extensions and partner data. |
| Chromium | /home/kemiko/.config/chromium |
/home/kemiko.localbind/.chromium/chromium |
/home/kemiko/.cache/chromium |
Clean, predictable profile tree. |
| LibreWolf | /home/kemiko/.config/librewolf |
/home/kemiko.localbind/.librewolf/librewolf |
/home/kemiko/.cache/librewolf |
AppImage; Firefox‑style profile layout. |
Browser profiles generate constant I/O: tabs, sessionstore, cookies, history, favicons, extensions, service workers, and local storage. On NFS this causes UI stalls, slow startup/shutdown, and unnecessary NAS load. Keeping profiles and caches on SSD removes network latency from these operations while still allowing the NFS home directory to remain the structural source of truth.
All browsers follow the same migration pattern to keep the layout consistent and reversible.
pgrep that no processes remain./home/kemiko.localbind/.librewolf.systemctl daemon-reload, then mount -a.lsblk, SSD contents, and that the NFS mountpoint is empty.SSD (sda6) /home/kemiko.localbind/ .cache/ .mozilla/ .thumbnails/ Apps/ .opera/opera/ .chromium/chromium/ .librewolf/librewolf/ NFS Home (/share/homes/LMDE7) /home/kemiko/ .cache/ → bind → SSD .mozilla/ → bind → SSD .thumbnails/ → bind → SSD Apps/ → bind → SSD .config/opera/ → bind → SSD .config/chromium/ → bind → SSD .config/librewolf/ → bind → SSD
The browser ecosystem follows three principles: high‑churn data stays on SSD for performance, the NFS‑backed home directory remains the structural source of truth, and every browser uses the same bind‑mount grammar. This keeps behavior consistent across applications while preserving a clear separation between volatile SSD state and durable NAS‑backed home data.
# Profile Location ➜ lmde (local) and LMDE7 (NAS) ~/.librewolf/<profile-name>/ # Identify active profile about:profiles # Backup (simple directory copy) cp -a ~/.config/librewolf/librewolf/<profile-name> ~/bck/librewolf-profile-$(date +%Y%m%d) # Restore (overwrite existing profile) cp -a ~/bck/librewolf-profile-YYYYMMDD ~/.librewolf/<profile-name> # Notes: # - Root Directory contains the real profile: prefs, extensions, containers, history, bookmark, session data. # - Local Directory is cache-only and is regenerated automatically. # - Safe to restore while LibreWolf is closed. # - If profile name changes, update profiles.ini via about:profiles. # - Good practice: back up before major config changes or extension experiments. # - Optional: confirm restored profile contents: # ls ~/.librewolf/<profile-name>/
The VPN layer provides network‑level privacy: protection from ISP‑level data harvesting, secure public Wi‑Fi usage, and predictable encrypted routing. This is not for anonymity or evasion; it is the network equivalent of LibreWolf’s browser‑level protections — clean, transparent, and privacy‑first.
Mullvad aligns with the same philosophy as LibreWolf: privacy by design, no telemetry, no marketing gimmicks, and no data harvesting. It is one of the few VPNs with transparent ownership, public audits, and a strict no‑logs stance backed by verifiable behavior.
| Property | Mullvad Behavior |
|---|---|
| No account | Uses a random account number; no email or personal info required. |
| Flat pricing | €5/month, no sales, no upsells, no gimmicks. |
| No telemetry | No analytics, no tracking, no background reporting. |
| Audited | Regular independent audits of infrastructure and client software. |
| Transparent ownership | No holding companies, no hidden investors, no data brokers. |
| Browser‑agnostic | Works with LibreWolf, Firefox, Chromium, Opera, and Tor Browser. |
# Install Mullvad VPN sudo apt install mullvad-vpn # Enable and start the daemon sudo systemctl enable --now mullvad-daemon # Verify service status mullvad status # Connect (after adding your account number) mullvad relay set location us mullvad connect
# Check external IP curl https://am.i.mullvad.net/ip # Check Mullvad connection status mullvad status # Confirm DNS is routed through Mullvad curl https://am.i.mullvad.net/dns
The VPN layer (Mullvad) and the browser layer (LibreWolf, Firefox, Chromium, Opera) operate independently but complement each other. Mullvad provides encrypted network routing, while each browser maintains its own privacy posture, containers, and SSD-local profiles. This separation keeps behavior predictable and avoids cross-layer interference.
| Layer | Responsibility | Notes |
|---|---|---|
| Mullvad VPN | Encrypts all outbound WAN traffic | LAN traffic remains local; no browser integration required. |
| Browser | Privacy controls, containers, isolation | Profiles stored on SSD; caches under ~/.cache. |
| NFS Home | Structural source of truth | Bind-mounted paths ensure consistent layout. |
| SSD Localbind | High-churn data storage | Profiles, caches, and browser state remain fast and local. |
# Check external IP (browser) https://am.i.mullvad.net/ip # Check DNS routing (browser) https://am.i.mullvad.net/dns # Check VPN status (terminal) mullvad status
The VPN and browser layers remain intentionally decoupled. Mullvad handles transport-level privacy, while each browser maintains its own isolation model. This mirrors the system’s overall design: SSD for performance, NFS for structure, containers for context separation, and Mullvad for encrypted routing.
This diagram shows how browser traffic moves through the system: from the application layer, through the Linux networking stack, into the Mullvad tunnel, and out to the WAN. Local LAN traffic bypasses the VPN and is routed directly by the kernel.
+------------------+
| Browser Layer |
| (LibreWolf, etc) |
+---------+--------+
|
v
+------------------+
| Linux Kernel |
| Routing Table |
+---------+--------+
| (LAN traffic)
|------------------> Local Network (NAS, router, devices)
|
v (WAN traffic)
+------------------+
| Mullvad Tunnel |
| (wg-mullvad) |
+---------+--------+
|
v
+------------------+
| Internet |
| (WAN egress) |
+------------------+
The separation between LAN and WAN routing ensures predictable behavior: local services remain reachable, while all external traffic is encrypted and routed through Mullvad.
These practices keep Mullvad predictable, stable, and aligned with the system’s privacy model. They mirror the same philosophy used for browser profiles, containers, and SSD-local storage.
mullvad status and https://am.i.mullvad.net to confirm tunnel state.mullvad relay set location us) for predictable IPs.Mullvad runs as a systemd-managed service (mullvad-daemon) on LMDE7. It integrates cleanly with NetworkManager and the Linux routing stack, providing stable and predictable behavior.
# Check service status systemctl status mullvad-daemon # Start or stop the service sudo systemctl start mullvad-daemon sudo systemctl stop mullvad-daemon # Enable autostart at boot sudo systemctl enable mullvad-daemon
# View Mullvad logs journalctl -u mullvad-daemon # Check current tunnel state mullvad status # Show active relay mullvad relay get
This behavior keeps Mullvad predictable and non-intrusive, fitting cleanly into the system’s layered architecture: SSD-local browser profiles, NFS-backed home structure, container isolation, and encrypted WAN routing.
# Fingerprinting & Privacy privacy.resistFingerprinting = true # privacy.clearOnShutdown.* # review per‑item behavior privacy.clearOnShutdown.cookies = false # keeps logged into Gmail, etc # Notes on shutdown‑clearing behavior: # - Disk cache is already disabled in LibreWolf, so keeping memory cache is harmless. # - Cookie isolation (cookieBehavior=5) prevents cross‑site tracking even with persistent cookies. # - Keeping session cookies aligns with session restore and avoids unnecessary re‑authentication. network.cookie.cookieBehavior = 5 # total isolation (LibreWolf default) # Session Restore browser.startup.page = 3 # 0 → Show a blank page, 1 → Show your home page, 2 → Show the last visited page, 3 → Restore previous session (windows + tabs) browser.sessionstore.resume_from_crash = true # HTTPS Enforcement dom.security.https_only_mode = true # Performance & Memory browser.tabs.unloadOnLowMemory = true browser.cache.disk.enable = false # LibreWolf default (disk cache disabled) # Extensions & Scopes extensions.autoDisableScopes = 0 # allow user-installed extensions without prompts # URL Bar Suggestions browser.urlbar.suggest.bookmark = true browser.urlbar.suggest.history = true browser.urlbar.suggest.openpage = true browser.urlbar.suggest.searches = false browser.urlbar.suggest.topsites = false# Uncheck the following Settings → Privacy & Security → Cookies and Site Data → ✔ Delete cookies and site data when LibreWolf is closed # Uncheck the following Settings → Privacy & Security → History → ✔ Clear history when LibreWolf closes # Per‑Site Privacy # LibreWolf includes a per‑site “Forgetful Browsing” toggle. # Check via: Padlock icon → Forgetful Browsing # Must be OFF for: # - accounts.google.com # - mail.google.com # - copilot.microsoft.com
# Containers (per‑site isolation) Work ➜ all Google services Banking ➜ financial sites Personal ➜ email, social, general browsing Shopping ➜ Amazon, eBay, etc. Temp ➜ optional throwaway container (create if needed) # Auto‑assignment (recommended) Open site in correct container ➜ Right‑click tab ➜ "Always Open in This Container" # Notes: # - Containers isolate cookies, logins, and site data per context. # - Works perfectly with cookieBehavior=5 (total isolation). # - Data stored in containers.json inside the profile (included in backups). # - Review container assignments occasionally to keep behavior predictable.
Refinements to GNOME Terminal behavior, keybindings, and ergonomics to align with the LMDE7 environment and left-hand–centric workflow.
dconf dump /org/gnome/terminal/legacy/keybindings/ > ~/bck/gnome-terminal-keybindings.backup.txt # Tab navigation dconf write /org/gnome/terminal/legacy/keybindings/next-tab "'<Primary>Tab'" dconf write /org/gnome/terminal/legacy/keybindings/prev-tab "'<Primary><Shift>Tab'" dconf write /org/gnome/terminal/legacy/keybindings/switch-to-tab-N "'<Primary>N'" # 1–9 # Menubar toggle (left-hand, Alt+1) dconf write /org/gnome/terminal/legacy/keybindings/toggle-menubar "'<Alt>1'"
dconf is the low-level key/value store used by GSettings. GNOME Terminal, Cinnamon, GTK themes, and many system components read and write their configuration here.
# Read a key dconf read /path/to/key # Write a key dconf write /path/to/key "'value'" # Reset a key to default dconf reset /path/to/key # Dump an entire subtree dconf dump /path/to/subtree/ # Load a dump back in dconf load /path/to/subtree/ < filename.dconf # Search for keys dconf dump / | grep -i something # List keys under a subtree dconf list /path/to/subtree/
Frequently used dconf paths relevant to LMDE7, GNOME Terminal, Cinnamon, and the visual identity of the desktop.
/org/gnome/terminal/legacy/keybindings/ /org/gnome/terminal/legacy/profiles:/
/org/cinnamon/theme/name /org/cinnamon/desktop/keybindings/
/org/gnome/desktop/interface/gtk-theme
This subsystem unifies the shell identity across all users, including root, scripts, cron, and non-interactive shells. It replaces per-user dotfile sourcing with a single canonical loader.
ID_DIR="/etc/identity.d" [ -f "$ID_DIR/aliases" ] && . "$ID_DIR/aliases" [ -f "$ID_DIR/defines" ] && . "$ID_DIR/defines" [ -f "$ID_DIR/functions" ] && . "$ID_DIR/functions"
. /home/kemiko/.bashrc . /etc/profile.d/identity.sh
/etc/identity.d/ aliases defines functions
All new scripts should source the system identity loader to ensure consistent access to aliases, defines, and functions:
. /etc/profile.d/identity.sh
LMDE7 integrates with the NAS using a mix of NFSv4 and NFSv3. The home directory uses NFSv4 via the NAS pseudo‑root, while all other shares use NFSv3 exports. UID/GID alignment is required for correct permissions.
# Local user kemiko: UID 1000, GID 1000 # NAS user (must match) NAS account: UID 1000, GID 1000
If UID/GID do not match, permissions will appear incorrect even when mounts succeed. Root may appear to work while the user sees denied access.
/home/kemiko ← NFSv4 home directory /media/nas/models ← NFSv3 /media/nas/homes ← NFSv3 /media/nas/media ← NFSv3 /media/nas/public ← NFSv3
NFSv4 Home Directory
# kemiko home directory (NFSv4 via pseudo-root) 192.168.1.3:/share/homes/LMDE7 /home/kemiko nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0
Unified NFSv3 Shares
# 3D-Models share (NFSv3) 192.168.1.3:/3D-Models /media/nas/models nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 # homes share (NFSv3) 192.168.1.3:/homes /media/nas/homes nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 # Multimedia share (NFSv3) 192.168.1.3:/Multimedia /media/nas/media nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0 # Public share (NFSv3) 192.168.1.3:/Public /media/nas/public nfs rw,noatime,_netdev,tcp,rsize=8192,wsize=8192 0 0
High‑churn directories are kept on local SSD storage to avoid NFS latency and reduce NAS load. These mounts override the NFS home directory for specific paths.
/home/kemiko.localbind/.cache /home/kemiko/.cache none bind 0 0 /home/kemiko.localbind/.mozilla /home/kemiko/.mozilla none bind 0 0 /home/kemiko.localbind/.thumbnails /home/kemiko/.thumbnails none bind 0 0 /home/kemiko.localbind/Apps /home/kemiko/Apps none bind 0 0 /home/kemiko.localbind/.opera/opera /home/kemiko/.config/opera none bind 0 0 /home/kemiko.localbind/.chromium/chromium /home/kemiko/.config/chromium none bind 0 0 /home/kemiko.localbind/.librewolf/librewolf /home/kemiko/.config/librewolf none bind 0 0
The NAS exposes /share/homes/LMDE7 under the NFSv4 pseudo‑root. Other shares are exported individually via NFSv3. Therefore:
admin://). They are virtual and break permissions./media/nas/public)./share/homes/LMDE7)./3D-Models, /homes, /Public, /Multimedia)._netdev prevents boot race conditions.This section documents the machine’s host identity, SSH configuration, and curated user‑level scripts. These artifacts define how LMDE7 identifies itself on the network and how it interacts with other systems.
Local hostname resolution, LAN aliases, and IPv6 loopback entries.
127.0.0.1 localhost 127.0.1.1 LMDE7 # IPv6 loopback and multicast ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts # LAN host aliases 192.168.1.1 rtr 192.168.1.2 web 192.168.1.3 nas 192.168.1.4 box 192.168.1.5 vmw 192.168.1.6 lmd
Notes:
LMDE7 is the local hostname (127.0.1.1).SSH keys and configuration for remote access. Keys are user‑specific and should be backed up securely.
~/.ssh/ config id_rsa id_rsa.pub known_hosts known_hosts.old
~/.ssh/config (example structure)
# ~/.ssh/config
Host nas
HostName 192.168.1.3
User kemiko
IdentityFile ~/.ssh/id_rsa
Host web
HostName 192.168.1.2
User root
IdentityFile ~/.ssh/id_rsa
Notes:
id_rsa is the private key (keep secure).id_rsa.pub is the public key.known_hosts tracks trusted remote hosts.config defines host aliases and identity rules.The ~/bin directory contains curated, portable scripts used across systems. These scripts inherit the identity layer via . /etc/profile.d/identity.sh.
~/bin/
backup.sh
free.sh
configsFind.sh # index all custom config files using header grammar
monitor/
allMounts.sh
filesystem.sh
homeMounts.sh
nasHealth.sh
network.sh
systemHealth.sh
index.sh # menu to run monitor scripts
configsFind.sh is the environment indexer. It scans the system for all custom configuration files using your header grammar (# filename; date; identity). This script is part of the identity‑layer ecosystem and ensures every curated artifact can be located instantly.
Notes:
monitor/ contains the system health and mount inspection suite..backup/ stores timestamped script backups.~/bin minimal and portable.System‑wide scripts and overrides installed under /usr/local/bin. These take precedence over distribution‑provided binaries.
/usr/local/bin/ highlight-mint yelp mate-system-monitor gnome-help search apt free.sh backup.sh
Notes:
free.sh and backup.sh are root‑level versions of user scripts.target/ huge, the binary tiny, the first build slow, and installation trivial.
~/.cargo/registrytarget/target/debug/ or target/release/cargo run or copy binary to PATHcargo build — compile project (debug)cargo build --release — optimized buildcargo run — build + runcargo check — type‑check without compilingcargo clean — delete target/cargo install crate-name — install binary crate into ~/.cargo/bincargo update — update dependenciescargo tree — view dependency graphCargo.toml — project manifestCargo.lock — exact dependency versionssrc/ — your source codesrc/main.rs — entry point for binary cratessrc/lib.rs — entry point for library cratestarget/ — compiled output (huge)target/debug/ — debug binariestarget/release/ — optimized binaries~/.cargo/registry/ — global crate source cache~/.cargo/bin/ — installed binaries from cargo installPop!_OS version:
COSMIC version:
Kernel:
GPU / Drivers:
Shell:
Notes:
Installed Components:
Missing / Incomplete Components (Pop!_OS 24.04):
Notes:
The COSMIC Stack pane provides a full architectural overview of COSMIC, including the current hybrid GNOME/Mutter underpinnings and the future Rust compositor design. Use it as a conceptual reference for understanding workspace behavior, monitor semantics, compositor responsibilities, and COSMIC’s long‑term evolution.
.desktop file in ~/.local/share/applications.chmod +x ~/.local/share/applications/<file>.desktop.update-desktop-database ~/.local/share/applications..desktop file in ~/.local/share/applications.xdg-desktop-menu.~/.local/share/flatpak/exports/share/applications./usr/share/applications is ignored.apps.json generation; launcher is UI-only.cosmic-app-library --reindex does nothing (backend missing)..desktop file.~/.local/share/applications/gnome-terminal-wrapper.desktopterminal;term;shell;console;gnome;bash;System;Utility;Profiles & preferences:
Shell customizations:
Hotkeys:
.desktop files appear; system apps remain invisible until the indexer exists.xdg-desktop-menu (one of the few system apps that does)..desktop file in ~/.local/share/applications.Commands that work:
update-desktop-database ~/.local/share/applications — refreshes user-level desktop entries.Commands that do not work (in this Alpha 6 era build):
cosmic-comp --replace — deprecated; compositor no longer has a kiosk child.cosmic-app-library --reindex — no backend indexer exists yet.systemctl --user restart cosmic-launcher.service — service not present in this build.See also:
Esc.Esc clears the highlight; second Esc reaches Vim.Esc in Vim..desktop files appear instantly in launcher..desktop files in ~/.local/share/applications.update-desktop-database refreshes user entries reliably.| App | Source | Path | Visible in COSMIC | Notes |
|---|---|---|---|---|
| GNOME Terminal | apt | /usr/share/applications |
No | Wrapper required |
| GNOME Terminal (wrapper) | user | ~/.local/share/applications |
Yes | Manual ritual; uses org.gnome.Terminal icon |
| Chromium (Snap) | snap | /var/lib/snapd/desktop/applications |
No | Uninstalled (not a Snap fan) |
| Chromium (Flatpak) | Flatpak | ~/.local/share/flatpak/exports/share/applications |
Yes | Auto-indexed |
| LibreWolf | Flatpak | ~/.local/share/flatpak/exports/share/applications |
Yes | Auto-indexed |
| LocalSend | Flatpak | ~/.local/share/flatpak/exports/share/applications |
Yes | Auto-indexed |
| Opera | deb | /usr/share/applications |
Yes | Registers via xdg-desktop-menu |
| calc | user | ~/.local/share/applications |
Yes | Manual ritual |
| free.sh | user | ~/.local/share/applications |
Yes | Manual ritual |
dpkg -l: flatpak list~/.local/share/applications for stray entries.flatpak list to ensure app provenance remains clean.~/.local/share/applications.update-desktop-database ~/.local/share/applications
~/.config snapshots before system upgrades.A conceptual map of the COSMIC desktop environment, showing the full architecture from kernel → Wayland → compositor → window manager → shell. This pane documents how COSMIC works today, how it inherits behavior from GNOME/Mutter, and how the future Rust compositor will reshape the entire stack.
COSMIC (Current) Architecture ┌──────────────────────────────┐ │ COSMIC SHELL │ ├──────────────────────────────┤ │ COSMIC WINDOW MANAGER │ ├──────────────────────────────┤ │ MUTTER (Compositor) │ ├──────────────────────────────┤ │ WAYLAND LAYER │ ├──────────────────────────────┤ │ KERNEL │ └──────────────────────────────┘ COSMIC (Future Rust Compositor) Architecture ┌──────────────────────────────┐ │ COSMIC SHELL │ ├──────────────────────────────┤ │ COSMIC WINDOW MANAGER │ ├──────────────────────────────┤ │ COSMIC COMPOSITOR │ ├──────────────────────────────┤ │ WAYLAND LAYER │ ├──────────────────────────────┤ │ KERNEL │ └──────────────────────────────┘ COSMIC (Reality Edition) Architecture ┌──────────────────────────────────────┐ │ COSMIC SHELL │ ├──────────────────────────────────────┤ │ COSMIC WINDOW MANAGER │ ├──────────────────────────────────────┤ │ MUTTER (Wayland Compositor) │ │ + XWAYLAND (Embedded X11 Server) | ← THIS is where the clown lives ├──────────────────────────────────────┤ │ WAYLAND LAYER │ ├──────────────────────────────────────┤ │ KERNEL │ └──────────────────────────────────────┘
COSMIC (Reality Edition) Architecture ┌──────────────────────────────────────┐ │ COSMIC SHELL │ ├──────────────────────────────────────┤ │ COSMIC WINDOW MANAGER │ ├──────────────────────────────────────┤ │ MUTTER (Wayland Compositor) │ │ + XWAYLAND (Embedded X11 Server) | ← THIS is where the clown lives ├──────────────────────────────────────┤ │ WAYLAND LAYER │ ├──────────────────────────────────────┤ │ KERNEL │ └──────────────────────────────────────┘
This section documents all behavior inherited from X11 via Xwayland, including:
These behaviors are not caused by COSMIC, GNOME Terminal, or Mutter. They originate from X11 selection semantics implemented inside Xwayland. They will disappear once COSMIC transitions to its Rust compositor.
COSMIC still inherits several behaviors from GNOME/Mutter, including workspace stacks, monitor independence, wraparound logic, wallpaper persistence quirks, drag-to-workspace hitboxes, and theme inconsistencies. These will change once the Rust compositor replaces Mutter.
GNOME prioritizes simplicity and minimalism, often removing customization. COSMIC prioritizes user control, tiling, multi-monitor workflows, and hardware integration. The split was inevitable and strategically necessary.
Use this section for experiments, quirks, and discoveries:
In this system, there are two completely different cut/paste clipboards. They’re separate buffers, and different apps treat them differently, which is why paste behavior sometimes feels inconsistent until you know the rules.
We’re mapping how copy/paste actually behaves across X11, Wayland, terminals, and Vim. Nothing here is theoretical — it’s all observed behavior. Different apps use different clipboard systems (PRIMARY vs CLIPBOARD), and terminals interpret paste shortcuts differently depending on whether they’re X11 or Wayland. COSMIC Terminal adds a “selection lock” that requires two Escapes in Vim after pasting. We’re building small, focused matrices to document each behavior so the whole system becomes predictable instead of chaotic.
+------------------+------------------+-----------------------+----------+--------------------+------------------------------+--------------------+------------------------------------+ | Source Terminal | Target Terminal | Target Active First? | vi Mode | Highlight Present | Paste Method | Result | Notes | +------------------+------------------+-----------------------+----------+--------------------+------------------------------+--------------------+------------------------------------+ | COSMIC Terminal | GNOME Terminal | Yes | Normal | Yes | Middle‑click / Shift+Insert | Text inserted | vi does not enter insert mode | | COSMIC Terminal | GNOME Terminal | No | Normal | Yes | Middle‑click / Shift+Insert | No paste | Target must be active | | GNOME Terminal | COSMIC Terminal | Yes | Normal | Yes | Middle‑click / Shift+Insert | Text inserted | vi does not enter insert mode | | GNOME Terminal | COSMIC Terminal | No | Normal | Yes | Middle‑click / Shift+Insert | No paste | Target must be active | +------------------+------------------+-----------------------+----------+--------------------+------------------------------+--------------------+------------------------------------+
+-------+-----------------------------------+------------------------------------------------+------------------+------------------+--------------------------------------------+ | Step | LibreWolf Highlight | PRIMARY (Internal State) | Paste #1 Result | Paste #2 Result | Notes | +-------+-----------------------------------+------------------------------------------------+------------------+------------------+--------------------------------------------+ | 1 | No highlight | "abc" | — | — | Old PRIMARY still held by browser | | 2 | Highlight "xyz" | Still "abc" (ownership not updated yet) | — | — | Highlight event not fully propagated | | 3 | Middle-click into GNOME Terminal | "abc" | "abc" | — | Terminal requests PRIMARY before update | | 4 | After first paste | "xyz" | — | — | Browser finally updates PRIMARY ownership | | 5 | Middle‑click again | "xyz" | — | "xyz" | Now the new PRIMARY is returned | +-------+-----------------------------------+------------------------------------------------+------------------+------------------+--------------------------------------------+
+------------------------------+----------------+---------------------+---------------------------------+----------------+-------------------------------------+ | Source App | Target App | Protocol Path | What Terminal Receives | What Vim Sees | Result | +------------------------------+----------------+---------------------+---------------------------------+----------------+-------------------------------------+ | LibreWolf → LibreWolf | X11 → X11 | X11 native | Paste event | Text | CLIPBOARD pasted | | LibreWolf → GNOME Terminal | X11 → X11 | Xwayland → X11 | Paste event (most of the time) | Text | CLIPBOARD pasted | | LibreWolf → GNOME Terminal | X11 → X11 | Xwayland → X11 | Raw key chord (rare race) | "<C-S-Insert>" | Literal chord printed | | LibreWolf → COSMIC Terminal | X11 → Wayland | Xwayland → Wayland | Raw key chord | "<C-S-Insert>" | Literal chord printed | | LibreWolf → COSMIC Terminal | X11 → Wayland | Xwayland → Wayland | No paste event | Nothing | No paste (PRIMARY empty/stale) | +------------------------------+----------------+---------------------+---------------------------------+----------------+-------------------------------------+
? in Bash reverse‑search (Esc ?), entering search mode without displaying the trigger character
This pane documents observed behavior across COSMIC Terminal, GNOME Terminal, X11, Wayland, and common applications. It will be updated only when new, verifiable behavior is discovered.
PANES is a multifunctional and customizable programs/notes system to help organize your life. It can be used to create reference notes, to do lists, time your tasks, play games, etc. There are already a many predefined panes, each with different purposes, managed by this window.
Some of the fun and interesting recent additions are:
• "Heidi's Salmon" pane resizes by dragging anywhere on the image and rotatons 360° with the mouse wheel.
• "North Pole" pane resizes by dragging anywhere on the image and rotatons 360° with the mouse wheel.
• "Neighbors Southwest Hikes" pane snaps to the next item horizontally and vertically.
• "Chuck Norris Jokes" pane randomly picks a joke with a click.
• "Chalkboard" pane imitates a real world chalkboard including many chalk colors and an eraser.
• "Cheat Sheet, "top" command" pane has an interactive find to hide/show items.
The "Graffiti" and "Calendar" panes are actually contol panels for two separate layers. Each layer is very customizable and are stacked in background to foreground order: Paper ➜ Graffiti ➜ Calendar ➜ All Panes.
Panes generally behave the way you’d expect if you are familiar with any GUI based operating system. Below you will find a description of general pane operation(s).
Double click the title bar to maximize and center a pane. Again to minimize and place back in the layout.
In the upper left corner of the pane are 3 symbols/buttons which can close, minimize, or maximize the pane.
The “x” symbol will close the whole pane. The pane can be reopened using the Control Panel “Open” dropdown menu. See Open section below.
The “-“ symbol will minimize the content of the pane leaving only the title bar showing. By default, on page load, content of the panes will start minimized.
The “+” symbol will maximize the content of the pane showing the title bar and content at the current placement.
In the upper right corner of the pane are 3 symbols/buttons which can change the placement of the pane...left, center, or right.
The “<“ symbol will move the pane to the immediate far left of the window.
The “o” symbol will open and center the pane in the window. Clicking it after the panes is open and center will close and place back in the layout. This is the same functionality as double clicking the title bar
The “>” symbol will move the pane to the immediate far right of the window.
Right click anywhere on the page to get a quick menu.
Double click on the footer or "CoNtRoL PaNeL" title bar to display the "About" pane. This pane includes the page loaded timestamp, page load elapsed seconds, page updated timestamp, color selection details, current window size, internet protocol, autonomous system, and visits information.
Below are general descriptions of the CoNtRoL PaNeL features to help you customize and use this site. Most of these functions are for general/user panes.
The developer has included a few predesigned themes that are pretty fantastic. Definitely try the “Pumpkin” theme as it is demonstrably the best. Leave the dropdown "blank/empty" if you want to retain other settings like Color, Paper, Layout, etc upon returning to this webpage. A "Theme" can be recreated without choosing its dropdown. Double click the "footer" or "CoNtRoL PaNeL" title bar to help with the colors.
Choose from the "Color" (dropdown) below then start sliding.
There are three sliders...red, green, and blue.
Open the "About" pane to see the numeric values.
Colors are customizable for the background, foreground, title color, title text, border, and buttons. Simply choose the item from the dropdown menu next to "Colors" label (below the color sliders) and adjust to your liking.
"Background" changes the background (wallpaper) color.
"Foreground" changes the color of content background for all panes.
"Title Color" changes the background color of the title bar for all the panes.
"Title Text" changes the font color of the title bar for all the panes.
"Buttons" changes the button (controls) color for all the panes.
"Border" changes the border for all the panes.
It is helpful to have the "About" pane open while adjusting colors to see the numeric values. Your color settings are saved to local storage.
You can choose from a selection of inspiring and creative background graphics/photos depending on your mood. You can further customize those to your liking by adjusting the colors as described in the Color Selection section. Play around until you find something you like. Hint: "X-Ray" through panes to reveal hidden items in some backgrounds.
Layout is a quick way to move the panes into organization on the page.
"Cascade" puts all panes into a descending/diagional starting from upper left to lower right on the page.
"Horizontal" puts all panes into horizontal/row alignment across the page.
"Random" puts all panes into a randomly placement on the page.
"Vertical" puts all panes into vertical/column alignment down the page.
"All Minimize" displays only the title bar hiding the content for all panes.
"All Maximize" displays the title bar and the content for all panes.
"All Close" completely hides all panes...putting in the "Open" dropdown.
"All Open" completely displays all panes...emptying from the "Open" dropdown.
See if you can find what you’re looking for!
Sort panes by Creation, Position, Title, or Updated.
Find/search for case insensitive title/content of a pane. After entering some text hit "Enter" or click on "Find" to start the search. The title bar will be highlighted for panes with found content. To clear the search...double click on "Find" or blank out the text box and hit "Enter". Searching with "broken" English is best...meaning leave out unimportant words, but enter the words using English grammar.
Open will remain empty until a pane has been closed using the “x” in the upper left corner. See the section on "General Pane Operation". If you desire to reopen a pane this is the place to do it.
The Edit functionality is the heart of the usefulness of the PANES page. Certain panes have editable and customizable text and links. Select which pane you’d like to customize and using standard HTML you can create lists and links. Title bars are customizable as well by changing the text at the top of the edit pane. Edits to the panes are stored locally only on your machine. So feel free to edit and modify to your hearts content. No other users will see or be affected by edits you make.
Beyond editing existing panes you can create a new pane to edit by pressing this button.
The Delete functionality can remove a pane, you have "Created", that you no longer want.
Caution: It is best to do a "Save" before an "Init".
"Save" button...saves local storage to a file of your choice.
"Init" button...clears local storage. The page will return to its initial state as if you haven't visited before.
"Export" button...saves RSS feed for the "Releases" pane to a file of your choice.
These panes are of their own class opposed to the "user" class. Most "CoNtRoL PaNeL" functions don't apply to these panes.
This pane.
A list of planned/wanted additions, updates, and fixes.
All page releases by date with a bullet list. This is a very detailed list going back to the beginning of the page's creation.
Maximize this pane to see through the other panes to view the "Paper" (background). There are hidden items to find in the images.
Some of the author's other sites.
A scratchpad for quick reminders or any other notes.
This timer starts when the page is loaded. It has five functions...start, pause, reset, lap, clear.
Controls for mp3/ogg files in "Audio Clips (music)" and "Audio Clips (phone)" panes.
Obviously not a physical remote control. It does control a list of site links. One or many can be opened at once. Your browser settings may need to be adjusted.
Tag anything you like on your wall (background) choosing font, color, position, rotation, etc.
The current full year calendar including lunar cycles. Colors can be chosen for Month Name, Day of Week, Weekdays, Weekends, and Borders
Enter plain text here for little temporary reminders. Look for the Easter eggs!!!