Milo Land

Preparing For Exams/Tests With Simple Tech

I have a page that I made in my wiki for how I've prepped for exams and auditions in the past, and I've found this process vairly successful.

https://tinybrain.fans/audition--interview--test-preparation.html

I'm revisiting this because in the next few months, I have an aikido test and I want to try and internalize the many difficult pieces (new techniques, lots of Japanese that I don't know, a zillion variations, etc.). In the past, I have used Anki for learning the rote memorization pieces, but that's not very good at covering the whole gamut of things I need to learn.

So I made a spreadsheet of all the different things, separated by all the data that seemed relevant. This is a TSV showing some of the stuff, with the first line being a header:

Technique	Weapon	Variations	Attack	Knowledge
Iriminage	Body Arts	Jo-dan	Katate-dori gyaku hanmi	2
Iriminage	Body Arts	Chu-dan	Katate-dori gyaku hanmi	2
Iriminage	Body Arts	Ge-dan	Katate-dori gyaku hanmi	2
Kotegaeshi	Body Arts	Jo-dan	Katate-dori gyaku hanmi	3
Kotegaeshi	Body Arts	Chu-dan	Katate-dori gyaku hanmi	3
Kotegaeshi	Body Arts	Ge-dan	Katate-dori gyaku hanmi	3

The knowledge column is ever updating, as it related to how well I know each thing.

What I can do with this data, once it's in a TSV, is run a script to populate files with the info in certain useful configurations. This script organizes the data by each column. And while some of those are more useful than others, the main thing I find it useful for is being able to study different elements using different vectors.

I know that I learn things best if I approach them from multiple angles. So being able to go through every possible variation of a technique one day, and then focus on the lowest knowledge techniques the next day is extremely useful.

I have multiple TSVs, one for each rank named `5th-kyu-list.tsv` for instance. This script populates all the data into a SQLite database in memory, which makes querying much more simple. Then I output the data into individual study guides that include all these different vectors of organization.

#!/bin/sh

temp="$(mktemp)"
touch "$temp"
header=

for file in *.tsv; do
    header="$(head -n1 "$file")"
    tail -n+2 "$file" >> "$temp"
    md_file="${file%%.*}.md"
    echo "# ${file%%-*} Kyu List" > "$md_file"
    env/bin/python3 ./kyu.py "$file" >> "$md_file"
done

# do all
sed -i '' -e '/^[[:space:]]*$/d' -e "1s/^/$header\n/" "$temp"
md_file="all-kyus-list.md"
echo "# All Kyus List" > "$md_file"
./kyu.py "$temp" >> "$md_file"

`kyu.py` looks like:

#!/usr/bin/env python3

import csv
import pandas as pd
import sqlite3
import sys

def print_q(field: str, conn) -> str:
    print(f'## By {field}')
    print()
    print(pd.read_sql_query(f'''
        SELECT {','.join(fields)}
        FROM kyu
        ORDER BY {field};
    ''', conn).to_markdown(index = False))
    print()

fields = list()
items = list()

with open(sys.argv[1]) as f:
    tsv_file = csv.DictReader(f, delimiter="\t")

    for l in tsv_file:
        items.append(dict(l))
    fields = list(items[0].keys())

with sqlite3.connect(':memory:') as conn:
    #create a table
    conn.execute(f'''
        CREATE TABLE kyu (
            {','.join(list(f'{field} TEXT' for field in fields))}
        );
    ''')
    conn.commit()

    #populate table
    query = f'''
        INSERT INTO kyu
                ({','.join(fields)})
        VALUES
                ({','.join(['?' for field in fields])});
    '''

    items_to_add = [
        tuple(i[field] for field in fields)
        for i in items
    ]
    cursor = conn.cursor()
    cursor.executemany(query, items_to_add)
    conn.commit()

    for field in fields:
        print_q(field, conn)

    cursor.close()

Once I have all this, I can calculate te rest of the stuff from the process in my wiki: making envelopes with little bits and bobs, practicing random stuff, etc.

I can hear you already saying "why don't you just put this in a spreadsheet", which is an absolutely fine point. Honestly, it would probably make more sense, but I like trying to figure out how to do things using tech that is fun and free.