@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.

  • 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

    Something I have often needed to do in PHP is create hierarchical structures from an array. Usually I do this with recursive functions, but today I thought I would try something different - using references.

    I needed to do it for a list of directories containing images, the hierarchical structure was created to resemble the folder structure the folders came from - folders with sub-folders.

    function getFolderHierarchy($folders) {
      $hierarchy = array();
      $parents = array();
      $p = 0;
      $current =& $hierarchy;
      $depth = 1;
      $previous = null;
    
      foreach ($folders as $folder) {
        $path = explode(DIRECTORY_SEPARATOR, $folder['dir']);
        $pCount = count($path);
    
        if ($pCount > $depth) { // Sub-directory
          $parents[$p++] =& $current;
          $current =& $previous;
          $depth = $pCount;
        } else if ($pCount < $depth) {
          $current =&amp; $parents[--$p];
          $depth = $pCount;
        }
    
        $current[$path[$pCount-1]] = array(
          null => $folder['id']
        );
        $previous =&amp; $current[$path[$pCount-1]];
      }  
    
      return $hierarchy;
    }
    
    $folders = array(
      array(
        'dir' => 'South America',
        'id' => '1'
      ),
      array(
        'dir' => 'South America/Ecuador',
        'id' => '4'
      ),
      array(
        'dir' => 'South America/Ecuador/Alausi',
        'id' => '29'
      ),
      array(
        'dir' => 'South America/Ecuador/Alausi/Nariz del Diablo',
        'id' => '30'
      ),
      array(
        'dir' => 'South America/Ecuador/Amazon',
        'id' => '31'
      ),
      array(
        'dir' => 'South America/Ecuador/Banos',
        'id' => '10'
      ),
      array(
        'dir' => 'South America/Ecuador/Banos/Canyoning',
        'id' => '11'
      ),
      array(
        'dir' => 'South America/Ecuador/Cotopaxi National Park',
        'id' => '16'
      ),
      array(
        'dir' => 'South America/Ecuador/Cotopaxi National Park/Cotopaxi',
        'id' => '19'
      ),
      array(
        'dir' => 'South America/Ecuador/Cotopaxi National Park/Ruminahui',
        'id' => '18'
      ),
      array(
        'dir' => 'South America/Ecuador/Cotopaxi National Park/Secret Garden Cotopaxi',
        'id' => '17'
      ),
      array(
        'dir' => 'South America/Ecuador/Cuenca',
        'id' => '21'
      ),
      array(
        'dir' => 'South America/Ecuador/Cuenca/Cajas National Park',
        'id' => '23'
      ),
      array(
        'dir' => 'South America/Ecuador/Cuenca/Ingapirca',
        'id' => '22'
      ),
      array(
        'dir' => 'South America/Ecuador/Mindo',
        'id' => '24'
      ),
      array(
        'dir' => 'South America/Ecuador/Mindo/El Descanso',
        'id' => '26'
      ),
      array(
        'dir' => 'South America/Ecuador/Mindo/El Quetzal',
        'id' => '27'
      ),
      array(
        'dir' => 'South America/Ecuador/Mindo/Mariposas de Mindo',
        'id' => '28'
      ),
      array(
        'dir' => 'South America/Ecuador/Mindo/Tarabita',
        'id' => '25'
      ),
    );
    
    print_r(getFolderHierarchy($folders));

    The following is returned when you run the above code

    Array
    (
      [South America] => Array
        (
          [] => 1
          [Ecuador] => Array
            (
              [] => 4
              [Alausi] => Array
                (
                  [] => 29
                  [Nariz del Diablo] => Array
                    (
                      [] => 30
                    )
    
                )
    
              [Amazon] => Array
                (
                  [] => 31
                )
    
              [Banos] => Array
                (
                  [] => 10
                  [Canyoning] => Array
                    (
                      [] => 11
                    )
    
                )
    
              [Cotopaxi National Park] => Array
                (
                  [] => 16
                  [Cotopaxi] => Array
                    (
                      [] => 19
                    )
    
                  [Ruminahui] => Array
                    (
                      [] => 18
                    )
    
                  [Secret Garden Cotopaxi] => Array
                    (
                      [] => 17
                    )
    
                )
    
              [Cuenca] => Array
                (
                  [] => 21
                  [Cajas National Park] => Array
                    (
                      [] => 23
                    )
    
                  [Ingapirca] => Array
                    (
                      [] => 22
                    )
    
                )
    
              [Mindo] => Array
                (
                  [] => 24
                  [El Descanso] => Array
                    (
                      [] => 26
                    )
    
                  [El Quetzal] => Array
                    (
                      [] => 27
                    )
    
                  [Mariposas de Mindo] => Array
                    (
                      [] => 28
                    )
    
                  [Tarabita] => Array
                    (
                      [] => 25
                    )
    
                )
    
            )
    
        )
    
    )
    Close
  • 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]