Monday, May 29, 2023

Event promotion with Porteus Kiosk and ChatGPT

At the public library where I work, I use a software product called Porteus Kiosk for our catalog computers. It’s a free, Linux-based operating system that makes it easy to lock down a computer and turn it into a single-purpose device. Check out my previous blog post for more on that.

One of the many features Porteus supports is the ability to set a webpage as the computer’s screensaver. I have seen other libraries utilize the screensavers of their catalog computers for event promotion and such, so I decided to do the same.

I knew what I wanted to do:

  1. Retrieve all WordPress posts that have a specific category assigned (our library uses a WordPress website). This could be done using the WordPress PHP API because the screensaver webpage is hosted on the same server as the library website.
  2. Get the featured image URL of each post. These are the images that will appear in the screensaver’s carousel.
  3. Display the featured images on a webpage in a slideshow that advances automatically every 20 seconds using JavaScript.

Writing the WordPress PHP code

I had heard of programmers using ChatGPT to help them write code (or do it for them, even). I started by asking ChatGPT:

“Give me some sample PHP code that retrieves all WordPress posts tagged with a specific category.”

Its response was to give me code that accomplished this utilizing WordPress’s REST API, along with a seemingly detailed and authoritative explanation of how the code works. It really felt like I was reading something written by a human being on a site like Stackoverflow. However, I didn’t want to use the REST API, so I said,

“What about without using the REST API?”

It inferred what I meant based on the context of our conversation. It revised its code sample to use the WordPress PHP API, which happened to be what I was looking for. However, the code didn’t work. After a lot of troubleshooting on my part, I discovered why. ChatGPT’s code used an incorrect keyword in the WordPress query function call—“category” instead of “cat” to represent the database ID of the category. I told ChatGPT its mistake,

“You were wrong about how to query based on category ID. The array key is "cat" not "category".”

It quickly apologized, told me I was correct, provided the corrected code, and apologized once more. Would it have responded in the same way if I said it made a mistake when it really hadn’t?

Writing the JavaScript slideshow code

In a new chat conversation, I asked,

“Write Javascript code that generates a slideshow from a list of images”.

And it did! But it didn’t quite give me what I wanted. The slideshow I had in mind was one that advanced automatically every 20 seconds. The code ChatGPT generated had “previous” and “next” buttons for advancing the slides. So, I provided the following instruction,

“Remove the next and prev buttons. The slides should automatically change every 20 seconds.”

And it did exactly that! After some work on my part to insert the slider image URLs retrieved using the WordPress code, the slideshow actually worked!

The results

Once I had a functioning event slider carousel up and running, I worked on making the web page look pretty (*without* any help, thank you) by adding the library’s logo, a nice background (as it turns out, photos of bookshelves tile very nicely), and a large heading so patrons know what the computer is for. You can see the final result here:



Saturday, May 20, 2023

Porteus Kiosk

Porteus Kiosk is a software product that can be used to turn computers into “dumb” terminals that serve a single purpose. For example, showing a slide show on a large monitor in a hotel lobby or allowing customers to make appointments at a hair salon. It uses a very light-weight Linux operating system and utilizes either the Firefox or Chrome web browser. It only requires only 1 GB of hard disk space and 1 GB of RAM.

At the public library where I work, this product is perfect for the computers that patrons use to look up items in the library’s online catalog (referred to as "OPACs"--online public access catalogs). Gone are the days of jumping through a thousand hoops trying to properly lock down and administer an expensive and resource-heavy Windows computer. Porteus Kiosk is better in every way.

The way it works is you burn a 170 MB ISO to a flash drive (or an optical disk if you’re feeling nostalgic) and boot the flash drive on the kiosk computer. The kiosk image is configured using a special configuration file, which is just a plain text file with one setting per line. All of the settings are documented on their website.

Example configuration file:


The setup wizard allows you to provide this configuration file, but it also provides a user-friendly GUI that allows you to browse the various configuration settings that are available and set them as you wish. When you are done, it shows you the configuration file that it generates based on the settings you selected. You can then save it for later use.

Once the configuration settings have been provided, it prompts you to choose a partition on the hard drive on which to burn the kiosk image. You might think it would take a while to write an entire operating system to the hard drive, but it is very fast. On the 10+ year old machines I’ve put Porteus on, it takes less than a minute.

In order to reconfigure the kiosk (for example, changing the home page), you have to go through the entire process again—there’s no “administration settings” screen you can open while the kiosk is running. However, it is possible to host the configuration file on a web server and point the kiosk to this URL. When this is done, every time the kiosk boots, it checks to see if the configuration file has changed. If it has, it automatically re-images the machine with the new configuration. If it is unable to download the configuration file (due to the web server being down, for instance), it continues to use the last configuration file it downloaded and displays a warning message at the top of the screen for a few seconds after it boots.

