Powder Keg

I try not to discuss politics. In the United States, people attach their identities to a certain political party, and when identities get involved, interesting or productive discussion becomes extremely difficult.

More generally, you can have a fruitful discussion about a topic only if it doesn’t engage the identities of any of the participants. What makes politics and religion such minefields is that they engage so many people’s identities.

Paul Graham, Keep Your Identity Small

However, the current state of affairs is escalating in a way that makes me feel the need to speak out. I’m afraid that this political system is nearing a positive feedback loop that could spiral out of control.

The political system in the United States is designed in such a way as to amplify tribalism to extreme, unproductive levels. If you look at the game theory of our voting system, the inevitable outcome is that two parties will dominate and reach an equilibrium.

These two parties will do anything they can to maintain power, including hijacking psychological weaknesses of humans. People are naturally tribal, and when people are stressed, their tribal nature is amplified. “If you’re not with me, then you’re against me” is a common line of thinking of someone who is feeling attacked in some way.

People en masse don’t generally think bimodally. Most issues have nuance, and most people are capable of seeing a middle-ground on most issues. The current system doesn’t provide positive feedback for politicians who think in a nuanced manner, however. In our voting system, only politicians who exploit psychology, make people feel stressed, and get them to attach their identity to one of the political parties end up at the top.

A representative democracy like ours requires representatives to meet a consensus and make laws that apply to everyone. How is consensus possible when the system doesn’t incentivize consensus-making?


Our country is under immense structural pressure. So many political issues haven’t been adequately addressed for decades. Income inequality, racism, sexism, healthcare, education, wealth iequality, housing prices, immigration, the War on Drugs are all issues that haven’t been actually addressed in several decades. These are all real, extreme issues that have not been addressed at all, and the voices of the majority of people have been ignored.

Our nation has been stressed before. We’ve faced the anti-government actions of the 1970’s, the Civil Rights Movement of the 1950’s and 1960’s, two World Wars, the Spanish Flu, and this is all just in the 1900’s. One might ask, we’ve been stressed before; why would this be any different? Won’t it be patched, ignored, or eventually fizzle out?

Three factors make this different from any other similar situation: the universality of our grievances, instantaneous country-wide communication, and the pandemic.

Our Grievances are Almost Universal

Almost everyone right now is heavily affected by several of the several major structural issues of our nation. I’ll list them again.

Income inequality, racism, sexism, healthcare, education, housing prices, immigration, the War on Drugs, and these are only the big issues I could think of quickly.

These issues don’t just involve black people angry at racism. These issues don’t involve just a single identity group that you can minimalize, marginalize, or make a PR campaign against.

These involve almost everyone in the country.

A Global Network

Today’s media is not centralized. If an issue is big enough, it is impossible nowadays to suppress the truth.

People have never before had the capacity to organize, document, and fight against issues across the nation so quickly. Last night, I watched dozens of livestreams of protesters with their hands up getting shot by a faceless crowd of militarized riot police. They fired rubber bullets and shot tear gas canisters everywhere. This can radicalize people across the nation from their own homes. I saw that last just night. Police were shooting people with their hands up, and the mass media made it seem like it was only looters that the police were attacking.

Today’s communication networks make it possible for outrage and tribalism to spread almost instantly. It allows the truth to spread instantly. It also allows for people to coordinate nearly instantly, and could allow the messages of a politically charismatic individual to spread to everyone and escalate a situation.

Fuel, Oxidizer, Heat

A fire requires three things to get started: fuel(like gasoline), an oxidizer(like air), and heat(like a spark). If the fuel and oxidizer are mixed in the right proportions when heat is applied, you have an explosion.

This is a perfect analogy for what is happening in the United States.

The fuel is the multitude of political issues that have been unaddressed because of our broken, bimodal political system.

The oxidizer is the current pandemic causing millions of people to be unemployed through no fault of their own. It’s the economy that never fully recovered from the last major recession, leaving many people bitter. It leaves millions of people with free time to protest and/or fight.

The heat is the murder of George Floyd. It’s the president who tweets of shooting protesters and of deploying the military in his own nation. It’s the president who is so stupid that he doesn’t seem to realize how the words he says may cause a cascading failure of the current political system.

