Introducing: nucleo

Don’t you love getting exciting packages in the mail that are full of electronic cool stuff?

I know I do.

Today, thanks to Arrow’s free overnight shipping (with a purchase of $20 or more), I received my STM32F042K Nucleo. Check out this cutie:

Isn’t he adorable?


My mentor, fouric, introduced me to the nucleo a while ago, but I haven’t been able to buy one until now (yay for no money!).

I found a few projects by a cool dude named fduignan on GitHub, who played around with doing some cool LED programming that’s similar to a project I’m wanting to start soon. What better way to learn a device, a new programming language, and how to build things than to play with cute microcontrollers?

I’ve teamed up with one of my friends, he helped me co-captain our improv team, and we’re going attempt building a laminar jumping water fountain. They look something like this. We eventually want to include RGB LEDs into it, so it’ll change colors, and then get those colors to change based on music that’s playing. It’ll be a challenge for sure, but we’re going to learn lots, and that’s the fun of it. I’m hoping to get the LEDs to work with the nucleo, if not, I’ll use my raspberry pi.

When we start the process, I’ll update here with pictures and the process. Hopefully I’ll get my breadboard and RGB LEDs from Sparkfun soon so I can start playing with the code.

Until next time!

Improv: The Art of Spontaneous Theater

Today I rode home from one of my last improv competitions, where I helped prepare my team to compete against three others in a battle of laughter and jokes. It was a three day competition, and each team performed 12 games. It was exhausting, hilarious, and wonderful bonding time with people I hadn’t taken much time to get to know. The theme of the competition this year was superheroes, and my team was the JokeBusters. (I ain’t afraid of no joke!)

My team took 3rd place (though the judges told us we were incredibly close to reaching 2nd place), and I won the award for the most skilled and supportive team member. It was a humbling and amazing experience that I will always remember.

Acting…acting is all about taking a story and putting yourself in the character’s shoes, immersing yourself in their world and becoming that person. You have a script and blocking, perhaps even choreography and music.

What would happen if you had none of those tools, only the power of your own brain?

This, my friends, is improv. Improv is short for improvisational theater, the kind of acting with no script. You stand on the stage with nothing but your good looks and infinite intellect, and you act out a scene off the top of your head.

I have been fortunate to partake in four improvisational teams as of this date through my local theater group, over the course of four years; I have been coached by over 7 people who have been strong and inspirational people not only in theater, but in my personal life as well.

You may be thinking, “Acting, in front of people, without a script. Are you kidding me? Aren’t there rules to follow and structure to be had?”

Ah, yes, my friend. Have no fear, I shall introduce you to the fantastic art of improvisational theater:

Starting us off is the foundation of all stories and scenes: CROW.
Umm, isn’t that a bird?
You can be fairly certain I’m laughing at you right about now.
CROW is an acronym consistently used in improv to help us improvisers remember what we actually need to be doing instead of trying to be funny.

C stands for Character. In every scene you want to know who you are. If you don’t know who you are, you won’t have an objective that drives the scene (something your character wants, usually), and there won’t be anything interesting for you to do. That would be boring. Interesting characters are at the heart of improv, whether it be the milkman that delivers milk to your house every day, your reformed pirate friend who lost both legs in an intense sci-fi ship battle, or your mom.

R stands for Relationship. When you’re improvising with someone, your character should have someone to hang out with, share some intense memories with about cheese festivals….perhaps they’re long lost brothers, highschool sweethearts, best pineapple picking buddies, whoever they are, you need to know them. If you have a relationship, you have history with the person. If you have history with the person, that can influence the way your character interacts with them. (Of course this is all on the spot, so you have a literal split second to decide who you are and how you’re related to the other person you’re improvising with).

O stands for Objective. The objective is something that drives the scene, it can sprout from a relationship, where a drunk dude may be wanting to show off to his bestie that he can hit the bullseye of the target with a dart, while squatting, to prove that he is better than his friend (yes, that is a real example of a character I played. Earlier today, in fact). The objective is to find something that your character may naturally want. While trying to get what you want, it can create conflict with the other characters if they have opposing objectives.

Finally, W stands for Where. In improv, we have no props. No sets. Anywhere we are must be pantomimed, as if we were actually there in real life. Whether it be the Himalayas, a Civil War Re-Enactment, cooking in your kitchen, or a port-o-potty, you must create your surroundings by interacting with them.

Next up, I’ll introduce the simplest rule in improv, the “Yes, And.”

