Troodos Mountains | Agros Cyprus

Bennett Lewis

MSc Computer Science

ABOUT

Fisherman, igloo constructor, and MSc. of computer science. I graduated from the University of Saskatchewan in with my BSc. 2022 and with my MSc. in 2025. After completing my Maters under Dr.Julita Vassileva in the MADMUC lab I enoyed a brief tour of Cyprus and the UK before returning to Saskatoon to start a new job as a software developer for Agscouter. I enjoy unique constraints in my programming challenges and have a passion for researching the societal effects of technology. I have a broad interest set ranging from bringing my code to life with microcontrollers, to self-hosting open-source services. In my spare time I enjoy reading world philosophy, kayaking, igloo building, and fishing.

Contact

contact@blewi.xyz

git.cs.usask.ca/fbl773 (School)

github.com/fbl773 (School)

git.blewi.xyz/FrankyB (Personal)

Bennett Lewis

wat?

Caringorms National Park, 2025

experience/Point B_ank

Position: Primary Stakeholder

Winter 2024

Description:

A friend of mine who once worked in Dr. Nathanial Osgood's lab mentioned that Dr.Osgood was looking for project ideas for his CMPT 371 class. I had just the thing! I took on the hobby of projectile point identification and cataloguing when I found my family's projectile point (arrowhead) collection jingling around in a ziplock bag. I wanted to know more about them, so I began documenting, photographing, and individually bagging each point in our collection. Currently, this catalogue is in the form of paper notes, a solution that did not scale well when my uncle asked me to catalogue his collection as well. As a technologist, I knew how I would create cataloguing software that fits my needs, but as a masters student I did not have the time to design/implement such a system. So this is the idea I pitched to the class: An open source cataloguing system for artifacts. I was delighted to learn not only that Dr.Osgood had some experience lithics, but that a team had decided to pick up the project. For the winter term of the 2024 academic year, I acted as the primary stakeholder along with my friends Jason Goertzen (Mathematics, Computer Science) & Gabriel Lamarche (Archaeology) to help the team actualize this project. Seeing as I planned on continuing work on the project once they had finished, the goals I gave the team were A) to create a strong MVP capable of managing projectile points specifically. B) When designing the system and database layout, anticipate the need to catalogue other artifact types (Faunal, Ceramics, & other Lithic artifacts), and C) Pay special attention to developer documentation so I don't have to pester you when I inherit the project. Since the class has finished, I have forked the repository and have a live demo running at the URL mentioned above. The project has a long way to go, but I couldn't be happier with the team. They delivered a strong starting point for my vision and were a pleasure to work with. Their hard work is much appreciated.

Duties:

Communicate design goals to team leads
Participate in weekly progress meetings
Advise on design goals
Advise on Feature priority

Technologies:

express
jest
postgresql
react
vite

experience/nisotak

nisotak.usask.ca

Demo available at nisotak.blewi.xyz

Position: Lead Developer

2021-2022

Description:

The word nisotak is intentionally left as lowercase. This is a reflection of the nêhiyawêwin (Cree) philosophy that no word/letter is any greater than another. The word itself is an old way of referring to "two canoes" and also serves as the acronym "nêhiyawêwin instructional syntax online for teaching and knowledge". I was asked to join the nisotak project after being noticed by my CMPT 412 (Social Computing) professor at the university. It was the first term out of Delco and I'd been practicing what I learned there on my personal projects but was eager to work with a team and apply my skills at scale again. When I first entered the project, the original authors were long gone and had left user-facing PDFs as the only technical documentation of their work. Our release process was completely manual and we had only deployed with android. Testing was non-existent, many features were only partially implemented and seemingly abandon while others were present, but lacked generalizability and were full of bugs. The nisotak project still has a long way to go, but after roughly a year of part-time work we automated our build process, wrote and automated testing for most system components, cleaned up our bugs, cleaned up our UI, completed our API's conversion from Linux-services to docker, implemented critical features, and greatly improved our user experience. Future developers now have extensive external and internal documentation in the form of git-wiki's, postman API docs, and typedoc/jsdoc self-generated documentation. Unfortunately, the project ran out of funding and our Google Play/Apple Developer licenses have expired so it is no longer available on either store as of 2024. The nisotak project gave me a low-stakes environment to develop my software engineering skills and I couldn't be more grateful for the professional development opportunity that it provided me.

