2023–24 Projects:
A few years ago, when I was teaching the CS 111 half of the Psychology, Technology, and Design/CS 111 dyad, I ran into an interesting problem. Our students were working on projects that required them to redesign and re-envision parts of Carlpedia and Moodle. The redesigns required them to rework the user interfaces for these sites. So far, so good. However, since this was a CS 111 class, the students had to implement these interfaces in...Python.
A typical conversation between a project group and me:
Student: Here is our mockup. We want to put a search bar at the top, a set of clickable buttons along the right-hand side, and a drop-down menu over here. We've done usability tests on the paper prototype and our users respond well to this new layout. Me: OK, looks great! Student: But we're not sure where to begin. How do we make a drop-down menu in Python? Me: [long uncomfortable silence] Let's start by making a rectangle...
Arguably, Python might not be the best choice for developing graphical user interfaces. However, sometimes Python is the language of choice on a project, and sometimes we want to do a quick mockup of a user interface to go along with our quick Python implementation/proof of concept of whatever we're developing. In either case, developing functional, aesthetically pleasing user interfaces in Python should not be as much of a stumbling block as it currently is. In the spirit of Python, we should be able to say "Put a clickable button here", with the same ease that we call any other function or create any other object in Python.
On the other hand, why should we limit ourselves to just Python? What if we could design our own "UI scripting" language that would make it really really easy for someone to specify an interface, and then generate that interface in their programming language of choice? That way, even users new to a programming language could create powerful, interesting, aesthetically pleasing interfaces without getting bogged down in function calls, syntax, and other minutiae. This will be the focus of your Comps project.
The goal of this project is to develop a simple scripting language for the purpose of creating user interfaces. The scripting language will specify which elements should appear in the interface, and where, as well as what actions will be triggered when the elements are engaged. For simplicity, we will tie this scripting language to Python, so that when the scripting language executes, it generates and executes Python code to create the interface. (However, your design should be language-agnostic enough that we could, for instance, easily replace the Python calls with Java calls, or C++ calls, or what have you.) This means that a secondary goal of the project is to write an interpreter that interprets the scripting code into Python code. Ideally, you'll develop a general interpreter framework so that you can "drop in" any language and have the scripting language interpreted into an arbitrary language. Our proof of concept will interpret the scripting code into Python code.
You may use a pre-existing Python graphics library to actually generate the different elements. You will probably want or need to develop your own API/wrapper for this library so that your scripting language can more easily converse with the library.
Here are the steps that the project will roughly entail:
One of your first tasks on this project will be to identify appropriate sources and resources to guide the development and design of the scripting language and the interpreter. You will work with the reference librarians to identify appropriate sources, and do a lit review of the problem space. Your search will include the following areas/fields: