An Autodidact’s Topology Curriculum

My topology curriculum is an example of How To: Learn a New Discipline.

0. Build the map.

The map is a high level representation of important concepts and connections — the threads that compose the subject.

I started by working through these two:

Screenshot from 2014-07-25 18:43:02

Screenshot from 2014-07-25 18:44:32

Where “work through” \(\equiv\) read carefully and annotate the text, take notes on important concepts, and complete a few exercises from each chapter.


“Catherine, you said you’d teach me math. Why are you drawing squiggles?”

Screenshot from 2014-07-25 18:58:39
Screenshot from 2014-07-25 18:59:21

“Math is formalized art! I get to draw these squiggles on a page, describe them with symbols, and call it math.”

1. Learn by working through complementary perspectives in parallel.


2. Give weekly lectures on what you’ve learned.

I’m giving informal lectures to a small group of people on what I’m learning. These people ask questions and tolerate pauses to look things up.

Don’t forget to ask for help when you get stuck!

If you can’t find a satisfactory explanation online:

A Researcher’s Research Experiment

My default mode of research consists of many projects at once, spanning multiple disciplines.

As an experiment, I’ve decided to take:

  • 2 weeks to clear most of my mental cache
    • tying up loose ends on current projects
    • posting a few project ideas
  • 2-3 weeks to focus on one subject

I hypothesize that I will gain an understanding of my optimal work style.

Edit from the future (2022): I ended up picking up pure math as this aforementioned 2 to 3-week project and fell so deeply in love I decided to devote myself to mathematics professionally.

My Todo System

I used to overcomplicate my todo system.

My todos were scattered across workflowy, email, various plain text files, a weekly planner, my white boards, and Dropbox. This doesn’t include the post it notes covering my desk, reminding me to check whichever planner, and notes to self on various topics. I would then write down my immediate todos (4 items) on a post-it-note to begin working, I would inevitably lose that post it and write another one with the same content.

My weekly planner is located on my tablet, and I would keep this open always. I’ve since begun using my tablet for project design and documentation*, and can no longer keep my todos continuously visible (which led to the aforementioned mess).

I find it is useful to have my todos to be immediately visible, this frees up my mental cache to focus on brainstorming by eliminating the need to actively keep in mind the mundanities of everyday life. Thus, without structure to organize them spatially, post it notes grew colonies and conquered my desk.

Finally, I realized that considering self-betterment an ongoing project is a productive perspective. It allows for more focus, and less guilt maintaining your physical and mental health when you could be working on a project.

With this mental freedom, I sat down and unified my todo system. I’ve finally settled upon a simple routine that works wonderfully for me.

The board is broken up into (annotated below)
0. Self improvement & documentation
1. Development of math & physics intuition
2. Low priority
3. Today (indexed 0,1,2,3 by order of planned completion — indexes adjusted throughout day)
4. Done

If I’m not at home, I email myself todos to add to the board.

*I maintain a writeup for each one of my active projects (linked to relevant files in Dropbox) in One Note. These writeups include an “in progress” tab for detailed, longer term, project specific goals.

Todos requiring temporal synchrony with another party are listed on Google Calendar (i.e., calls to professors, doctor’s appointments)

Introduction to Algebraic Structures

This post is an experiment in explaining math concepts via colorful hand-drawn diagrams.

At the recommendation of a few friends, I will likely add examples in the near future. If you find this post uninteresting/difficult to connect to ideas that you already have, I highly suggest you check out this post by MathIsFun.


Now that we’ve got that out of the way — we will delve into rings, fields, lattices, and categories.

Only then, once we’ve built your intellectual tool kit, we approach will the applications of groups in physics and biochem. Here’s a sneak peak of the introduction to lattice structures:

Generate CSV of Google Music Playlist

I recently switched my music vendor from Google Music to Spotify. To avoid manually searching for each song, I semi-automized the transition as follows.

1. Generate a CSV (artist, title) from your Google Music Playlist. Zoom your window out all the way (querySelectorAll will only load a static list of currently active rows).

