Flappy Bird built on top of SIMple Mechanics
Flappy Bird built on top of SIMple Mechanics
SIMple Mechanics allows users to graph properties of an object; the graph on the right shows y-position

Lately I’ve been working on SIMple Physics, a set of educational physics simulators meant to help teach and learn physics intuitively without expensive lab equipment or in person classes. Each simulator allows users to import and export scenes and potentially add some more advanced functionality through Lua.

Until recently, the Lua scripting was fairly limited. It could be used to add/remove objects and change variables such as but crucially it could not affect objects once they were created.gravity, and there was also an update() function which ran every frame.

-- this example instantiates a multicolored grid of circles
for row = 1,HEIGHT do
for col = 1,WIDTH do
color = {
r = (row * col) / (WIDTH * HEIGHT) * 255,
g = col / WIDTH * 255,
b = row / HEIGHT * 255
}
add_shape{
shape = "circle",
x = col * OFFSET + START_X_OFFSET,
y = row * OFFSET,
r = RAD,
mass = 1,
color = color
}
end…


Image for post
Image for post

From ReactJS, Vue, and Angular to Golang, ExpressJS, and ASP.NET, there are endless combinations for a frontend and backend framework to use when building a web app. Svelte and Haskell are two of the most unique choices for frontend and backend technologies. Svelte, unlike the ubiquitous ReactJS and many of its competitors, doesn’t use a Virtual DOM (VDOM). Haskell is purely functional, as opposed to the primarily imperative Golang, C#, and Java.

I’ve been considering rewriting my personal website from Go to Haskell for a while. While Go is a great server side language, it’s painfully boring. This is an advantage to some, but it’s never appealed to me, especially not for hobby projects. …


Image for post
Image for post
Photo by Ludde Lorentz on Unsplash

Whenever I learn a new language, some of the first things I write are some simple Fibonacci sequence functions, one recursive, one iterative, and one to make a sequence of the Fibonacci numbers up to n. These three problems usually reveal a good bit of the difference in philosophy between languages or demonstrate some of the different ways to approach a problem within a language. Here are some of the coolest Fibonacci functions I’ve found.

Traditional Recursive

Here’s the standard recursive Fibonacci function in Python. We’ve all seen it before; it’s pretty boring and incredibly slow.

def fib(n):
if (n < 2):
return 1
return fib(n - 1) + fib(n …

Whether you’re a frontend engineer, sysadmin, or even a video editor, chances are that you spend a lot of time typing on your keyboard. Typing is a pretty unavoidable part of daily life in the modern world, especially since the pandemic, and RSI or carpal tunnel are almost an expected part of life for programmers. Since many schools are now online and students now spend many hours a day on their computer, regardless of age, even children have to worry about keyboard ergonomics.

That’s right. The most important improvement you can make to your workflow is buying an ergonomic keyboard.

An ergonomic keyboard
An ergonomic keyboard
An ergonomic keyboard. Source: /u/Slavfot on Reddit

Keyboard Ergonomics Crash Course

There are three main ergonomic problems with standard keyboards: forearm pronation, wrist extension, and ulnar deviation. …


Image for post
Image for post
Photo by Jefferson Santos on Unsplash

One of the most important aspects of a programming language is its complexity. Languages that are too simple are often thought of as unexpressive and long-winded, while languages that are too complicated are hard to learn and result in incomprehensive codebases. As such, programming language designers have to take a stance on complexity eventually. For example, simplicity is arguably Go’s most important feature, whereas C++ seems to add pretty much any language feature that becomes popular.

The perceived complexity of a programming language isn’t just a function of how many languages features it has or how many ways there are to accomplish the same task. In both of these metrics, Rust is close to C++, but language complexity isn’t one of the main popular criticisms of Rust. While Rust is commonly criticized for being difficult to learn and being generally slow to write ( both side effects of its memory management model), most common C++ criticisms have to do with either having too many features or a specific feature that makes the program less clear. Python, like Rust, is a very featureful language that is not commonly thought of as complicated. Part of this is because of its target use case; low-level programmers have much more reason to care about simplicity than most Python developers. …


This is somewhat of a followup to my post on Lua integration from a few days ago.

As one part of my high school senior research project this year, I wrote a universal gravitation simulator meant to help learn/teach physics. The goal was for it to be as accessible/useable as possible, so I spent 90% of the time on UI. One of the main features of the project is that you can save and load preset scenarios, for example, a grid of equal mass bodies or a dual star system.

The project is written in Rust, so during the year, I’d decided to use the super powerful, popular serde library, which integrates well with the ECS library I used, specs. I serialized to the ron format for no reason in particular other than that it’s theoretically human readable. …


I’ve recently been writing a Go server for my my website at mikail-khan.com. I’ve never used Go, and I’ve never deployed a server to a domain with https using essentially just a Linux server. Here are a few steps I had difficulty with:

1. Pointing an HTTPS domain towards a singular EC2 instance

There’s plenty of guides around for, especially in the AWS docs, for routing the domain to an Elastic IP using AWS Load Balancers etc., but given that I don’t want to pay anything, I just wanted to route everything to a single EC2 instance.

The first thing I tried was to just use the public IPv4 address of the instance in a Hosted Zone Record Set in AWS Route 53, and that does get things part of the way there. Unfortunately, I had my server setup to host on port :8000, so I had to go to mikail-khan.com:8000 …

About

Mikail Khan

Math+CS Major at Purdue University, https://mikail-khan.com

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store