The government’s inability to govern and adapt to the changing political landscape combined with a pandemic, record-high unemployment, and instant communication facilitating unparalleled country-wide coordination is a recipe for civil war. The only thing lacking is a charismatic leader, which will inevitably emerge if this goes on for long enough.


We need to remove the heat from the situation. We need to arrest the other officers involved in George Floyd’s murder and let the courts determine guilt. We need Donald Trump to stop escalating the situation in whatever way he/we can.

Something else that may help is another stimulus check focused on the lower class combined with a very swiftly created and deployed jobs program. Millions are unemployed right now; we need to keep them busy and not starving.

Long-term, we need to fix the structural issues that make such a cascading failure possible. If we don’t, a political spark will eventually trigger a civil war. And that’s assuming we’re not too late.


Windows Rogue DHCP Monitor

I wanted to monitor the networks of a couple dozen clients for rogue DHCP servers. I couldn’t find a suitable application for my needs, so I made one here. It is designed to be deployed to Windows Servers configured as DHCP servers.

It was only after I made the application and bragged about it on IRC that I was told that Windows already has rogue DHCP server detection, lol. Oh well. I’ll keep this up since it’s pretty neat to me.

How it works is pretty simple. For each IPV4 interface of a Windows computer, it sends a DHCP packet(the contents of which were just copied from Wireshark and put into a broadcast.bin file) and listens for DHCP responses. Then it compares the system’s IP addresses to the seen DHCP servers. if there are seen DHCP servers that aren’t on the local system, it returns those IP addresses.

It was released with the MIT license, feel free to use it at work or whatever else.

Example usage in an administrative command prompt:


It’s that simple at the moment. Be sure to run it in the same folder as the broadcast.bin file. Eventually there may be more features, but not yet.

Below is a compiled 64 bit executable, which isn’t guaranteed to be up-to-date. Please note that it must be run in the same folder as the broadcast.bin file.


Bill Gates Stimulants

I web search a lot of really random stuff. A large amount of what I know about the world stems from what I see on the site.

Because of how important search results are to my opinion of the world, I was quite surprised when I did a search on Duckduckgo for

Bill Gates Stimulants

It returned absolutely nothing relevant, which isn’t particularly surprising. The billionaire philanthropist undoubtedly has a spectacular PR team protecting his reputation. Often times, I can get around this by narrowing my search. I searched again, this time using quotes to force specific words and phrases to be found:

“Bill Gates” “stimulants”

Zero results found.

This result honestly shocked me. You’re telling me that in the entirety of the internet, there has been no insane blogger that has gone on a conspiratorial tirade about how Bill Gates’s stimulant abuse is the direct cause of 5G-related autism, leading to the future collapse of America because of the impending zombie apocalypse caused by vaccines?

It makes me wonder what else is manipulated by the results of web search engines. When searched with the same query, Google returned somewhat relevant information, though not what I was hoping for. Looks like Gates has (understandably) not discussed his thoughts on stimulants.

Part of the purpose of this post is to see if it ends up indexed by the search engine, or if it is a topic that is brought down somehow. I guess we’ll find out soon.


Barking Up the Wrong Tree

Social power is the capacity to influence the behavior of others. Explicit power is given by rigidly defined social heirarchies like President or CEO, while implicit power is influence gained by other means, sometimes taken by force but usually earned.

Many people with explicit power think that their power reaches farther than it does. Such distortion is caused by repetition; if they work all of most days and leverage their power to facilitate work, of course that mentality of influence will at some point become second nature.

I think this blending in the mind between explicit and implicit power is why people in powerful positions tend to be seen as jerks. It’s a stereotype to see a rich fart weaving in and out of traffic with his BMW or yelling at a McDonald’s worker because her fries aren’t done in time. They try to leverage their power to influence the behavior of other people or get away with actions that hurt others, but because that power isn’t given explicitly, it’s interpreted as an imposition by those beneath their tirade. We don’t see the thousands of times that they leverage that power to get real work done.

The the positive aspects of power don’t excuse borderline-sociopathic behavior. I suppose I haven’t had enough power to really see a solution. However, just as a pedestrian doesn’t need to be an engineer to point out that a house shouldn’t be leaning, I don’t need to know the solution to see that it’s a problem.


Diet Coke Deflation Index

