digital signs for the Southern California Linux Expo
- php5.4 with Apache httpd
- pulls an XML version of the conference speaking schedule down for the public socallinuxexpo.org web server
- sends formatted HTML to clients with the scale logo, wifi password, a scrolling schedule, sponsor logos, and relevant tweets
- python script using the GTK library to simulate a full screen web browser which typically runs on raspberry pis
The main index page will display a carousel with a grid view of all currently running and upcoming sessions. The PI displays in the hallways typically display this view.
example: http://signs.scale.lan/
The index page call be called with a room argument to display a room specific view that will display information relevant to that room.
Optimized for viewing at 1024x768 using one of the following room values:
- ballroom-a
- ballroom-b
- ballroom-c
- ballroom-de
- ballroom-f
- ballroom-g
- ballroom-h
- room-101
- room-103
- room-104
- room-105
- room-106
- room-107
- room-208
- room-209
- room-211
- room-212
examples:
http://signs.scale.lan/?room=ballroom-dehttp://signs.scale.lan/?room=room-101
It is sometimes necessary to test what the displays will look like at times other than the current. In order to do this the following variables must be modified in the uri:
- year
- month
- day
- hour
- minute
This is available in both Schedule and Room views
examples:
http://signs.scale.lan/?year=2025&month=3&day=8&hour=9&minute=10http://signs.scale.lan/?room=ballroom-de&year=2025&month=3&day=8&hour=14&minute=33
NOTE: This will not work unless
$starttimeis correctly set for the current year of the show
There is a bit of manual effort necessary from year to year. These tasks include, but might not be limited to:
- Do a search and replace for the previous scale version (example: replace all occurrences of 16x with 17x)
- verify proper XML is being supplied by drupal from the url reflected in the
$urlvariable inroom.phpandscroll.php - set
$starttimeinscroll.phpwhich should reflect midnight of the first night of current year show. Example: if the show starts on 3/14/24, then the entry for startime should be:$starttime = mktime(0, 0, 0, 3, 14, 2024) / 60;. - set
$starttimeinroom.phpto match scroll.php - set
$room_lookup_tableinroom.phpto match all rooms being used for the current year - set
$room_lookup_tableinindex.phpto match the one inroom.php - update
$shorten_topicsinscroll.phpto reflect the updated track list, matching exactly the keys to what is being supplied by the xml from drupal minus spaces - update
$shorten_topicsinroom.phpto matchscroll.php - create a style for each of the keys in
$shorten_topicsinstyle.cssmatching it to the public site - add colors for topics/tracks in
/server/style.css - update the sponsor images in
/server/images/sponsors/to reflect the current year's sponsors, making them 220x220 - update
$sponsorsinroom.phpmatching the value to each sponsor image file name - update
$sponsors_to_roomsinroom.phpmatching proper sponsor(s) to room and day by key from$sponsors - update the
$logosand$logos2arrays insponsors.phpattempting to distribute the list evenly across both case statements - update the
$diamond_platinum_sponsorsarray inroom.phpwith the current year diamond and platinum sponsors - update the
$gold_sponsorsarray inroom.phpwith the current year gold sponsors
Get rooms in use this year with:
export THIS_SCALE=22x; curl http://www.socallinuxexpo.org/scale/${THIS_SCALE}/sign.xml | grep "<Room>" | cut -d ">" -f 2 | cut -d "<" -f 1 | sort | uniq`Get shortened topic list this year with:
export THIS_SCALE=22x; curl -q http://www.socallinuxexpo.org/scale/${THIS_SCALE}/sign.xml | grep "<Topic>" | cut -d ">" -f 2 | cut -d "<" -f 1 | sort | uniq | sed 's/ //g'`Use ImageMagick to resize sponsor images
mogrify \
-resize 200x200 \
-background white \
-gravity center \
-extent 220x220 \
*.png- git
- docker
- docker-compose
If DST changes during SCaLE, the next morning $starttime in scroll.php and room.php will need to be adjusted by an hour otherwise the schedule will be off. This should be as simple as following the instructions in the comments at the top of each file.
git pull $this_repo- copy
samples-secrets.envtosecrets.envand populate with correct values docker-compose up -d
git pull $this_repodocker-compose builddocker-compose downdocker-compose up -d
You might need to force rebuilding without cache:
docker-compose build --no-cache
docker-compose psdocker-compose logs [-f]docker-compose top
- docker
- docker-compose
docker-compose build(repeat this every time code is changed to view results)docker-compose up -d- browse to
http://localhost:8088
If you prefer to use Podman, all docker and docker-compose invocations can be replaced with podman and podman-compose



