The Notebook

Notes for my future self, shared with the world. Technical deep dives, tutorials, and thoughts on software engineering.

rss_feed Subscribe to RSS
enable_ir_emitter_linux
linux

How to use IR Emitters on Linux

I wanted to use Face unlock on Linux and receive all the same features as Windows Hello. Using howdy and this guide, you can!

Read Article
howdy_add_face_error
linux

Resolve Howdy exception when adding your face

I wanted to setup face unlock on Linux with my new Dell XPS 13. This is how you can set it up for yourself!

Read Article
reset_windows_password_of_another_computer
windows

How to reset the Windows password of a locked computer

I recently found myself locked out of my old school laptop. I did not have the windows password or the ability to login to any account on the machine.

Read Article
how_to_fix_referenceError_globalthis_is_not_defined
typescript

How to fix ReferenceError: globalThis is not defined

"ReferenceError: globalThis is not defined" is an error produced by some newer JavaScript libraries as they access globalThis.

Read Article
refresh_new_tab_in_chrome_extension
google_chrome

How to fix refreshing on a new tab extension for Google Chrome

By default if you try to refresh custom new tab in a Google Chrome extension, you are met with a file not found error.

Read Article
the_story_of_my_first_chrome_extension
linux

The story of my first Chrome Extension and its tragic demise

I had the idea in my mind that I wanted to create and have my own chrome extension for a few years now.

Read Article
lazy_load_services_using_socket_activation
linux

Lazy load services using Socket Activation

Lazy loading services allows services to only be started once they are needed.

Read Article
make_a_parent_div_fit_children
css

How to make a div fit the size of its children

You can make a div fit the size of its children by using `display: inline-block`

Read Article
sleep_a_script_in_bash
bash

How to pause a script in Bash

In order to make a script in Bash pause, sleep or wait for a period of time you need to use the command `sleep`

Read Article
start_new_project_and_connect_to_firebase
flutter

Start a new Flutter project and Connect it to Firebase

It can be tricky to get a new Flutter project to connect to Firebase and work. Version mismatches can be a real killer!

Read Article
how_to_use_promises_in_google_app_script
google/google_apps_script

Use promises in Google Apps Scripts

To use the latest es6 Promises in google app scripts it is very trivial to do so.

Read Article
how_to_list_install_packages_in_linux
linux

List all installed apt packages in Linux

To list all the installed apt in linux you can use `apt list --installed`.

Read Article
how_to_get_the_last_array_element_using_typescript
typescript

Get the last element of an array in TypeScript

There are a few ways you can get the last element of an array in typescript

Read Article
my_rules_of_programing
general

My personal rules of programming

These are some rules I try and stick to while programming. I suggest you have a think about adopting these as I feel they are great values to code by.

Read Article
keep_phone_unlocked_while_developing
android

Keep phone unlocked while USB Debugging

It is a real time saver to keep your phone unlocked while developing an app. 'Stay awake mode' allows you to keep your phone unlocked.

Read Article
run_the_app_you_are_developing_on_your_device
android

Run the application you are developing on your device

There are a few steps and potential gotchas in setting up application debugging on your local device.

Read Article
how_to_request_scopes_on_google_apps_script
google/google_apps_script

How to request different scopes on a Google Apps Script

To request scopes in a Google Apps Script you need to add them to the appscript.json file.

Read Article
using_an_if_else_statement_in_lua
lua

IF/ELSE syntax in LUA

If/ If Else is an integral function in any program or script. This is the syntax for such statement in LUA.

Read Article
how_to_stop_xscreensaver_prompting_for_input
linux

How to make xscreensaver stop from promiting for user input

Sometimes xscreensaver will prompt the user to enter their password thinking they are trying to unlock the computer.

Read Article
show_git_branch_while_using_fish_terminal
linux/fish_terminal

How to show the git branch in Fish

Show the git branch on the end of the terminal prompt is a really useful modification as you can always see the branch you are on!

Read Article
show_the_current_git_user
git

How to find the current git user

To find the current git user you can use the following git command

Read Article
how_to_install_fish_terminal
linux/fish_terminal

Install fish terminal and set as the default terminal

Fish terminal is a great terminal. I was initially heisitant to try it but cnce I gave it a go I really liked it.

Read Article
how_to_grep_lines_before_and_after_match
linux

Get additional lines before and after grep match

To get additional lines before and after the grep match you can add the arg **-n**

Read Article
how_to_iterate_over_a_map_using_typescript
typescript

How to iterate over a map in Typescript

You can iterate over a map using the `forEach` method.

Read Article
insert_like_a_pro
sql

SQL INSERT, UPDATE, DELETE like a pro with RETURNING

You would recognise the following as a pretty typical `SQL` insert query with an extra line unlocking a powerful feature.