Yes, And is a term we use quite a bit. When your scene partner offers you something in a scene (offer means give you ideas to work with), you accept the offer and add onto it, such as:

Scene Parter 1: Ah, Joe. I’ve missed you since you left for the Amazon, do tell me about your work wrangling the gators.

Scene Partner 2: Why, Bill I am flabbergasted you even remember me. I’ve been gone for twenty-five years! I’m surprised you even recognized my with all these scars. Good to see you, ol’ buddy.

If you see in that example there, SP2 agreed, and then gave SP1 more information about their relationship how long they’ve known each other, giving SP2 a chance to build even more off of that.
Now, lets see what would happen if we rejected the Yes, And concept.

SP1: Ah, Joe. I’ve missed you since you left for the Amazon, do tell me about your work wrangling the gators.

SP2: Excuse me? My name isn’t Joe, it’s Steve. And I wasn’t in the Amazon wrangling alligators, I was at the pet store stroking bunny rabbits….for twenty-five years.

Here, SP2 completely rejected what SP1 was saying, and went with their own idea, which wasn’t fun to watch, or very entertaining, for that matter. The Yes, And concept is a surprisingly tough one to begin using, because it makes you realize how much you want to say ‘no’ and implement your own ideas. While using your own ideas is good, if your partner offers you a line with good information in it, forget that idea about a buff twinkie dealer from the 1950s and agree with your parter and move on. It’ll make the scene much smoother.

The third concept that I learned this year from my improv team is called, “You and me, here and now.” This phrase has been nailed into my head all year by my coach.

You and me, here and now. What does that mean in improv terms? It means no one wants to watch a scene about two people talking about dogs, you want the scene focus in on the relationship between those two people, perhaps they are dog show rivals and have been fighting for the championship since they both came out of the womb.

Do you see how that can be a much more interesting thing than watching two characters converse about something other than themselves?

Next up: Don’t try to be funny. Though improv is though of as comedy, you shouldn’t try hard to get the laughs or the attention, improv is to make your scene partner look good and the laughs will come naturally. Sure, you can have a good pun or one-liner here and there, but it must fit in the context of the scene and you have to justify why you said what you did. Trying to be funny ends up making everyone look bad or awkward, and we don’t really want that.

Improv is all about letting loose. One of the things I have learned the most in improv is to be confident in yourself and your choices. If someone asks you a question, such as:

SP1: How on earth did you find my long lost treasure chest of cheese?

You don’t want to respond with a shrug and “Eh, I don’t know.” Huh? Of course you know. And in fact, it wasn’t just a treasure map that led you there, but it was a treasure map on the back of a gum wrapper that you saved in your shoe from 2nd grade. You do know how you tripped and fell and broke your arm off. When you’re confident in your choices, your scene partner gains confidence as well, and you both think clearer and make better scene choices.

Lastly, my final bit of wisdom. Improv is all about failing.

Failing? Yes, failing.

Improvising a story is unexpected, random, and you never know what is going to come out of your mouth or your scene partner’s mouth. If you fail, fail big. Make people know that you failed. Because guess what? It’s funny to the audience or anyone who is watching, and you can learn from your mistakes. Sometimes your fail makes the whole scene a new and improved story! Failing is at the heart and soul of improv, and if you ever join an improv class, it’s something you will find yourself doing often.

It can be a hard thing to get used to, especially if you’re someone who wants to get everything right the first time. But let me say this: the more you fail, the more you get comfortable with getting back up and trying again. Not only does this improve your improv (ha), but it also ends up applying to your real life.

Ever since I have taken part in the joys of improv, my life has gotten better because of it. I have learned to fail endlessly and get back up again, I have learned to be spontaneous and confident in my decisions. I have learned to lead a team and encourage the heck out of people, and gained an array of skills. It’s amazing how useful thinking on your feet can be in real life when you’re in a tight situation.

If you ever have the chance to take an improv class, take part in it, only if it’s for one night. Not only will it improve your confidence and your abilities to speak in front of people, it’ll change the way you live and accomplish things in your day-to-day life.

Not to mention, it’s really fun to laugh.

QEMU Debugging and TIL

This week was busy.