I noticed something odd today. I’ve watched with ire the price of Diet Coke creep up over the years. The price of a 20oz bottle available at the impulse-buy area by the checkout area of local grocery stores was $2.10 just a month or two ago.

Today I grabbed my facemask, trekked to the local grocery store, and while preparing to check out, I noticed the current price.

The price went from $2.10 to $1.60 for a 20oz bottle. That’s a deflation of ~23.8% in just a month.


Feldot – a failed but fun side project

A few months ago, I released a site called Feldot. It was a novel website discovery application that has unfortunately failed to grow. Because it failed, I’ve decided to discuss its inception, design choices, and why I think it failed.

Eight months ago now, I created a toy called Randomsite, blog post here. I used a port scanner to find random web servers on the internet that I stuck in a sqlite database. I learned the very basics of a web application framework called Django, just enough to get something functional to redirect sites, and I set the site up so that people were redirected to random web servers when they clicked the link.

After posting the site on Hacker News and getting reupped by dang, the post took off and I ended up with thousands of people and bots checking out my site. I had created plenty of software, I’d created various tools and toys since I was 14. However, this was the first time people actually used something I created, and it made the entire experience 100x more enjoyable.

Not only did it get seen, but I got feedback on what needed to be better. Originally, the software added servers to the database that returned error messages, enough that people complained. With that feedback, I removed many of those sites and immediately saw a huge spike in errors from my site. I broke something! I scrambled, fixed a few bugs in my code(it involved “random” selection from the database that assumed there weren’t gaps in the id field), and drastically improved the experience by using feedback. The entire experience was incredible, and I wanted to do it again.

I thought for a long time about how to make novel website discovery interesting, social, unique, and better than what I already had made. I decided I wanted a reddit-like site, but instead of having posts link to URLs like, they would instead link to only domain names like An issue here is the difficulty of new-site discovery. I knew I had to combine the site with a tool that made new sites easy to find.

A big issue with the old site as it was is that the end users were connecting directly to an IP address, their request lacking a URL. Most web servers require a URL to be passed to the web server. Nginx, the web server I used, has Name-based virtual hosting, and other web servers have something similar. This configuration allows for many websites to be hosted on a single IP address, saving on cost and better utilizing computer resources. Since my toy excluded server names, it excluded every single website in this configuration, which is most. To find most websites, I needed access to the zone files, a list of all registered domain names in the world. I had to jump through some hoops and cut through red tape, but after a few weeks, I ended up with the ICANN zone files for the most popular(in the US) zone files, including all .com names. The fun work could begin.

I randomized and filtered the zone file data so that only the URLs were placed into a sqlite database. I then made a series of python and shell scripts that pulled the next line of the database and queried for a web server on the URL. If it responded, didn’t return an error, didn’t have a bunch of numbers in the URL, and passed through several other filters, I saved its url, IP address and first 100 bytes of html data to another database.

After several thousand sites were saved, I noticed an issue on review. There were a lot of spam sites that needed to be filtered out, but exact match and delete scripts didn’t work because there were small variations between a lot of different sites. Long story short, I used a python module called difflib to do a fuzzy comparison to other known spam sites and deleted them if they were within a certain threshold, and as this comparison was computationally expensive, I parallelized the computation using the multiprocessing module so that it wouldn’t take a few weeks to complete.

Eventually I ended up with a list of 100,000 interesting sites with good enough signal-to-noise ratio to get the site started. The database with 100,000 sites was put onto the postgresql database, and the explore section of the site was read sequentially. That just left the reddit-like front page.

I won’t go too much into the creation of the reddit-like front page. The most recent 10,000 posts are calculated every now and then, calculations are done based on a function of time, up/downvotes, and moderator inputs, and the order of the sites is cached with Redis. Loading the front page queries Redis, with an offset based on what page you are on. There are plenty of posts on how reddit was created, feel free to check those out.

The site was posted, and the site took off about as well as a rock takes off into space. Looking at the site, it isn’t surprising. Making the site, I tried to focus entirely on UX, making the site simple and to use on mobile, making it extremely fast to respond. Looking back, I think more of a focus on appearance and UI would have done some good.

This site depends heavily on network effects: There needs to be enough people posting interesting content to keep the site self-sustaining. Ultimately, this site did not get there. With some reconfiguration, UI updates, and marketing, it might be able to grow, but the complete lack of traction doesn’t make me want to do that. I take solace in the fact that while the site didn’t take off, I learned enough in the process that I could finally make a long, rambling blog post of my own.


