Labels

Tuesday, 20 January 2026

PI43 : OMV : Docker

Intro

A key reason for choosing OMV for my NAS is that it also provides an environment for docker containers.  Although docker is widely used I know little about it and it seems likely that I can benefit from using it on my new server.

I searched for suitable application which have been packaged for docker which I might find useful.  My initial list included Jellyfin (a media player), pihole (an ad blocker) and opencloud/nextcloud (dropbox replacement).

Installation

There are lots of docker install tutorials.  I needed to pick one which installs docker using OMV7.  I found a good youtube video from db tech

The first step is to install omv-extras, which gives you a list of plugins that can be added into OMV.  In addition to docker, I was directed to add OMV scripts and docker-compose "extras".

Next I setup three OMV shared folders for compose, backup and data.  I had a problem setting up the compose share, with OMV repeatedly complaining it couldn't do it.  After some time I discovered that my drive is formatted with NTFS as it was formatted for Windows storage. I moved the docker compose share to the linux OS SD card and the system was happy again.

With the pre-requisites complete I could click on the "install docker" button to create my system.  Finally I setup a user, dockuser, which should be able to to manage my system.




Although we used OMV to install docker and will use the it to create containers we do have access to docker through the command line so OMV doesn't get in our way of using any docker capability.

Overall this was a very straightforward install using OMV, with very little technical thought involved.



Sample Application 

The tutorial I followed used a simple web app docuwiki as an example to get started.  This was very helpful though not useful.  It shows that you start by cut-and-pasting the container definition into docker compose, defining disk storage, allocating ports and setting userids.  You then "spin up" the container; software is downloaded, configured and the app starts.  It is wonderfully straightforward and the app is independent of the local system and any complications or dependencies related to it.  The one constraint is that containers are architecture dependant.  Many / most images seem to have an arm64 version which is what my RPI requires.

 Bittorrent

For a proper test I setup the Transmission bittorrent server.  I can use this to replace an old version I have on an old server.  

Step 1 is to create a container definition and copy the docker compose definition from the linuxserver site.
I created a Samba shared folder for transmission files in OMV.
I then amended the docker compose definition for my own UID, GID, Timezone and my storage volume.  I didn't need to change any of the port numbers.



I then started the transmission container. As usual the software is downloaded, configured and then initialised.  


PI43 port 9091 allows you to see the transmission web interface so that you can add torrents to download files.

As the downloads are saved to a Samba I can access and copy them to any device.

In fact I dont need to use the web interface as I have a windows Transmission client which I use for managing torrents.

On the new transmission system I now have lots of space for downloads.  It turns out that my downloads can be 5-10 times faster than the old system, upto 10MBps.

Pi-hole

Pi-hole is a popular ad-blocker.  I have tried it before but it didn't seem to work well for me.  Setting it up in a docker container enables me to start and stop it at will.  As usual I pasted a default configuration into docker-compose.  In this case I had to make a small change to set the HTTP port to 8081.


The container comes up cleanly and I can signon to the web interface to see what is happening.


Initially pi-hole doesn't do any work.  I tested it by pointing the iPad at PI43 for its DNS and the iPad continued to work ok.  I then changed the router so it pointed to PI43 for its DNS.  Now all devices use pi-hole.

It works well, it doesn't interfere with normal browser operation and shows blank spaces instead of adverts in web pages.  If I want I can take down pihole and devices will use google DNS (8.8.8.8) instead.

Jellyfin


I am most interested in setting up Jellyfin as a media server.  It is widely used and liked.  The configuration is very simple, I just need to set up a shared drive for movies and tvseries.

Once the container had been started I could sign on to the admin interface on browser port 8096.
There is an admin user to setup and confirmation is required for movies and tvseries as the initial folders.

Installing the Jellyfin client on a PC is easy.  For some reason Samsung make it slightly complicated to install the app on the TV but I googled a solution.

Jellyfin provides a very professional interface, as good as Prime or Netflix.  It finds a thumbnail image for shows and is pretty good at discovering descriptions about individual episodes to help you choose what to watch.

I can add shows easily by copying them across to the Jellyfin shared folder.

I will call this my killer app, it makes docker worthwhile.






Thursday, 15 January 2026

PI43 : Open Media Vault : NAS : Backups

 Intro


