How to excel in Computer Science or Engineering

13 01 2012

It’s official: I’m the proud new owner of a Bachelor’s of Engineering in Computer Systems Engineering, and managed to graduate with highest honors and a GPA that makes most people hate me. After nearly 5 years of intense procrastination (er, I mean intense studying), living on a diet of Monster energy drinks and ramen, and having a sleep schedule so erratic my friends call me a voluntary insomniac,  my time in college is over for the time being. Having theoretically gained at least some wisdom and experience over the last five years, I thought I would offer it to the Internet for future generations.

Learn to program before college

I learned HTML/CSS when I was 12, was using Linux by 15, and knew enough about security to hack into my school’s webserver by 16. I took up programming at maybe 17 by teaching myself Python from online tutorials (which I’ve entirely forgotten the syntax of, but many things are universal in programming languages). Am I an unusual ubergeek? Well, yes and no. The fact is that if you enter CSE101 not knowing how to program, you’ll probably be in the minority. Does this mean that you’re behind and won’t be able to do well in CS? Certainly not. But this does mean you don’t know,

  • If you’re going to like programming
  • If you’re going to do well at programming
  • If you’ll enjoy sitting at computers for hours learning stuff or go stark raving mad
  • If you’ll be frustrated  not knowing what you’re doing or just accept it and keep searching for the answers
  • If you’ve accepted the fact that you’re going to be a geek in every sense of the word (or at the very least, be surrounded by them)
  • If you can handle spending 30 minutes writing a program and 3 hours debugging it
How do you choose to devote 4 years to life into something if you haven’t tried it? The answer is that it’s a lot easier to do if you get your feet in the water early. Another advantage of learning to program before you start is that your first CS classes will be a breeze. You’ll probably be disappointed that they’re so slow and boring, but don’t be. Spend your first couple of semesters,
  • Surviving Calculus (I-III), Linear Algebra, and any other hard classes your college requires
  • Using CS classes as GPA boosters (a pile of A+’s early on is how I graduated with highest honors even though my grades slipped a bit in the end)
  • Getting rid of pesky required humanities on things like ancient mesoamerican rubber ball making cultures (true story)

Don’t be too hard on yourself as a new programmer

When I started programming, I thought I was a horrible programmer, and it scared me. Now, I do have one of those personalities that make job interview terrible because I’m always self deprecating when it comes to what I’ve done, but the truth is you’re going to start out being a terrible programmer. Take a look at something I wrote on this blog nearly 4 years ago.

Do I have the art of programming? Nothing I’ve written is very impressive, half finished and unmaintained projects clutter my hard drives. The most complicated thing I wrote was a nearly 3,000 line IRC bot, with a plethora of useless features. The architecture got so bad that I couldn’t even figure out how to fix it to make it connect to esper’s servers correctly after they changed to a new version.The !google feature also mysteriously broke. I admit, when I started writing it I knew a lot less than I did now, and I wouldn’t make a lot of the same mistakes (variables all over the global namespace, lack of comments, horribly inefficient algorithms that make it take up over 100MB of RAM when the log files are loaded) if I rewrote it from scratch, which is the only way to really salvage the project, and too much work to bother with. Meh.

On the other hand, I can’t conceive of any other career that I’d like to peruse with even half as much enthusiasm, so even if my fate is that of a mediocre code monkey, it seems better than the other possibilities.

Did I turn into a mediocre code monkey? No, I’d like to think I turned into a decent software developer. I’m still a newb in many fields and feel behind sometimes (mainly in all the new web development technology), but in general programming areas I feel rather confident. It just took a lot of practice, and frankly a lot of mistakes. That little IRC bot I wrote taught me a lot about big projects. I don’t use tons of global variables anymore, I try not to write programs that take 100MB of RAM. I once learned the hard way by taking down a big company’s production database for a night that making sure your database connection code handles disconnects properly is really important.You’re going to start out a terrible programmer; see above point about getting a head start before college.