Despite all the great things about Porteus, I did encounter one annoying issue related to the system clock. I have configured our computers to turn on automatically in the morning using the Auto-On settings in the BIOS. Every time the computer boots, Porteus syncs the system clock with internet time servers. This is good because most websites use HTTPS, and if the system clock is not set correctly, these sites will not load. However, it sets the system clock to UTC time, which means that the Auto-On time, which is defined in local time, no longer matches the system clock time. A workaround is to set the Auto-On time to be 4 hours ahead of local time (for example, setting it to 12 PM when I want the computers to turn on at 8 AM). However, this means that the computer will turn on an hour early during the other half of the year when our UTC offset is -5 instead of -4.

Tuesday, May 16, 2023

Customizing your Envisionware self-service terminal launch screen

I recently deployed a computer at the public library where I work that allows patrons to pay for and release their own print jobs. Previously, the print release system was managed by staff at the circulation desk, which meant longer wait time for patrons and more work for staff.

The software can be confusing to install and configure. But fortunately, I was able to figure it out myself and did not have to resort to contacting Envisionware’s customer support for assistance. When you install the software, you’re actually installing two separate pieces of software. First, there is the actual LPT:One print release terminal software, which is what patrons use to view and release their print jobs. Then, there is an optional piece of software called Launch Command which should be installed if your print release terminal is configured to be patron-facing instead of staff-facing.

Launch Command provides buttons for the user to click which launches the print release software. Touch screen monitors are great for this, and I have deployed one for our setup. The window fills up the entire screen, including the task bar, to prevent users from accessing the Windows desktop. The buttons are defined in a simple HTML file, which gives you a ton of flexibility to customize this screen however you want. In fact, I highly recommend you do this because the out-of-the-box screen is, let’s just say, very “1990”. I was surprised to find that none of the public libraries I’ve visited in my area have customized this screen at all.

Out of the box (shield your eyes, for the white background color may blind you):

 My customizations:

The print release software is launched using an <a> tag whose “href” attribute points to the print release software’s executable. This means you could presumably use Launch Command for launching other programs too, though I haven’t had a need to do this.

<a href="launch://C:\Program Files (x86)\EnvisionWare\lptone\lptprt\lptprt.exe -host= -runmode=prompt -locale:en_us">

As you can see from the code snippet above, it’s easy to change the display language for the print release software by editing the “locale” argument. Because we have many Spanish-speaking patrons, I added a second button which launches the print release software in Spanish (use “es_us” for Spanish). The software supports English, Spanish, French, Portuguese, PRC Chinese, and Hong Kong Chinese.

Images used on this screen are stored in a location relative to where the HTML file is stored. The images are referenced by relative path in the HTML.

<img src="../images/release-a-print-job.en-us.png" />

I don’t know how Launch Command renders the HTML. Does it use its own web browser? I haven’t tried doing too many crazy things with the HTML, but due to the program’s age, I wouldn’t be surprised if it lacks support for modern web standards. For example, I tried to apply rounded-corner styling to some images using the “border-radius” CSS property, but it had no effect.

Sunday, April 30, 2023



CloudNine is a software product developed by a company called Envisionware. It is used to control access to public computers and other devices. Its main customer base is public libraries. It supports a plethora of features such as library card barcode authentication, setting session time limits, and setting operating hours.

It is a new system that aims to replace the company’s legacy software product, PC Reservation. The two products serve the same purpose but are very different from each other. The main technical difference between the two is that PC Reservation must run on a local server within the building premises, whereas CloudNine (as you may have guessed from the “clever” name) is administered over the internet. PC Reservation uses a native Windows application to administer your public computers, whereas CloudNine uses a web-based interface called the Web Console.

The Web Console is simply a website that you login to that allows you to administer your computers. It organizes its settings in a hierarchical fashion, which is particularly useful if your library system is composed of multiple branch libraries. What this means is that you can define settings at the “top level”, which all branches will inherit from. Then, you can choose to override those settings individually at the branch level as needed. For example, if one of your branch libraries wants to have a different session time limit than everyone else, it’s easy to override that setting for that individual branch.


There are a TON of settings in the Web Console. Many are self-explanatory, but unfortunately, documentation for these settings is currently lacking. Each setting has tooltip text which is displayed when you point to the setting in the UI, but the text is often redundant and not useful. For example, the tooltip text for a setting called “URL for Logo” is unhelpfully “The URL to an image that will be used for your logo.” It doesn’t say anything about what image formats are supported or what the dimensions should be.

To install CloudNine onto a public computer, you first login to the Web Console and add an entry for the computer to the list of reservable computers.  From there, you download a Windows executable, which is what installs the CloudNine native client onto the computer. The installation is straightforward and once installed, no additional configuration is required. All settings, such as session time limits, authentication rules, etc are pulled down from Web Console, so the client itself doesn’t need to be configured at all. The client software will auto-update itself as needed.

