postgres-initial-linux-configuration-guide.webp

Postgres Initial Linux Configuration Guide

Accessing psql sudo -i -u postgres psql Create a new database and user Create a new user: CREATE USER theusername WITH PASSWORD 'thepassword'; Create a new database: CREATE DATABASE thedatabase; Grant privileges: GRANT ALL PRIVILEGES ON DATABASE thedatabase TO theusername; Allow Remote Access Edit postgresql.conf, usually located in /etc/postgresql/<version>/main/, and set listen_addresses = '*'. #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432 # (change requires restart) max_connections = 100 # (change requires restart) #reserved_connections = 0 # (change requires restart) #superuser_reserved_connections = 3 # (change requires restart) unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories # (change requires restart) #unix_socket_group = '' # (change requires restart) #unix_socket_permissions = 0777 # begin with 0 to use octal notation # (change requires restart) #bonjour = off # advertise server via Bonjour # (change requires restart) #bonjour_name = '' # defaults to the computer name # (change requires restart) # - TCP settings - # see "man tcp" for details #tcp_keepalives_idle = 0 # TCP_KEEPIDLE, in seconds; # 0 selects the system default #tcp_keepalives_interval = 0 # TCP_KEEPINTVL, in seconds; # 0 selects the system default #tcp_keepalives_count = 0 # TCP_KEEPCNT; # 0 selects the system default #tcp_user_timeout = 0 # TCP_USER_TIMEOUT, in milliseconds; # 0 selects the system default #client_connection_check_interval = 0 # time between checks for client # disconnection while running queries; # 0 for never Edit pg_hba.conf and add a line to allow connections — for example, host all all 0.0.0.0/0 scram-sha-256 — for network access. ...

April 5, 2026 · John Pili
bash-string-manipulation-in-program-arguments.webp

Bash string manipulation in program arguments

In this code snippet, I would like to run an application with a URL payload based on date and time. This code will be executed in a specific schedule everyday and I would like to dynamically inject the date and time in the program argument when the program executes. ./json2csv rules.json "ncp" "http://localhost:8080/api/zget?eid=get-ncp-mv-by-starttime-endtime&starttime;=$(date --date='yesterday' +\%Y-\%m-\%d)+00:00:00&endtime;=$(date --date='yesterday' +\%Y-\%m-\%d)+23:59:00&container;=false" > $(echo "nercc_mv_$(date --date='yesterday' +\%Y-\%m-\%d).csv") The way to do this is using the Bash String Manipulation Inside a string, the bash will evaluate statement inside “$()” in this example: ...

December 27, 2025 · John Pili
generate-a-self-signed-certificate-for-go.webp

Generate a self-signed certificate for Go