Part of the problem that made me question my computer science talent was the stress on the science part of some of my classes. Part of me back then thought that algorithm development was really important, and without it you aren’t a good programmer, since half of what you did in classes was go out and implement merge sort or Red Black Trees while sitting around studying linear algebra and calculus. The truth is you can still be a good software developer even if tracing through dijkstra’s algorithm gives you a headache. In the real world you’re far more likely to use a library implementation of an algorithm than code it from scratch, and high level abstract understanding is far more important than detailed understanding of the implementation or the ability to come up with such an algorithm on your own.

Learning the IT stuff

Now that you’re hopefully convinced you should be getting a head start on CS stuff, how do you do it? Having a solid foundation of computer skills is essential, and something they won’t teach you in college. Go get yourself an old computer from a swapmeet or online and install Linux. Never seen hard drive jumpers or power supply connectors before? Crack that baby open and see what’s inside. Then, install Linux. The reason is not because Linux is better than Windows, it’s because Linux is more transparent and actually more difficult to use. It’ll fail to install correctly, and in the process you might figure out what a bootloader is. You’ll pick up some terms about make tools and shared libraries when you install solitaire. You’ll pick up new concepts like dependency hell and kernel panic. It will be a love hate relationship and the process may lead to shark attacks.

You could call Linux a sort of bootcamp for computer people. When I started, everything that could go wrong went wrong with it. I once by accident destroyed my windows partition. I found that my video drivers were buggy as hell, my wifi cards needed custom firmware loaded into them, and that trying to get sound to work in Linux is less fun than herding mutant cat mules. I once managed to destroy X because it was a package dependency for a Firefox upgrade and the AMD64 bit version was unstable (or incompatible with something, I never found out for sure since that was the day I gave up using Gentoo). I once spent 3 hours trying to track down and manually compile all of the dependencies for a side scrolling open source game that only provided 30 minutes of entertainment actually playing. My SSH log in was always being harassed by strange Chinese IP addresses and the server was screwed up once from SQL injections on something I wrote.

The point is: when things are working fine in Windows all day, you don’t learn anything. Linux is actually becoming easier to use than ever with distributions like Ubuntu: don’t be afraid to jump into the more “advanced” distributions. I suggest Slackware as a good middle ground between working out of the box and being a good learning experience, then pick up something like Gentoo. Remember: pain is weakness leaving the body. Sometimes the old people complaining you kids have it too easy are actually right. When I was a kid, I remember having to wander the filesystem in a MSDOS command prompt… now get off my lawn (I’m a college graduate, I have the right to say that now, right?)!

Back to the details. What do you do with Linux now that it’s working?

  • Learn to use the command line (+1 for learning shell scripting)
  • Learn Vim (+1 if you become a vim junky and install vim shortcut emulation plugins in your browser)
  • Get SSH working
  • Get a webserver working (http, ftp)
  • Did you pick up HTML yet? Go host your own webpage
  • Get Samba working
  • Play with cron jobs for doing backups and maintenance
  • Try different GUIs (KDE, Gnome, xfce, Fluxbox)
  • Try to recompile your kernel, explore start up scripts, and make it boot as fast as possible
  • Look up guides on how to keep it secure and maybe play with some offensive security (hacking) network tools on your own network

Learning the programming stuff

Alright, you’ve either gotten the basics of computer stuff down or skipped it since you want to get straight to programming that video game idea you’ve been dreaming about. Either way I would recommend that your first programming language is something high level with a decent GUI library built in. Personally I went with Python/Tk followed by TCL/Tk. Other options could be Ruby or PHP if you can find decent tutorials on the internet for them. The reason for not jumping straight into C/C++/Java is that a scripting language will probably let you get to fun stuff sooner. Using Tk you can throw together a little tick tack toe game in about 5 minutes once you know what you’re doing. The second advantage is that this will reduce you’re boredom in beginning CS classes where they will probably start with either Java or C++. The third advantage is that a scripting language is always useful as a go to language for a quick script to do something like text processing. Learn regular expressions, they’re useful even for everyday find/replace tasks on a decent text editor.

How to learn to program

