Archive for the ‘Computer Science’ Category

Starting a new job

Monday, October 17th, 2011

For the past six years I’ve been working for a small defense contractor here in Oxford, writing software for airborne radar. I enjoyed it, and I learned a lot along the way. Unfortunately, we were primarily funded by Congressional earmarks, which have fallen out of favor as of late. To make a long story short, I was laid off four weeks ago. I harbor no ill will, because I feel like they held on as long as they could, but it still sucked, a lot.

There aren’t many high-paying software jobs here in Oxford. We briefly considered moving elsewhere, but ultimately decided to stay in Oxford, at least for now. Most of you will recall that Cassie does not work outside the home, so it was a little scary until I got an actual job offer.

Luckily, there was a timely opening at the University, and I’ll start today as a High Performance Computing Specialist for the Mississippi Center for Supercomputing Research (MCSR). We have two SGI Altix supercomputers and a large Linux cluster. I’ll be working with researchers from all of Mississippi’s public universities to help them utilize the supercomputers, provide training, etc. I’m looking forward to it, and it’ll be nice to be back on campus where I have several friends from previous stints as a student and as a Network Administrator for the Computer Science department (my first “real” job).

There’s also a research component to my new job, which I’m hoping will accelerate my PhD research. I haven’t been very productive in that area lately.

Hopefully I’ll find a little more time to blog and tweet as well, but no promises.

Microcontroller course

Monday, June 6th, 2011

As I mentioned in my last post, nearly six months ago, I taught an “Embedded Development” course in the Computer Science department at the University of Mississippi. It was a highly practical course, and the Arduino was our hardware platform of choice. The “brain” of the Arduino is an Atmel AVR ATmega328P microcontroller with 2kB of RAM and running at 16MHz. Instead of using the Arduino language and development environment, we used C and Eclipse.

We started out learning to blink LEDs, to calculate the value of current limiting resistors, and the difference between sinking and sourcing current. We then learned how to use the hardware timers on the AVR to time events (interrupts) and output Pulse Width Modulation signals to vary the brightness of LEDs and create simple sounds.

Four digit, seven segment display setup

Four digit, seven segment display setup

Next, we learned to use a four digit, seven segment display from Sparkfun. This is a fairly common display, and there are lots of examples of how to use it on the Internet. However, I wasn’t happy with any of them. They either ran the display at low currents (resulting in low brightness) or used standard shift registers at higher currents than they were designed for. I came up with a design that used a TPIC6C595 power shift register to control the segments and four 2N3906 transistors that switched power to each digit. I was quite proud of my design, as I’m definitely a programmer, not a hardware guy. We also learned how to convert numbers into binary coded decimal (BCD) for display on the seven segment display.

(more…)

Embedded Development Course

Sunday, December 19th, 2010

Below is the description of a course I’ll be teaching in the spring. It’s the first time I’ve been able to teach a special topics course (i.e., have complete control of the content of the course), and I’m really looking forward to it.

CSci490: Embedded Development
Instructor: Ben Pharr
M W 5:30 PM – 6:45pm
Weir 235

Embedded systems are all around us and are becoming more common by the day. Embedded systems typically perform a few dedicated functions as part of a larger system such as a vehicle, appliance, vending machine, etc. They are often resource constrained in some way, yet must respond in near real-time to events happening in the physical world. Obviously, developing for these systems can be quite different from developing in Java for a desktop application.

This class will use the Arduino hardware to explore embedded development. The Arduino is a development board powered by an Atmel AVR ATmega328 microcontroller. It runs at 16 MHz and has 2kB of SRAM and 32kB of flash.

Instead of the usual Arduino language, we will use ANSI C in order to build skills that are transferable to other embedded platforms.

Topics will include:

  • The C Programming Language
  • Data Representation
  • Computer architecture
  • General Purpose Input/Output
  • Basic electronic concepts
  • Timers
  • Pulse width modulation
  • Analog to Digital Conversion (ADC)
  • Interrupts
  • Serial communication
  • Embedded debugging and troubleshooting