I have had a new Raspberry Pi 4 sitting in a drawer and an urge to look at Linux again so I thought it would be a good time to set it up.  The particularly good feature of RPI4 is that it doesnt need a fan.  I have a smart electric blue metal case for it which can dissipate heat and keep it safe.  As usual I will run it headless.  I could probably have a reasonable experience using a desktop but I have an RPI5 waiting which will be better suited.

I  want PI43 to do something useful for me and I aim to leave it as a server switched on and unattended.  I already have a web server, application server and database server.

A few ideas come up repeatedly, a media server (jellyfin), a backup server (rsync), NAS (openmediavault), cloud server (OpenCloud) and containerised applications (docker).

As OpenMediaVault will potentially work well as a backup or cloud server and allows me to use docker I will set it up and see whether it meets my needs.  It will need external USB HDD or SSD.  If I had an M.2 hat for PI43 I could have faster SSD storage, but I dont think I need it.  I will use an existing Samsung 1TB HDD.  I was concerned this wouldn't be appropriate for a NAS, but confirmed that it wont be spinning continually so it should be fine.


OMV Install

pidiylab.com and pimylifeup have simple detailed tutorials on setting up OMV. I mainly followed the pimylifeup tutorial as it mentioned that I need to use RPI OS Bookworm version (rather than Trixie, the latest version) with the current release OMV7 in November 2025. (OMV8 supporting Trixie, the latest version came out in December).

Using RaspberryPi Imager, I created a new Bookworm SD card build and set PI43 up with an ethernet static address.

OMV is installed using a couple of scripts.  It has a very simple web interface allowing me to configure disks, file-systems, sharing protocols, shared folders users and permissions.

I connected a 1TB Samsung M3 USB portable HDD which have previously used for backups. 
I then enabled Samba in OMV, setup a shared folder on the samsung drive and created a backup user.
I also set the "spin down" time to 5 minutes and enabled S.M.A.R.T. drive monitoring.

The Samsung drive was half full of old backups so I moved them across to the shared folder using linux file move command.  I can now access the "samsung backup" shared folder from Windows file explorer  and from RPIs using a mount command.




NASmusic

Now I have lots of storage readily available to my local users / systems I setup a CIFS/SMB shared folder NASmusic  to contain my music library.  Initially I just copied a load of music across so it is sitting there waiting for me to use it from whatever device I choose.  In due course I can consolidate my music in this one place and use it for various home music players.

Review

At its simplest, all I have done is setup a Samba folder on PI43 which I can easily access from Windows.  I can also use it on iPad (using Files), Android (Samsung MyFiles) and Linux (mount command).  OMV improves on basic Samba by letting me setup multiple shared folders on the same drive through a simple interface.  I can easily setup users and permissions for appropriate access.  Usually with Samba I faff around each tiime I need to access a drive.  OMV makes Samba a lot more friendly.

The OMV install hasn't "taken over" the server, I still have the usual PI OS capabilities available to me.  It is a bit more than an app and a less than an OS.

Backup

My first use for the OMV NAS is to improve my existing RPI backup arrangements. Until now backups have been totally inadwuate based on very occasional rpi-clone system copies and sometimes copying zipped directory structures to other systems.  Even if a backup exists I have trouble finding it.

rsync is a widely used command line utilitiy for linux backups.  It is used to copy directory structures to another drive.   A regular backup will only copy any changed files across, so it doesn't use very amounts of storage.  It is perfectly suited to use Samba shares on a remote devices.

I found a suitable simple tutorial at jumpcloud and started to setup a backup for PI40, which is most in need of attention.  You specify a starting directoy (/home/pi in the example), folders you want to exclude and the target Samba folder.

You can run this script as often as you like and it will mirror any file/folder additions/changes/deletions across.  You can also specify a "dry-run" option which just shows you what would be backed up.  This makes it very easy to get the syntax and arguments just like you want them.

However there is a better way to use rsync.  rync can use ssh to communicate with the backup server.  I just needed to make sure that PI40 had ssh credentials for automatic signon to PI43.  After that I didn't need to worry about Samba shares.  Veronica Explains provided an enjoyable tutorial.

I quickly setup a simple backup.

After a little more trial and error I setup script to backup important PI40 folders that I didn't want to lose.
They backup to a folder PI40 on the samsung_backup share.


Finally I added this script as a CRON job to run monthly



Outro