Learning to program is a bit like learning a musical instrument. People can tell you how to do it 500 times and it won’t make you any better. You simply become a better programmer by programming. When you’re learning to use Linux, it generally screws up and you figure out how to fix it. When you move on to programming, you screw up and slowly learn from your mistakes until you see what to do and what not to. Some things might accelerate the learning path: seeing really good code, seeing really bad code, finding the built in library that does the exact thing you’ve spent 3 days programming from scratch, sitting through lectures on software design and algorithms. Overall the best way to learn to program IS to program. I absolutely can not stand reading tutorials on the syntax of languages. Learn the basics of a language and then move on to actually trying to program something. What you ask? What do people draw when they learn to paint? What do people play when they learn music? What kind of building does an architect practice design on? There’s no correct answer; be creative. If you can’t think of anything useful to make, you can always resort to classic games (tic tack toe, checkers, chess, blackack, rubik’s cube, tower defense game, etc etc). The point being it’s easier to study pages of dull documentation when you’re using that to work toward a working program rather than just trying to memorize stuff. Your program might have been programmed a hundred times before, but that won’t make it any less of an experience writing, and you could learn from other people’s implementations.

Keeping the passion and motivation

Everyone has highs and lows when it comes to interests in things. If you’ve been reading from the beginning of this you probably think that I sit around every night writing MMORPGs and hacking together Linux scripts that make my Linux box take input by voice command. The truth is that  my work ethic can best be summarized as spurts of obsessive genius followed by long stretches of laziness, and the vast majority of my nights are filled catching up on all the TV I somehow missed growing up (seen Buffy the Vampire Slayer? If not, go, watch, now). This occurs on both a daily and long term basis, and I don’t believe I’m alone in it. Something I saw in a post by Joel Spolsky resonated with me,

Sometimes I just can’t get anything done.

Sure, I come into the office, putter around, check my email every ten seconds, read the web, even do a few brainless tasks like paying the American Express bill. But getting back into the flow of writing code just doesn’t happen. These bouts of unproductiveness usually last for a day or two. But there have been times in my career as a developer when I went for weeks at a time without being able to get anything done. As they say, I’m not in flow. I’m not in the zone. I’m not anywhere.

For me, just getting started is the only hard thing. An object at rest tends to remain at rest. There’s something incredible heavy in my brain that is extremely hard to get up to speed, but once it’s rolling at full speed, it takes no effort to keep it going.

This is the same with me. Once you get in the middle of a programming project it isn’t a chore, it’s a rush, a feeling of zen that most people rarely find during their day job. However, finding the motivation to get started, especially without school or work deadlines pushing you can be the last thing you feel like doing. I don’t have any solution to this other than: think of something to program and force yourself to start. Sure, it might end up being a false start, I once tried to force myself into the mood by programming an Android time tracking application for people with type A personalities (or just plain OCD, doubt I would ever actually be able to consistently use such and application). It ended in nothing but a failed attempt to find the Ballmer Peak and a slightly more advanced version of the classic Hello World program to see if my SDK was set up.

You might find motivation in odd places too. Why did I take up exploring network security? Anger at someone who told me their page was secure after I said it was outdated and full of holes. I once programmed a puzzle solving game automation program to impress a girl (she was impressed, but in hindsight asking her out would have been a far more effective move). The IRC bot I wrote was partly inspired by another guy writing a bot and battling mine with massive kick/ban/flood wars until the IRC network banned both our IP addresses.  Good times. What you should take away from this is that programming game playing algorithms is not a good way to attract a girl.

If you manage to make it through college as a CS major without having at least one existential crisis, I’ll be amazed. At some point you’ll probably be sitting gloomily in front of your computer realizing that the last x years of your life have been focused around the perusal of degree which will enable you to spend 10x that number of years sitting in front of computers pressing buttons and making the patterns on the screen change. In fact, this was the hardest thing about college for me. It wasn’t the work, I could do the work easily if I applied myself. It was just trying to not fall into apathy, or worse, pure hate for school (keep reading and I’ll got to this).

How did I survive it without becoming a deranged alcoholic? It’s surprising how many software developers and IT people you can find in hole in the wall bars; you should be concerned I know this. There is no easy answer to this. My only advice is to find something to do, even if it isn’t programming. The worse period of my college experience was about 6-12 months ago when I simply had no motivation to touch any CS stuff outside of work and school. The classes I had were both boring and tedium filled, the capstone project I was looking forward to ended up being a huge wast of time, and I’d been both in school and at my internship long enough that absolutely nothing new or exciting was happening in my life. I managed to narrowly avoid failing Statistics for Engineers (pulled a C out of it from 2 days of cramming for the final). The only thing that pulled me out of it was the reality that this is my last semester and I really need to start doing things like planning for a career and not failing my last upper division humanity.