I helped co-teach an improv rehearsal while my coach was away, spontaneously went to see a movie with friends, finished some good books (Debugging by David Agans and How to Read A Book by Mortimer J. Adler), and wrote the entirety of a rough program in a day that converted numbers between base 2, 10, and 16, or as their familiar names are called, binary, decimal, and hexadecimal. I wrote it for the purpose of re-familiarizing myself with the Forth language, since I haven’t written a program with Forth in a while. About a quarter of the way through, the program turned out to be a funny talk-show-like system with cheesy jokes and puns. You can check it out on GitHub.
Forth is an awesome interactive language, you can check it out here with the official online book by Leo Brodie, Starting Forth. I’ll write a bigger post on Forth later, today I’m sharing my debugging issues and talking about a system emulator called QEMU.

Once I finished my Forth conversion program, I took a break, but eventually gravitated  towards finishing an old assembly program I wrote a while back that converted an array of fahrenheit values to celsius. I had finished it, but unfortunately, lost all my work when I accidentally wiped the contents of my computer (which is a story for another time). I used QEMU to debug it at the time, but I lost my debugging log along with the wipe, sadly.

QEMU is a downloadable, open source, full system emulator. You can use it to emulate types of processor cores/CPUs, machines, or OSs all without having to own the actual device. It’s handy when you don’t have the money to buy an actual microcontroller, and you can run it straight from your terminal.

I finished rewriting my program in ARM assembly and geared up to debug my messy, night-time written code, until the qemu commands I had recovered suddenly failed. I was executing:
qemu-system-arm -machine raspi2 -cpu cortex-m3 -s -S -nographic -kernel -gdb tcp::1234 f-c2.elf

First I got the error:

qemu-system-arm: -kernel -gdb: Unknown protocol 'tcp'
WARNING: Image format was not specified for 'f-c2.elf' and probing guessed raw.
Automatically detecting the format is dangerous for raw images, write operations on block 0 will be restricted.
Specify the 'raw' format explicitly to remove the restrictions.
qemu: could not load kernel '-gdb'

I added -raw, but all I got back with that command was a terminal prompt. I consulted my friend uelen (way-len) who knows more about QEMU than I do (something I hope to change in the future).

He shared that -s did the same thing as -gdb tcp::1234 so that was all redundant. I ended up deleting -raw as well.
I reformulated my qemu execution to end up with:
qemu-system-arm -machine raspi2 -cpu cortex-m3 -s -S -nographic -kernel f-c2.elf

And it worked!
I ran that in a terminal, and in another, I connected the trusty GDB debugger to my emulated system with target remote localhost:1234.
GDB has been a bit of a stinker since then, and I haven’t been able to debug my code because it’s been sending random addresses to the program counter and jumping to pieces of code that don’t even exist (I guess this code exists, though, must’ve come from the 4th dimension or something). I spent most of today working on it, but only got so far with hardly any leads.

Somehow my program’s first instruction, mov r0, #16, loads #12 into the link register, and random addresses are put into the program counter. I made sure that there were no addresses in r0 when the program started, so there’s no way I could somehow be moving anything into the PC or LR. I made sure it failed like that multiple times so I can accurately state that. But as David Agans says in his amazing book, Debugging, even “that” can happen, when you know it can’t.

All that to say, debugging is long and challenging, especially with things you’re not horribly familiar with yet. After spending much of my day attempting to find out gdb’s mysteries, I am retiring to my happy place, reading books and working with some Forth.

But before I leave, TIL! (Today I Learned)

TIL to really apply the concepts I learned in Debugging by David Agans, from changing one thing at a time, to keeping an audit trail, to quit thinking and just looking (I think I used that rule the most).

I learned that when you get an error for the 504th time, it’s not the end of the world.

TIL that sharing source code is really fun and really freaky at the same time, because on one end you’re thinking, “oh my goodness griefcious they’re totally going to judge my code and think I’m stupid for writing it this way instead of that way!” while on the other hand, you’re thinking “LOOK AT THIS LITTLE BABY PROGRAM I MADE ISN’T IT GREAT?” When in reality no one intensively looks at it and only tries to help figure out your problem. (those who do judge your code are either trying to help you but are unintentionally coming off as stand-offish, or they are just deciding to be turd blossoms.)

I learned that sometimes, it’s okay to pause from figuring out a problem to eat some chips and fruit while you ponder your existence and if it’s really worth it to figure this problem out.

I learned that it’s good to ask for help when you have no idea where to start looking to find out why your system emulator is being finicky (QEMU User Documentation, I’m looking at you).

And finally, TIL that making sure you recompile your altered code before running it again is a really good idea.

Until next time, folks!

Spaced Repetition Learning Systems

lá maith, good day!

