Skip to main content


New Position with Chicago Metro History Fair

I'm excited to have begun a new position at the Chicago History Museum a couple of weeks ago now. I am a "History Fair Program Specialist," meaning I help run the Chicago Metro History Fair.

The Chicago Metro History Fair (CMHF) is an annual, regional competition where middle and high school students in and around Chicago research a historical topic of their choice and create projects (exhibit boards, websites, documentaries...) that show off their hard work. Volunteer judges from around the community help provide feedback on the students' work, and winning entries can advance to state and national level competitions (administered by Illinois History Day and National History Day, respectively).

So far, my work has primarily been in preparing for weekend "Palooza" events, where volunteer coaches (often history teachers, faculty, graduate students, etc) and librarians assist students with their History Fair projects. The regional competition will take place i…

A Crash Course in Crash Courses

I want to take a few minutes to write about the way my skills have built over the course of working on SOTU-db and the iterative process of creating the project as an interaction between ideas and constraints.
Originally, my vision for SOTU-db was enormous - I wanted to basically make a Voyant Tools for State of the Union addresses. Don't ask me where I got the idea that I could single-handedly create the equivalent of a mature product built by a team with far more expertise than I had. Kind of like the goal "build a tic tac toe game," it sounded simple until I begin to create it and realize all of the special cases and interactions that I would need to include in the program.
There has been a constant back-and-forth between my ideas, which are mostly goal-oriented, and the realities and constraints of the programming languages I'm using and my abilities with them. The process of just building out the front webpage meant learning some more CSS and figuring out the ru…

Setting up a Tomcat server

This post covers the process of setting up Apache Tomcat 9 as a server for static .html pages.
Environment & Background I have access to a VM running Ubuntu 18.04 on which I've already set up an instance of RStudio server. I have SSH access but not a graphical interface, so it's been a good opportunity to work on my Linux skills. My goal here was just to serve static HTML pages to site visitors for now. It's really satisfying to have full control over the HTML and CSS, instead of being in an environment like Wordpress (or Blogger!) where it's never quite clear what markup it will accept and what it will totally ignore. I've been mocking up a frontend for SOTU-db using W3-CSS, which feels like kind of a cross between traditional HTML/CSS/JS and React Native. 
I had played around with Ubuntu servers before, so I was familiar with Nginx and Tomcat. As I've said many times, my favorite part about Ubuntu is the documentation that is completely incomprehensible, …

Setting up an RStudio Server

I'm taking a break from React Native (our group decided not to use it for the Tic Tac Toe project) and wanted to put some thoughts in here about setting up my RStudio server for my SOTU-db project.

I won't get into the details of why I want the RStudio server here - that will be covered on the SOTU-db dev blog. Here, I just want to record some quick thoughts and problems that arose as I set up the server.  Gaining access to the server The server itself is a VM provided by Loyola University Chicago's Computer Science Department - thanks to George Thiruvathukal and Miao Ye for setting me up with this and providing support. 
I initially ran into issues because I couldn't figure out how to connect to the server. I knew I had been assigned a static IP and a DNS entry in Loyola's nameservers at, and assumed I would use SSH to connect to the server (which I further assumed was running Ubuntu in accordance with CS departmental policy and my previous expe…

props, state, and this. - stream-of-learning

As I look around the web for help understanding my troubles in React Native, I figure I'll just take notes as I go here, to document the process.

Right away, I learned something from this site (that I probably already saw someplace on the React Native documentation but it didn't stick):
"Components receive props from their parent. These props should not be modified inside the component." This explains a lot. The line initializing player 1 looked like const player1 = new Player((name = "playa1"), (turn = true));. Setting the name with the props is fine, but setting "turn" with props doesn't make sense if props are immutable; turn needs to toggle from true to false repeatedly during normal Tic Tac Toe gameplay. This doesn't give me a solution but helps explain some of the problem.

I'm starting to wonder if turn should even be an attribute of the player at all. It might be easier to just have a global variable like "isPlayerOnesTurn&q…

More tic tac node

Well I am feeling pretty good about my progress with React Native, but haven't done any more coding in the last couple of days. I just re-opened the project again today and thought I'd blog about some of my as-yet unsolved challenges!

I like loops Things with declaring and initializing variables are really different than what I'm used to. In Processing and Python, global variables can be declared and re-declared wherever, and the draw loop will "pick up" those changes and return the desired results. For example, in Processing, I could initialize the integer "y" to 5 with int y = 5; then inside the draw loop, call println(y); to repeatedly print "5" to the console. If I then call a function that just does y=7; the console will start printing "7" repeatedly, since it recognizes the new value of y.

I used this a lot to build setter functions, for example initializing all the entries in the squareStates array in Tic-Tac-Tohmygod (my Proc…


Tic Tac Node: Working with React Native I started working with React Native for the first time last night. Overall I've found it to be a fun experience. It's definitely a paradigm shift from Processing and Python, which I found fairly similar to one another in a lot of ways. But I've found React Native pretty approachable once I got over some initial barriers and definitely understand why developers enjoy using it!
Setting Up One thing I appreciated about working with React Native was how easy it was to get things started. Based on some quick Googling, I decided to work with Expo and pretty much just followed the steps at, except I skipped the first step, which was "fall in love." So basically, I just followed these steps:
download and install the 8.12 LTS release of node.js*run npm install expo-cli --global in a terminal to get the Expo command line tool;run expo init tictacnode to initialize the new project,** then just cd into the projec…