May 09


How did Gravity get so many awards?  I didn’t think that it was a very good movie.


I mean, sure it was nicely made.  It had good effects.  But it was an hour and a half of Sandra Bullock breathing heavily and being incompetent.  I just don’t see it.  To some extent, a lot of people would freak out; on the other hand, you’re supposed to be a professional.

May 02

Odd Code

I came across this odd piece of code today:

data[4] = (char)((1<<7) + (1<<5));

Can you figure out what it’s doing?  It took me a while as well.

It’s doing a bitwise-OR of the data.  But this ONLY works because of how the bits are shifted.  In this particular case, it does a bitwise-OR because no bits overflow.  For example, in base-10, if we have two numbers that we are adding together, and one of the numbers is 0, we can essentially just ignore it and put the two numbers together(in this example, the 1s place and 10s place only have one number each in them, so you can basically just combine them):

+ 20

You can do the same thing with binary numbers:

+ 01

Note that because there is no overflow in any place, this will have the same result if you do an add or a bitwise-OR together.  Clearly, if there are two bits in the same position in both numbers and you add them together, that will give you a different answer than if you or them together.

Apr 13

GNOME 3 Hate

Can anybody tell me why people are hating on GNOME 3 so much?  I can’t seem to quite figure it out.

The best that I can come up with is “Because it’s different.”  My Jack O’Neill response: “And? But? So? Therefore?”

I’ve been using GNOME 3 on Debian 7 for the past few months now, and I don’t see where all the hate is coming from.  I did a few things to tweak GNOME, but nothing drastic.  Sure, it may be a little annoying to not have a taskbar, but there are a bunch of extensions that give you a taskbar back if you want it.  Whenever you get a new program, often times you have to customize it to the way that you want it.  Everybody that’s complaining seems to be either a) hating change and/or b) unwilling to spend the time to customize things to how they want them.

When you get a new car, does it automatically match up with what your old car was like?  No, of course not.  When things are redesigned, there are going to be changes.  Some of them are bad.  Some of them are good.  Sometimes, it would help to read the manual.  Because then you might understand what is there and how to use it.  Because just opening something up, going “this is complicated and stupid, I’m going back to what I was using before” is not very productive to anyone.  Often I find that when things are changed, they do seem complicated and stupid.  But once I give it a chance, I can then better evaluate what is wrong/what is working, and how I can tweak the experience to better fit my working methods.

Mar 25

How to compile a SINGLE kernel module on Ubuntu


Today, I had to compile a custom kernel driver for Ubuntu, and it took me quite a while to do. There are a lot of guides out there, but many of them don’t seem to show the right way, or they do it one very specific way.  Fortunately, thanks to this person, I’ve figured out an easy way to do this which doesn’t involve re-compiling the entire kernel.

  1. Install the dependencies you need to build(build-essential will be pulled in automatically on Ubuntu, you may need to specify it if you’re using Debian): sudo apt-get install dpkg-source
  2. Install whatever kernel you want to use.  If you’re running the kernel you want to use, skip this step.  For example, on Ubuntu 12.04, you can install an image as such: sudo apt-get install linux-image-3.5.0-47-generic
  3. Install your kernel headers if you have not done so: sudo apt-get install linux-headers-`uname -r`
  4. Get the source of the kernel.  This is going to be quite large.  Also, you don’t have to do this as sudo.  apt-get source linux-image-`uname -r`
  5. Go to the directory that this source is in; for default Ubuntu installations, this will be: cd ./linux-3.2.0
  6. Prepare the workspace: make oldconfig && make prepare
  7. Copy the Module.symvers file from your currently running kernel into the build directory.  This is VERY IMPORTANT, as otherwise you will be unable to properly build and install the module.  This may lead to errors such as “no symbol table for module_layout” in dmesg when you attempt to load the module.  cp /usr/src/linux-headers-`uname -r`/Module.symvers .
  8. Edit whatever module you want.  In this example, I’m going to edit the ftdi_sio driver so that whenever the driver loads it will print out an awesome message.  In the ftdi_init function, I simply added a line to print when the module is loaded: printk( “RM5248 IS AWESOME” );
  9. Make the module.  Since we don’t want to rebuild the entire kernel, we just have to specify which driver to build.  Do it as such: make M=drivers/serial/usb/
    Using M=<directory> here is important; it makes sure that your Module.symvers won’t be overwritten
  10. Insert the module into the kernel to test it out: sudo insmod drivers/usb/serial/ftdi_sio.ko
    If you get an error “Invalid module format” you’ve done something wrong, probably with the Module.symvers file.  On my system, this fails the first time with “Unkown symbol in module” – you should be able to fix this by doing: sudo depmod -a
  11. Once you’re happy with your kernel module, put it into its permanent location: sudo cp drivers/usb/serial/ftdi_sio.ko /lib/modules/`uname -r`/kernel/drivers/usb/serial/ftdi_sio.ko
Mar 17

The Best Action Movie Ever

I just re-watched Transporter 2, and I came up with the best idea ever for an action movie.  Well, technically I came up with it a few days or weeks ago, but now seems like a good time to post.

What if we took Vin Diesel and Jason Statham and put them in a movie together?  It’d be two hours of beating other people up.

After all, most of their movies seem to follow the same basic plot.  Guy goes on a mission/people are coming to get him.  He beats them up.  End of story.  I’m looking at you, Riddick and Transporter.

