Memorization with Python and Bubbles


I have found myself struggling to allocate time and patience to a very boring module that I am currently enrolled for (it’s a theory-only module). I have come up with a “lifehack” that allows me to proceed with my normal activities while keeping an eye on notes and memorizing. (This is literally something that was made in 10-15 min so go easy :P )

    :::python

    #!/usr/bin/python
    # -*- coding: utf8 -*-

    import sys, os, subprocess
    from time import sleep

    quotes = []
    glossary = "glossary-boring-module.txt"  #<------- REPLACE PATH HERE
    MAX_LENGTH = 120

    def sendmessage(message):
        subprocess.Popen(['notify-send', message])
        return

    def shortenedQuotes():
        global quotes
        new_array = []
        for quote in quotes:
            chunks = len(quote)/MAX_LENGTH
            for i in range(chunks):
                l = i * MAX_LENGTH
                r = l + MAX_LENGTH
                new_array.append(quote[l:r])
            new_array.append(quote[r:])
        return new_array

    def getListOfQuotes():
        global glossary
        global quotes
        counter = -1
        if (os.stat(glossary)[6]!=0):
            for lines in open(glossary, 'r'):
                a = lines.strip()
                quotes.append(a)
            sendmessage("There are " + str(len(quotes)) + " quotes before shortening. Recalculating...")
            sleep(20)
            temp = shortenedQuotes()
            quotes = temp
            sendmessage("There are " + str(len(quotes)) + " quotes now. ")
            sleep(20)

        else:
            sendmessage("OOPS! THE LIST IS EMPTY!")
            sys.exit()

    def main():
        counter = 0
        answer = 'y'
        global contents
        getListOfQuotes()
        if len(quotes) != 0:
            sendmessage("Displaying " + str(len(quotes)) + " businessquotes")
            sleep(20)
        for quote in quotes:
            counter = counter + 1
            sendmessage(quote)
            sleep(20)
        sendmessage("No more quotes. Go to the terminal to repeat or terminate the script")

        if answer == raw_input("Please enter 'y' to continue or any other key to terminate"):
            main()
        else:
            sendmessage("Bye!")
            sys.exit()

    if __name__ == '__main__':
        main()

The procedure is to scrape a file or page with definitions, save results in a .txt file and indicate the path to it in the script. Once run, the script then periodically displays definitions that - like it or not - you will start to memorize, in Ubuntu’s popup bubbles. If you have a different OS, don’t despair: except for creating the actual bubbles, the procedure is the same. It is still pretty buggy when it comes to managing very long chunks of text, (bubble real estate is very limited) but for simple ones this should be just fine. Obviously, there is no better code than one’s own so you’re most welcome to give it a stab and please share your tweaks, as will I. Cheers and happy memorization!

EDIT: I have now corrected the substring bug, and introduced a function that automatically splits a string into n strings not longer than the defined size limit. In other words, all you need to do is put all strings in a file, delimited by a newline, point the script to the file and run it in a terminal :)