Introduction
I have opportunities available for students to work on open-source software projects for experience and academic credit. These projects land more on the "development" side of research and development (R&D) and focus on two overall themes:
- The creation of a lightweight Linux desktop environment that can run well on a single-board computer running on a combination of battery and solar power. Such a system would be resilient and could deliver reference information, education, and entertainment in off-grid scenarios, such as the aftermath of a hurricane or other natural disaster. It would also be useful for rebuilding larger computing infrastructure during the recovery process after such an event.
- Communicating scientific results and course instructional materials in a manner that is both convenient to write and meets Web Content Accessibility Guidelines. In addition to publication on the Internet, copies of the generated materials could be included on the aforementioned off-grid computing system for offline use.
Participation Guidelines
Interested Coastal Carolina University students at all academic levels (including freshmen!) are welcome to contact me at mmurphy2@coastal.edu for more information about these projects. Students in our B.S. Computer Information Systems (Online), B.S. Information Technology (Online), and M.S. Information Systems Technology programs are welcome to participate. It is not necessary to be on the Conway campus in order to work on these software applications.
Undergraduate Students
Academic credit is available for CSCI 399 (Independent Study) for 1 to 3 credit hours per semester. In general, new students would start at 1 credit hour, increasing credit hours in one of these projects (or another faculty-led project) in future semesters. A time commitment of 50-75 clock hours per semester is expected per credit hour of CSCI 399.
Students in the B.S. Computer Information Systems and B.S. Information Technology degree programs (online or in-person) can count CSCI 399 credits toward the 12 credits of CSCI courses numbered 200 or above for each program. Students in the B.S. Computer Science degree program can count CSCI 399 credits toward the 3 credit requirement of a CSCI course numbered 200 or above.
Graduate Students
For projects at the graduate level, students can elect the thesis option. CSCI 799 (Thesis Research) credits would apply for up to 6 credit hours. Graduate students electing the thesis option would complete a masters thesis in accordance with Graduate School requirements in addition to working on the software. Please note that some projects are intended for lower-level students and are not suitable for graduate thesis work.
Audio Visualization for TealPlay
This project is jointly mentored with Prof. Megan Hickman Fulp.
TealPlay (Figure 1) is an open-source (MIT licensed) media center application that can play audio and video files. It supports a locally-hosted media library, which can be used in offline/off-grid applications. Since TealPlay does not send out any data, it is also private. One can use TealPlay to watch a video without being watched by a video hosting platform. In a post-disaster scenario, TealPlay could deliver an organized library of instructional and/or entertainment content.
One major feature that is still lacking in TealPlay is support for proper audio visualizations when playing music. There appears to be a way to decode the audio file programmatically in Qt for Python, which is the GUI framework that TealPlay uses. However, the resulting data from the decode will be in the form of raw bytes. In order to visualize the audio, Fast Fourier Transforms (FFTs) will be required to extract frequency data. From there, other mathematical algorithms and graphics programming techniques will be needed to generate the visualizations.
This project will develop or enhance the following skills:
- Python programming.
- Drawing graphics using Qt controls and primitives.
- Software design/engineering.
- Problem solving through research and experimentation.
- Math skills.
Bibliography Manager
In academic writing, we frequently cite sources of information and list our citations in the References section of a document. The upcoming TealSite static site generator is able to format references using a directory of files as a source of bibliographic information. An author using TealSite only needs to refer the unique identifier of a source (and an optional page number) in order to generate both the inline citation and the reference entry. At the moment, TealSite ingests RIS and PubMed entry formats, which the user must either find online somewhere or write by hand. An application that can manage references and save them in a format usable by TealSite would make this process much easier.
This project involves creating a lightweight bibliography/citation manager using Python and Qt for Python. It is a greenfield project with no existing code.
Working on the bibliography manager would develop or enhance the following skills:
- Python programming and software engineering.
- Graphical User Interface (GUI) design.
- Using the Qt GUI toolkit.
- Converting between different file formats and data representations.
- Working with standards, including those that are loosely and poorly documented.
CSS Parser
An ongoing but not yet released project is the TealSite static site generator. TealSite uses HTML and CSS Selectors Level 3 to implement its template system, so it already has a CSS selector parser. However, it would also be nice if TealSite could manage, merge, and supplement CSS stylesheets automatically. Such a capability would benefit more complex websites without requiring additional software like Sass.
The first step in processing general CSS stylesheets is to implement a stylesheet parser, which uses a context-free grammar. Since this code will be pure Python to match the rest of TealSite, a hand-coded recursive descent parser will be used.
This project will develop or enhance the following skills:
- Python programming.
- Recursive-descent parsing, including the use of context-free grammars and Extended Backus-Naur Form to represent stylesheet constructs.
- Regular expressions for tokenizing stylesheet text.
- Problem solving through research and experimentation.
Desktop Calculator
As part of a long-term program to create a lightweight but easy-to-modify desktop environment for Linux, a comprehensive desktop calculator application using Python and Qt for Python is needed. This calculator would support several modes of operation, including basic functions, scientific, numerical system, and financial modes.
This project is a greenfield project, as no code has been written yet. Also, the calculator is an ideal lower-level project for a freshman- or sophomore-level student. It is not suitable at the graduate level.
Working on the calculator application would develop or enhance the following skills:
- Python programming.
- Graphical User Interface (GUI) design.
- Using the Qt GUI toolkit.
- Exploring Python standard library mathematics modules, including math, decimal, and statistics.
Desktop Configuration Tools
In order to make an eventual lightweight Linux desktop environment easier for users to configure, we need some GUI applications that can read and modify configuration files. Example applications that are useful but require text-based configuration at the moment include swayidle, swaylock, wlsunset, and potentially Labwc.
Each configuration application will be a small, self-contained, standalone program using Python and Qt for Python. As such, these applications are well-suited to lower-level students and are not suitable for graduate-level students.
Any of these applications would develop or enhance the following skills:
- Python programming.
- Graphical User Interface (GUI) design.
- Using the Qt GUI toolkit.
- Understanding, reading, and writing configuration files.
- Sending signals to reload running processes.
Desktop Panel for Wayland
An ongoing project is in progress to create a lightweight but easy-to-modify desktop environment for Linux using the Labwc Wayland compositor. Labwc does not include its own desktop panel, so the current iteration borrows the panel from LXQt. We'd like to have our own panel instead, coded in Python and Qt for Python to make it easy for future students to explore and modify.
In order to implement the panel properly, it will be necessary to generate bindings for LayerShellQt, which allows a Qt widget or window to speak the wlroots layer shell protocol in order to position itself correctly on the screen. An existing project to create Python bindings already exists under a compatible license, although it might need to be updated for recent Qt versions.
This project will develop or enhance the following skills:
- Python programming and software engineering.
- Linux operating system utilization, including Wayland compositors and desktop components.
- Graphical User Interface (GUI) design.
- Problem solving through research and experimentation.
Live Desktop Creator
I have created a framework and prototype toolchain for building Alpine Linux desktop environments that run entirely from RAM. At today's RAM prices, however, it would be beneficial to have the ability to run from a read-only backing store using SquashFS as an alternative. The toolchain should also be rewritten in Python to make it easier to read and maintain in the long run.
Since most existing Linux live environments already use SquashFS, plenty of examples are available. The main challenges with this project will be to understand my existing Bourne/Almquist shell code and find pragmatic Python idioms to replace convenient shell script expressions.
This project will develop or enhance the following skills:
- Python and script (Bourne/Almquist shell) programming.
- Linux systems at a low level, including file systems, memory-backed storage, and (de)compression.
- System boot processes, including the Unified Extensible Firmware Interface (UEFI).
- Problem solving through research and experimentation.
Scientific Data Plotter
One desired capability for the (not-yet-released) TealSite static site generator is to ingest a raw data file and produce a plot, chart, or other scientific visualization in Scalable Vector Graphics (SVG) format so that it scales cleanly across devices (cell phones, laptops, projectors, etc.). To communicate a data plot, a scientist would use a custom HTML tag in TealSite to reference a data set. TealSite would then produce the desired graphic when generating the output website, optionally including a link to download the raw data.
The excellent Matplotlib package can generate SVG plots from Python code already. Most of this project will involve designing the custom HTML tag and integrating Matplotlib into the existing TealSite code (also Python).
This project will develop or enhance the following skills:
- Python programming.
- HTML and CSS.
- Scientific visualization using Matplotlib.
- Problem solving through research and experimentation.
Web Browser
I generally recommend and use LibreWolf as my primary browser. However, there are some websites that have only been coded and tested using Blink-based browsers like Chrome or Edge. Most such sites will work with Qt WebEngine, which can be incorporated into a Qt for Python GUI easily.
I have created a basic browser in a few lines of code that has the Qt WebEngine widget, an address bar, and a back button. However, it would be nice to have additional features, eventually including an ad blocker. Creating this browser is essentially a greenfield project that offers multiple opportunities to make design and feature decisions.
This project will develop or enhance the following skills:
- Python programming and software engineering.
- Problem solving through research and experimentation.
- Graphical User Interface design.
- Digital privacy skills, including mitigations for tracking, fingerprinting, and other types of surreptitious data collection.
ZIM Viewer
The Kiwix Association has developed an efficient way to provide offline copies of resources including Wikipedia, Project Gutenberg, and various programming documentation, among others. Kiwix compresses these resources into the binary ZIM file format, with a 1-to-1 relationship between resources and ZIM files. For example, a recent snapshot of Wikipedia is available as a 115 GB ZIM file. Kiwix supplies various viewers and servers for ZIM files with a focus on serving areas without Internet access.
As part of a project to create a standalone, resilient computing system that could operate off the grid after a hurricane or other disaster, it is desirable to have a local ZIM file viewer. Several choices exist, but they have some drawbacks. For instance, the official Kiwix viewer insists upon having a torrent client available at run time and complains if it isn't present. To complicate matters further, the Kiwix Association released their official library for interacting with ZIM files under the GNU General Public License, version 2. While this license isn't problematic by itself, it also isn't the best choice for a library license.
Instead of creating a GPLv2-licensed application that relies on the Kiwix library, this project will instead use the ZIM file format documentation to implement a pure Python reader module. A GUI can then be added using Qt for Python to be consistent with the other projects. This is a greenfield project: no code has been written yet.
This project will develop or enhance the following skills:
- Python programming and software engineering.
- Graphical User Interface design.
- Working with low-level binary data.
- Following specifications.
- Problem solving through research and experimentation.