Revisiting the BART Algorithm

11 December 2016

Over the summer I wrote about my hackathon project, an app that virtually swaps BART tickets in order to reduce fares. This was a purely academic exercise, to apply some concepts I had learned from my “Advanced Algorithms” course to a problem in the real world. I described how you could model this problem as an (integer) linear program, and I guessed that the problem is, in fact, totally unimodular. However I offered no proof of this, and due to hackathon time constraints I was forced to use a slow, somewhat half-baked greedy algorithm to solve the problem.

Read more

Tutorial - Write a System Call

14 November 2016

A while back, I wrote about writing a shell in C, a task which lets you peek under the covers of a tool you use daily. Underneath even a simple shell are many operating system calls, like read, fork, exec, wait, write, and chdir (to name a few). Now, it’s time to continue this journey down another level, and learn just how these system calls are implemented in Linux.

Read more

Kernel Segfaults for Fun (but no profit)

03 November 2016

In “episode 2” of my kernel development series, I’m going to talk about how I put Python into an uninterruptible sleep. This spooky story involves a rogue kernel module, segmentation faults, and reference counting (a topic already well established to be spooky). And only a few days late for Halloween!

Read more

Stephen Tries Kernel Development: Episode I

13 October 2016

For the past few weeks I’ve been dipping my toes into Linux kernel development, as part of the work I’m doing for my master’s thesis. Like most things that stir up my nerdy interests, it’s leaked onto Twitter quite a bit…

Read more

Hello, HTTPS!

27 September 2016

An exciting announcement! Starting a few days ago, when you visit my website, you should see a green padlock next to the URL bar.

Read more

Fare Hacking on BART

23 July 2016

Imagine that you’re taking a long train ride on the BART. Maybe from Millbrae to North Concord. Chances are, at the very same moment, somebody else is going the other direction. For example, maybe from Pittsburgh/Bay Point to San Bruno. In case you haven’t memorized BART’s stops, here’s a useful map illustrating these rides:

Read more

Authentication with Hash Chains in C

19 June 2016

One of my silliest long-running projects is a chatbot called cbot. All it does is connect to an IRC (Internet Relay Chat) server, and respond to people’s messages. For instance, if you greet it, it will greet you back. If you insult it, it will send you a poorly-constructed comeback. Obviously there’s nothing groundbreaking about it - there are other chatbots that are much better. I made cbot because I wanted to learn some new concepts (specifically the IRC protocol and dynamic loading), and it was really helpful for that purpose. Plus, it’s another project in C, and I like projects in C!

Read more

Academic Dishonesty

29 March 2016

Last night I had a sobering experience. A faculty member from another university sent me a message letting me know that some of their students had turned in modified versions of my shell, lsh, for a homework assignment. Maybe I shouldn’t be too surprised. Writing a shell is a very common assignment for computer science students. My tutorial based on lsh has somehow managed to climb the ladder to the first page of search results for many queries related to writing shells. So at the end of the day, I guess this was bound to happen. And even though I can’t really be held responsible for what other people do with my tutorial and code, I feel pretty bad about this. Although there’s not much I can do to prevent students from presenting my shell as their own, I feel like I should point out why it’s such a terrible idea.

Read more

Confessions of a Geek

16 March 2016

During spring break I had an odd experience. I found all four of my high school student ID cards, complete with my school picture from each year. When I showed them to a few friends, they all remarked on how little my face has changed since then. For reference, the picture I use on the front page of this website is a high school senior picture, nearly four years old. Not only do I look pretty much the same now as I do in that picture, even my freshman year picture looks about the same. So over the course of seven or so years, it seems that my appearance—or at least my face—hasn’t changed that much. Oh well.

Read more

Logging in With Requests

02 March 2016

One of my favorite types of quick side projects are ones that involve web scraping with Python. Obviously, the Internet houses a ton of useful data, and you may want to fetch lots of that data to use within your own programs. Python has a few excellent tools which can be combined to create a powerful, easy to use system for quickly harvesting this data from webpages. I’ve used Python’s web scraping tools for fun projects like downloading music lyrics, and then using that to make a Twitter bot that replies to you with Taylor Swift lyrics. But these tools could also be useful for serious projects, like aggregating course enrollment or evaluation data from your college. So how would you go about simple web scraping in Python? Let’s dive in!

Read more

Creative Commons License

Stephen Brennan's Blog is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License