Thoughts on bad professors

An unfortunate fact of my college experience is that I would say the bad professors outnumbered the good professors by probably 2 to 1. For every lecture I went to, I had 2 others with a professor I found mediocre at best.  Is this conclusion because my expectations for professors are too high? Maybe: what makes a good professor?

  • Knowledge of the subject matter above and beyond the textbooks
  • Can be understood (doesn’t skip too many steps, can speak English, can explain things articulately, can write legibly)
  • Entertaining personality/ability to hold people’s attention (throwing in a joke or story instead of 75 minutes of straight monotone slide reading)
  • Fair grading scheme and tests
Once you get to upper division classes, you might be able to start picking classes from professors you know are good. I’d definitely recommend this, nothing is worse than being interested and excited by a topic and then losing all interest because you hate the class so much.

Graduating on time

College advisers always push graduating on time. I went the route of attempting a double major (in math), giving that up, and ended up being behind 1/2 to 1 year depending on how you count things. I don’t regret it at all, if you’re liking college, don’t be afraid to kill some time with interesting non-required classes. It’s easy to get internships when you’re in college that look good on a resume, and in the big scheme of things, who cares if you’re a year older when you enter the work force?

Exception: if you’re hating every moment of college, try and get out quick and not procrastinate. I put off a few classes I didn’t want to take and I would have done better on them earlier on before I lost a lot of my motivation. For those in pain, the quick bandage approach is far better than the slow procrastinating but loathing perma-college student that takes 8 years to finish their degree (I’ve seen it). But hey, 8 years if you’re having the time of your life might be okay, just depends on your situation.

Final thoughts and a link

Somewhere in the middle of college I stumbled across Joel Spolsky’s blog, Joel on Software; I highly recommend reading through his old posts. One of his posts offers some advice for computer science majors.  Go read it yourself, but here are his main points.

  • Learn how to write before graduating.
  • Learn C before graduating.
  • Learn microeconomics before graduating.
  • Don’t blow off non-CS classes just because they’re boring.
  • Take programming-intensive courses.
  • Stop worrying about all the jobs going to India.
  • No matter what you do, get a good summer internship.
A good point to end on: companies like having interns. Programming interviews are hard to properly conduct. Internships let companies have a nice trial period where they get to see what you’re capable of, and you get experience, resume fodder, and money. One problem I had was not knowing when I had enough skills to actually get an internship. Simple answer if you’re an ASU student, CSE310 (Data Structures and Algorithms) and CSE360 (Sofware Engineering/Design) will give you what you need to at least have a good change at surviving a technical interview. That doesn’t mean you couldn’t pick of the stuff you need before the classes or try to interview anyway, but in my experience interviewers focus on algorithmn (reverse a linked list, common algorithm time complexity, space complexity, hash tables, sorting) and OOP design (think through a first pass architecture of a program that does blah and scribble it on a white board) questions a lot, especially for college students that don’t really have much past experience to point to in order to show their skills.

Getting Back On HF

8 07 2011

I’m an extra class amateur radio operator, but haven’t touched an HF radio other than Field Day in several years. As ham radio always provides a plethora of little projects to work on, I decided to try and round up enough stuff to get back on the radio at my apartment by the end of the summer.

It’s turning out to be a decent amount of work (and I’ve barely started…). Since moving out from my parent’s place, my tool box and pile of junk parts shrunk to almost nothing, either since I left stuff behind or it was my parent’s to begin with. It’s the little things that kill you… audio cables, coax, connectors, adapters, drills, power poles… Basic plan is as follows.

Step 1: get a working HF radio going. I’ve got an Elecraft K2 that’s been collecting dust since Field Day about 5 years ago when, at around 3:00am, the receiver seemed to be experiencing deaf spots on 40 meters (or was it 20…). We swapped it out for another radio and I never got around to figuring out what happened to it. It’s possible that the front end got damaged from the other Field Day transmitter on a nearby frequency overloading it. It’s also possible the coils on the torroids just got jostled around on the trip and during setup, meaning it may just need to be retuned. There’s also a slight possibility nothing’s wrong with it at all and I just thought there was, so let it collect dust for half a decade not wanting to figure out how to fix it.