Textbook:
Introduction to Embedded Systems: Using ANSI C and the Arduino Development Environment

Morgan and Claypool Publishers (July 12, 2010)
ISBN: 978-1608454983

Related links:
http://arduino.cc/en/
http://arduino.cc/en/Main/ArduinoBoardUno

Understanding Basic Electronics

Tuesday, October 19th, 2010

Several months ago I started reading Understanding Basic Electronics, 2nd Edition, released this year by the ARRL. I was just nearly finished with it when I decided I should get serious about studying for comps. Last week I picked it back up and finished it.

During my Computer Science education I’ve only had one Electrical Engineering course, ELE335, Principles of Digital Systems. There was an accompanying lab where we played with logic gates, but there was no mention of resistors, capacitors, etc.

Over the past several years, both before and since getting my amateur radio license, I’ve picked up several beginners’ books on electronics. Understanding Basic Electronics is the best I’ve read so far. Most of the material was already familiar to me, but I learned and relearned several things.

It’s a relatively short and quick read. The chapters are broken into 2-3 page lessons. It covers all the basics: Ohm’s law, DC concepts, AC concepts, capacitance, inductance, power, frequency, transformers, impedance, resonant circuits, semiconductors, diodes, transistors, and integrated circuits. There are no experiments, as such, but it gives you a good base with which to move on to other books that do have experiments, like Make: Electronics.

It’s the first in a three book series. I already have the other two, Basic Radio and Basic Antennas, and I’ll be starting on them as soon as I catch up with the reading for my classes.

PhD Comps

Tuesday, October 12th, 2010

Last week I took the comprehensive exams (“comps”) for my PhD in Computer Science. There were four of them: Theory, Programming Languages, Software Engineering, and Systems. I won’t know for certain how I did for a few weeks or so, but I feel good about all of them. I’d be shocked if I failed any of them.

For the past month or so I’ve been spending every spare moment studying for comps. I started studying a long time before that, but really didn’t get started in earnest until about a month ago. Cassie and the kids gave me a few weekends to myself so I could get a lot of studying done.

I was most concerned about the Theory and Programming Languages tests (the latter due to the Automata section), so I spent most of my time studying for those. Of course, I ended up feeling really good about those, but trying to cram the night before for Software Engineering and Systems. While I managed to stress myself out over the last two, and missed a fair amount of sleep from the cramming, I ended up doing fine on them too.

Studying for comps was an interesting exercise on its own. I learned and relearned a lot. I also convinced myself that I’m definitely in the right field. I found virtually everything I read to be fascinating.

It’s quite liberating to have comps over with. They’ve been looming for a few months now. Now I can spend time on other things…like my really tough Machine Learning course. I hope to find a little time for some ham stuff and some backpacking soon too.

I’ll finish the coursework for my PhD in the spring. I also hope to propose a topic for my dissertation in the spring. If I can stay motivated, with a little luck, I’ll defend my dissertation in spring of 2012. It’s certainly an optimistic schedule, but that’s what I’m shooting for.

Free Socket 939 MB, Processor, and Memory

Sunday, August 8th, 2010

I have an ASUS Socket 939 motherboard, AMD Athlon64 X2 dual-core processor, and two DIMMs of 1GB PC3200 RAM free for the taking. The catch is that one of them is bad. Based on past experience, I’d say the motherboard is toast and the processor and memory are just fine. That’s just a guess though.

I replaced the ensemble with a Core 2 Duo setup a few months ago when one of them went bad. Let me know via email if you want it.

Update

Thursday, August 5th, 2010

I haven’t posted anything in a while, so I thought it was time to post a quick update.

I’ll be taking two classes again this fall in the continuing pursuit of my PhD in Computer Science at Ole Miss. I’ll also be teaching CSci259/390 (C++) on Monday and Wednesday nights.

Sometime in late September or early October I’ll be taking my comprehensive exams, the first of three major milestones in the PhD process. There are four exams, covering Systems, Algorithms, Programming Languages, and Software Engineering. I’m not worried about them, but I’ll be glad when they’re over. Right now I feel guilty if I do anything other than study for “comps.”

