This week I set out to solve my parser woes from my last post. I worked really hard to build a library that would match my needs. In the end I came up with a project called
pebble_parser. Its a similar parser combinator library to
pom but with a better syntax and it works on iterators rather than arrays.
My project for this week was to build a BrainF**k compiler. Its a simple language with very little syntax. I figured it would be a great way to test out my parser without having too hard a project to complete.
For this post (and maybe the next few) I want to try something different. Im calling this series “compiler weekly” because I want to explore different parts of compilers in fast iterations.
My goal of this week was to figure out what tools to use when building compilers in rust. I needed a good lexer and parser. Ideally a set of libraries that are easy to use, expressive, extendable and with good error messages.
To test this I build a very simple calculator REPL. It takes math input like this:
5 + 5 / 10 and will print out the answer. It will not handle brackets, order of operations or any other intricacies of calculators. Those are problems for a later time.
I was recently helping my mother share a file using Microsoft Sharepoint. The file was a zip archive containing a few word documents. We uploaded the file and sent a share link to the recipient. They clicked the link and was unable to use the files. It turned out that rather than downloading the file, the link opens an online file browser that navigates into the zip. This caused confusion because the the user did not understand that a online view of the files is not the same as having the files on your computer.
This is common in the world of online files. So I started to wonder: How can we build software that does not continuously confuse people?
I started playing Minecraft back in 2009 just after the beta version was released. I have fond memories exploring the worlds and setting up home servers so that my brother and I could play together. Now its 2020 and we are in a global pandemic. Everyone is isolating and we have to deal with that. So my friends and I have started to play Minecraft again. I setup a simple server on Google Cloud Platform that only costs around a dollar a month for our usage. In this post I will go over the pieces that I used to build that server and how you can setup your own.
I don’t like WiFi. I find that there are too many variables that make it difficult to maintain a reliable signal throughout a home. WiFi extenders also don’t seem to solve the problem. They connect to a slower signal to re-send it further which only slows the connection down more. The best solution is obviously running an ethernet cable between every device, but that is rarely feasible if your home is not already wired for it. Recently I started using powerline adapters as a middle ground. They may be a good substitute for ethernet cables, but only if they are setup correctly.
Powerline adapters work by plugging the devices into two locations on the same electrical system. They send high frequency signals across the system that can be read back out on the other side. Just like an ethernet cable, these adapters are physically connected using the wiring that is already in your home. However there is a catch, the line is shared. This makes the adapters sensitive to interference caused by other equipment. In this article I will cover how to diagnose connection issues and how to optimize your powerline network. I am using the D-Link DHP-701AV for my power adapters. Some of what I have learned will work on most adapters but there is some information that is specific to these devices.