The CloudNine client is basically a lock screen that sits overtop the Windows desktop that prevents you from interacting with the computer until you login to it. You are not able to see the desktop or open the start menu until you authenticate with CloudNine. Authentication is done using a library card barcode number or a guest pass. Once you authenticate, the lock screen goes away and you can use the computer like normal. (However, logging out of the Windows user account will effectively end your CloudNine session because CloudNine will relaunch when you log back into any Windows user account, at which point you will have to login to CloudNine again to use the computer.)

The downside to CloudNine being cloud-based is that, if the computer loses its internet connection, then it will not allow users to login and use the computer. However, most of our patrons primarily use the computers for internet access, so if our building loses internet, no one wants to use the computers anyway. The same issue could occur if the CloudNine servers go down, but server uptime has been stellar, and we’ve never had issues with that.

Overall, CloudNine is a very good product and I’m glad our consortium decided to purchase it!

Tuesday, August 24, 2021

The new Google Drive desktop app

Google Drive is a free cloud-based file storage service provided by Google. It allows you to browse, upload, and download files in the cloud using a web browser. For more convenient access to your files, Google provides a Windows desktop application that allows you to access your Google Drive files through File Explorer without needing to use a web browser.

This application used to be called “Backup and Sync”. A new and improved version, not-so-creatively dubbed “Drive for desktop”, has recently been released. This new version is considerably different from its predecessor.


The biggest improvement in my opinion is the ability to stream files. With Backup and Sync, you had no option but to download a copy of every single file to your computer (Drive for desktop calls this “mirroring”). This approach is problematic if you are short on disk space or have a slow internet connection. While Drive for desktop continues to support mirroring, it also provides a second option called “streaming”. This means that the files are only downloaded when you open them, saving a lot of disk space and bandwidth. Files and folders that you need offline access to can be marked as such using the right-click context menu.

Microsoft Office support

Another improvement is better integration with Microsoft Office. When you have an Office file open, such as a Word document, Drive for desktop will notify you if the file was changed by somebody else. This helps to prevent you from blowing away edits made by somebody else you have shared the file with. However, if you are doing a lot of collaboration work, I recommend using Google’s web-based office suite instead (Google Docs, Google Sheets, etc), as it handles simultaneous, collaborative editing much more effectively.

Backing up external drives

As with Backup and Sync, the new app makes it easy to back up any external drives, like flash drives, that you plug into your computer. Upon connecting a drive, a popup immediately appears asking if you want to back the drive up or not. Unfortunately, unlike Backup and Sync, there is no option to completely disable these notifications.

Location in File Explorer

An interesting change is where it puts the files in File Explorer. With Backup and Sync, it simply stored the files in a folder at the root of your user directory. Drive for desktop, however, takes the meaning of “drive” quite literally: it stores the files in their own drive under “This PC”, as if it were a flash drive or external hard drive. It assigns the drive to letter “G” by default (for “Google” I presume), but it is possible to change the drive letter in the settings. Every Google account you add gets its own drive with its own letter. One feature I wish it offered was the ability to customize the drive label, which defaults to “Google Drive” if you just have a single account connected, or “<email address> - Google Drive” (truncated based on the max character length of this field) if you have multiple accounts connected. You can change the label yourself in File Explorer, but the change is not preserved between reboots.


Overall, I would say the new app is an improvement over the old one. Google has not forced Backup and Sync users to update yet, but you also cannot download Backup and Sync anymore. The download page only offers Drive for desktop for download. See the full feature comparison listing.

Tuesday, January 12, 2021

TeamViewer Overview

At the library where I work, we recently purchased a paid TeamViewer license. This allows us to conduct remote computer classes and provide socially distanced patron computer support during the pandemic. This blog post contains some of the things I have learned about TeamViewer during this process.

What is it?

TeamViewer is a remote access application which allows you to view the screen of another computer over the internet, as well as control the mouse cursor and keyboard. In this way, it is like Remote Desktop, but the similarity ends there. TeamViewer is a "zero config" service, which means it does not require the complicated network setup that Remote Desktop requires to be functional over the internet. To make this possible, all traffic is routed over port 80 through TeamViewer’s servers. The data is protected with end-to-end encryption, so nobody, not even the TeamViewer server admins, can eavesdrop on your session.

Also unlike Remote Desktop, it does not interact with the Windows login system. With Remote Desktop, you must supply the login credentials of a Windows user account to initiate a connection. But with TeamViewer, you directly see what is being displayed on the remote computer’s screen, as if you were sitting in front of it. For example, if you logout of the current Windows user account while using TeamViewer, you are shown the Windows login screen. Doing this whist using Remote Desktop would cause your connection to be terminated.

