Office Setup 2024

Workspace setup as of September 2024

  • Blue Yeti USB mic on a desk arm
  • Logitech gaming mouse
  • Sony A6500 mirrorless camera, outputting HDMI with a 16mm f/1.4 lens
  • Elgato Camlink 4K for video input input to PC via HDMI from camera
  • Elgato key light for fill light
  • Krisp.ai for audio processing (noise reduction from keyboard especially)
  • Samsung dual 4K rounded monitor on a heavy duty desk mount
  • Desklab mini monitor for the calendar screen (calendar on bottom, messaging on top)
  • Kinesis Advantage2 keyboard
  • Bose Soundlink Mini SE bluetooth speakers
  • Glide Gear TMP100 Teleprompter with iPad Air2
  • Duet Air app for teleprompter screen mirroring on iPad
  • Synology DS20 2-bay NAS
  • Tungsten cube just because
  • Plus Camo app for iPhone + Airpods Pro for travel

How to factory reset a Hue light bulb that won’t appear

Philips doesn’t make this super clear but if you buy a used Hue bulb or get one from Amazon Warehouse, they often won’t pair no matter what you do.

The trick is to use a dimmer switch surprisingly.

From their site:

Factory reset a Philips Hue light

Sometimes an issue with a Philips Hue smart light can be fixed by factory resetting it with the Philips Hue dimmer switch:

  1. Power cycle the light: switch it off, wait 15 seconds, and switch it back on.
  2. Hold the Hue dimmer switch within six inches of the light [bulb].
  3. Press and hold both the ‘ON’ and the ‘OFF’ button for at least 10 seconds until the LED indicator on the switch turns green.

For me, it also helped to unplug the bulb once more after this, then plug in and repeat the process. Then adding via using the serial number has a 100% success rate.

I pulled my hair out for a few days until I discovered this!

WordPress + Docker Double Caching with Redis and Nginx Reverse Proxy

(UPDATED 2021/09 for latest Traefik release, Brie) While WordPress is great it’s slow and taxing on a webserver. However ultimately Redis’ object cache and the related plugin as well as Nginx’s reverse proxy caching make for an especially fast site. Combine Traefik for management and do it all on Docker for an excellent solution.

Step 1: Create a basic Traefik folder (for this example in your home directory ~/Traefik

Step 2: in the new Traefik directory, create a conf directory and create the acme.json.

mkdir ./conf
sudo touch ./conf/acme.json
sudo chmod 0600 ./conf/acme.json

Step 3: Load the docker-compose.yml into the top Traefik directory as follows:

---
version: '3.8'
services:
  traefik:
    container_name: traefik
    image: traefik:brie
    restart: unless-stopped
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./conf/traefik.toml:/etc/traefik/traefik.toml:ro
      - ./conf/traefik_dynamic.toml:/etc/traefik/traefik_dynamic.toml:ro
      - ./conf/acme.json:/acme.json
    labels:
      traefik.enable: true
      traefik.http.routers.api-http.rule: Host(`traefik.${HOSTNAME1}`)
      traefik.http.routers.api-http.entrypoints: web
      traefik.http.routers.api-http.middlewares: https-redirect@file
      traefik.http.routers.api-https.service: api@internal
      traefik.http.routers.api-https.rule: Host(`traefik.${HOSTNAME1}`)
      traefik.http.routers.api-https.entrypoints: websecure
      traefik.http.routers.api-https.middlewares: security@file, compression@file, https-redirect@file, auth
      traefik.http.routers.api-https.tls: true
      traefik.http.routers.api-https.tls.certresolver: letsencrypt
      traefik.http.middlewares.auth.basicauth.users: "username:httpasswd_double_$$"

  sqlwp:
    container_name: sqlwp
    image: mariadb:latest
    restart: unless-stopped
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
    labels:
      traefik.enable: false

  nginxwp-1:
    container_name: nginxforwp-${HOST1}
    image: nginx:stable-alpine
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./wordpress-${HOST1}:/var/www/html
      - ${LOGS_LOCAL}:/var/log/nginx/
      - ./conf/nginx-${HOST1}:/etc/nginx/
      - nginxcache:/var/www/html/cache
    links:
      - wp-1
    labels:
      traefik.enable: true
      traefik.http.routers.nginxwp-${HOST1}-http.rule: Host(`${HOSTNAME1}`)||Host(`www.${HOSTNAME1}`)
      traefik.http.routers.nginxwp-${HOST1}-http.entrypoints: web
      traefik.http.routers.nginxwp-${HOST1}-http.middlewares: https-redirect@file
      traefik.http.routers.nginxwp-${HOST1}-https.rule: Host(`${HOSTNAME1}`)||Host(`www.${HOSTNAME1}`)
      traefik.http.routers.nginxwp-${HOST1}-https.entrypoints: websecure
      traefik.http.routers.nginxwp-${HOST1}-https.middlewares: security@file, compression@file, https-redirect@file
      traefik.http.routers.nginxwp-${HOST1}-https.tls: true
      traefik.http.routers.nginxwp-${HOST1}-https.tls.certresolver: letsencrypt

  wp-1:
    container_name: wpapp-${HOST1}
    image: wordpress:php7.4-fpm-alpine
    restart: unless-stopped
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./wordpress-${HOST1}:/var/www/html
      - ./conf/php.ini:/usr/local/etc/php/php.ini
      - nginxcache:/var/www/html/cache
    depends_on:
      - sqlwp
    environment:
      - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
      - WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
      - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
      - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}
      - WORDPRESS_TABLE_PREFIX=${HOST1}
    labels:
      traefik.enable: false

volumes:
  dataredis:
  nginxcache:

Step 4: Create a .env file in the main Traefik directory

MYSQL_ROOT_PASSWORD=make_a_good_password
MYSQL_USER=something_but_admin_or_root
MYSQL_PASSWORD=make_a_good_password
MYSQL_DATABASE=wpdb
WORDPRESS_DB_USER=something_but_admin_or_root
WORDPRESS_DB_PASSWORD=make_a_good_other_password
WORDPRESS_DB_HOST=sqlwp
WORDPRESS_DB_NAME=wpdb
HOST1=mydomain
HOSTNAME1=mydomain.com

Follow the rest of the directions here:

https://computerz.solutions/docker-compose-wordpress-nginx-et-traefik/

Fixing Vodafone UK London Underground wifi

If you’re using an iPhone and have a Vodafone UK monthly subscription, there’s a special wireless network SSID (VodafoneWiFi) that bypasses the annoying Virgin Media login screen everytime you’re in the London Underground (as with the SSID VirginMediaWifi).

Unfortunately there’s some sort of Apple issue that doesn’t let it connect directly as it asks for a username and password instead of using the SIM authentication (EAP-SIM). This config profile forces the iPhone to use the SIM to connect itself to VodafoneWiFi. Enjoy. Click here from your mobile browser and hit Install

UPDATE for 2020 – still works on the tube, though a little unreliable on newest iOS 13 as maybe 20% of the time it will refuse to connect. I suspect that’s an access point problem vs a phone problem. Either way this is as good as it gets!