We now have a new server which makes its storage available for easy use by other systems.
We also have a solid backup system which makes it easy to backup RPI files on a regular basis.

3D Levitation


I purchased a cool electromagnetic levitation gadget on the internet.  When powered up the electromagnets cause a magnet to float above it without any support.

In fact the electromagnets are fearsomely powerful and the floating magnet can easily crash into the base risking damage to the electrics.


It is a great application for a 3D printed plastic cover / protector.  It is simple to work out the internal and external diameters and the width of the four slots which leave gaps for protruding screw holes.

The first version was designed to fit neatly over the top of the magnet.  The second version was a taller to cover the gadget base completely.  It has a hole in the middle so that the floating cylinder can be placed correctly.

It takes careful thought to make the shape correctly in tinkercad.
1/ Create a cylinder the overall height of the cover.
2/ Create a hole 2mm shorter than the cover and lower it to the top of cylinder 1.
3/ Create the central hole and lower it to the workplane.
4/ Make a cuboid hole the width of cylinder 1/ and lower it to 2mm above the workplane.
5/ Copy cuboid 4/ and turn it through 90 degrees.
At each stage the centre of the objects is aligned and they are joined together in a union.


The final result was very pleasing and neatly covers the electromagnet.  I then decided to make a base which I could screw the gadget to.
  The cover fits nicely on top to make the whole rigid.



The result is very satisfying.  It is now much easier to set up levitation, the gadget looks better and I am much less likely to damage it during use.  I could do more, in particular making something to hold the floating disc would be fun.  One advert I saw had it incorporated into a floating Aladdins lamp!
However this does fulfull my requirement to make something useful, so I can stop here for the moment.




Wednesday, 14 January 2026

Mark Kostabi

 It is very rare for me to buy a picture. Thinking back over many years these are the ones that I have bought or Annette and I have bought together.

Chinese style landscape (now deceased), three impressionistic flower arrangements (Richard Akerman), two local park studies (Peter Boyle), a pool with overhanging trees (Mrs Ferguson) and of course lady watching TV (Lu J Son).











When we visited Tallinn in Agust I went to PoCo, their museum of contemporary art.  It was interesting and enjoyable.  There were one or two pictures by Mark Kostabi in the exhibition, which I liked and as I was leaving I saw that there was one of his prints for sale.  I was tempted to buy it but, as usual, I wasn't ready to make a quick decision.

Mark Kostabi is an American, living in Los Angeles, but his parents emigrated from Estonia so he has local connections.

 I thought more and more about the picture as we returned home and after a week or two I started looking online for prints by Kostabi that I could buy.  I am very happy with one I chose which now has pride of place in my personal gallery.


First off I like the lack of detail and smooth outlines of his characters.  Expressions, clothes, textures are not available to tell you anything about the participants.  Their posture, the positioning of limbs are the main source of clues.  For the dancers you could imagine them wearing leotards, tights, pumps and showing fixed smiles of concentration.

In my picture it is easy to see a couple who are very fond of each other, standing in an embrace and two more people in a state of abject despair.
So much is achieved by simple, gradual shading changes on their surfaces.  They could be mannikins which you can dress as you wish.

I like to think of the title as "hope and despair".

Mark Kostabi has produced many works some of which I have looked through.  Many are more complex or have more to say but I like these two.  Mark Kostabi himself faded somewhat from the art scene, some year ago because of balatant homophobic statements so I haven't looked further.

Saturday, 10 January 2026

Digital Picture Frame III

 Intro

My Digital Picture Frame was successfully implemented in October 2025.  It has a web interface which makes it easy to select galleries to display.  The randomiser, choosing a first picture to display, helps retain interest.  The display webpage has proved reliable.

There was some inconvenience in setting up, starting and stopping the show which I have addressed as the final part of the project using Home Assistant

1/    The TV needed to be turned on/off manually - HA can do this.

2/    HA now has a voice assistant "Jarvis" which I would like to start and stop the slideshow rather than using HA on PC, iPad or Laptop

3/    To avoid needless long-term i/o and SD card damage, turn off the slideshow each night in CRON.

TV Control

The small Samsung TV I use to display a slideshow is very old (2014) and only a little bit SMART.

There is an old "Samsung Smart TV" HA integration available which can turn the TV on or switch between HDMI and TV input.
Also the TV has a chromecast stick and the HA Chromecast integration can control some TV functions.
Thirdly I have a Broadlink IR sender which can duplicate TV remote Control functions.