Step 1.1: build an HF white noise generator in order to test the receiver sensitivity across the band and to retune the filters. Couple of trips to Radio Shack and a few hours soldering, I managed to get this little gadget together. It sucks at high frequencies (anything above 40 meters), probably because I’m using a Zener diode with a little lower voltage than they said. I tried fiddling with the value of R1, but it didn’t seem to help enough to make it worth trying to unsolder the 1.8k I had on there.


I decided since I was going to all the effort of building it, I might as well stick it in an enclosure so it doesn’t get destroyed like most of my tiny perf board projects inevitably do if they get thrown in a box somewhere. I ran into a dead end when I was trying to figure out how to mount the PL259 connector when I don’t own a drill, a saw, or much of anything to cut through the plastic enclosure in the shape of a 9/16″ circle. Finishing it up will have to wait for a Tuesday when I can borrow some tools from someone to drill out the holes for the case.

I’m also retrieving the K2 from my parent’s house Tuesday (or sooner if I get antsy on Sunday). I’m really hoping that it’ll just work, or perhaps it just needs to have a hard reset and the filters retuned. Otherwise I’ll have to dig out some more junk and try to inject some signals that I can do signal tracing on and hopefully identify the cause of failure… that could quickly turn into putting a dead end to this plan and sticking the K2 back in a closet for another half a decade if it’s going to cost a lot to fix.

Backup plan, I’ve got a Yaesu 767gx also collecting dust. The thing is massive and I have no idea where I’d put it, the K2 is certainly easier to stick somewhere and use. Maybe I’ll drag both of them from my parent’s house to my apartment so I have a backup radio and something I can use to test the other with.

Step 2: Shopping for the odds and ends…

There’s a hamfest coming up in a little over a week, I’m hoping I can gather together all the little things I seem to be missing.

  • Coax (25 foot section, some short sections)
  • Red/Black heavy gauge wire
  • Power Pole power connectors
  • A dipole balun (or entire dipole, or other antenna I could hide near my apartment)
  • Alligator clips (always need them, never have them)
  • An SWR/Power meter
  • A decent pair of headphones (optional)
Step 3: Once I’ve got a working radio, plus all the odds and ends, I need to somehow get an antenna up. Luckily, this apartment is in a fairly decent spot for doing such a thing.
The bedroom window faces north, and happens to have a nice 8 foot block wall 15 feet behind the window (thick black line). Even better, there’s a large tree (green dot) right in front of the window, which will be great for concealing coax. The current plan is to throw either a 40 or 20 meter dipole up along the fence to at least get started again. Alternative/future plan includes trying to run an east/west dipole along the roof (no idea how I’d get up there, need a ladder), maybe a 20 meter east/west and a 40 meter in the back going north/south. I’ve got a few hundred feet of rope and copper wire, the only thing stopping me is the lack of coax and not having a balun, hopefully two things that will be remedied at the hamfest.

The Best of XKCD

16 05 2011

For anyone who doesn’t know, XKCD is the best geeky webcomic in existence. Some, however, are better than others, and with over 800 of them it’s easy for the best of the best to get lost in the crowd. Enjoy my collection of favorites.

He completely disassembled someone’s car at a Starbucks, because it was parked across two spaces. He was fired from radio shack, for building a deathray and vaporizing a customer. He got order for an office chair on Ebay, and sent an angry bobcat instead. He was thrown out of Microsoft for trying to feed a squirrel through a fax machine. His future girlfriend stole his hat, he stole a nuclear submarine from the Russians to fetch it. He is the most interesting geek in the world… HAT GUY!

72: Classhole (Hat Guy is my hero, so I include most of the good ones with him doing crazy stuff)

123: Centrifugal Force (James Bond is no match for Hat Guy)

217: e to the pi minus pi (More hat guy pranks)

322: Pix Plz (Hat Guy may break every law in the book, but he’s got his code of morality)

325: A-Minus-Minus (“Ordered office chair, got bobcat”)