Random Web Server App

When I was younger and had just learned to use nmap, it was a hobby of mine to scan the internet and browse random web servers. At the time, I used very aggressive scans( nmap -A -iR 500 –top-ports 30 –open ) and found some incredibly interesting servers(It is amazing how many computers on the internet are blatantly compromised). When I first started doing it, it was a completely manual process: I would start the scan, scroll through pages of IP addresses and port information, and manually copy and paste interesting IPs and ports into Firefox. Eventually I automated the process using a shell script and some python that scanned and filtered IP addresses, noted interesting ports, and automatically opened a browser to the IP.

Between a couple dozen OS installs, this script was lost. To remake this experience, I made It’s some spaghetti code slapped together using nmap, Django, uwsgi, and Nginx that does something similar to what I used to do, albeit less noisily. It scans IPV4 addresses for an open port 80 and sticks seemingly good IP addresses into a database. Then when you go to, it redirects you to a random IPV4 web server.

It does not aggressively scan like the old scripts did, it only scans for servers at port 80. Unfortunately, since port 80 is the correct port for web servers, many of these sites are much less interesting than the sorts of things I found back in the day. At the request of a few users on Hacker News, I implemented a filter to prune out sites with certain errors like 400, 404, 500, and others, which greatly improved the signal-to-noise ratio of the redirects. It was fun to cobble together. This site is now unmaintained, and the site pruning software has now been disabled. If you want specifics on how I did it, email me at

Personal Finance

On Frugality

I am an incredibly frugal. I drive a 2005 Toyota Corolla with over 180,000 miles on it. I have my wife cut my hair instead of paying to get it cut. At home, I regularly wear shirts that I had in high school. To most people, this sounds incredibly odd, but I do this because frugality brings a freedom that needless spending doesn’t.

With this said, I am not cheap. If a purchase warrants it, I will gladly spend 3x as much as a cheaper alternative. When I make a purchase, I almost always consider at least four things: Cost over time, opportunity cost, risk, and return on investment.

Cost over time is seen in Sam Vimes Theory of Economic Injustice, which discusses how someone buying a good quality pair of leather boots often pays less over time than someone who buys cheap shoes that break down in a few months, requiring repeated purchases. I cringe at buying brand-name T-shirts, fancy utensils, or decorations, yet I will happily pay several hundred dollars for leather shoes, put forth large sums of money towards vehicle maintenance instead of ignoring issues, and pay for gym equipment to use at home instead of paying for a monthly subscription that adds up over time.

Opportunity cost is an important consideration in my purchases as well. I have interests in all sorts of topics, and am cyclically obsessed with topics ranging from microcontrollers to psychiatric medications to the evolution of eels. I could easily drop hundreds or thousands of dollars into these obsessions and turn them into full-fledged hobbies, but I choose not to; I choose instead to try to focus on productive or potentially productive ventures.

Return on investment and risk go hand in hand. Going to a top university in an expensive city would almost definitely provide a fantastic return on investment, but it would be fraught with considerable risk: risk of not completing university, of failing to gain the social capital required to shine, of not being able to escape the financial snowball that is large student loans. Balancing potential return on investment while managing risk is an ever-evolving skill with me, and one that I shall continue to attempt to refine.

This framework of incorporating frugality in my life has led to an incredible amount of anxiety reduction. I used to be constantly stressed about money, worrying about how I would respond if my scooter broke down, if I cut a limb, or if I got sick. Such stress is toxic, and affected me massively, causing panic attacks and sleepless nights regularly. My stress levels have dropped inversely with my savings account, meaning the more money I’ve collected, the less stressed I’ve become.

It will probably be easy for readers to see what I say and think “Pssh, it’s easy for you to say, you’re rich!” This is true to an extent; while our household income is still below median for the nation, we are still making more than many families making minimum wage. However, it’s important to know that we didn’t start this way. When my wife and I began saving up our emergency fund, we both worked minimum wage jobs while going to college. We obviously couldn’t save much, but it was enough to significantly reduce our stress and prepare for the inevitable expenses that hit everyone.

If you are reading this and don’t have one, please consider building an emergency fund. It will change your life for the better.