top of page

Endeavor(+)

"We are better than we think and not quite what we want to be."

-Nikki Giovanni

This past week has been interesting. One would think that typing <p>'s and </p>'s over and over again would not make for a very fascinating work experience, but thankfully, that's only half of what I've been doing. I've learned how to document well. I've marched in city streets. I've had some fascinating discussions.

I think I'm also starting to kind of understand this coding thing. It was only recently that I started to understand how to efficiently use git besides just a way to link up with github and post my code. It's actually incredibly nice. It basically allows you to access past versions of your code if you mess up. It really takes the pressure off. Plus, now I can work anywhere, making my development of the microscope analysis application for mac and windows much easier.

It may be a little premature to give the application a snappy name, but at the same time, it's getting pretty annoying to just call it "microscope analysis application". That's so verbose! Let me know if you have any suggestions!

I’ve noticed that whenever I’m debugging a program (working out all the kinks and errors that the command line gives me), I have almost tunnel vision in that while I can focus on resolving the bug, I can’t really code with much focus on my overall software design vision, so I can end up in a sort of fugue state, coding, running, error, coding, running, error, for over two hours. This is pretty bad, because while I’m solving individual errors within the code, I’m not strengthening the software’s structural integrity as a whole. I’m stemming the flood with a couple of conveniently placed pieces of foil. In that sense, it’s only a matter of time before I get drowned.

In the interest of making my software better, I’m doing a much better job now of really thinking through design decisions. Now I’m planning. Another curious thing that I’ve realized is you can actually sort of forget what your codebase looks like once it grows to a certain size. Documenting prevents this, because you are constantly looking over most of your code to make sure your descriptions of it are still accurate. That’s all documentation is: describing your code.

Tomorrow, I’ll be working from home, since Ann Coulter will be speaking at UC Berkeley, and I’d prefer not to be assaulted. There are murmurings of large amounts of possible unrest on campus. Last time a conservative speaker was scheduled to come to UC Berkeley, there were violent protests.

On Saturday, I participated in the SF March for science, a great example of a nonviolent protest. In fact, it was about the most nonviolent protest imaginable. Mothers took their babies along in strollers to participate. As it is with scientists, there was minimal shouting, just quite a bit of sign waving and lab coats.

On Sunday, I tried to solder with my half destroyed iron and failed miserably, so I got together with a friend and we soldered it with his iron. Or more accurately, he soldered while I disassembled and reassembled the drone. We were all ready to fly! It was unbelievable! Then, the cable connecting the telemetry system, which is responsible for communicating to my base station, came apart without either of us doing anything, and that was that. Four replacement cables are on their way, because I will not let a stupid cable get in my way again. I probably will actually, I just mean to sound determined, because I am. Some genius decided that making tiny cables that are barely attached to their headers was a great idea, and called it the DF13 standard. That person was an idiot. Then some other person that designed the hardware that I partially use decided using DF13 connectors was a great idea too. Two terrible decisions. That pretty much leads to this moment on Sunday. My friend is sitting there, and the broken connector is in my hand. My friend crumples to the floor. I’m sitting there dumbly, looking at the cable. It’s staring back at me. I swear it has a smug smile across its wires. Suffice to say, there was no drone flight that day.

My friend and I like to joke that the moment that I actually do get it flying, a massive hand will rise from the earth, laughing, and crush the drone in midair. It’s been a year since I set out to build a drone. Around six of those months I was just learning about drones in general, but also about actual software implementation details that were not quite relevant at the time, like using a quaternion setup vs. a directional cosine matrix. The next six months, I started doing progressively smarter attempts at what I'm still trying now. I learned about the drone platform, but I had no idea what the actual specifications of the donated drone were since I couldn’t find a reliable data sheet. I had to search for a while until I actually found some information that was useful. But then, the information was wrong! I searched some more. Finally, I found correct information! I was ready to fly! Except I wasn’t. The flight controller and GPS were not cooperating, and so I could not successfully arm the drone since the drone was failing many different pre-arm checks. Pre-arm checks are run to make sure the flight controller is in a healthy state before pushing off the ground. After messing around with the parameters, I got it to work. Then though, the transmitter I used to control the drone was actually in the wrong channel configuration, so my controls didn’t correspond to the motors I thought they did. I sorted that out. Then the transmitter stopped working, and I had to wait for a new one. By this time, it was late November. But I knew I was definitely ready to fly this time (Spoiler alert: I wasn't). I pushed the throttle up slightly, and the drone careened over and smashed into the ground. The propellers, as they originally had been on, were in the wrong configuration. This was by far the most damaging calamity so far. The outcome of that catastrophe was to nearly take my finger off, destroy my fingernail, and smear my blood across my room’s walls and everywhere on my transmitter. You'd think that this would be enough for me. I mean, that's the equivalent of life sending an exquisitely crafted handwritten note, saying "Will, this hobby just isn't for you, son." That would be enough for practically anyone to call it quits. Well, unless......nah, never mind. No way...........unless, you're a letter burning maniac! I suppose I don't take hints (or letters for that matter) from life. I fumed for a couple of days, and then I got back to fixing everything. I ordered some new propellers, and prepared to fly again. The thing is though, I didn’t know about the bad motor, since it still appeared to run fine in tests. I replaced the ESC, but then, on my next flight, the motor started smoking. I landed the drone fine, but had to replace the motor. But then, the replacement ESC I got stopped working too. I needed to replace it. I was about to replace it, but then the three other ESC’s on the octocopter decided to die as well. At that point, it became no longer economically savvy for me to replace all four, since the cost for buying 4 ESCs was around eighty dollars. I scrapped the octocopter for parts, and built a quadcopter (4 motors). The quadcopter has been a much more successful venture, well, at least until the wires snapped for no apparent reason. But that pretty much brings you up to speed. There were a lot more minor setbacks along the way, but I've summarized the major ones for you. I'd say the ratio of my bad's to genuine terribly bad luck is around 70:30 for my drone endeavors. As they say, you live, you learn.

I think that you can either learn things the easy way (by having a great mentor or an easy source of helpful information), or the hard way (by finding things out for yourself). It took me a while to get the idea into my head that building drones isn't the same as building software. In software, you can just go "la dee dah" committing terrible transgressions all over the place, and everyone's going to sigh, and say "Really?", but not do too much else since it's not worth the effort to hound people for bugs. When building a drone, you make a mistake, and you are liable to kill someone. Like there was that one time that I started bleeding. Or there was that one time I reversed voltage source polarity and almost caught everything around me on fire. Or like when my friend shorted a battery and caused a shower of sparks to fly past my face. Or maybe like that time when I was inadvertently releasing highly toxic plastic fumes due to high soldering iron temperatures and then realized it and got a face mask. I haven't killed anyone. I haven't even killed myself in the construction process! I'm doing great! I've made too many mistakes because I trivialize them when I code, but those mistakes aren't these mistakes. Now that I've realized this, I'm much more prepared to make everything work. It's a simple realization but it's one I couldn't quite get into my head.

Life has jammed that realization so firmly into my brain now that there's no getting it out. I'm taking that lesson to my grave. Fail fast, and fail often, but fail smart, and when it really matters, don't fail. For now, I'm still hoping that the time that I see the drone fly will be soon. 7 minutes of flight over an entire year is not an encouraging statistic, and there are quite a few people that love to laugh in my face nowadays. I just can't quit trying to make it all work though. I may not have been smart but I've been persistent and I think I'm getting smarter by the day (the hard way, of course).

bottom of page