Skip to content

Instantly share code, notes, and snippets.

View docPhil99's full-sized avatar

Phil docPhil99

  • University of Sussex
View GitHub Profile
@docPhil99
docPhil99 / heic_to_jp_fish.md
Last active July 31, 2021 11:27
Batch convert heic files to jpg in fish shell

Batch convert heic files to jpg in fish shell

  • First install sudo apt install libheif-examples
  • Then run in correct directory for p in *.heic; heif-convert $p (basename $p .heic)".jpg"; end
@docPhil99
docPhil99 / stop_bash_on_error.md
Created October 20, 2021 14:03
Stop bash background commands on error

I have simple bash script that starts lots of processes. If one fails I want to stop everything. There maybe a better way to do this but I came up with this.

First create two scripts to test our main script. good_sleep that sleeps for 10 seconds and exits with no error.

#!/bin/bash
echo " good sleeping"
sleep 10
echo "done"
@docPhil99
docPhil99 / video_play_back.md
Last active March 31, 2022 13:34
playback of F-log video with LUT on linux

Apply a cube LUT to mpv playback mpv -vf=lut3d=XT4_FLog_FGamut_to_ETERNA_BT.709_33grid_V.1.01.cube FILE.MOV or celluloid --mpv--vf=lut3d=XT4_FLog_FGamut_to_ETERNA_BT.709_33grid_V.1.01.cube FILE.MOV

@docPhil99
docPhil99 / batch_convert_HEIC.md
Last active September 22, 2022 10:42
Fish shell tips - a work in progress

Batch convert HEIC using a fish shell

for p in *.HEIC;
  heif-convert $p (path change-extension jpg $p)
end

Note the path command required fish 3.5

@docPhil99
docPhil99 / mint_dual_monitor.md
Last active January 27, 2023 13:36
Dual Monitor fixes in Linux Mint

Dual Monitor Linux Mint Login Screen Fix

Linux mint has a few annoyances when using dual monitors. First fixing the log in screen. By default, it uses the same resolution as the primary monitor in the secondary screen. My secondary monitor is much larger so it doesn't display correctly. It's only cosmentic but it annoys me.

Create or append the file /etc/lightdm/lightdm.conf.d/70-linuxmint.conf so that it has the lines

[SeatDefaults]
user-session=cinnamon
display-setup-script=/usr/bin/lightdmxrandr.sh
@docPhil99
docPhil99 / video_loop_back.md
Last active February 9, 2023 16:35
How to pass video to a dummy webcam.
  1. Start the v4l2loopback module:
sudo modprobe v4l2loopback \
      devices=1 exclusive_caps=1 video_nr=5 card_label="Dummy Camera"
  1. I have a short test video call Speed1.avi, this can be played streamed to /dev/video5 with ffmpeg -re -stream_loop -1 -i Speed1.avi -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video5
@docPhil99
docPhil99 / controlling_ha.md
Last active March 7, 2023 17:12
Controlling Home Assistant remotely via curl

It's actually fairly easy to control Home Assistant remotely using curl but I couldn't find a complete solution on how to do this, so here goes...

  1. Activate the api in configuration.yaml by adding the line api:
  2. Get an Authorization token from HA (It's a Long-Lived Access Tokens which can be created on your HA user profile page)
  3. This list of exposed states can be found using curl -X GET -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" http://YOUR_IP:8123/api/states | prettyjson
  • Note prettyjson is an alias for python -m json.tool, you don't need this it's just easier to read.
  1. To get the state of a device append the entity.id to the URL, eg curl -X GET -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" http://YOUR_IP:8123/api/states/switch.mylight | prettyjson
  2. The API documentation shows you how to change the states but this does not actually turn on the lights, etc. Instead, us
@docPhil99
docPhil99 / Goodman_speckle_test.py
Last active April 17, 2023 11:18
Python version of Joseph Goodman's Mathematica code for simulating laser speckle. Both free space and in an optical system are combined into the one file.
# my conversion of Goodman's code
import numpy as np
import matplotlib.pyplot as plt
# Program for simulating Speckle Formation by Free Space Propagation
# Translate from Mathematica
# Ref: Goodman, Joseph W. 2020. Speckle Phenomena in Optics: Theory and Applications, Second Edition. SPIE.
n = 1024 # nxn array size
@docPhil99
docPhil99 / build_squeezelite.md
Last active June 5, 2023 03:18
Setting up a headless linux music server
  1. Stop the old service if it is running with sudo service squeezelite stop
  2. Remove the old version if installed with sudo apt-get remove squeezelite
  3. Install its dependancies sudo apt-get install lsb-base libasound2 libavcodec57 libavcodec-extra57 libavformat57 libavutil55 libc6 libfaad2 libflac8 liblirc-client0 libmad0 libmpg123-0 libsoxr0 libvorbisfile3
  4. Create a directory to download the source files in your home drive mkdir sources; cd sources
  5. Clone the source code git clone https://github.com/ralph-irving/squeezelite.git
  6. cd squeezelite
  7. sudo apt-get install libavcodec-dev libavformat-dev
  8. sudo apt-get install libsoxr-lsr0 libsox-dev sox libsoxr-dev
  9. Build it with make all OPTS="-DDSD -DRESAMPLE -DFFMPEG"
  10. sudo cp squeezelite /usr/bin/. to copy the file to you path
@docPhil99
docPhil99 / loguru.md
Last active June 29, 2023 12:33
Python Loguru Hacking

Loguru is my favorite way to perform logging in python. It's generally so simple to use but a few things are missing from the documentation.

Logging over the network

This is based on the loguru example, but also includes the hostname of the sender. To add extra fields the pefered method is to add to record["extra"] dictionary (which is normally empty). The client code sends the log messages over the network and to stderr.

class LoggingSocketHandler:
    def __init__(self, host, port, timeout=600):