There is a small issue: the Raspberry PI uses the HDMI2 input, so I need to make sure that regardless of whether the TV was previously in TV or HDMI1 or HDMI2 or something else I need to switch to HDMI2.  There isn't an entity which tells me which input is used or one which allows me to switch to HDMI2.
After some trial and error I use a sequence of "Samsung Smart TV" and "Chromecast" commands to turn the TV on and select HDMI2.

Script to Start and Stop Slideshow


The Digital Picture Frame web page uses a websocket interface which allows it to run a bash script on the web server (PI41).  The script invokes a python program "pictureparm.py" on PI41 to pause / resume the slideshow and change which gallery art is displayed.

The Home Assistant server (PI42) requires the capability to run "pictureparm.py".  We can execute a command on a remote server using SSH.



I can easily test SSH remote commands in a HA terminal window to check that I have SSH and the user set up correctly.



Next I set up a HA shell command called slideshow_start so that I can easily run the command from a HA script.

Finally the TV22_slideshow script, brought everything together.

It runs some "Chromecast" and "Samsung Smart TV" commands to turn the TV on and change it to HDMI2, which is the source connected to the PI41 server.

The script can then run the SSH shell command to start the slideshow running on the PI41 server screen.


Jarvis Voice Assistant

As an enthusiastic HA user I was excited to see that Nabu Casa have designed a Voice Assistant to rival Alexa and Google Home.  The Google Home interface to HA is somewhat tortuous and I certainly dont want to venture into the world of Alexa.

HA Voice isn't fully developed yet but obviously it is well integrated into HA and is somewhat more secure than alternatives as it can keep data processing local.

HA Voice is easy enough to setup using the instructions provided.  I select "Jarvis" as the control word.

Using the Voice Assistant we simply  associate the command "Start Slideshow" with our script and say the words.😊😊😊

CRON

As our slideshow runs in the background and I can watch it or do something else it is quite easy to forget it is running.  Since the slideshow reads continually from an SD card, this could lead to issues with the media if I leave it.  I schedule a CRON job each evening at 23:00 to stop the show if necessary.


OUTRO

This project has changed significantly from its starting point.  I was particularly keen that the result is something that I can use easily and it has exceeded my expectations in this respect.  Doing some technical stuff to start the show isn't conducive to regular use as it is a hassle.  A verbal command makes all the difference.  Secondly, the image on a small TV screen is visible and can be watched or ignored so I can just start the slideshow and watch when I am interested.  As there are usually a number of exhibitions within a show there are likely to be some pictures I am interested in.

In conclusion this is a worthwhile use of time, I have learned plenty and have an enjoyable result.


Tuesday, 6 January 2026

VisionFive 2 Lite

Purchase

Back in August I was seduced by an advert for the VisionFive 2 Lite.  Previously I purchased the VisionFive 2, which was, in my opinion the first properly useable RISC-V SBC.  The new offering has a similar spec but is priced much more reasonably.  It is in the same price range, but not quite so powerful as a RPI3 or RPI4.  I definitely wanted one to try out and, hopefully, to put it to use.  



Initial setup

The board arrived in November so I wanted to set it up asap.  Installation is very straightforward.  An Ubuntu desktop image can be downloaded from rvspace.org and copied to an SD card using win32diskimager.
I attached a screen for first boot, the system came up very slowly to show the GUI console.  I changed the configuration to stop the GUI loading which speeds the system somewhat.  I also enabled root SSH login so that I can comfortably run a headless server here on it.

I was able to run apt upgrade to bring software up to date without problems.  Initially I installed lighttpd, nano and samba, which all work seamlessly.

RISC-V packages are not available for all software, for example I couldn't install vncserver.  However I did install xrdp which I could use instead if I want a GUI.

Comparison with VF2

The rvspace website doesn't really distinguish between VF2 and VF2L OS software. I was able to take the SD card from VF2L, insert it in VF2 and it booted fine.  The boards seem to have similar performance, the main difference is that the newer one is cheaper.

Assembler

Of course the main feature of a riscv64 computer is its assembly instruction set so it would be remiss of me to not to check whether it is easy to write assembly programs.  Modern day hero Bruce Hoult is a RISC-V evangelist and provides some simple instructions.

