Marc's Public Blog


All | Aquariums | Arduino | Btrfs | Cars | Cats | Clubbing | Computers | Diving | Dreamstate | Edc | Electronics | Exercising | Festivals | Flying | Halloween | Hbot | Hiking | Linux | Linuxha | Monuments | Museums | Oshkosh | Outings | Public | Rc | Sciencemuseums | Solar | Tfsf | Trips




More pages: November 2024 October 2024 September 2024 August 2024 July 2024 June 2024 May 2024 April 2024 March 2024 February 2024 January 2024 December 2023 November 2023 October 2023 September 2023 August 2023 July 2023 June 2023 May 2023 April 2023 March 2023 February 2023 January 2023 December 2022 November 2022 October 2022 September 2022 August 2022 July 2022 June 2022 May 2022 April 2022 March 2022 February 2022 January 2022 December 2021 November 2021 October 2021 September 2021 August 2021 July 2021 June 2021 May 2021 April 2021 March 2021 February 2021 January 2021 December 2020 November 2020 October 2020 September 2020 August 2020 July 2020 June 2020 May 2020 April 2020 March 2020 February 2020 January 2020 December 2019 November 2019 October 2019 September 2019 August 2019 July 2019 June 2019 May 2019 April 2019 March 2019 February 2019 January 2019 December 2018 November 2018 October 2018 September 2018 August 2018 July 2018 June 2018 May 2018 April 2018 March 2018 February 2018 January 2018 December 2017 November 2017 October 2017 September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 February 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 October 2003 August 2003 July 2003 May 2003 April 2003 March 2003 January 2003 November 2002 October 2002 July 2002 May 2002 April 2002 March 2002 February 2002 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 May 2001 April 2001 March 2001 February 2001 January 2001 December 2000 November 2000 October 2000 September 2000 August 2000 July 2000 June 2000 April 1999 March 1999 September 1997 August 1997 July 1996 September 1993 July 1991 December 1988 December 1985 January 1980



2020/01/26 Dallas World Aquarium or Zooquarium
π 2020-01-26 01:01 in Aquariums, Texas
Dallas "World Aquarium" might not be a world aquarium, in some ways it's barely an aquarium at all given how many non aquarium animals they have, it's probably more a Zooquarium than an Aquarium, but that said, it's the best Zooquarium I've ever seen :)
































a burrowing owl, that was exciting since we're supposed to have them at home, but I had never seen one
a burrowing owl, that was exciting since we're supposed to have them at home, but I had never seen one



2020/01/26 Visiting Dallas During Chinese New Year
π 2020-01-26 01:01 in Ntrips, Texas, Trips
While visiting Jennifer's family for Chinese New Year, we spent a day in Dallas. We started with what I call the zooquarium. It had as many non aquarium animals as aquarium animals, but it was cool:

what fish is that? :)
what fish is that? :)











The Dallas Museum of Art was quite good, and free. Easily worth 2-3 hours:













2020/01/24 Running Arduino code with 2D FastLED, Adafruit::GFX, and LEDMatrix displays on Linux
π 2020-01-24 01:01 in Arduino
As part of writing my driver/port to run 2D FastLED, Adafruit::GFX, and LEDMatrix on RGBPanels using a Raspberry Pi, I ended up improving ArduinoOnPc to support X11 or SDL and serial input support on linux.
In the process I added drivers/configuration in neomatrix_config.h to support 3 more display drivers supported by my fork of ArduinoOnPc

  • LINUX_RENDERER_SDL uses ArduinoOnPc's built in FastLED Emulation which allows running native FastLED::NeoMatrix
  • LINUX_RENDERER_X11 uses a quick and dirty driver I wrote: https://github.com/marcmerlin/FastLED_TFTWrapper_GFX
  • Both allow running your basic 2D code written either of Adafruit::GFX, and LEDMatrix, or 2D FastLED on your linux computer:



    There is basic serial input/output emulation to allow you to interact with serial debugging on your arduino code when run on linux, and of course you can run the code under gdb.

    You can find all the code and installation/usage instructions here: https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos
    This is what it looks like when it's bigger:

    2020/01/15 Linux.conf.au 2020 Main Talk: Planning for and Handling Failures from Open Hardware, Aviation, to Production at Google
    π 2020-01-15 01:01 in Google, Linux, Public
    As part of Linux.conf.au 2020, I gave my main talk Planning for and handling failures from open hardware, aviation, to production at Google.

    The talk focussed on failures I've encountered in multiple fields, and what I learned from reading from other people's failures, a common practise in aviation that has saved countless lives in not re-creating failures and accidents out of ignorance.
    As they say in aviation "experience is a cruel teacher: she gives you the test first, and if you survive, then you get to learn the lesson".

    After looking at examples of failures we experienced at Google, I give a fair amount of examples from aviation, from AF447, QF32, and the Boeing 737 Max disaster which is so many failures in so many ways that it takes a while to describe in details. My hope is that engineers in a similar situation where they know they are getting overruled, can use other escallation steps to avoid disaster for others.

    You can get the talk PDF or openoffice source from here. Otherwise, you can read the slides below and watch the video recording:




    2020/01/14 LCA 2020 Talk, ESP32 Memory Management, Neopixels and RGBPanels
    π 2020-01-14 01:01 in Arduino
    As part of LCA 2020, I gave a quick talk at the Open Hardware Miniconf about a year's worth of work in ESP32 and upgrading my Shirt from 24x32 neopixels (P10) to 64x96 in RGBPanels (P4), giving me almost 10x more pixels.
    Running lots of demo code at 96x64 in 24bpp, storing 2 framebuffers for page switching, plus bitplanes for PWM, it ended up significantly stressing the amount of fragmented memory available on ESP32, so this talk deals with what I learned and how to get around the limitations.

    Then, I also brought a demo of my next version using Raspberry Pi and displaying a framebuffer of 128x192, using FastLED_RPIRGBPanel_GFX I wrote for the occasion :)


    Demo of 64x96 with ESP32 and 128x192 on Rasberry Pi
    Demo of 64x96 with ESP32 and 128x192 on Rasberry Pi


    Talk video below:

    2020/01/14 Linux.conf.au Open Hardware Miniconf 2020: Dingo Car with Tensorflow Video Analysis v2
    π 2020-01-14 01:01 in Arduino, Electronics, Linux
    Another LCA, another Open Hardware Miniconf. This year was an improved version of the Dingo Car from last year.

    Jon, presenting the miniconf as per how many
    Jon, presenting the miniconf as per how many





    Raspberry Pi running the car
    Raspberry Pi running the car



    This year's dingo car, controlled by the rPi
    This year's dingo car, controlled by the rPi

    All done
    All done

    Andy presenting the software side of the car
    Andy presenting the software side of the car

    We then trained our cars' neural network by manually driving them arount the track:


    and before long, I got my car to drive around on its own
    and before long, I got my car to drive around on its own

    Here is a video of my car driving on its own, including how it learned to drive:

    During the miniconf, I also gave a talk on my recent LED panel/ESP32 work and brought my recent RGBPanels:


    2020/01/13 Gold Coast Crazy Cat Cafe
    π 2020-01-13 01:01 in Cats
    While in Surfers Paradise (Australia's Gold Coast), I noticed a cat café while driving by in the tram, so I went to say hello :)
    It was end of day, so the cats were kind of tired of human interaction, but took time to take a few pictures:


    they had a man page :)
    they had a man page :)









    found myself a lap chat :)
    found myself a lap chat :)


    very cool: blue eye and yellow eye
    very cool: blue eye and yellow eye


    See more images for Gold Coast Crazy Cat Cafe
    2020/01/13 Linux.Conf.au 2020 in the Gold Coast
    π 2020-01-13 01:01 in Linux
    LCA had been nearby twice, in Brisbane, but this was the first time in the Gold Coast. I had been there twice in the past though, so there were fewer things left to see, I went to check them

    I gave a couple of talks this year:

  • Planning for and Handling Failures from Open Hardware, Aviation, to Production at Google
  • ESP32 Memory Management, Neopixels and RGBPanels
  • I also had fun at the Open Hardware Miniconf 2020: Dingo Car with Tensorflow Video Analysis v2

    I met Chris and Jon for dinner before the conference:


    Chris had a fancy wheelchair enhanced with Jon's improvements
    Chris had a fancy wheelchair enhanced with Jon's improvements

    Then came time for the conference:





    I much enjoyed a very cool talk on emulating old game consoles in an FPGA



    took a lot to run those video consoles back then, lots of it was RAM
    took a lot to run those video consoles back then, lots of it was RAM

    there was no framebuffer, sprites and backgrounds were rendered real time during CRT gun scans
    there was no framebuffer, sprites and backgrounds were rendered real time during CRT gun scans

    backgrounds were rendered fro a bunch of tiles to same RAM
    backgrounds were rendered fro a bunch of tiles to same RAM

    Random talk slides:










    great to have Bunnie back
    great to have Bunnie back



    Nice to see the usual people again:


    of course I 'need' an ESP32 watch :)
    of course I 'need' an ESP32 watch :)

    this one is cute too
    this one is cute too



    Nice dinners as usual:






    I brought my new LED outfit
    I brought my new LED outfit


    And just like this, it was conference close, where we we told to guess where the next conference would be:



    it'll be back in Canberra a 3rd time
    it'll be back in Canberra a 3rd time

    Jon Oxer won the Rusty Wrench award this year, and it was well deserved
    Jon Oxer won the Rusty Wrench award this year, and it was well deserved


    After an ice cream social, the conference was over.

    2020/01/11 A Few Days in the Gold Coast: Currumbin Wildlife Sanctuary, Springbrook NP, Dreamworld
    π 2020-01-11 01:01 in Australia, Ntrips, Trips

    I had to fly through Auckland which nicely made me go back through security and took all my stuff apart needlessly
    I had to fly through Auckland which nicely made me go back through security and took all my stuff apart needlessly

    As soon as I landed, I had a bit of extra time before the the Springbrook NP, so I took my luggage in an uber directly to nearby Currumbin Wildlife Sanctuary to spend a couple of hours. It was my 3rd time there, but still fun to see:



    animal hospital
    animal hospital






    Next, I took my luggage to my Gold Coast hotel and got picked up by my half day Springbrook NP tour. The views were not fantastic due to the light smoke in the air, but the air was actually much better than most of Australia that was being ravaged by fire. Still, the NP was nice:




    some bats happily sleeping there
    some bats happily sleeping there


    I always carry seeds for a good reason :)
    I always carry seeds for a good reason :)




    the best viewpoint in the world was not stellar due to the air
    the best viewpoint in the world was not stellar due to the air

    The next day, I went to Dreamworld, a combined amusement/water park, which was worth 1.5 days. It's a weird mix of amusement park, animal park, and water park:






    first time with a tree kangaroo, they are normally not very social
    first time with a tree kangaroo, they are normally not very social





    good climbers
    good climbers

    I got copiously yelled at for daring to take/use my camera on this ride
    I got copiously yelled at for daring to take/use my camera on this ride





    that's a bigger cat than I'd play with myself :)
    that's a bigger cat than I'd play with myself :)

    They had a good section on haborigenes and their cultures:




    they have a story of a creation snake
    they have a story of a creation snake



    The next day, I went back for Whitewater World, the water section of the park, and worked on getting better at the wave thing. It was much harder than it seems, but I got a bit better at it:


    most of the time that is :)
    most of the time that is :)

    The rest of the water park was quite nice too





    I had a half day left after the water park, so I went back to Holoverse and tried their other games:




    We had been to the gold coast twice already, so there wasn't too much that I hadn't seen yet:



    I tried expensive wagyu in a highly rated steak restaurant, and it was not melt in your mouth despite the very steep price
    I tried expensive wagyu in a highly rated steak restaurant, and it was not melt in your mouth despite the very steep price



    Just like last time, they have a little street market, which I went to visit:





    I had a free ticket to go to the observatory again, so I did:






    2020/01/02 Paris' Palais de la Decouverte
    π 2020-01-02 01:01 in Paris, Sciencemuseums
    Palais de la Découverte was the first science museum I went to when I was a kid, it had impressive exhibits then some 30 years ago, and they just added even newer ones, keeping the old favourites. Unfortunately the museum is scheduled to be moved to a lesser and smaller location in 2020, losing irreplaceable history and impressive exhibits.
    I've been to many science museums around the world, and this is one of the top ones in the world, and honestly the best one in the world in amount of cool big scale experiments they had in a single building.

    When we found that out, we spent 1.5 days going through all the presentations they had during the Xmas holidays, and we saw most but not all of the static exhibits:

    it is located at the back of the grand palais, an iconic building in Paris
    it is located at the back of the grand palais, an iconic building in Paris



    The different presentations were definitely a highlight:

    exhibits on magnetism, showing magnets lose their properties when they are too warm
    exhibits on magnetism, showing magnets lose their properties when they are too warm

    more interesting: stream of liquid gas is susceptible to magnetism
    more interesting: stream of liquid gas is susceptible to magnetism

    supraconductive material, when cooled sufficiently will stay in a magnetic equilibrium
    supraconductive material, when cooled sufficiently will stay in a magnetic equilibrium

    The museum's high power experiments (static electricity and electro magnets) have been there forever and are always a favourite:


    nice generator, 330kV
    nice generator, 330kV





    go big, or go home
    go big, or go home

    induced electric currents from magnetism allow for levitation, and it's hot
    induced electric currents from magnetism allow for levitation, and it's hot


    There were lots of other exhibit of course:





    it's all about density, yes this is real water and a real bowling ball
    it's all about density, yes this is real water and a real bowling ball



    Multiple sections on animals

    the ants exhibit was cool
    the ants exhibit was cool






    the queen
    the queen

    termites too
    termites too


    the octopus demo was cool too
    the octopus demo was cool too

    it gets to open a jar with a crab inside
    it gets to open a jar with a crab inside

    and eat the yummy crab
    and eat the yummy crab

    The 2nd day, we came at opening time to see some static exhibits before the presentations started:


    We then went to see the excellent supraconductivity:



    and then came the time for the full scale maglev demo
    and then came the time for the full scale maglev demo

    a bit of time to cool down the supraconductive magnets
    a bit of time to cool down the supraconductive magnets


    and then it was Jennifer's turn:

    There plenty of other presentations:

    turning gas into solid
    turning gas into solid

    oxygen in the air liquefies first, and causes flammable liquid
    oxygen in the air liquefies first, and causes flammable liquid

    safety goggles are for other people :)
    safety goggles are for other people :)

    they had bucket fulls of liquid gas to play with
    they had bucket fulls of liquid gas to play with



    After 1.5 days, we didn't quite get the time to see it all, but we made a good dent. The staff and demonstrator were awesome. I'm really sad that this museum will close forever in less tha na year.

    See more images for Paris' Palais de la Decouverte
    2020/01/01 Running FastLED, Adafruit::GFX, and LEDMatrix code on High Resolution RGBPanels with a Raspberry Pi
    π 2020-01-01 01:01 in Arduino
    RBGPanels are a pain to drive, they require constant refreshing and it becomes more of a problem when you aim for higher resolutions (128x128 and above), as they require more horsepoewr and memory than either a teensy 3.6 or ESP32 can reasonably provide (the two top of the line chips supported by SmartMatrix)

    Another issue is that SmartMatrix, while better than all the other libraries on arduino, doesn't support all kind of weird panels out there, specifically the AB and AC panels that you often end up getting when you get higher resolutions like 128x64.

    Using Neopixels would work better of course, but they caan't reasonably be had in less than P5 (0.5cm/LED) while RGBPanels go down to P2. Also, neopixels are about 10X more expensive per pixel, if not more.
    So, the solution is to use a rPi to drive RGBPanels of size 128x128 and larger (a single Pi with 3 parallel channels can reasonably run up to 256x256. After that it gets harder and you need multiple microcontrollers).

    This is where the excellent https://github.com/hzeller/rpi-rgb-led-matrix driver comes in. It's the most feature complete RGBPanel driver for microcontrollers

    Ok, but you have all this arduino code, maybe written for a FastLED::NeoMatrix or Adafruit::NeoMatrix array using the Adafruit::GFX API. Or maybe, you used the FastLED API with an XY mapping function, or maybe even you're using the LEDMatrix API for FastLED. None of those work on rPi, and you don't want to change/rewrite your code.

    Well, there is good news: you can use https://github.com/ChrisMicro/ArduinoOnPc to run arduino code on PCs, and therefore also rPi. It is however designed to display in an X11 windows, which is not what you'd want. So, instead, I forked it for you and wrote a rPi glue driver for my FrameBuffer::GFX base class: https://github.com/marcmerlin/ArduinoOnPc-FastLED-GFX-LEDMatrix

    You therefore end up getting access to those 3 arduino graphics APIs, and you can render on rPi using a much faster and the more feature complete https://github.com/hzeller/rpi-rgb-led-matrix driver

  • https://github.com/marcmerlin/Framebuffer_GFX is the base class you need for access to the 3 APIs I mentionned
  • https://github.com/marcmerlin/FastLED_RPIRGBPanel_GFX is the driver that glues rpi-rgb-led-matrix with ArduinoOnPc
  • https://github.com/marcmerlin/ArduinoOnPc-FastLED-GFX-LEDMatrix is my fork that adds a few fixes and git submodules for required libraries and demo code.
  • And this is what the end result, looks like with a cool resolution of 128x192 with 3 panels of 128x64 run in parallel with the active-3 board from https://github.com/hzeller/rpi-rgb-led-matrix/tree/master/adapter/active-3




    By using these driver options, I get about 400Hz refresh rate on rPi3, lowering the amount of pwm bits:
    ~/rpi-rgb-led-matrix/examples-api-use/demo --led-gpio-mapping=regular --led-rows=64 --led-cols=128 --led-row-addr-type=0 --led-chain=1 --led-show-refresh --led-slowdown-gpio=1 --led-parallel=3 --led-pwm-dither-bits=1 --led-pwm-bits=7 --led-panel-type=FM6126A -D0

    Those variables are assigned when you create "rgb_matrix::Canvas *canvas", which is fed into matrix->setCanvas(). See this example code:

  • https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/022257656e2f1beabe327e88bb96747c0fc955f9/neomatrix_config.h#L262
  • https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/022257656e2f1beabe327e88bb96747c0fc955f9/neomatrix_config.h#L697
  • With rPi, especially with the active-3 board you can drive resolutions of at least 256x256. Here is an example of 128x192, 4 times bigger than the highest resolution I was ever able to drive on ESP32 (64x96). Here is a video natively playing on rPi:


    Well, actually 2 months later, I was able to get to the probably max achieveable resolution, 384x256, see RGB Panels, from 192x80, to 384x192, to 384x256 and maybe not much beyond

    384x192 resolution with 9 panels
    384x192 resolution with 9 panels

    384x256 resolution with 12 panels
    384x256 resolution with 12 panels


    More pages: November 2024 October 2024 September 2024 August 2024 July 2024 June 2024 May 2024 April 2024 March 2024 February 2024 January 2024 December 2023 November 2023 October 2023 September 2023 August 2023 July 2023 June 2023 May 2023 April 2023 March 2023 February 2023 January 2023 December 2022 November 2022 October 2022 September 2022 August 2022 July 2022 June 2022 May 2022 April 2022 March 2022 February 2022 January 2022 December 2021 November 2021 October 2021 September 2021 August 2021 July 2021 June 2021 May 2021 April 2021 March 2021 February 2021 January 2021 December 2020 November 2020 October 2020 September 2020 August 2020 July 2020 June 2020 May 2020 April 2020 March 2020 February 2020 January 2020 December 2019 November 2019 October 2019 September 2019 August 2019 July 2019 June 2019 May 2019 April 2019 March 2019 February 2019 January 2019 December 2018 November 2018 October 2018 September 2018 August 2018 July 2018 June 2018 May 2018 April 2018 March 2018 February 2018 January 2018 December 2017 November 2017 October 2017 September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 February 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 May 2004 April 2004 March 2004 February 2004 January 2004 October 2003 August 2003 July 2003 May 2003 April 2003 March 2003 January 2003 November 2002 October 2002 July 2002 May 2002 April 2002 March 2002 February 2002 November 2001 October 2001 September 2001 August 2001 July 2001 June 2001 May 2001 April 2001 March 2001 February 2001 January 2001 December 2000 November 2000 October 2000 September 2000 August 2000 July 2000 June 2000 April 1999 March 1999 September 1997 August 1997 July 1996 September 1993 July 1991 December 1988 December 1985 January 1980

    Contact Email