Duties:

Work remotely with a small team to develop a mobile application that facilitates indigenous language instruction
Work remotely with a small team to develop a web application that for language experts to craft interactive lessons in their native language
Work with native speakers to create a system to facilitate Indigenous language instruction
Design and implement interactive components that facilitate learning
Coordinate with a small team to identify and address bugs and inconsistencies within the application
Produce monthly reports on work items addressed within sprints
Create and execute a plan for release on both iOS and Android platforms
Identify and alleviate bottlenecks in the release process
Evaluate and improve on current software-testing standards
Implement a UI that can be navigated in multiple, user-defined, languages

Technologies:

android
angular
docker
express
ionic
ios
jest
mongodb
mysql
react
sqlite

experience/Delco Automation

ipfusion.ca

Position: Jr. Developer Intern

2019 - 2020

Description:

As part of The University of Saskatchewan's Computer Science Professional Internship Program (CSPIP) I completed a 16 month internship at Delco Automation in the Technology divison working on their IPFusion product. I was a part of the "Integration Team" which handled writing adapters for various door, camera, and other access-control system vendor's APIs such that they could be interfaced with through the IPFusion platform. Interacting with so many APIs gave me a sense of what a good API looks like which came in handy later while working on the nisotak project. Occasionally our team would assist the IPFusion team which handled the user facing interactions with the APIs we integrated. It was at Delco that I was first exposed to an enterprise level git environment and became familiar with agile development, SCRUM, and Devops - skills I now take with me to every project I am involved with.

Duties:

Attend daily standup meetings
Attend sprint planning meetings
Self-assign and address bugs
Collaborate with team to introduce new integrations
Self-assign and implement tasks
Write integration test suites via moq
Perform preliminary usability tests

Technologies:

c#
dotnet
dotnet core
visual studio

projects/thesis

https://git.cs.usask.ca/fbl773/consolodated-dark-pattern-taxonomy

Description:

I got tired of having one too many "Compile Time Exceeded" messages from overleaf and was very sad to see that even though it is open source, integrating with git is a premium feature. A friend of mine mentioned that he used make to build his thesis, so I promptly set up one for my own. Then added a build pipeline to the repo that called it, then added a bunch of matplotlib code to build my graphs and before I knew it, I had set up a build ecosystem for my thesis that allowed me to auto-update my graphs when changes were made to the database that held my study results and selectively compile my thesis depending on where I was publishing to. I also learned a lot about how to create latex directives and made many of them to format common elements/sections of my thesis. I'm not sure how non-programmers use Latex, but I was certainly aided by the programming paradigms I've learned when I wrote this. It saved me a lot of time when some "regressions" were introduced in the form of formatting requests from my supervisor.

Technologies:

bash
latex
make
matplotlib
python

Challenges:

  • Avoiding committing many image files: Because different publications were using different versions of different figures, and I had many images that I could simply generate with my graph-builder, I just created a symbolic link to the directory where all of my images were being built to on my lab machine in the /images directory.

  • Style Issues: as I was writing my thesis, I learned that I am terrible for a few things

    1. Putting Random Capitals in my sentences,
    2. Not putting spaces before calling a \cite directive, and
    3. Using " " rather than `` '' (the latex preferred/consistent quote characters).
    Old habits die hard, so I wrote a "Linter" (pretty generous term, its just a sed + grep script) that reformats all of my documents to fix these before it builds the final PDF.

projects/arduwatch

git.blewi.xyz/FrankyB/arduwatch

Description:

Arduwatch was my first ever side project. I got a free arduino by attending a tutorial for a student group on campus, it was an adafruit trinket 5v. I really enjoy the idea of wearing a watch, but hate replacing the battery of a conventional wristwatch and dislike the idea of having my biometrics collected by smartwatchs (I also hate being bugged by notifications). So I figured I would try to build my own! Using a neopixel ring and the Ultimate GPS v2 I managed to get a watch that displayed hour/minute/second , compass bearing, and speed in km/h on a ring of 12 neopixels (which was a fun challenge!). Sadly, I've reached the limitations of my hardware/3D modeling skills so the project remains on my breadboard, additionally, the GPS module has met its end. Perhaps it will make a nice office clock one day.