I installed gcc as suggested, copied the program into hello.S and I was immediately up and running with assembler.☺☺☺

Docker

I noticed that docker is already installed on VF2L, which is great.
I tried the docker hello world example and it works fine.☺☺☺


Conclusion

VF2L is a good product, perhaps comparable with a Raspberry Pi Zero W.  It will be interesting to see what software it will run.  As the RISC-V universe grows more software will be adapted / available to run.

I think I will aim to setup standard linux packages to run on it with an emphasis on using docker where possible.





Tuesday, 11 November 2025

Goodbye FPGA

Intro

Back in 2019 I started some very interesting and fruitful involvement with FPGAs (Field Programmable Gate Arrays).  They require a significant investment in education and time to master and I haven't done anything with them in the last five years.  Although I have some good development boards, I would need to spend a lot of time updating the complex tools as part of any further work.  With some regret I am now disposing of my FPGA development boards via Ebay which I hope will provide them with good homes.

This post summarises the good times (which were previously blogged) during which I enjoyed some small successes with the boards.

MAX1000



Elektor magazine provided a simplified introduction to FPGA programming using the Arrow MAX1000 development board.  The board only had a button and eight LEDs to control but I was introduced to Altera Quartus Software and the NIOSII microcontroller which is implemented in the MAX1000.  This was a brilliant way of demystifying the intimidating reputation of FPGAs.

Cyclone IV

I needed more power and extra peripherals for interesting FPGA projects so I purchased a Cyclone IV FPGA development board.  I used this and MAX1000 for testing a simulated 8080 processor, testing UARTs and discovering features of the NIOS processor.  I didn't actually make much use of the buttons, switches, matrix display, 7-segment display or VGA.  This didn't stop me buying an even more sophisticated Cyclone IV with Ethernet, which I never used!


Arduino MKR Vidor 4000


I was pleasantly surprised to see that Arduino had an FPGA board and impressed with the contents.  They have a small Cyclone 10 FPGA together with an Arm Cortex M0 processor.
I didn't do much more than follow introductory tutorials for the board but I was able to get it working with Quartus Prime to build designs.
There don't seem to have been any developments or new FPGA boards from Arduino since this one.
 




Atlas DE0-nano-Soc


This is my favorite board.  It contains a Cyclone IV FPGA together with a "hard processor" (HPS) capable of running linux.  It is intended as the basis for FPGA university courses and there are tutorials to program the FPGA, HPS and link them together.  The first tutorial guides you through building a bare metal FFT application in the FPGA.  A second tutorial lets you build a linux system, including a preloader, u-boot and linux kernel, which is quite an undertaking.




Summary


I learned a great deal from these boards.  FPGA programming takes you right down to the level of logic levels and combinations of gates.  The software tools to help you achieve this are the same or similar to those used commercially which means they are large, complex and not necessarily free.  However they are very powerful and enable you to control the hardware.  I found out more about very low level steps to start processors including u-boot and BSP (board support packages).  I never got very far with programming peripherals and honestly I was quite a long way / time from being confident with the software, partly due to availability / compatibility problems.

I am very reluctant to lose these boards but I have put them on Ebay this week.
Update: I sold the boards for £20 (Ethernet), £30 (Cyclone IV) and £50 (Atlas).  I wasn't bothered about the money but I listed them at reasonable prices so that they would go to a good home where they were appreciated.

I have already looked at what I might get instead.  The emphasis must be on getting a board with excellent up to date software and learning resources.  Digilent seem to be the best option I have seen so far.....



Saturday, 18 October 2025

Digital Picture Frame II

Intro

Whilst playing with options for my DPF on the iPad I came across an article in LXF describing a simple RPI python slideshow app. Sadly it was the last LXF (Linux format) magazine edition dated July 2025 and was rather nostalgic.  I have enjoyed many of their articles over the last ten years but I guess everone/everything changes over time.

I have a small Samsung TV which functions as an RPI screen and I noticed when experimenting with mirroring my iPad to the TV that it provides an unobtrusive display which can be on in the background and looked at from time to time.

If I attach the screen to my RPI application server (PI41) I have a basic system to use for a PoC to see whether I prefer it to my other DPF versions.

Proof of Concept

