In my compilers class this semester we’ve been talking about static analysis and optimizations. We’ve written a little LLVM frontend compiler for a toy language with s-expression (lisp) syntax. We’ve also added an option to our compiler to add arithmetic overflow and division error checks to the compiler output. We’re going to look at the output of this compiler with arithmetic checks on a toy program, and see what the optimizer does to it.
In the United States of America, citizens generally get one vote in a race, and whoever gets the most votes wins. It’s straightforward. But it’s one of the reasons we have a two party system with such a huge partisan divide and so much insanity in politics. But there is a better way. Ranked voting means you vote for multiple candidates in order of preference. There are many specific ways to determine the winner of such an election (the most famous of which seems to be Instant Runoff voting, which I don’t like compared to some others), but any of them are better than our simple “first past the post” system.
The other day I was sitting at home when I realized that my network switch was going crazy. The switch in question is a gigabit switch that is connected to my home server (which is my home’s gateway device — the one connected to the modem), to a wireless router, and to a desktop machine that acts as a media box (it’s connected to a TV and stereo system). By “going crazy” I mean that all the lights were flashing as fast as they could. There is a light for each connected device, and when it flashes it means that that device is either sending or receiving data — meaning that in this case packets were going to or from my server, my media box, and my wireless router (which by proxy means my laptop, my phone, my wife’s phone, etc) apparently about as fast as possible. Recently there have been some high profile DDOS attacks by botnets of unprecidented size. “Am I part of a botnet?”, I wondered. “Did I make some serious security mistake, despite generally being much more careful than average about security?”.
Some time ago I was finally in a position where my ISP had IPv6 capabilities and I was in full control of my internet setup (IE it wasn’t controlled by landlords or shared with roommates who had stronger opinions than mine). So naturally I decided to join the internet of the future (that should have been the internet of the 90’s) and get IPv6 set up.
I have often voiced disdain for emojis, and my unhappiness that they are taking an ever-growing section of the Unicode space. Let me tell you why.
As an avid computer configurator, I want to share some tips about how to effectively customize and keep track of your configuration. I want to highlight the different types of configuration needs that exist, and suggest some good ways of managing them.
A quick introduction to symlinks. They are indispensable for configuring your computer!
I’m always saying that Windows is awful. Here is a list of some reasons why.
In this post I will try to explain what federation is among online services, and why it is vitally important. Also, I will explain why cell phone texting, which actually is federated, bugs me so much.
[Also, see the end of this post for my updated recommendations of federated software and services to use.]
Today, let me tell you a story about the PC BIOS. Or, why smartphones are lame. I will explain to you why the PC BIOS (and its successor, EFI or UEFI, which I will treat as equivalent for this post) is awesome, and why systems lacking something like a BIOS are lame (generally so-called “smart” devices).