Spaced Repetition Systems…what are those? SRS for short, Spaced Repetition Systems are tools to help you memorize anything you wish to have embedded in your brain for a good long while. Be it the nouns and verbs of a new language, definitions of terms from a class you are taking, mathematical equations, or the periodic table of elements, this is a great way to get started memorizing all those details.

When taking a new class and learning all of this new material, you take notes and mentally exclaim, “I am totally going to remember all this!”
Yet, three days later, you’ve forgotten most of that new knowledge (if you haven’t made an effort to retain it). While people say there’s a big learning curve to new subjects, there’s also a large forgetting curve that happens 24-36 hours after you have been presented with new information.

Spaced Repetition Systems take the efficiency of memorizing via flashcards and spread the memorization out effectively over shortened periods of time, allowing the information to seep into your brain at a non-overwhelming speed and increase the rate of retention.

I use the Leitner System, a simple implementation of the SRS concept. I wanted to get down and dirty with the project, so I built my own system out of cardboard and decked it out with washi tape when I finished, to make it look happy.


Not too shabby, eh?

It’s pretty shabby.

In case you don’t like the idea of making your own Leitner system, there is an online version by the name of Anki that works just as well.

As you can see, I marked each compartment with a “c1, c2, c3, …cN”, giving me seven mini-boxes. In a Spaced Repetition System, you start out with all your flash cards in the first compartment. Those cards you review every day. When you get a definition or concept right, you’re allowed to move that flashcard to the next compartment, where you review those card every three days. If and when you get them right again, you move those cards to the next section, where you review them every five days. If you get a concept or definition wrong, though, you have to move the card back to the previous compartment.
When you finally get to the end of the compartments and have reviewed those cards at least 5 times, they can be put into the retired deck to be reviewed once a month.

Here’s a visual:


I initially began using the Leitner System for simple definitions and words with a one sentence answer. As I began to realize its efficiency, I added more complicated subjects onto my flashcards; concepts that required me to explain them out loud like I was teaching this new idea to a five year old. This extended my ability not only to remember the concepts, but pushed me to create new ways to explain and understand what information I was conveying.

I have successfully memorized over 400 definitions, concepts, and programming instructions with the Leitner System. It only takes me, at most, five to ten minutes a day to complete. This is extremely useful when you’re venturing into a new and daunting field that requires you to remember hundreds of definitions on the spot, such as biology or engineering. The Leitner System and SRSs are an incredible tool to help learn a new language, memorize some babe’s phone number, self-teach programming concepts or terms, remember dates for history finals, teach yourself guitar chords, there are no limits. Anything can be put into this, and, if you put in enough effort, you’ll have a bunch of neat things embedded in your mind for any situation you find yourself in.

Happy learning!

thallia’s tree; a branch of knowledge

céad míle fáilte,  a hundred thousand welcomes!

I am thallia, a young and aspiring engineer. Electrical engineering and computer engineering have been my focus for almost a year now, alongside programming, mathematics, science, and a little dabble of natural medicine.

Soon I will be shipped off to college to pursue my career in electrical engineering–with that I want to further the research and technology to aid in naturopathic and other natural medical care.

The reason I chose to start a blog is due partially from influence of my mentor. I am a part of a team called Under the Wire, a small group of individuals with a passion for learning and, hopefully someday, we want to reinvent technology.

One of the concepts provided to us by our mentor is called infinity learning. A bit dramatic, I know, that’s what makes it fun. The concept of infinity learning is, ideally, where you are able to train yourself to remember the majority of anything you ever learn. A tool helpful to accomplish this is a blog.

The blogging format gives you a place to, “review, clarify, and document your experiences and learnings” (fouric, 2017). As you learn concepts, run into problems, or discover new things, a skilled way of making sure you understand it completely and correctly is to teach it to someone else; in this case, write it out and explain it to others reading the blog. When you have a limited understanding of a concept, sharing it with someone else requires you to have a fuller knowledge of whatever you’re trying to teach them, therefore pushing you to understand a concept to its full potential.

Using a blog format also gives you a copy of what you know, a frame of reference for if you forget a concept or piece of knowledge in the future.

With that in mind, this blog is where I’ll be posting things that I learn, projects that I’m working on, or problems I run into in the process of learning. I hope some of these posts will teach you a thing or two, provide you with things to think on, or serve as entertainment in general.

If you ever have any questions or comments, feel free to contact me! There’s a form you can fill out in the menu, located in the top left corner of this blog. If you want to read more about who I am and how I got interested in these subjects, you can go here!

Thank you for stopping by!