Instead of using IP addresses to connect to remote computers, TeamViewer assigns each computer a nine-digit, globally unique ID. This number never changes, even if you uninstall and reinstall TeamViewer (which makes me wonder if the ID is stored in the registry or if it is associated with your IP or MAC address). It also gives you a random, 6-character password, which the person connecting to your computer must know in order to connect. This password changes every time you open TeamViewer, which prevents someone who connected to you in the past from connecting again without your permission.


TeamViewer’s license states that you may use it for free so long as you are only using it for personal use. What is "personal use" exactly? If you’re using it to connect to a friend or family member’s home computer, that’s considered personal use. The moment you use it to connect to a computer at work or to a server, you are expected to purchase a license. If you don’t have a paid license and TeamViewer’s algorithms think that you are using it non-personal purposes, it will put a block on your computer’s ID, which prevents you from initiating and receiving connections. How it makes this determination, I don’t know. But if you think you have been wrongly accused, there are ways to submit a request to have them unblock you.

One thing that is restrictive about the paid plans is that it heavily limits how many computers can have active connections open at time. TeamViewer calls these "channels". A channel is created when a computer initiates a connection to one or more computers. For example, if Computer A remotes into Computer B, that’s considered one channel. A single channel can include multiple connections. For example, if Computer A remotes into Computers B, C, and D at the same time, that’s still a single channel.

The least expensive paid plan only allows a maximum of one channel. So, if you install TeamViewer on two computers, only one of those computers can initiate remote connections at a time (both computers can still receive incoming connections, it’s just that only one computer at a time can create outgoing connections). If another computer associated with your license has a channel open and you try to create a new channel by connecting to a remote computer, you will get an error message that blocks you from doing so.

The more expensive plans allow you to add more channels, and they come at a hefty price tag. We decided to purchase 1 additional channel, which would have costed us an additional $778/year. But because the library is a non-profit organization, we were able to obtain a 60% discount through TechSoup, which is a website that sells software at reduced prices to non-profits.

Variants of the software

There are three different variants of the TeamViewer software.

TeamViewer: Listed at the top of the download page on their website, this is the full-featured software application. With it, you can both connect to other computers and have other computers connect to you.

TeamViewer QuickSupport: This is a good choice for when you want to do a one-off computer support session with someone who is sitting at their computer. It allows other computers to connect to you, but does not give you the ability to connect to other computers. One nice thing about this application is that it does not actually install anything onto the computer—it’s just an EXE file the user downloads and runs. With a paid TeamViewer plan, you can customize the way the QuickSupport window looks, which is useful for displaying your business’s logo and branding.

TeamViewer Host: This is the best choice for when you need remote access to computers that are under your control (as opposed to the computers of random people on the internet). Like QuickSupport, it only allows incoming connections. But unlike QuickSupport, it installs software onto the computer, which automatically launches when Windows boots. If you’re installing this on a server, you’ll want to enable unattended access by assigning it a password that never changes.

Other features

Integrated voice/video chat: Talk with the person on the other end directly through TeamViewer without needing to maintain a second line of communication (e.g. phone call or VoIP call).  In my research, I have not been able to find any other remote access software product that has this capability. The audio quality is fine, and I’ve never had problems understanding people.

Clipboard syncing: TeamViewer supports seamless copy and paste between your local system and the remote computer. Not all remote access software supports this.

File transfer: There are several ways TeamViewer allows you to copy files between computers. Note that the transfer speed is quite slow (seems to be capped around 1 Mbps), so it’s not great for large files.

  • File browser: This is similar to an FTP client in that it allows you to browse the remote computer’s entire file system (or, at least, the folders that the remote user has access to) and download any files you want. You can also upload files to any location of your choosing.
  • File box: Allows you to upload individual files to a drop box, which the person on the other end then downloads from the drop box.
  • Clipboard transfer: Just like you can "copy and paste" files in File Explorer to make copies of file, you can do the same with TeamViewer to transfer a file to the remote computer.

Multiple monitor support: If the computer you are connecting to has multiple monitors attached to it, TeamViewer allows you to switch between them with ease or display them all at once.

My Verdict

My two main criticisms are the channel limits and price. I feel that channel limits can be very restrictive when you are working in a team, and the software seems expensive compared to alternatives.

But on the flipside, you definitely get what you pay for. Think of TeamViewer as the iPhone of the remote desktop world. The service is reliable, and the software is very easy to use. It was the only remote access software I could find that had integrated voice chat, which is feature that we needed to have. The company is based in Germany, a country that is subject to strict European privacy laws such as the GDPR, which is reassuring from a security and privacy standpoint. Oh, and did I mention the user interface has a dark theme? ;-)

If you’re an IT technician that just needs remote access to a handful of machines, there are other less expensive solutions out there. But for everyone else, TeamViewer provides a reliable, user-friendly solution that non-computer professionals can use with relative ease.