The python app requires a desktop GUI to display images and PI41 doesn't have one installed as I usually use it "headless".
My first job was to change over from RPI OS Lite to the desktop version.  I botched it somewhat just adding packages until LXDE worked. I also had to plug in keyboard/mouse to PI41.
I then installed the python pygame module and I was able to display a sample image on the screen and it looked fine.

 I was happy with PoC progress so I setup a Samba share to my database server (PIP) giving me access to my art gallery images.  The image gallery has smaller lower resolution images making them suitable for web loading.  They are fixed height of 922 pixels which fits fits very well, without scaling on the RPI screen which is 1920p wide x 1080p high.

I decided to initially display all images within a folder in my slideshow rather than using the MySQL database containing image, gallery and file information.  Setting up a loop to display the images was straightforward, based on the LXF magazine example.

I was very pleased with the result.  Folders contain a variety of images from different galleries or exhibitions and it is easy to spend a little while looking at images as they attract your attention briefly.  Images look really good on the TV screen; they are a good size and have good quality colours.

Improvements

Choose a gallery

Now we are happy this is a good idea we have various jobs to turn the slideshow into a practical system.  Firstly, I need to be able to control which gallery folder is displayed.  There are about fifteen folders in total each containing about 50-100 images and I want to choose one folder rather than cycle round them all.  Initially I thought that adding websocket processing was the natural way forward but I couldn't easily work out how to run the slideshow and have the websocket waiting for instructions concurrently.

The program which loops round to display files in a folder is called pictureframe.py.  I set it up to read a parameter file picframe.parm which contains the name of the folder to be displayed.  It reads picframe.parm after each image is displayed and, if the folder changes, pictureframe.py loads a new set of images and starts to display them.
A second simple python script, picparm.py, takes a single command line argument, the name of a folder, and saves it to picframe.parm.

It is now an easy task to create a webpage which has a list of folders/galleries as buttons.  When a button is pressed the webpage uses a websocket to invoke picparm.py and change the folder being displayed.  This mechanism has been tried and tested on my music control web pages.


Display Tweak

The Samsung TV screen with a HDMI connection to the RPI has a screen resolution of 1920x1080.  I Rather than display the image as fullscreen using pygame I display a window 1840x1036 which allows me to add the images descriptive file name as a window caption. The image itself is always 922 pixels high which fits nicely into 1036 pixel window height when centred. 

Start and stop the display

The slideshow runs on a RPI desktop but I have no intention of using the attached keyboard to start and stop it.  After a few minutes writing python I was irritated by using the screen / keyboard directly.  The first remote desktop I tried was XRDP, an RDP implementation for RPI.  However it gave me a copy of the console rather than allowing me to "take over" the real one.  Most RPI users choose VNC.  I installed TigerVNC on Windows to communicate with VNC on RPI and this allowed me to stop using the attached keyboard and mouse.

However, I dont really want to do anything at the computer to start the slideshow.  I need RPI to automatically load and run pictureframe.py at startup.  Firstly we can setup RPI to automatically boot into the GUI using raspi-config

Then, in the LXDE GUI preferences, we can add pictureframe.py in autostart to run when the system starts up.

Now, as soon as the system startup our slideshow starts based on the most recent parameter file.


In fact I dont want to have a "stop" option anymore.  I add an extra parameter mode, "pause" or "resume",  to pictureframe.parm.  If pictureframe.py  sees "pause" in the parameter file it loops round until the parameter is changed to "resume" and the screen image doesn't change at all.

We add a "pause/resume" button to the web page so that we can stop and start the display from any browser device.

More enhancements

I am not sure how quickly to change display images so that I can look at them in enough detail, without getting bored.  I have started up with options to display for 5,10,20,60 seconds.  I added an extra line to pictureframe.parm containing the desired interval and added a command line parameter "time" to update the value in python.  I then added buttons in the webpage for each interval.

I also want to see in the browser what the current display parameters are.  I added a "status" parameter to pictureparm.py which returns current parameter values.  I then setup a field in the web page to display the output.


Finally, I added a randomiser, so that we dont start with the same picture each time we display a gallery.  Pictures are still in the same order but we can start with any one.

Outro

I am happy with my latest slideshow.  I like the larger images displayed on the Study TV.  Also you dont need to focus on them - they are just there.  You can control the display from any device and it doesn't require any thought to start / stop or change display.  Unlike the previous slideshows I have actually been using this one.