374: Journal (Beginning of an awesome Hat Guy story arc)

377: Journal 2 (Dun dun DUN)

405: Journal 3 (“You made one mistake. You took my hat. I LIKE my hat.”)

432: Journal 4 (Aw, Hat Guy’s got a crush)

433: Journal 5 (“Remote mines under your car.” “Oh, those? I moved them to your garage before knocking”)

494: Secretary Part 1 (The tubes are clogged!)

495: Sectary Part 2 (“What the hell kind of apartment has a mote?” Hat Guy’s, that’s what kind.)

496: Sectary Part 3 (“You were fired from radio shack after you built a deathray and vaporized a customer?” )

497: Sectary Part 4 (Included just for the sake of including the entire arc)

498: Sectary Part 5 (“Upon review of your qualifications… we’ve decided to sentence you to death”)

506: Theft of the Magi (They need better communication in this relationship)

515: No One Must Know (Smooth)

542: Cover-Up (Think fast)

562: Parking (Hat Guy has a pet peeve for double parkers)

611: Disaster Voyeurism (Hat Guy’s definitely got a bit of a dark side)

792: Password Reuse (I’m fairly sure that’s Google’s real business plan right there)

Programming and Linux references,

138: Pointers (Terrible terrible typing of the datatypes…)

148: Sandwich (Real programmers just use Sudo su)