I’ve recently finished my Small Wonder Labs SW-40+, a small Morse code radio for the 40m ham band. I’ll be posting about it soon. There are also several other ham radio and electronics projects I need to post about. Back in the spring I presented a tutorial on microcontrollers at the ACM Southeast conference.

James and I have another backpacking trip tentatively planned for September, which I’m really looking forward to. We had intended to go in the spring but got busy and never planned anything.

Of course, I need to post an update about Luke and Liam, which I will try to do soon.

Obviously, I plan on posting to my blog a little more frequently. I’ll continue to post shorter stuff over on Twitter.

Going back to school

Wednesday, July 29th, 2009

I got my Master’s degree in Computer Science in May of 2007. Luke was born about three weeks after graduation. Liam was born fourteen and a half months after that. Liam is nearly a year old now, and it’s time to go back to school and get my PhD.

I had planned on taking it easy the first semester and just taking one class. However, I was asked to teach a class, which comes with a partial tuition waiver, so I’m going to take advantage of that. I’ll be taking Dr. Rice’s Computer Audio course, ENGR596, as well as an independent study course. I’m not sure what the independent study course will be just yet, but hopefully it’ll help me decide on a topic for my dissertation.

The class I’m teaching is CSci103, which I have always described as the “this is a mouse” course. In the past I’ve always taught courses for sophomore or higher Computer Science majors with a few MIS majors thrown in (CSci223 twice and CSci323 once). They tend to take the class somewhat seriously. This time I’ll be teaching mostly freshmen, most with “non-demanding” majors. It will certainly be different.

In addition to teaching a class and taking two classes, I’ll be studying for comprehensive exams (to be taken in a year or so) as well as researching and trying to get published so I can get hired as a professor when I’m finished. It’s fair to say my hobbies and my family will be neglected to some degree.

When will I be finished? I’m going to say four years, which will have me graduating in the Spring of 2013. I could finish a little sooner (or a lot later), but I think that’s a realistic timeframe if I keep on task.

Installing and Upgrading WordPress with Subversion

Saturday, September 13th, 2008

I use WordPress to run this blog. It’s probably the most popular blogging software on the web, and for good reason. There are plugins out there for just about everything.

However, when it comes time to upgrade to a new version, I’ve always found their instructions a little lacking. I want very explicit instructions, and theirs aren’t. When it came time to do the upgrade to 2.6.1, I started looking for a better solution.

As it turns out, you can use Subversion to upgrade WordPress easily. I already use Subversion to keep track of all my personal files. Once you get it set up, all it takes to upgrade is running one Subversion command and running the upgrade script through your web browser as usual.

If you already have WordPress set up in the traditional fashion it’s a little work to get it set up “the Subversion way,” but not too bad, especially if you haven’t customized anything. It’s more than worth the trouble when it comes time to upgrade.

Of course, if you don’t want to bother with upgrades at all, you could just get an account on WordPress.com. That’s what I did for the Belmont High School Class of 1999 blog.

The Big Picture

Thursday, September 4th, 2008

I appreciate a good photograph. Three times a week, Alan Taylor, a web developer at the Boston Globe, posts a couple dozen or more good, occasionally great, photographs based on a central theme on his blog, The Big Picture.

Since I subscribed to the blog a few weeks ago, I’ve particularly enjoyed 2008 Olympics Opening Ceremony, War in South Ossetia, Beijing 2008 – It’s a wrap, Preparing to rescue Hubble, and Scenes from Iraq. Of course not every post is as awesome as those, but most are worth having a look at, and the good ones are certainly worth the wait.

I learned about The Big Picture from an equally interesting source. (Yes, I read too many blogs.) Jeffrey Friedl is an American living in Kyoto, Japan, with his wife and son. He is a computer scientist, photographer, and father, so he and I have a lot in common. He is the author of O’Reilly’s Mastering Regular Expressions. His posts on life in Japan are very interesting. If you’re interested in photography, life in Japan, or just like reading about the lives of interesting people, his blog is well worth reading.