Use OpenSSL generate a self-signed certificate for Golang. In this code snippet I created a certificate with validity of 15 years. openssl genrsa -out server.key 2048 openssl req -new -x509 -sha256 -key server.key -out server.crt -days 5475 Once you create the certificate and key you can use it in your Golang HTTP like this 1package main 2 3import ( 4 "log" 5 "net/http" 6 "time" 7 8 "github.com/julienschmidt/httprouter" 9) 10 11func main() { 12 router := httprouter.New() 13 router.HandlerFunc(http.MethodGet, "/", func(w http.ResponseWriter, r *http.Request) { 14 w.WriteHeader(200) 15 w.Write([]byte("Hello in TLS")) 16 }) 17 18 httpServer := &http.Server{ 19 Addr: ":8080", 20 Handler: router, 21 ReadTimeout: 120 * time.Second, 22 WriteTimeout: 120 * time.Second, 23 } 24 25 log.Fatal(httpServer.ListenAndServeTLS("server.crt", "server.key")) // <- Listen and serve with TLS 26}

December 27, 2025 · John Pili
use-linux-diff-command-for-line-by-line-comparison.webp

Use Linux diff command for line by line comparison

Use Linux diff command to compare files line by line. This handy tool helps you identify line differences between files and console output. Command diff -y file1 file1 Marker Meaning | = line present in both files but the text differs. < = line present only in the left file. > = line present only in the right file. Examples Comparing two package.json files johnpili@com ~ % diff -y package1.json package2.json { { "name": "date-diff", | "name": "time-zones", "version": "0.0.0", "version": "0.0.0", "scripts": { "scripts": { "ng": "ng", "ng": "ng", "start": "ng serve", "start": "ng serve", "build": "ng build --base-href /tools/date-diff/ --config | "build": "ng build", "watch": "ng build --watch --configuration development", "watch": "ng build --watch --configuration development", "test": "ng test" "test": "ng test" }, }, "private": true, "private": true, "dependencies": { "dependencies": { "@angular/common": "^19.2.0", "@angular/common": "^19.2.0", "@angular/compiler": "^19.2.0", "@angular/compiler": "^19.2.0", "@angular/core": "^19.2.0", "@angular/core": "^19.2.0", "@angular/forms": "^19.2.0", "@angular/forms": "^19.2.0", "@angular/platform-browser": "^19.2.0", "@angular/platform-browser": "^19.2.0", "@angular/platform-browser-dynamic": "^19.2.0", "@angular/platform-browser-dynamic": "^19.2.0", "@angular/router": "^19.2.0", "@angular/router": "^19.2.0", "@tailwindcss/postcss": "^4.1.4", "@tailwindcss/postcss": "^4.1.4", "daisyui": "^5.0.28", "daisyui": "^5.0.28", "moment": "^2.30.1", | "moment-timezone": "^0.5.48", "postcss": "^8.5.3", "postcss": "^8.5.3", "rxjs": "~7.8.0", "rxjs": "~7.8.0", "tailwindcss": "^4.1.4", "tailwindcss": "^4.1.4", "tslib": "^2.3.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" "zone.js": "~0.15.0" }, }, "devDependencies": { "devDependencies": { "@angular-devkit/build-angular": "^19.2.8", "@angular-devkit/build-angular": "^19.2.8", "@angular/cli": "^19.2.8", "@angular/cli": "^19.2.8", "@angular/compiler-cli": "^19.2.0", "@angular/compiler-cli": "^19.2.0", "@types/jasmine": "~5.1.0", "@types/jasmine": "~5.1.0", "jasmine-core": "~5.6.0", "jasmine-core": "~5.6.0", "karma": "~6.4.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.7.2" "typescript": "~5.7.2" } } } } johnpili@com ~ % The example below shows how to use diff to compare installed PHP modules. This is very useful when you’re switching to a different version of PHP ...

October 19, 2025 · John Pili
git-cheat-sheet.webp

Git Cheat Sheet

Creating or cloning a Repository git init Initializes a new Git repository in the current directory git clone https://git[.]johnpili[.]com/path/to/repo.git Clones a repository using HTTPS protocol from a remote location git clone ssh://git[.]johnpili[.]com/path/to/repo.git Clones a repository using SSH protocol from a remote location git clone git://git[.]johnpili[.]com/path/to/repo.git Clones a repository using Git protocol from a remote location git clone ~/handler Clones a local repository from the home directory’s handler folder git clone –branch feature/query-loader https://git[.]johnpili[.]com/path/to/repo.git Clones a specific branch (feature/query-loader) from a remote repository Staging Area git status Shows the status of files in the working directory and staging area git add main.go Adds the specific file ‘main.go’ to the staging area git add . Adds all new and modified files in the current directory to the staging area git add environment Adds the ’environment’ directory or file to the staging area git rm main.go Removes ‘main.go’ from both the working directory and staging area git mv config.xml environment Moves ‘config.xml’ to the ’environment’ directory and stages the change git mv config.xml dev-config.xml Renames ‘config.xml’ to ‘dev-config.xml’ and stages the change git reset Unstages all files, keeping the working directory unchanged git reset main.go Unstages the specific file ‘main.go’, keeping the working directory unchanged git diff config.xml Shows unstaged changes in ‘config.xml’ compared to the staging area Commits: Creating Snapshots git commit Opens default editor to write a commit message and create a new commit git commit -m “Initial commit” Creates a new commit with the specified message without opening an editor git commit -am “Message” Stages all modified tracked files and commits them with the specified message git commit –amend Modifies the last commit by adding staged changes and/or editing the commit message git tag -a v2025.1 ef5bb78 -m “Release version 2025.1” Creates an annotated tag for commit ef5bb78 with a specified message without editor git tag Lists all tags in the repository Commit Logs git log Shows commit history with full commit messages git log -3 Shows only the last 3 commits git log –stat Shows commit history with files changed and number of modifications git log –before=“2025-01-21” Shows commits made before January 21, 2025. The Date formats in and are flexible (e.g., “2025-01-21”, “3 days ago”, “yesterday”) git log –after=“2025-01-15” Shows commits made after January 15, 2025 git log -p main.go Shows commit history with patches (changes) for main.go file git log –grep “Camunda” Shows commits whose message contains the word “Camunda”. --grep is case-sensitive by default; use -i flag for case-insensitive search git diff ef5bb78 ab0c0df Shows differences between two specific commits git show ab0c0df Shows details of a specific commit (changes, message, author, etc.) git show ab0c0df main.go Shows changes made to main.go file in the specific commit Branching git branch Lists all local branches (* marks current branch) git branch feature/user-login Creates a new branch named ‘feature/user-login’ at current position git checkout feature/query-loader Switches to existing branch ‘feature/query-loader’ git checkout -b feature/query-loader Creates and switches to new branch ‘feature/query-loader’ git switch -c feature/query-loader A modern alternative to git checkout.Creates and switches to new branch ‘feature/query-loader’ git branch -m feature/backdoor Renames current branch to ‘feature/backdoor’ git merge develop Merges ‘develop’ branch into current branch git branch -d feature/backdoor Deletes branch ‘feature/backdoor’ (if fully merged) git branch -D feature/backdoor Forces deletion of branch ‘feature/backdoor’ (even if not merged) git diff feature/query-loader develop Shows differences between ‘feature/query-loader’ and ‘develop’ branches git diff feature/query-loader main.go Shows changes to main.go file in ‘feature/query-loader’ vs current branch git branch –merged Lists branches merged into current branch git branch –no-merged Lists branches not yet merged git branch -v Shows last commit on each branch git branch -r Lists remote branches git branch -a Lists all branches (local and remote) git log –graph –all Shows commit history of all branches with ASCII graph visualization git log –graph –all –oneline A compact visualization of --graph Rebase git rebase develop Reapplies your current branch’s commits on top of the develop branch git rebase –abort Cancels an in-progress rebase and returns to the state before rebase started git rebase –continue Continues the rebase process after resolving conflicts git rebase -i Opens interactive rebase mode, allowing you to modify, reorder, or squash commits Important: Rebasing rewrites commit history, so it should generally be avoided on commits that have been pushed to shared repositories unless you’re absolutely sure about the implications. ...

April 27, 2025
Change Microsoft SQL Server Data Location

Change Microsoft SQL Server Data Location

Let’s say you have an existing Microsoft SQL data and want to move it to a different disk or directory. Running the query below shows the logical name and the file location of your schema. SELECT name AS FileLogicalName, physical_name AS FileLocation FROM sys.master_files WHERE database_id = DB_ID('HR'); Existing Location FileLogicalName FileLocation HR C:\MSSQL_DATA\OldPath\HR.mdf HR_log C:\MSSQL_DATA\OldPath\HR.ldf Target New Location FileLogicalName FileLocation HR D:\MSSQL_DATA\MSSQL15.MSSQLSERVER\MSSQL\Data\HR.mdf HR_log D:\MSSQL_DATA\MSSQL15.MSSQLSERVER\MSSQL\Data\HR.0.ldf Steps to move the database files Take the database offline ...

March 28, 2025 · John Pili
recursively-delete-files-with-a-specific-file-extension.webp

Recursively delete files with a specific file extension

Delete files with specified file extension recursively. This is useful when you want to remove those temporary files or those unwanted auto-generated artifacts inside nested folders. Be careful when using these commands because it will delete files permanently Linux Bash find . -type f -name "*.tmp" -delete find . -type f -name "*.tmp" -exec rm -v "{}" + Windows Powershell Get-ChildItem * -Include *.tmp -Recurse | Remove-Item

October 27, 2024 · John Pili
using-unix-domain-socket-in-go.webp

Using Unix Domain Socket in Go

You can use Unix Domain Socket aka AF_UNIX for your interprocess communication. Previously, It was only available in a Linux/Unix operating system until Microsoft added it in Microsoft Windows in the beginning of Insider build 17063. It offers better throughput and improved security package main import ( "log" "net" "net/http" "os" "os/signal" "syscall" ) func main() { socketPath := "uds.sock" socket, err := net.Listen("unix", socketPath) if err != nil { log.Fatal(err) } c := make(chan os.Signal, 1) signal.Notify(c, os.Interrupt, syscall.SIGTERM) go func(p string) { <-c if err := os.Remove(p); err != nil { os.Exit(1) } os.Exit(0) }(socketPath) m := http.NewServeMux() m.HandleFunc("GET /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("GET...")) }) m.HandleFunc("POST /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("POST...")) }) m.HandleFunc("PUT /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("PUT...")) }) m.HandleFunc("DELETE /", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("DELETE...")) }) if err := http.Serve(socket, m); err != nil { log.Fatal(err) } } Source Code https://github.com/johnpili/go-using-unix-domain-socket

February 14, 2024
Check JPA Query Type

Check JPA Query Type

I am developing a repository as a service application. An application that let users create their endpoints with queries via a web interface. This application uses either Hibernate or Eclipselink as a JPA provider. The challenge is to check if the supplied user string (query) is a native SQL or a JPQL and that Eclipselink and Hibernate handles this differently, so I decided to wrap it behind this simple checker. ...

January 28, 2024 · John Pili
using-vue-without-a-build-step.webp

Using Vue without a build step

Background I would like to share my experience using Vue 2 without a build step in my project and the key factors behind this approach. I started experimenting with Vue.js (Vue 2) back in 2020. One of the nice features of Vue is the ability to use the framework directly into HTML page without a build tool (compilation). This particular feature was the deciding factor in selecting this framework in migrating a jQuery-based web application. I also considered how easy it is to learn and train my team. ...

October 25, 2023 · John Pili