156: Commented (Or there’s the dual hand four finger # sign)

163: Donald Knuth (Hat guy’s code would be interesting to read)

178: Not Really Into Pokemon (If someone said that to me, I would strangle them with an Ubuntu lanyard)

196: Command Line Fu (Linux works fine! Now excuse me while I go rewrite the DHCP client so it’ll actually work on ASU’s network)

208: Regular Expressions (Regexp. Nuff said.)

224: Lisp (I prefer TCL hacks, but yeah)

234: Escape Artist (Yep, that’s me when programming)

287: NP-Complete (I once had a friend say, “don’t let your geekyness make you feel awkward. Use it to make other people feel awkward instead.”)

292: GOTO (Kernel programmers must always be prepared for the raptors. See 87)

303: Compiling (It sadly doesn’t work for scripting languages)

323: Ballmer Peak (It’s very delicate to obtain…)

327: Exploits of a Mom (Always be weary of SQL injection)

349: Success (True story, totally happened when I tried to dual boot FreeBSD)

378: Real Programmers (Real programmers browse the web with Vi)

456: Cautionary (This happened to me when I was 16. I relapse every few years.)

519: 11th Grade (In my case, it was TCL)

554: Not Enough Work

664: Academia vs Business (the hover over text is awesome)

Random Categories,

55: Useless (So true…)

69: Pillow Talk (Neither is optimizing cube crash playing algorithms)

87: Velociraptors (Always be prepared! For velociraptor attacks.)

135: Substitute (Now this is my kind of word problem)

165: Turn Signals (Best. Pickup line. EVER!)

203: Hallucinations (I know, right?)

206: Reno Rhymes (Long live the browncoats!)

227: Color Codes (I think when people ask my what time it is, I’m going to start answering in resistor color codes)

228: Resonance (Office life)

243: Appropriate Term (Or pencil eraser references)

249: Chess Photo (Awesome because people have been doing this ever since the comic)

275: Thoughts (Mental filter fail)

281: Online Package Tracking (It makes you stark raving mad I tell you!)

309: Shopping Teams

320: 28-Hour Day (One of these days I’m going to try this for a full week)

335: Mattress (Engineering at it’s finest)

340: Fight (Burn! Also, this is why you back up your MBR)

341: 1337 Part 1 (You don’t mess with Mrs. Roberts)

Also, parts (2, 3, 4, and 5). (“Mom, I’m hungry!” “Shush I’m coding, you ate yesterday”)

413: New Pet (“I think my mothering instinct took a wrong turn somewhere…)

466: Moving  (It took over a week to get internet in my apartment! Luckily I cracked my neighbor’s WEP keys in a day)

476: One Sided (Been there, done that)

477: Typewriter

525: I Know You’re Listening (Just because you’re paranoid, doesn’t mean they aren’t listening)

530: I’m An Idiot (I love this one!)

531: Contingency Plan

557: Students (I’ve had this dream so many times…)

576: Packages (TODO: Write this script)

606: Cutting Edge (I did this with Half Life 2…)

612: Estimation (aah the days of Windows 95-2K..)

627: Tech Support Cheat Sheet (Being a CS major means family members expect you to know everything about computers, physics, and the latest political news)

643: Ohm (V=IR)

699: Trimester

705: Devotion to Duty

722: Computer Problems (The life of computer programmers)

763: Workaround (Oh so true…)

806: Tech Support (I at least have that daydream)

864: Flying Cars

Reminiscing on the semester

12 05 2010

The last day of finals has come and gone, and begun has the impatient F5 tapping on ASU’s student page waiting to see the grades. Not that I’m overly worried, despite quite low test averages in classes and several of my finals not going as well as I had hoped, I’m fairly confident that I pulled off all A’s and B’s. Overall this was definitely a good semester. I met a lot of people, learned a lot of useful things. Though it certainly did have some downs, Computer Networks and Distributed Software Development were both exercises in half comatose clock watching combined with frantic last minute cramming and cheat sheet creation before tests.

Computer Networks (CSE434) was a required class, therefore a necessary evil which is now done with. I had high hopes for that class in the beginning of the semester, as I was often looking into networks information on my own beforehand. Sadly, the class material was a mix of things I already knew, obscure details about protocols that I don’t really care about, and random math that the professor seemed to cram into everything he could. TCP is great and all, but when you spend entire lectures sitting around talking about congestion window sizes and estimations of round trip times, you end up feeling that unless you’re writing your own network stack you really don’t need to memorize all the details as long as you understand the concepts. It didn’t help that the professor was rather boring to listen to.

Distributed Software Development (CSE445) was thrown into my schedule almost purely because it fit nicely after one of my other classes. I really had no idea what to expect, and was hoping for information on things like programming for parallel processors and systems. The class ended up being a very, VERY, high level class on SOA, ASP.NET, WCF, and XML. The explanations were so high level that I really didn’t understand a lot of it. I can now sit here and spout out jargon like, “oh yeah, RESTFUL services are totally better than SOAP or building on top of WCF in terms of QOS,” but that doesn’t mean I can actually program any of it. Really the only thing I took away from this class was learning C# and ASP.NET, and the realization that I find web programming horribly horribly boring and am glad I decided to major in CSE instead of CS. XML is a horribly verbose and bad way to store large amounts of data, SOAP is a protocol on top of a protocol because SOC people are too lazy to write their own protocols and seem to think the OSI model should be 9 or 10 layers instead of 7, and don’t even get me started on the inherent limitations of cloud and service oriented computing (yay quad core 3GHZ processor… sitting idle while all my data goes back and forth over a 1MB/s link)…

But despite the downs, there were definitely some ups. Embedded Microprocessor Systems (CSE325) ended up probably being my favorite class. The lectures weren’t that interesting, but the projects consisted of programming low level C to run on a Coldfire MC5211 demo board. The first real project was making some RGB LEDs blink a sequence of colors by driving the color intensities with PWMs. The next project was an extension of that, adding the ability to set the sequences by commands via a computer serial port and a UART driver we wrote. After that we hooked up an SD card and talked to it via SPI in order to load/store our color sequences, also via UART commands. Finally we hooked up a Wii Nunchuck and read the joystick, button, and accelerometer information from an I2C bus and used it to change the speed and intensity of the color sequences.  I feel that I learned enough in this class that I can go back to tinkering with my AVR butterfly and get a lot further than before. Before this class microprocessor manuals were rather difficult to read or understand, but now I can go through one and go, oh yeah, it says you toggle that bit and that other bit and stick some pull up resistors on this bus line and I’ll be good. I’ve definitely got a couple little side projects I’m planning to do this summer if I have the time involving some more microprocessor stuff.

Another CSE class I took, Design and Synthesis of Digital Hardware (CSE320), I walk away with mixed feelings of. The main problem with this class, one which ended up ruining it for a lot of people, was a schism between what the professor taught and what the lectures and assignments were on. The first half of the class was basically Verilog, working our way up through the basic syntax, to blocking and non-blocking assignments with time delays, to a standard way to write up FSMs. All of the assignments were projects involving Verilog, one being a dice game using an FPGA, some buttons, and an LED display, another being a full processor design. The second part of the class we got into some more interesting things like some clever ways to do hardware arithmetic (carry select adders, carry bypass adders, carry look ahead adders, carry save multipliers, Wallace tree multipliers), and some information on Flip Flop design, asynchronous circuits, and circuit timing. The tests consisted of very little Verilog, and questions such as, “design using just an unsigned adder and some gates, a sequential hardware circuit that computes a GCD of two numbers.” This involved thinking up a datapath, followed by huge amount of CSE120 type busy work (state tables, kmaps), and ending with some questions on timing. Such a question involved very little that we learned in CSE320, mostly being a review question from CSE120 and combined with some sort of digital design cleverness that you were supposed to think up in 10 minutes. The professor also showed no concern at test averages of 50%.

Last but not least is Physics II. It was certainly more interesting than Physics I, I’ve been a ham radio operator for years and have always wondered about things like Impedance and LC circuits. Now I finally understand things like how capacitors, inductors, transformers, etc work. I’m also one step closer to my plan of someday building a large Tesla coil! Plus, I can be a total geek and say, “I understand Maxwell’s Equations!”. I wonder I can get them on a T-shirt…  ::google:: hey look I can!

And so another semester comes to an end. I also attempted to socialize a bit more and ended up meeting a lot of people in the process, getting to know some of them a bit better. In the off chance any of you are reading this; Brianna, Josh, Beatris, Brenton, Shawn, Aaron, Allen, and any others I spent time with either killing time between classes or sitting in the hardware lab cursing at small microcontrollers with, I hope you see you all again next semester, or perhaps even during the summer.

And now for summer! Without my education to get in the way of my learning, the side projects and possibilities are endless. Plus I’ve got lots of scifi reading to catch up on.

Instructor Evaluation Spam

9 05 2010

A few years back ASU moved their instructor evaluation forms for all the CSE classes online. They’re quite persistent about you filling them out at it seems… I kept archiving the messages till one day I searched for something that pulled them all up.

Jacob’s Ladder

7 05 2010

I wandered across a 15kv neon sign transformer when I was cleaning my room that I somehow lost. Yes, I somehow misplaced it years ago, despite it being rather large and heavy… things vanish in my room? Anyway, I wired on a plug off an old fan and some coat hangers and made a nice little Jacob’s Ladder. Video here, though not very good quality,

MasteringPhysics Error Fail

21 04 2010

What the heck is a nit? Is it like a null? or a nat? Thank you masteringPhysics… your feedback is so helpful (nit ended up being a theta unit vector).

EE101 Hummerbot Videos

16 12 2009

Finally got around to posting some old videos of the robot I made back in EE101 a year ago.

The hummerbot (my team’s robot) on the ramp,

The hummerbot on the can course,

One of our competitor robots (slow and steady wins the race?),

A blooper of a not so competitve robot,

Aah good times. When we walked into the lab and saw the other robots, we said, “Well… we’re either going to get an A because our robot is the most awesome thing here, or we’re going to fail since we hacked a microcontroller on an RC hummer instead of building ours from scratch and duct tape.” We ended up getting an A.

Spring Schedule

5 11 2009

At the moment, I’ve decided rather than double major I’m most likely just going to go for a CSE major and take whatever classes look interesting to fill spare credit hours. I also decided after multiple semesters of 3 math classes each, I’m entirely sick of math and will put off the stats class I need for later and focus on CSE stuff this semester. With Algorithms and Software  Engineering out of the way I’ve got plenty of options, so I just put stuff together till the schedule fit, and ended up with,

CSE320: Design/Synthesis of Digital Hardware

CSE325: Embedded Microprocessor Systems

CSE434: Computer Networks

CSE445: Distributed Software Development

PHY131: University Physics II

Certainly more interesting than previous semesters. Time to actually do computer related stuff, woot.

DRM Presentation

3 11 2009

A slightly hurried presentation on DRM I had to do for a class, enjoy.

Yes I know it sounds like I’m inside some sort of underwater bubble… Netbook speakers and microphones both leave much to be desired.