@bytesnz

Jack Farley, Computer Engineer

  • home
  • about
  • 2/25/2021, 9:00:00 PM

    shm That Cache

    yarndockerdevelopment

    I am often trying to find more space on my hard drives and found today my own docker containers wasting space thanks to ! Here's how I fixed it.

  • 2/2/2021, 9:10:07 PM

    Blob blob blob blob Stayin' Alive Stayin' Alive

    softwarejavascriptdebuggingmemory

    Upon recently trying Deezer again, I found their web app ate all my memory when running in Firefox, so I decided to see if I could find out why. I got as far as memory-file-data/string and Blobs. Here's how.

  • 12/25/2020, 12:13:48 AM

    A new Litter Survey

    softwarelitterlitter-survey

    In a culmination of litter surveys and litter picks, linked data and data exploration, and remoteStorage and ActivityPub, I have created a web-based litter pick/survey app that I hope will allow federated citizen science.

  • 12/13/2020, 6:00:00 PM

    Hoe Stream Trash

    litterpi-trash-camlitter-pick

    My latest litter pick target was Hoe Stream and the White Rose Lane Local Nature Reserve. Here's how it went.

  • 11/24/2020, 6:00:00 PM

    Release the Beast

    softwaregitlabcirelease

    I just created a Gitlab CI job to create a release with information from a CHANGELOG.md file for some of my projects. Here's how I did it.

  • 9/30/2020, 9:00:00 PM

    Gitlab CI Caching

    gitlabcontinuous integration

    I noticed something strange happening during build process during a multi-tasking bug fix. Turns out I was using Gitlab CI's caching incorrectly. I should have been using artifacts. Here's what I saw.

  • 9/21/2020, 6:00:00 PM

    Birthday Trash

    litterpi-trash-cam

    As a birthday treat, I took the day off work to try out my electronerised litter picker. Here's how it went.

  • 9/13/2020, 12:12:13 AM

    Pi Trash Cam

    raspberry pielectronicslitterpi-trash-cam

    In preparation for a day of litter picking, I finally got round to a project idea - attaching a camera to a litter picker to record it all. Here's what I did.

    I have been wanting to attach a camera to a litter picker to track the things I have been picking up for a while. Hopefully, I can then use the images to track the items I'm picking up. As the Great British Beach Clean week is around my birthday, I decided to treat myself and spend some time on the project.

    The Hardware

    I bought a Raspberry Pi Zero W and a camera when they first came out, but hadn't really done anything with them.

    As I was planning on using them for a beehive monitor, I also bought a 5000 mAhr LiPo battery and a PowerBoost 1000C LiPo battery module to use with the pi and a solar panel. I soldered them all up (minus the solar panel) and strapped them to the litter picker I had in a high-tech housing (a quarter of an orange juice bottle). I also bought a NEO-6MV2 GPS module so that it could record the GPS position the photo was taken.

    The Pi in its Prototype Housing

    I wanted to have the pi take a photo automatically when I went to pick something up and was planning on wiring up a microswitch, like one I replaced in my mouse surgery, but didn't have any spare. I instead decided to use some nickle tape I purchased to replace the batteries in my laptop.

    I used an old USB cable that someone had thrown out and soldered two strips of nickel tape onto two of the wires in the cable.

    Soldered Contacts

    I then placed old packaging foam between them and taped them together with trusty old electrical tape.

    Contacts Assembled

    The Software

    I downloaded the latest version of Raspberry Pi OS Lite and loaded it onto the microSD card I had.

    $ wget https://downloads.raspberrypi.org/raspios_lite_armhf_latest -O raspios.zip
    $ unzip raspios.zip
    $ sudo dd if=2020-08-20-raspios-buster-armhf-lite.img of=/dev/sdb

    I then configured the Pi to automatically connect to my WiFi using wpa supplicant and enabled ssh to start automatically

    $ wpa_passphrase wificentral
    $ echo "
    network={
      ssid="wificentral"
      psk=6862a1eb9ac83930997165f51817a1cffea8da6bbbb24316d0efd181588ee93c
    }" | sudo tee -a /media/user/rootfs/etc/wpa_supplicant/wpa_supplicant.conf
    $ sudo touch /media/user/boot/ssh

    The first blog I looked at on using a NEO-6M GPS module with a Raspberry Pi used Node.js, and as I am a fan of Javascript, I thought yeah, why not.

    I installed the modules GPS.js and node-serialport for dealing with the GPS module, pigpio for detecting trigger presses and pi-camera-connect and piexifjs for capturing images and adding metadata to them.

    I found the node-serialport and GPS.js modules had changed since the blog was written, so I had to rewrite the code and also found the GPS was on device /dev/ttyS0 instead of /dev/ttyAMA0.

    const file = '/dev/ttyS0';
    const GPS = require('gps');
    const SerialPort = require('serialport');
    
    const port = new SerialPort(file, {
      baudRate: 9600,
      parser: new Readline({ delimiter: '\r\n' })
    });
    
    const gps = new GPS;
    let position = null;
    let updated = -1;
     
    gps.on('data', function(data) {
      if (data.type === 'GLL' && data.valid) {
        position = data;
        updated = (new Date()).getTime();
      }
    });
     
    port.on('data', function(data) {
      gps.updatePartial(data);
    });

    After some playing around with camera options and adding the metadata into the images, I was ready for my first tracked litter pick.

    First Image

    A little dark as it was early evening and in need of some angle adjustment, but it worked as I hoped.

    As a finishing touch for the first version, I created a SystemD service to start the Node script on startup and got the script to save some power by turning off the WiFi 1 minute after startup if it wasn't connected to any network.

    Helpful hint, when doing this, make sure your logic is correct as iwconfig wlan0 txpower off persists even after a power cycle. Doh!

    It was now ready for proper litter picking session.

    The Contacts Attached to the Handle

    I have put the code up on Gitlab and will update as I add more functionality. Ideas so far have included:

    • a WiFi hotspot to track litter as you pick
    • automatic uploading and tagging of images when it connects to the internet.
    Close
  • 8/25/2020, 9:29:58 PM

    yarn add --dev webdriverio

    first-draftsoftwaretestinggitlab

    I finally started implementing UI testing on first-draft using WebdriverIO. While writing tests was easy, getting the tests running was a little more difficult. Here is how I did it.

  • 8/16/2020, 7:04:44 PM

    Hooray! My new blog is live! Based on Sapper, using MongoDB and eventually ActivityPub and ActivityStreams, it will be my federated posting hub to the world.

    softwareblog
  • 8/9/2020, 5:40:49 PM

    Removing EXIF Data from Photos

    exifphotos

    Creating this new blog, I wanted to make sure there was no metadata data leaking personal information. Here's how I removed all the metadata tags except the ones I wanted from my photos.

  • 8/9/2020, 10:21:41 AM

    tmux List and Reattach

    tmuxbashsoftware

    Using tmux for your terminal multiplexer but want an easy to reattach to a session? Here's a small bash script to do it.

  • 8/8/2020, 2:58:48 PM

    Selectable Shell Examples

    markdownsyntaxcss

    Here's how to help your readers save time by making your post's shell commands easy to select and copy - with a simple CSS property.

  • 8/5/2020, 6:48:38 PM

    Be Dates You

    mongodbdocker

    Making my new blog, I didn't initially set the published dates to be native dates in the database. Here what I did to change them ...and do all the upgrades I needed.

  • 7/8/2020, 4:00:00 PM

    Testing vue components

    softwarevuetestingjavascript

    I recently needed to test that some Vue components were creating the correct HTML. To do this, I decided to create snapshots of Object representations of the rendered HTML.

  • 2/20/2019, 12:00:00 AM

    No More Numbers

    javascripthtml5software

    HTML5 number inputs aren't useful, but tel inputs, have all the power

  • 12/21/2018, 12:00:00 AM

    A Hacker "Hacked" Me

    securityemailgrep

    I decided to look into the extortion emails I have been getting and wrote a small script to extract the bitcoin addresses that have been used.

  • 12/7/2018, 12:00:00 AM

    Mouse Surgery

    pledge to not upgradeelectronics

    As part of my pledge not to upgrade, I decided to repair two of my failing mice instead of replacing them with a brand new model (as tempting as it was). Here's what I did.

  • 10/29/2018, 7:00:00 PM

    Danger Danger, Highly Reactive

    vuereactivegraphingdata
  • 9/11/2018, 7:00:00 AM

    Switching to SSR

    reactssrreact-loader
  • 8/10/2018, 4:00:00 PM

    Clean Docker Registry

    nodedockerconsolejavascript
  • 2/1/2018, 12:00:00 AM

    Testing on the Filesystem

    testingjavascript
  • 1/26/2018, 12:00:00 AM

    Tag You Are

    javascripttags
  • 1/25/2018, 9:00:00 PM

    NaN Got Me

    rubber duck savejavascriptnodejsjson
  • 4/28/2017, 10:25:34 AM

    All our app's tabs are belong to us

    angularjavascriptlocalstoragerxjssessionstorage
  • 2/20/2016, 2:33:19 AM

    Developing NPM modules

    nodejsnpm
  • 2/20/2016, 1:48:13 AM

    Nfa + Nfb or N(f+fa+fb)

    arrayfunctionjavascriptjsperf
  • 10/31/2015, 3:36:29 PM

    Photo Layout

    arrangercssgallery hierarchyhtmljavascriptphotostinymcewordpresssoftware
  • 10/31/2015, 2:33:49 PM

    Browning Pass HideAway Web Site

    cssgallery hierarchyhtmlwordpress
  • 10/17/2015, 4:04:57 PM

    Think Mobile

    mobileweb
  • 10/13/2015, 9:30:59 AM

    Pledge to Refuse and Not Buy Bottled Water

    environmentpledges
  • 2/25/2015, 7:42:33 AM

    Run PHP run!

    maximum execution timephptrial and error
  • 11/26/2014, 6:35:32 AM

    Gallery Hierarchy

    galleryhierarchyphotos
  • 10/3/2014, 7:22:04 AM

    Vim and functions

    functionnavigationtagsvim
  • 9/26/2014, 3:18:53 AM

    I'm making hierarchies

    hierarchical datahierarchyphp
  • 9/4/2014, 1:45:18 PM

    Google Sheets fun

    googlegoogle scriptgoogle sheetsjavascriptsheets
  • 8/13/2014, 3:14:22 AM

    Travel Photos

    photo managementphotostravel photos
  • 8/13/2014, 3:02:22 AM

    Image managment scripts

    photo managementphotos
  • 7/31/2014, 3:43:45 PM

    MeldCE logo

    csshtml5javascriptsvg
  • 4/26/2014, 6:34:09 AM

    MoltenDB

    databasemoltendbmongodbnodejs
  • 10/29/2013, 12:09:07 AM

    The Expensive Side

    house
  • 9/22/2013, 7:00:08 PM

    abcde

    music
  • 7/16/2013, 8:26:10 PM

    Energizer Power Plus Rechargeable Batteries

    gadgets
  • 3/4/2013, 6:27:40 PM

    USAR FOGTeX

    fogtex
  • 2/21/2013, 9:09:54 PM

    Personal Gear Bag

    rescuegear
  • 2/18/2013, 11:10:34 PM

    Geocaching Stamp

    stampgeocaching
  • 4/2/2007, 3:50:02 PM

    Call Record Presenter

    parserpythonsqliteweb
  • 9/25/2004, 9:48:10 AM

    Kimi Ora School

    csshtml
  • 6/25/2004, 8:53:53 AM

    All About Catering Web Site

    csshtml
  • 7/26/2003, 7:52:11 AM

    Quantum Accounting Web Site

    csshtml
Copyright BytesNZ 2021. Powered by Sapper
[matrix]