If we want to throw in more bald people in there, throw Bruce Willis in as well.  That would be a great trio right there.

Of course, I have a feeling that the movie would have no plot.  But then again, you have three guys beating up other guys, so what plot needs to be there? 😛

(also, relevant XKCD)
Feb 27

What we dream

So I had a funny dream last night.

For some reason, I was thinking of the song Tubthumping by Chumawamba(a.k.a. I get Knocked Down).  This morning, shortly I woke up, I had a dream about part of the song.  Only some of the lyrics were replaced.  The best way to describe it is when the woman sings “Pissing the night away / pissing the night away” I replaced the lyrics with “I believe in the darkness / I believe in the light”.  Only a little happier.  And it was also sung by a woman with long pink hair in WWII-era uniform.  She was in the bar from Band of Brothers next to Carwood Lipton.

This brings up a good question: what do we dream?  Do we have full lifetimes in our dreams?  There is one person that I can remember(though sadly I can’t remember who at this point) who had a years-long dream and was in the middle of writing it down when he was interrupted.  Can we all have dreams like this?  It reminds me of the Batman Beyond episode where people were addicted to a virtual reality simulation.

Anyway, that’s the random thought of the day.

Jan 18

CGI in Movies

Last night, I went to see The Hobbit: The Desolation of Smaug, and it got me thinking about the CGI that was used.  Not just in The Hobbit, but in the previews as well.  There was a preview for The Amazing Spiderman 2, and almost the entire trailer was CGI clips.  Now don’t get me wrong, CGI can be used to do some great shots.  However, the problem as I see it is that it can be greatly over-used.

On some movies, this can be an intentional choice.  Such as in Sky Captain and the World of Tomorrow, where pretty much the entire movie was CGI – this works in my opinion.  However, when you need to mix CGI and live-action seamlessly, there can be a tendency more to be lazy with the live-action.  Before CGI, miniatures had to be made for everything, and miniatures almost always look better than CGI.  Granted, these shots probably used CGI to cut two shots together, but in my mind this is an acceptable use of CGI.  Creating an entire scene seems lazy.

The reason that I found The Hobbit to have a lot of CGI is because most of the movie that was inside the lonely mountain was CGI.  Everything just seemed too perfect.  The gold coins seemed all flat, Smaug was sitting on  a ridiculously large pile of gold, among other things.  I will paraphrase The Hobbit book here, from memory:

A constant stream of smoke came out of the gate.

I never got this feeling from the movie; everything still seemed as though the dwarves had left the lonely mountain and nothing had really changed.

To conclude, I think that this video shows what I’m talking about well; there are CGI elements, but it’s used more to tie two real shots together.  Because of this, it really shows better what is going on, and everything seems more realistic.  One of the problems with CGI as I see it is that everything seems too perfect; this is partly because of how the light is reflecting off of objects.  Most of the time, everything seems too bright.  The rest of the time, it generally feels off because the laws of physics seem to be broken; miniatures still have to follow the laws of physics.

Thoughts on the FSF


I think this really points out my thoughts on the FSF the best.  Not that the FSF is bad in any way, or it doesn’t do useful stuff, but they seem to be living in the past.  I guess perhaps the point here is that if you don’t know what’s out there, and how things are used, it’s impossible to make things better.  It’s like creating software for a problem that you don’t understand, or writing a book.  You must first understand what the rules are, how people use them, and then you can create a better solution.

Nov 07

Thoughts on systemd

So the other day, I had to figure out if udev is still supported without using systemd, since the source trees have been merged, and we’re using Ubuntu at work which doesn’t use systemd. (answer: yes)  This research brought me to this systemd comparison page, detailing the differences between sytemd, Upstart, and SysV.  Not knowing much about init systems(besides Upstart and a little bit of SysV), systemd seems to have a lot of features in it – but as I’m reading these features, I’m wondering: should an init system do all of these things?

There seem to be a lot of things which aren’t particularly useful.  But perhaps they are(as I said, I’m not an expert on init systems).  They seem to be creating a particularly complicated system, and it seems to me that many of the features that they espouse could just as easily be handled by a separate program.  Of course, having a separate program does have its downsides, since it can make the startup logic more obtuse.

Also, I really like how in the ‘Miscellaneous’ table there’s a row for the SCM that is used.  I’m thinking “Who the hell cares?”.

Nov 01

Monitor System DBus

I’m currently writing a program which needs to listen to signals on the system DBus, and I needed a way to monitor the system bus.  I followed the directions here, but I came across a slight problem with that.  It turns out that the solution posted only allows you to listen for things that root sends out.  When I ran my program as an unprivileged user, I didn’t see any output in dbus-monitor, however I would see output if I ran the same program as root.  From what I can tell, the configuration posted will only allow you to see what root is sending on the bus, given that user=”root”.

Fortunately, there’s a simple fix for this:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE busconfig PUBLIC
  "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"

  <policy context="default">
    <!-- Allow everything to be sent -->
    <allow send_destination="*" eavesdrop="true"/>
    <!-- Allow everything to be received -->
    <allow eavesdrop="true"/>

Simply change the policy user to a policy context, and you can now see everything that’s on the bus.

As always, make sure that you remove this config once you’re done testing, otherwise it will be easy to circumvent security mechanisms that are in place.