How I Podcast: Software

After nobody asked me to, I’ve decided to write a few posts about how I podcast. There might be an additional post where I talk about some other software I use on my computer in general, but we’ll start with podcasting because it really is the heaviest use of my computer.

In this post, I’ll focus on the software I use to record. In the next post, I’ll share some of the hardware I use. And finally, I’ll explain how I edit podcasts with the aim of having a screen recording of myself editing either OHAC or Comical Start.

Continue reading “How I Podcast: Software”

Some New Code

After playing around with Project Euler for a while, I determined I wanted to challenge my coding skills even more, but stay firmly planted in the mathematical realm in which I’m familiar. So, I’ve begun writing some code that can be used for certain mathematical objects. In particular, I’ve written a fraction class, a 2D vector class, and a complex number class. You can find the code on GitHub.

Continue reading “Some New Code”

Project Euler

As part of my year of focus, I’ve been trying to spend more consistent chunks of time working on programming. In particular, right now I’m focusing on doubling down on my Python knowledge, and exploring some other aspects of computer science that interest me. After checking out a few books and tutorials, I’ve made my way back to a website that I found a number of years ago, which is the most intriguing to me: Project Euler.

The gist of Project Euler is to give a wide range of mathematically-oriented programming puzzles for people to solve. You can always just go on there for ideas of small programs to write, whether it’s to learn some math or to try out a new computer language. In my case, I’m trying to write the most efficient programs possible, making use both of clever algorithms I spend time figuring out or researching, and making use of Python syntax to make particularly elegant solutions. If you make a simple account, you can keep track of your progress and access message boards about each problem.

It has been very engaging so far. They are more bite-sized, but give ideas for more complex programs that can be written which are more general purpose. Rather than writing a script that solves a problem, I can focus on writing broad functions that may be helpful.

A fun problem I worked on today involved triangular numbers. These are just numbers you get from adding together all the positive integers before it. So, the seventh triangular number is just 1+2+3+4+5+6+7=28.

The goal was to find the smallest triangular number with more than 500 divisors. Here’s the Python code I wrote for it. (I apologize, I can’t figure out how to make syntax highlighting work right now.


import math

def getTriangular(n): ## Generates a list of triangular numbers up to n
    triangularList = [sum(i for i in range(1,k+1)) for k in range(1, n+1)]
    return triangularList

def getNumberDivisors(n):  ## Generates number of divisors
    numDivisors = 2  ## We don't care about n=1, so assume it has 1 and n
    for divisor in range(2,int(math.sqrt(n))+1): ## Only check to sqrt(n)
        if n % divisor == 0:  ## Needs to be a divisor
            if divisor * divisor == n: ## If square root
                numDivisors += 1
            else:
                numDivisors += 2  ## Otherwise, divisor has a factor
                                  ## pair larger than n//2

    return numDivisors


def main():
    triangleList = getTriangular(25000) ## Hopefully big enough
    is500 = False
    triangleIndex = 7 ## It's certainly larger than seventh number
    while not is500:
        triangleIndex += 1
        #print(triangleIndex)
        if getNumberDivisors(triangleList[triangleIndex]) > 500:
            is500 = True
            print(triangleList[triangleIndex]) ## Tell me the number

main()

The code runs reasonably quickly, which is always the goal. The standard view on Project Euler problems (and I believe it is their official stance) is that well-optimized solutions should run for no longer than a minute on nearly any computer. The first few problems should take substantially less time than that.

I recommend giving them a try if you have an itch for some challenges, and either want to work on optimizing your code in a certain language, or try out the functions in a new language. For example, the fact that Python supports arbitrarily large integer addition (compared to C or Java) makes some problems pretty trivial. Thinking about how to deal with other languages becomes rather interesting.

No Keyboard for Old Men

As I come to the realization that a significant part of both my work and personal hobbies involve sitting at a computer, I have become increasingly wary of the stories I hear about things such as repetitive stress injuries (RSI), and what will likely be the impending damage to my eyes. In an effort to avoid, or at least delay, the former issue I have tentatively purchased an ergonomic keyboard. Specifically, the Surface Ergonomic Keyboard from Microsoft. I say tentatively because it’s not cheap. I may return it, but so far I’ve put a few thousand keystrokes on it and it’s feeling pretty good. This review is meant to get as in-depth as a keyboard review can be when written by someone who has never written a keyboard review. I’ll briefly explain my rough, but sufficient, testing procedure and what I found out. Then I’ll get into some details and comparisons I noted to other keyboards I’ve used.

Continue reading “No Keyboard for Old Men”

Why Linux? Part 1: Free As In…

During sophomore year of college, I embarked on a project to put a Linux operating system on my laptop. I had been interested ever since using a computer in one of the engineering labs which ran Ubuntu, one of the most mainstream, user-friendly distributions out there. I was intrigued both by the visual design, and the ease with which complex programs could be run. There was also the intrigue of feeling like a cool hacker, using a terminal and typing commands to get around a file system. I was hooked, and since then I’ve had a Linux distribution running on every computer I’ve owned over the past three years.
I want to spend a good chunk of time explaining my growing passion for Linux, and why I think more people should seriously consider it as an option for the computers in their lives. This first post will focus on two of the oft-repeated phrases in the Linux community, and its main inspiration: Linux is free.
Continue reading “Why Linux? Part 1: Free As In…”

New Blog

Yesterday I switched over from using WordPress.com to hosting my blog on Bluehost and using the official WordPress blogging environment. The main difference here is when you are using WordPress.com, there is some gray area about who really has control over the content. You are ultimately at the whims of their hosting structure, and also you must pay through the nose to access the various features of the actual WordPress blogging platform it claims to deal with.

WordPress is an open-source blogging platform, and is very widely used. Wonderful plug-ins are created to increase its functionality and customizability, and I have enjoyed dealing with it. WordPress.com, on the other hand, is a company run by one of the people who created the WordPress platform in the first place, but has various hosting options built in. For people who just want to get things going and keep things simple, that’s fine. I still run OHAC on WordPress.com, and things are going fine. But, I wanted more ability to be in control of my personal blog, and not have to worry about something going wrong that I didn’t have control over.

This is in large part influenced by the post I have written which will be published this upcoming week, the first part in a long series about why I use Linux. As you will understand once you read it, one main part of using Linux is freedom to customize the software you’re using, as well as software being actually free. WordPress.com provides neither of these; WordPress as a platform allows both. So, I switched things over, created a simplified dark template, and I’m loving it. Hopefully you’ll enjoy it a bit as well.

Notes On Future Mathematics Posts

Updated November 23, 2022

I’m going back through my posts and recategorizing them, and noticed this one. My plan for having a secondary spot for math posts didn’t take off after I moved my blog to WordPress properly, and discovered the excellent \KaTeX plugin for rendering math.

Original Post

I recently remembered my company, AoPS supports blog creation for their users. In particular, it has the full functionality I’m used to on their message board. In particular, they have native \LaTeX support, in addition to support for the Asymptote vector graphics language. This makes writing math significantly easier on my end, and significantly easier to interact with on the reader’s end.
Here is my first post, a rewrite of Introduction to Sets. This shows how much more functionality there is, such as the option for “discovery based” definitions and problems, by using the native option to “hide” text for users to click on. There is also support for python code, which I am excited to play around with.
Moving forward, I’ll be porting the current math-related posts of significance to that blog. Any future posts will have an introduction on this blog, so you know what’s going on, and then a link to the AoPS blog post.