Read Article
efficiently_app
google_chrome

Efficiently: The Chrome extension to save your time!

Do you ever find yourself unconsciously opening webites out of habbit?

Read Article
disable_hibernation_on_windows
windows

Disable Hibernation on Windows to speed up your pc

Having Windows hibernation on is a big killer due to the `Hiberfil.sys` file.

Read Article
clean_up_unused_docker_space
docker

Clear up unused space in docker

Every time you run `docker compile` on a Dockerfile a container is created, taking up space on your computer.

Read Article
enable_caching_of_image_in_google_storage
google

Enable the caching of Images in Google Cloud Storage Buckets

To enable the caching of images in Google Cloud Storage buckets you need to set the file or bucket to public and set the `Cache-Control` attribute.

Read Article
fix_firebase_hosting_routing
angular/firebase

Fix the routing while using Firebase hosting

To fix the routing you need to include the rewrites section in `firebase.json`

Read Article
get_the_ip_address_in_linux
linux

Get IP Address in Linux

To get the IP Address in linux you can use `ifconfig` or `hostname -I`

Read Article
connect_bitbucket_pipeline_with_google_source_repo
bitbucket

Connect Bitbucket Pipelines with Google Source Repositories

To allow Bitbucket Pipelines access to your personal Google Source Repositories you need to do a few steps.

Read Article
how_to_calculate_the_remaining_page_scroll
angular

Calculate the remaining scroll distance in Angular

To Calculate the remaining scrollbar distance in Angular you need to perform some simple calculations on various window and document variables.

Read Article
get_firestore_document_in_angular
angular/firebase

How query the Firebase Firestore in Angular

To query the firebase firestore in angular you can do the following

Read Article
get_the_sha1_debug_certificate
android

Get the Debug Certificate SHA1

How to get the debug certificate SHA1

Read Article
angularjs_component_lifecycle
angular/angularjs

AngularJS component lifecycle cheatsheet

These are the lifecycles to remember in AngularJS.

Read Article
angularjs_ng-repeat_cheatsheet
angular/angularjs

How to use ng-repeat in AngularJS

Here is a quick example of ng-repeat usage and implementation

Read Article
angularjs_ng-switch_cheatseet
angular/angularjs

Using ng-switch in AngularJS

ngSwitch is the equivalent of a `switch` in java or other modern languages

Read Article
how_to_autoexpand_right_to_left
html

How to make an element autoexpand right to left in HTML

Making an element expand the opposite direction is a useful html trick to remember

Read Article
how_to_create_a_rxjs_observable
typescript/rxjs

Create an Observable using RxJS

Creating an Observable in different ways is sometimes required based on the situation at hand. This is all you need to know!

Read Article
how_to_alias_a_command_in_git
git

How to alias a command in git

Aliasing a command is very useful as it lets you shortcut a normal workflow and work more efficiently!

Read Article
add_environment_path_for_fish_terminal
linux/fish_terminal

How to add environment path to Fish terminal

This is how you add an environment path to Fish terminal

Read Article
adding_keybindings_to_fish_terminal
linux/fish_terminal

How to add keybindings in fish

Keybindings are really useful and save time.. this is how you utilize them in Fish terminal!

Read Article
how_to_make_tab_autocomplete_in_fish_terminal
linux/fish_terminal

How to make tab autocomplete in fish terminal

Making tab autocomplete in Fish terminal is a great customisation I strongly recommend as it allows you to press tab to complete the command.

Read Article
how_to_try_fish_terminal
linux/fish_terminal

How to try Fish terminal temporarily

Trying fish without the burden of changing your current terminal is useful incase you do not like Fish terminal

Read Article
how_to_create_bootable_usb_on_linux
linux

Create a Bootable usb on Linux

**WoeUSB** is the easiest and has the best compatibility for for all ISO's including Windows

Read Article
the_difference_between_service_vs_provider_in_angularjs
angular/angularjs

The difference between services and providers in AngularJS

An easy way to remember it is that **Providers** are at config time (before the application has finished loading).

Read Article
how_to_delay_or_sleep_in_typescript
typescript

Create a delay or sleep in JavaScript/TypeScript

To create a delay or sleep you use setTimeout. setTimeout is an essential function for every developer to memorise!

Read Article
why_and_how_you_should_use_a_sinonjs_spy
typescript/sinonjs

Why and How you should use a Sinon Spy

Sinon spys and stubs are very using in testing code. Spys and Stubs allow you to verify if a function was called and how it was called (args).

Read Article
angularjs_directive_component_cheatsheet
angular/angularjs

How to use Component/Directive's in AngularJS

Here is a easy way to create a component or directive in AngularJS. This is an AngularJS Essential!

Read Article
how_to_change_dns_in_linux
linux

Change the DNS in Linux

