Get your technician class HAM radio license the easy way

A technician class amature radio license is the first step to using ham radio. The quickest way I found to learn the topics needed to pass was to use the website. You simply spend a few minutes each day, and a bit of time right before you go take the test, going through flash cards on this website. These are the exact questions that will be on the test and just learning the answers to these questions will teach you most of what you need to know. There will be a few with terms that are confusing and for that I would recommend you look up those questions in the ham radio book (all questions have a reference to where it is explained in the book). Learning with the flashcards and only looking up the confusing questions is an excellent way to learn because just reading the book alone you will easily miss much of the fine detail you need to know for the test. By first seeing the question you will know what exact information you are looking for when you look at the book. Using this technique I spent 15 min a day for a week doing the flashcards and was able to get through the whole question pool. Then before I went to take the test I spent another hour doing more flashcards. This allowed me to learn the material quickly and pass the test easily. To find a location near you where you can take the test go to: ARRL: Find an Amateur Radio License Exam in Your Area. After you take the test you the FCC will post your callsign online, mine is KE0LVX.

If you are into stage rally you should get your HAM radio license because that is how safety and control workers communicate. Having your license will allow you help out and volunteer for events in an official capacity. Also, if you work on a team it will help you know what is going on by listening to the different radio networks.

Debugging ” make[] *** No rule to make target” error

This was a weird one, so I’m going to write about it to show how we found the answer. Both myself and a coworker develop on macbook computers and for some bezar reason I could build the code on my machine, but the same folder of code on his machine would result in a make error aobut No rule to make target 'x.oo', needed by 'y'. Stop. Error. We tried everything, even making sure we were both using the same version of make and that our build system was the same. Eventually, inorder to debug this both of us ran make and sent the output to a file and then diffed those two files. What we discovered we initially thought was weird but didn’t make much sense. There was the obvious, his was skipping building the object for x.oo and then complaining about it not being there for the next step. The second thing was that the apsolute paths on his machine was /users/<username>/workspace/trunk where mine was /Users/<username>/workspace/trunk. The important thing to note is that on his system all the abolute paths thought that the users directory is all lower case. We oppened finder and saw that on his machine users was not lower case, it was Users. The reason for this is he created an alias to cd into the source directory of our project with an absolute path in his bashrc:

alias cdsrc='cd /users/<username>/workspace/trunk/src'

He would use this to jump right to the directory. This seams to work and after he would do this the terminal would “preserve” the path that he gave it and his pwd was:

$ pwd

This doesn’t seam like it should be a problem except that realpath in gnu make that searches for dependencies assumes you are on a case sensitive linux filesystem. You can configure your HFS+ mac filesystem to be case sensitive which would avoid all this (stackoverflow). This was just one of those weird ones and the real lession is that make errors might seem imposible to fix but there are always clues to help you figure it out if you look closely enough in the output.

Python 3.x vs Python 2.7

This was sparked by a disagreement with a friend I’m developing an open source project with. I was in the wrong, I wanted to use Python 2.7 because it was what I learned and was comfortable with (and it was default on my machine). As programmers it is really easy to kill something amazing and fun like a project with a friend with something as stupid as this. It is easy to join a software church without knowing why or having real reason behind it. I hope this will help you understand the differences between the languages and why you should use the newest stable one you can.

What’s the difference?

There are many but the important thing to know is that 3.x is backwards-incompatable.

Sytax differences

Meaning that the code you write for 2.7 will not work in a python 3.x interpreter and vice versa. Here is an article that has a list of the more important syntax changes.

Philosophy differences

There is no real philosophy difference between the development of python 3.x and previous versions. Over time the features in python had grown so fast that there many duplicate ways to do the same thing with subtle, potentially confusing differences. In order to clean all this up a hard fork was needed to remove duplicate features and clean up the language. The language still supports multiple paradigms (OO, stuctured, functional, etc). Yet the goal is that:

“There should be one– and preferably only one –obvious way to do it.” —The Zen of Phython, by TimPeters

Version History

Year Stable Version
2010 2.7
2012 3.3
2014 3.4
2015 3.5
2016 3.6

Will there be a 2.8 release?

In 2014 there was an anouncement that python 2.7 would continue to be supported (bug fixes) until 2020 but that there would be no 2.8 release as users are expected to move to python 3.4+. Source

Why do some continue to use 2.7?

Initially the primary reason ton continue using 2.7 was existing library support. That has since become a mute point because there has been a huge effort put forth by the community to port everything that matters to python 3.x. There is a webpage that tracks the 3.x support of important libraries: 3 Wall of Superpowers

What are the drawbacks to using Python 3.x?

Performance. There are many cases were python 3 is demonstratably slower running similar code. There are many reasons for this yet the reason this is not a real problem is two fold. You won’t be using python if performance is a major concern and second that there are ways to optimize python code that makes it as fast or faster. One of the major sources for this is the change of how types are stored and interacted with. Here is a stackoverflow article about it that shows how to optimize python 3 code to run as fast or faster.

Is there a reason you should use any version besides 3.6 or 2.7?

Debian and all the users of debian on raspberry pi. If you plan on supporting the rasperry pi you will probably want to use 2.7 or 3.4 because those are the ones you can install with apt-get on the current version of debian (the linux distro most commonly used on raspberry pi). You can use 3.6 but you will have to build it from source (stackoverflow). While sure you can do that on your pi, but it will take a long time and your users probably won’t like that. You could also cross compile it, but again your users probably won’t be able to do that easily.

What did I learn?

I am slowly learning to ask the question, “Is this a hill I’m willing to die on?” There is no reason I should kill something awesome like a fun project with a friend and cause a hard fork over something I haven’t spent any real time researching. Also, both python 2 and 3 are verry capable of doing what we need and if I was on the otherside of the argument it wouldn’t matter, the right answer is to not sacrifice something awesome for something stupid. The responsible answer is to use 3.x if you want community support of your project and 2.7 for users who are too religious to do a bit of reading. If this is just for you and your friends it really doesn’t matter unless one of you cares enough to fork the project. If two of you care that much and are different sides, I’m sorry.

How did we unlearn learning?

It is often repeated that children learn more quickly than adults.  Is this because they are inherently more able to store information or is it because we have unlearned how to learn?  Children and adults approach learning in different ways.  Children give the subject of their learning intense focus and experiment and play with whatever they are trying to learn.  As adults we believe that learning is something you do by being taught by others, sitting in lectures, reading books, and generally through osmosis by being close to sources of knowledge.  I have found that the quickest way for me to learn something is by doing, playing, and experimenting with what I am trying to learn.  I propose that adults can learn quickly, we have just unlearned how through being beaten over the head by the traditional learning institutions.  Next time you try to learn something new, only read enough to start experimenting and playing.  Then go back to the book or internet when you have questions.