Technologies:

arduino
c++
neopixels

Challenges:

  • Representing minutes: Representing individual minutes on a clock with only 12 hand-positions was a fun challenge. I ended up solving it by creating a modifier from the current minute and using it to modify the colour of the minute-hand.

  • Handling Hand-Crossover: Because I couldn't lean on hand length to handle the scenario when hands occupy the same value (i.e. 10:50, 3:15), I decided to have a location occupied by multiple hands become the average RGB value of each of the hands. This also looks super cool when paired with the modified minute hand effect.

projects/arduweather

git.blewi.xyz/FrankyB/arduweather

Description:

Arduweather was a project that I undertook to practice my dotnet skills for delco. I've always wanted to be able to check when it was nice enough to sit on the deck for some iced tea so I threw together some of the arduino environmental monitoring kit that I got from a friend, a quick mongodb to track the data, and a modest dotnet web-app to display interface with the db and display logged data with google charts. I got tired of setting up the dotnet runtime on my pi's, and a friend wanted to see if I could use the system to diagnose the cooling cycle in his fridge so I decided to dockerize the whole thing later on. Now I just need to beef up my hardware skills so that the thing doesn't look so ugly!

You can check the weather on my deck yourself here! CLOSED FOR THE WINTER

Technologies:

arduino
c#
docker
dotnet core
golang
mongodb

Challenges:

  • Configurable Google Charts: I wanted to be able to select which of the metrics I would use to build my google charts (temperature, humidity, wind-speed, etc.) without having to manage some array of booleans. So I used this trick I learned at Delco where set each datapoint as an enum value that is a power of 2, then I set each checkbox value for the ones I would like to display as their corresponding power of 2, combining them with binary OR and then checking each the flags set on the result when constructing my chart.

  • TODO Fix Instrument Precision: the accuracy of the floating points displayed on the screen are far greater than what I am measuring them with... easy fix.

  • TODO Hook-up anemometer: I have a fan that should be able to generate an analog value for wind speed. It would need to be calibrated of course, but we can't really display wind speed / direction truthfully without it.

projects/picool

git.blewi.xyz/FrankyB/picool

Description:

Picool was originally a python script that I had written run the fans on my raspberry pis only once they reach a certain temperature (rather than all the time). After writing up my initial solution for my pi running raspbian, I quickly found that the python library I used did to control GPIO not work on my raspi running ubuntu server... so I configured it to use the very linux-y quality of everything being a file via this solution. After awhile I figured that python was a bit bulky of a language for such a task so I converted the solution to c and introduced a modest config file. It also gave me a chance to practice my test-writing skills in c using asserts and shell scripting.

Technologies:

bash
c
linux-services
make
raspberry pi
ubuntu

Challenges:

  • OS Independence: Because my original solution relied on a python GPIO library that wouldn't work for ubuntu server, I dug around a bit and found this dev.to post which revealed that in a very true-to-linux fashion, GPIO on raspi's is simply a series of file I/O operations. The first part of this challenge involved converting the whole thing to use c over python (a more appropriate language for system-level coding), the second part was pretty simple - control I/O to the appropriate GPIO files. It is a simple problem, so I guess it has simple challenges.

  • TODO apt-get repo: The next part of the challenge is to make this solution avialable via apt-get, It is annoying to have to pull the repo and make the project every time one of my pi's gets reset. Running the makefile is seldom a users first choice.

publications/MSc. Thesis

Authors:
F. Bennett W. Lewis

Abstract:

Dark Patterns (DPs) are the foundation of what has come to be called "Deceptive Design" and represent a significant issue in the world of user interface and user experience design. By exploiting user cognition through interface design, DPs cause users to forfeit their resources (i.e., time, money, data) for the benefit of the interface designer. As a ubiquitous phenomenon, numerous taxonomies and ontologies from various domains have been proposed to classify DPs and fragmented our understanding of them. This fragmentation complicates legislative efforts as well as knowledge-sharing between the domains they appear in. To address limitations surrounding the fragmentation, extensibility, and comprehensibility of contemporary DP ontologies and taxonomies, this thesis proposes a new method of DP identification and classification based on heuristic evaluation. By condensing the past decade of DP taxonomies via network analysis and distilling/contextualizing the result with Straussian grounded theory, we have created a set of five heuristics to evaluate potentially manipulative elements in user interfaces. Our work describes the construction of our heuristics and reports on their use in an evaluation conducted by human computer interaction researchers at the University of Saskatchewan. The results suggest that our heuristics and the heuristic evaluation process can improve DP detection and delineate manipulative from benign design choices. As a naturally inexpensive, approachable, and versatile evaluation method that provides rich and accessible qualitative data, we propose heuristic evaluation as a valuable addition to the evaluation of manipulative interfaces.

/>

publications/The Heuristic Evaluation of Manipulative Interfaces

Authors:
F. Bennett W. Lewis
Julita Vassileva

Abstract:

Deceptive Design, also known as "Dark Patterns", manipulates users through interface design that exploits cognitive biases, psychology, and design standards to extract money, data, or attention. As governments act against such practices, it is crucial to distinguish them from benevolent design approaches like Persuasive Technology, which aims to influence user behavior positively. By condensing the past decade of Dark Pattern taxonomies with Straussian Grounded Theory (SGT), we have created a set of five heuristics diagnostic of manipulative design. We present the results of a small study using these heuristics and propose that our heuristic evaluation (HE) process can enhance the assessment of Persuasive Technology.

publications/Seeing in the Dark

Authors:
F. Bennett W. Lewis
Julita Vassileva

Abstract:

The issue of Dark Patterns or "Deceptive Design" is becoming more apparent, and more widely ac- knowledged in literature. However, their ubiquity across domains has complicated interdisciplinary communication and collaborative efforts concerning their nature and effects. Existing taxonomies de- scribing these patterns contain a considerable amount of overlap and address patterns at varying levels of abstraction further complicating the matter of cross-domain discourse. This becomes problematic given the growing evidence supporting the adverse effects such design can have on users. Further complicating the issue of Dark Patterns is the thin line that separates their implementations from those of intuitive, protective, and defensive interface design patterns. Existing taxonomies focus primarily on pattern definition and it is challenging to make this distinction when applying them in specific contexts. This work proposes a method of discerning manipulative, from benevolent applications of similar design principles by analyzing previously identified patterns for their properties, consequences, and contexts of application. This paper represents the progress we have made thus far to the creation of a taxonomy-independent evaluation process for the identification and description of Dark Patterns.

publications/nisotak

Authors:
Margurite Koole
Randy Morin
Kevin Lewis
Kristine Dreaver-Charles
Ralph Deters
Julita Vassileva
Frank B. W. Lewis

Abstract:

This paper outlines the design, development, and preliminary usability study of a system comprising 1) a web-based Indigenous lesson-creation interface and 2) an accompanying mobile app for studying the lessons. The Nisotak project was developed in response to the need for the preservation of Indigenous languages and to support reconciliation within Canada. In this paper, the authors discuss the technological aspects of the project and the less tangible decision-making that helped navigate software development in ways that support and honour Indigenous languages, Indigenous knowledge, and Indigenous people while, at the same time, making space for non-Indigenous allies. The key decisions that guided this project included privileging the target language(s), accommodating multiple dialects, creating an easy-to-use and engaging interface for non-technical users, and designing for easy transfer of ownership and management. Finally, the authors share the results of a small usability study.

publications/Project-Machete

Authors:
F. Bennett W. Lewis

Abstract:

As persuasive systems seep into our lives on the back of technology, the need for counter-persuasive technologies becomes more apparent. Many users are not aware of design elements that exploit their cognitive biases and encourage them to act against their own self-interests; Project-Machete was created to level the playing field. It seeks to limit the ability of persuasive technologies on the Amazon shopping platform to persuade users into making impulsive or extrinsically influenced purchases. It removes biased plays to item scarcity, selectively reveals recommended items, counters biased encouragement to buy new over used items, and encourages shoppers to think critically about whether a purchase should be made at all. Project-Machete achieves this through JavaScript driven DOM-tree manipulation inside an extension for the Google Chrome web browser.