Changing the DNS in linux is pretty useful to get past any censorship your isp has imposed on you. *For example thepiratebay.org, 4chan.org*

Read Article
essential_hotkeys_for_google_chrome
google_chrome

Essential hotkeys for Google Chrome

Hotkeys in Google Chrome make your life way easier! All the power users of Google Chrome are using these hotkeys!

Read Article
why_you_should_use_angular_ng-src
angular/angularjs

Setting the src for html elements

Setting the **src** attribute for elements is different if you need to reference a AngularJS variable.

Read Article
how_to_filter_an_array_with_function_returning_a_promise
typescript

Filtering an array with a function that returns a Promise

You cannot filter an array using `Array.prototype.filter` using a promise as the function is synchronous and therefore does not support promises.

Read Article
control_linux_computer_using_kdeconnect
linux

Install kdeconnect on linux

KDEConnect is a very useful application which allows you to control your computer and send commands from your smartphone!

Read Article
how_to_copy_files_in_cli_linux
linux

How to copy files in linux using CP

You can copy files in linux using CP

Read Article
how_to_fix_google_chrome_fonts_on_linux
linux

Ensure fonts render nicely in Google Chrome on Linux

Be default linux does not tell fonts to render with antialiasing and other nice features.

Read Article
adding_numbers_in_bash
bash

How to add numbers in bash

To add a number you need to encase the expression in `$((` `))`

Read Article
all_angular_schema_form_options
angular/angular_schema_form

All Form Options for Angular Schema Form

Here is a cheatsheet for every option for a form value in Angular Schema Form

Read Article
bash_nested_commands_guide
bash

How to nest commands in bash

To use nested commands in bash you can surround the child command with backticks **\`** or **`${}`**

Read Article
best_way_to_create_a_empty_list_in_java
java

How to create an empty list in Java

Lists in Java are pretty powerful and this is how you create them

Read Article
calculate_git_file_age
git

How to find a files age in git

You can find a files age using the git log command. As seen below

Read Article
calculate_git_last_modified_date
git

How to find a files latest changed time in git

You can find a files latest changed time using the following

Read Article
check_if_file_exists_in_java
java

Check if a file exists in Java

To check if the file is is a file in Java you need to do the following

Read Article
compare_arrays_with_stream
java

Compare arrays with Java

There are many such use cases where you will find yourself required to compare two arrays in Java.

Read Article
convert_a_list_to_array_in_java
java

Convert list to array in Java

This is how you convert a list to an array in Java

Read Article
convert_string_to_bytes_in_python
python

Convert bytes into a String in python

I recently needed to convert a bytes object into a readable string format. I found that I could do so very easily using the following method.

Read Article
create_a_list_in_java
java

All the ways to create a List in Java

The various ways you can create a list in Java

Read Article
create_a_symlink_on_linux
linux

How to create a symlink in linux

Symlinks are very useful as they allow you to make one file point to another file

Read Article
decode_a_string_in_java
java

How to decode a string in java

To decode a string in Java you can import java.net.URLDecoder.decode

Read Article
ensureing_relative_paths_work_in_sh
bash

Ensure relative paths work in a bash script

To ensure relative paths work in a bash script you can set the working directory to the directory the script is in.

Read Article
how_to_add_default_value_constraint_to_column_in_sql
sql

Adding a default value constraint to a column in SQL

To add a default value to a column in SQL you can do the following

Read Article
how_to_alter_column_to_drop_default_value_in_sql
sql

Alter a table droping a columns default value

To drop a default value from a column you need to alter the column and `DROP DEFAULT`

Read Article
how_to_alter_table_to_add_or_remove_column_in_sql
sql

Add/Remove/Modify a column on a table in SQL

Sometimes you need to alter a table without dropping it. A big use case for this is a migration script adding or removing a column on a table.

Read Article
how_to_check_column_does_not_equal_other_column_in_sql
sql

Check a column does not equal another column in SQL

To check that a column does not equal another column in SQL you can do the following

Read Article
how_to_convert_array_to_object_in_typescript
typescript

Convert an array to a object in TypeScript

To convert an array to a object in typescript you can use the following helper function

Read Article
how_to_copy_files_over_ssh
ssh

How to copy files over ssh

You can copy files over ssh using the command scp.

Read Article
how_to_create_a_function_in_lua
lua

All about functions in LUA

Functions are the core of any good program or script. Functions in LUA are in the following format

Read Article
how_to_create_a_ssh_key
ssh

How to create a SSH key

SSH keys are useful as they allow you to securely identify yourself. You can create a SSH key by doing the following

Read Article
how_to_create_a_view_in_sql
sql

How to create a view in SQL

You can create a view in SQL by following the following syntax.

Read Article
how_to_drop_a_function_in_sql
sql

How to drop a function in SQL

Dropping or deleting a function in SQL is useful for many different scenarios. You might need to drop and re-create or you might not need the function anymore

Read Article
how_to_drop_a_trigger_from_table_in_sql
sql

Drop a trigger from a table

To drop a trigger from a table you need this command

Read Article
how_to_load_a_properties_file_in_java
java

Load a properties file in Java

This is how you load a properties file in Java

Read Article
how_to_merge_a_branch_with_unrelated_history
git

How to merge a branch in git with an unrelated history

You can merge a branch with a different history by adding the flag `--allow-unrelated-histories`

Read Article
how_to_proxy_requests_using_webpack
webpack

Proxy requests using Webpack

Using webpack you can proxy requests from one directory eg `http://localhost:8080/profile` to another address.

Read Article
how_to_put_phantomjs_on_path
npm

How to put phantomjs on $PATH

Putting phantomjs on the path will stop it downloading every time and therefore decrease the amount of time requiried to npm install.

Read Article
how_to_remove_a_file_from_repo
git

How to remove a file from a Git Repo

To remove a file from a git repository you need to remove the cached version of it.

Read Article
how_to_resolve_insecure_host_in_docker
docker

How to allow insecure hosts in Docker

To allow docker to connect to a insecure host (a host using http instead of https) you need to edit the daemon.json to have some config!

Read Article
how_to_scroll_to_top_of_page_in_angular
angular

Scroll to the the top of the page automatically in AngularJS

You can scroll to the top of the page automatically by injecting Window and using the function scroll(x,y).

Read Article
install_google_drive_in_linux
linux

Installing Google Drive on Linux

Google Drive is really useful *I use it for the central location of this blog infact!*

Read Article
install_or_remove_a_package_in_python
python

Installing or uninstalling a package with pip

To install or remove/uninstall a python package you use pip.

Read Article
installation_on_xubuntu
awesome_wm

How to install AwesomeWM on xubuntu

Installation guide for AwesomeWM on xubuntu.

Read Article
list_active_processes_in_linux
linux

How to list active processes in linux

You can list the active processes in linux using `ps`

Read Article
load_more_days_with_gcalcli
linux

How to load more days on the Agenda view in GCalCLI

By default gcalcli loads 7 days on the agenda view. You can specify how many you want if you give it 2 number args, for example:

Read Article
performing_integer_incrementation_in_lua
lua

Incrementation in LUA

There is no such thing as *Advanced Operators* **`++`** or **`--`** in Lua

Read Article
read_from_properties_file_in_bash
bash

How to read from a properites file using Bash

Reading from a properties file is a set some config outside of the script for ease of editing.

Read Article
refresh_build_image_with_docker_compose
docker

How to refresh the build image using docker-compose

To refresh the build image, you need to add `--build` to the docker-compose command.

Read Article
remove_the_xscreensaver_login_button
linux

Remove the New Login button from xscreensaver

To remove the xscreensaver `New Login` button you need to set the entry for `XScreenSaver.newLoginCommand` to an empty value.

Read Article
service_management_in_linux_with_systemctl
linux

Using services in linux with Systemctl

Services in Linux are generally things that run in the background providing a useful function or 'service'. Systemctl is the 'service manager'.

Read Article
set_properties_in_a_properties_file_in_bash
bash

Setting properties in a properites file using bash

To set or update properties in a properties file from a bash script you can use **sed**

Read Article
set_the_default_value_in_form
angular/angular_schema_form

Set the default value via Form - Angular Schema Form

Currently it is not possible to declare a default value via the form object.

Read Article
tail_cheatsheat
linux

What is TAIL in Linux and how you should use it!

You might wonder 'how do I get the last lines of a log file' or 'how do I get new lines written to a file in linux'. Well tail is what you need!

Read Article
the_power_of_stream_of_in_java_8
java

The power of Stream.of() in Java

Stream.of() can be used instead of creating an array then iterating over it.

Read Article
using_oauth_with_google_apis
google/google_api

Using OAuth with Google APIs

This is a guide to using OAuth with Google APIs. This document shows how to get a Refresh Token which you can use inside your application.

Read Article
using_or_filter_in_gmail
gmail

Using OR statements in Gmail filters

Creating filters in Gmail is a great way to help manage and achieve a tidy inbox.

Read Article
why_you_should_use_0_arg_private
java

Why its important to use private 0arg constructor for Java

When creating util classes in java you should ensure you add a 0arg private constructor

Read Article
John Wiseman

Full-Stack Software Engineer building scalable digital solutions. specializing in modern web technologies and mission-critical systems.

© 2026 Wiseman Systems Pty. Ltd.

Navigation

Start a Conversation

Ready to discuss your next project? Let's build something extraordinary together.

Get in Touch