// Run in Chrome's Developer Tools Console: Crtl+Shift+I
var playlist = document.querySelectorAll('.song-table');
for(var i =0; i<playlist.length ; i++) { 
  var l = playlist[i]; 
  var title = l.querySelectorAll('td[data-col="title"] .content')[0].textContent;
  var artist = l.querySelectorAll('td[data-col="artist"] .content')[0].textContent;
  console.log(artist.replace(","," ") + ',' + title.replace(","," ")); //take out "," to clean up CSV

Scroll and rerun until you have all entries.

2. Open your CSV in vim to remove the VM290:8 at the end of each entry. For example:
Clamavi De Profundis,Far Over the Misty Mountains Cold VM290:8


Now you have a CSV file of arists, titles to do with what you wish.
To proceed with migrating this playlist to Spotify specifically, continue to steps 3 & 4.

3. Copy/paste into Ivy.

4. Paste Ivy results into desired playlist.

Reframing the Gluten Scanner

A lesson that every scientist (or any person in a fast-paced creative field) learns: be glad when we find out that our research idea has already been done.

The situation can be re-framed as follows:

  1. It’s awesome that there are others working just as hard as you to better the world.
  2. Reassurance that you’re not idiotic.
  3. You can now devote your precious time to developing your other projects.

I learned this lesson in 2011. After proving myself competent by assisting others in the lab (George Washington University Robotics Lab, Positronics Division), I was encouraged to pursue an independent research project using the PR2 as the research platform.
I excitedly came up with a list of ideas, then grew progressively more disappointed as I proceeded to research each idea further.
In the crowded lab, I said aloud, “It seems that almost every project I come up with has either already been proposed or wouldn’t be funded”.
To which the senior engineer in the lab (whom had not spoken to me before) responded, “Welcome to science!”.

Sidenote: I ended up programming the PR2 to autonomously navigate and complete a task using only force proprioception.

One of the main projects that I’ve been working on is a gluten scanner.

The scanner allows those with food allergies to avoid accidentally poisoning themselves. This is done in one of two ways:

Raman Spectroscopy Method

  • Identify the minima and maxima on the absorption spectrum of a given protein (currently gluten) with a 1D array of IR / Vis lasers and an Avalanche photodiode Si(c).
  • Perform differential data analysis to determine if the food is contaminated.

This scanner would be able to analyse the food ~>1cm in depth without effecting the food, whereas (if desired) taking a small sample out of the food at an opportune sampling point allows for deeper results.

Originally planning on taking spectroscopic approach, I found that it was incredibly noisy (see below) to detect gluten in a vinegar solution [gluten is insoluble in water], let alone amongst protein rich food!

Thank you, Sunnyvale Biocurious, for training Paul on the spectrophotometer!

Realizing the specificity of the antigen-binding sites on antibodies, I came up with the following biomarker approach to significantly increase the accuracy of my device.

Biomarker Method

Gluten is a protein composite of gliadin and glutenin (stuck together with a starch). G12 and A1 are antibodies that bind to gliadin (a highly immunotoxic 33-mer peptide).

Although A1 has a higher sensitivity to gluten (0.33ppm) than G12 (0.5ppm), most Celiac patients have a 20ppm poisoning threshold (far below both thresholds). G12 is far less expensive, and thus the better option for regular consumer use if you aren’t willing to synthesize your own antibodies in bulk.

Anti-gliadin antibodies can be paired with a colorimetric assay to form a biomarker-based detector in the form of: a toothpick-sized detector to poke into food || the gluten-detecting equivalent of litmus strips.

G12 (Image credit: PDB)

In the past few days, I found that there are a set of devices, GlutenTox, which use my planned approach. Since this realization, I’ve also come across 6sensorlabs, and the TellSpec.

It seems to me that these solutions are not cost-effective enough to be sustainable for daily use. This is likely because antibodies are expensive unless you bulk synthesize them.

Linux Laptop Environment Setup

I’m regularly asked about the setup of my laptop: a System76 Gazelle Professional named Felix running Ubuntu 14.04. Writing a return to that query produced the following:

Chromium Addons:

Pocket #Formerly Read It Later
GmailTeX #Gmail + LaTeX = GmailTeX
AdBlock [for YouTube] #Saves time
Session Buddy
HTTPS Everywhere
Incognito-Filter #Great for keeping,, etc. from hijacking web history
Hacker Vision #Save your eyes!
The Great Suspender #Suspends tabs not in use
What font? #satisfies curiosity
Wolfram Alpha
Chrome Downloads
Have I Downloaded This Before?
BetterTube #Optimize your YouTube experience

Get Flashplugin working on Chromium:

get adobe-flashplugin
#if that doesn't work, try:
sudo add-apt-repository "deb $(lsb_release -sc) partner"
sudo apt-get update && sudo apt-get install flashplugin-installer

Some of my favorite term aliases*:

alias up='sudo apt-get update && sudo apt-get upgrade'
alias meta='sudo vi ~/.bashrc'
alias rmeta='. ~/.bashrc'
alias sag='sudo apt-get'
alias cx='chmod +x'
alias purge='rm `find *~`'
alias ip='ifconfig | grep "inet addr:"| grep -v "" | cut -d: -f2 | awk "{ print $1}"'
alias get='sudo apt-get install'
alias matlab='matlab -glnx86'
alias p='python'
alias pipi='sudo pip install'
alias sim='cd ~/V-REP_PRO_EDU_V3_0_4_64_Linux/ && ./'

Python-based Research:

get python-pip #pip for managing packages
get build-essential liblapack-dev gfortran gcc g++ 
#Either the ATLAS or OpenBLAS implementation of BLAS. OpenBLAS is speedier but finnicky wrt multiprocessing.
get libatlas-dev libatlas3-base 
get libopenblas-dev
sudo easy_install -U distribute
pipi dev numpy scipy setuptools matplotlib
pipi nose #nicer testing
#Machine Learning
pipi -U scikit-learn
#Computer Vision
get gcc g++ cmake
#download latest opencv from #website
#untar it with
tar -xvf opencv-* #or
unzip opencv-*
#inside untarred folder make new folder call "r" (arbitrary name)
#run the following command in it
make install

A few choice packages/programs:

get guake #drop down term window - crazy useful (Sublime users: check this out)
get vim
get screen
get tex4ht #convert LaTeX to html
get chromium-browser #Preferred browser
get gparted #for managing partitions
get wine #Run (some) Windows on Linux
get haskell-platform
get vlc #My favorite multimedia plugin
get ipython #Bro, do you even Python?
get texmaker #LaTeX editor of choice (gedit plugin is also nice)
get openjdk-6-jre openjdk-7-jre #Open source Java platform
get geary #Alternative to thunderbird
get gwenview #crop pictures
get p7zip #extract *.7z files
get unrar #extract rar
get bleachbit #free your disk space
get libav-tools
sudo add-apt-repository ppa:samrog131/ppa
sudo apt-get update
get ffmpeg
cd ~ && wget -O - "" | tar xzf -
#broke grub?
sudo add-apt-repository ppa:yannubuntu/boot-repair
get -y boot-repair
boot-repair #run boot-repair after installation
#Be safe, use a proxy or VPN (more info)
get squid squid-common
#Note: If you are running 13.04, sudo service squid3 (start|stop|restart)
#evernote on linux
sudo add-apt-repository ppa:nvbn-rm/ppa
sudo apt-get update && sudo apt-get install everpad
#numlock activates at startup
sudo apt-get -y install numlockx
sudo sed -i 's|^exit 0.*$|# Numlock enablen[ -x /usr/bin/numlockx ] && numlockx onnnexit 0|' /etc/rc.local
For quick scripting, I use or IntelliJ IDEA or Sublime with vim command mode enabled. 
To enable control mode in Sublime Text 2: Find Preferences.sublime-settings 
Change the line "ignored_packages": ["Vintage"] to "ignored_packages": []. 
Restart Sublime: boom! Vim controls.
sudo apt-get remove gnome-screensaver
sudo apt-get install xscreensaver xscreensaver-data-extra xscreensaver-gl-extra
#Oracle(Sun) Java (docs)
cd ~/
wget -O
chmod +x
sudo ./
get sun-java6-jre
#VMWare Workstation
get compiz compizconfig-settings-manager compiz-fusion-plugins-extra compiz-fusion-plugins-main compiz-plugins
#matlab from cd
cd /media/MATLAB{version}
gksu ./install
sudo add-apt-repository ppa:irie/blender
sudo apt-get update
get blender
get myunity #Awesome control panel for unity
#Deprecated: get unity-tweak-tool 
#My free robotics simulator of choice, the educational version is free for all and available for OSX, Windows, 32 and 64bit Linux

*To edit your own cd && vim ~/.bashrc
After editing, refresh your bashrc with . ~/.bashrc. Now your aliases can be used! Huzzah!

Using a US Keyboard Layout to type in German? Lesen diesen Beitrag für deutsche Tastaturkürzel.

On Categories and Concepts: Hofstadter Talk

This is a summary of a talk I attended at Stanford by Douglas Hofstadter (well known for his authorship of Gödel, Escher, Bach: An Eternal Golden Braid).

He prefers lecturing without notes. I found it interesting/challenging to sort and summarize the main points of an improvised talk. Enjoy!

The label of a category can be anything from a conjunction to the essence of a situation

A paradigm for the situational label is Danny at the Grand Canyon.

Hofstadter’s family traveled to see the Grand Canyon. As Hofstadter turned his entranced gaze away from the great abyss, he rested his eyes on his son. His 1-year-old son, Danny, sat facing away from the Grand Canyon and staring at ants. He was a child so young that he had no idea of distance. This situation can be generalized to the idea of focusing on what you’re interested in (and are capable of focusing on), harboring little interest in what others consider as gems.

Similarly, idioms are categories:
Left hand doesn’t know what the right hand is doing \(\equiv\) One part of an organization is contradicting the other

Tail wagging a dog \(\equiv\) small things have inordinately large control over a situation.

Conjunctions (logical connectives) are categories:
The conjunction “/” (\(\equiv\) “slash”) is two things that aren’t quite exclusive combined together. Formally, let \(A\) and \(B\) be categories, a slash denotes \({A \cup B : A \cap B \neq \varnothing}\). For example: they’re a bimbo/self-marketing genius.

We may consider ourselves as each having a unique, private repertoire of categories (memories and thoughts)

We are a composition of public and private repertoires. The action of categorization is at the core of cognition. The difference between humans and other animals is the snowballing of categories; we continue to accrete categories to our repertoire through analogy.

These categories begin as a singleton: a set with one member. They evolve and blur into analogies as we add experiences to our private repertoires. This blurring may be coined as “pluralization”.

Reminders are analogies: unconscious thought pushed into consciousness by a situational queue.

The evolution of a category:
\\(\text{Singleton}\rightarrow\text{Superimposed idea}\rightarrow\text{Pluralization}\rightarrow\text{Label}\\)
He defines intelligence as the ability to put one’s finger on the essence of a situation rapidly. In other words, finding propelling analogies quickly.

Circumstances that evoke the choice of a category are extremely subtle

Without getting bogged down in examples, subtlety in is demonstrable in the difference between appropriate use-cases of “go to school” and “go to the school”.

  • “I have to stop by the school today to pick up my spectrometer.”
  • “Ender, you must go to school today.”

Many of cognitive science’s esoterics are bastardized versions of terms inherited from formal logic

In mathematics, predicate logic is an umbrella term for symbolic formal systems, informally, a predicate is a statement that is true or false depending on the values of its elements.

However, predicate calculus is “a general system of logic that accurately expresses a large variety of assertions and modes of reasoning”, capturing the essential logical structure of a complex idea independent of its elements.

The proposition Matvei loves Ubuntu can be represented by a predicate calculus in the form:

[Relationship between elements]([Subject element], [Object element])

However, a predicate calculus does not emit a yes or no. Likewise, category membership is not a boolean. Membership is fuzzy: the strength of membership is on a spectrum including central and peripheral membership of a given category.

Meaning is contextually dependent

The communication of ideas usually takes place through language: a stream of symbols flowing out of the mouth/fingers. Before symbolic exchange generates meaning, the situation must be explored and evaluated in the discourse space: a completely context dependent environment.

Sidenote: Hofstadter realized that meaning had a contextual dependence after he decided that his mathematically based notion that “all that matters in language is truth and falsehood” was incorrect.

Often, meaningful sounding questions are in fact meaningless due to ill-defined terms

When queried: How many languages do you know? He answers, “I’m \(\pi\)lingual”.

\(\pi\)lingual not in the sense that his knowledge of language is transcendental. Instead, \(\pi\) is the result of summing of pieces of languages he knows into blurred fractions.

Before the question is meaningful, the questions What does it mean to know? let alone What does it mean to know a language? must be addressed.

Is it an efficient way to equate the meaning of 2 sentences to represent a network of word-relationships as a weighted graph? Or is this a seemingly logical but meaningless question due to fuzzy definitions?

My question, left unanswered/as an exercise for the reader.

Cognitive Science: An Introduction to the Study of Mind Jay Friedenberg, Gordon Silverman

The Utility of Art vs. STEM

I was recently asked an interesting question in an interview:

You stated in a previous article that you believe math and science are “toolkits” to solving problems in ways that writing and the arts cannot. Can you elaborate on that?

I think science and art are two sides of the same coin. The distinction is quite fuzzy for the fields overlap in a variety of ways that depend on the perception of the viewer. For example, mathematicians find aesthetic beauty in eloquent proofs and concise equations. The main difference between the terms lies in what they contribute to the to the world. Art provides inspiration and science provides understanding and explicit utility. I specify “explicit utility” for implicitly, inspiration provides the driving force for scientific advancement.

Art enables us to describe every emotion and experience known to man, but mathematics enables us to understand the laws that govern everything. Art cannot show us something that is not a human experience, for it is limited by the person who uses it. Mathematics, on the other hand, can show as absolute truth realities too grand to be fully understood by the human mind while science allows us to precisely and repeatedly implement these truths in the physical world.