- Common Loki Misconfigurations
- Iterating Through a List in Ink
- Debugging Misconfigured Container Networks
- Minimum Viable EC2 in Terraform
- Storylets in Ink
- Interactive Fiction Tooling Overview
- In-Place Resizing for Digitalocean Droplets
- Unity Demonstrates the Importance of FOSS
- Target Labels in Prometheus
- My View of AI is the Same
- Verify DNS Ownership with TXT Records
- Sane Droplet Defaults
- Editing Made Easy with Vim
- Gatsby Gotchas
- Concatinating Default AWS Tags in Terraform
- Easily Updating the Default Github Branch
- Lifetimes in Rust
- Checking for Bad Links
- Maybe TypeScript and React is Bad
- Static Asset Management in React
- Bundler Down Time
- Using React Context for Localization
- JS Implementation of a Sticky Footer
- Custom Aliases
- Trying Out the 7drl Challenge
- Trash Opinions
- Building Your First Program in Rust
- Fixing mongod reports errors related to opening a socket
- Improving Open Source Maintenance
- Technical Interviewing Tips
- Housekeeping Note
- Dynamic Programming Basics
- The Oddity of Naming Conventions in Programming Languages
- An Experiment Using Machine Learning, Part 3
- Debugging with grep
- An Experiment Using Machine Learning, Part 2
- An Experiment Using Machine Learning, Part 1
- The Value of while
- National Day of Civic Hacking
- OpenAI and the Future of Humanity
- Creating a Whiteboard App in Django
- Creating Meaningful, Organized Information
- Towards A Critique of Social Media Feeds
- Setting up Routes in Django
- Developing a Messaging Component for Code for SF
- Dream Stream 2.0
- Keyed Collections in Javascript: Maps and Sets
- Blog Soft Relaunch
- Scraping with Puppeteer
- Looking Ahead to Dream Stream 2.0
- Solving West of Loathing's Soupstock Lode Puzzle
- Installing Ubuntu
- Interview with David Jickling Evaluation
- Compare Text Evaluation
- Dream Stream Evaluation
Creating a Whiteboard App in Django
Like anyone else looking for a job as a software engineer, I’ve been studying and practicing the sort of problems that get asked during the whiteboarding section of the interview. My typical habit is to: come up with an answer to a problem, see if it works or not, make comments about what I got wrong, and then try again the next day. I keep repeating that until I can answer a problem without any errors.
While this might be a reasonable way to get comfortable with the process, I was running into an issue with keeping track of my assorted files. It didn’t help that I could rarely come up with recognizable names for my files. So I would end up having to sift through directories full of dozens of files anytime I wanted to review to my answers. It finally occurred to me that my process would greatly benefit from having a database to manage all these answers. So last week I decided to start working on an app on Django, and yesterday I finished the MVP (minimum viable product) version.
This was also a good opportunity for me to work with a relational database instead of using MongoDB. The app consists of two models: a problem model and an answer model. The answer model uses the problem as a foreign key since every answer has to have a problem, but there can be problems without answers. It’s a natural fit for a relational database since one of the things I want the app to do is show previous answers associated with a particular question. You can do this in MongoDB as well, but it neatly fits together when you’re using a relational database.
Lately I’ve been experimenting with a Django and React stack, and I personally feel like the two pieces of tech complement each other nicely. However since this app is essentially just a glorified form page, React felt like overkill. Instead I opted to use Bootstrap to make the forms look nice, and then add a little bit of custom CSS for a couple of presentation and layout issues like using a monospace font in the answer for, and creating a nice grid layout for the displayed answers.
Once I finished the app I discovered I had solved a problem I didn’t even realize I had. One of the books I have been working from is Cracking the Coding Interview. This is a thick tomb of a book where when you open it up if you aren’t holding it down with one of your hands the book will close back in on itself. As a piece of physical interaction this made it a nuisance to work with. It’s a much nicer experience to just have these problems in a database that I interact with on a computer. It’s a great feeling when you realize something you created has benefits you didn’t even anticipate.