My criteria is longer.

a) I must be interested in it,

b) I must be able to progress sufficiently starting from the time I decide to begin

c) The work needs to have a plan

d) Its better than all the alternative options.

Here is an example. I could read the book I have on databases but I’m more interested in the Linux Kernel right now. I’m at a natural stopping point in the Linux kernel stuff to yield to whatever else could be done such as database reading, yet I’m quite interested in the Linux kernel still. I’ve got a good book on C++ which I’m dying to read but I’m more focused on C right now. I have a software library in C which is quite interesting and that's in C – so this is quite appealing too. I also have a broker project written in C which needs to be updated and really have a plan defined for it. For example right now its fairly inflexible and only uses one protocol for sending messages over the network. Also I’d like to test it brokering messages from multiple OSs which I’ve not yet tested but in theory it should work right out the box because it uses my cross platform library mentioned earlier and this uses BSD sockets which inherently cross-platform. Then on top of all this I have a nice little Spring project written in Java thats doing some great stuff with D3, neo4J(hence the database book) and which needs some refactoring to get the REST interface more consistent.

Now with all this, I’ve found an interesting way to do most of this stuff most of the time without spending too much time on one specific thing – that's to bring everything into one. For example I wrote the C library because I was re-learning and re-appreciating the C language, then I wrote the broker because I liked the broker pattern and it could use the C library I wrote. I wanted to learn the C language in more detail because I wanted to use it in my Arduino and actually port the C library to it so that it made that work more easy(haven’t done that yet either). I want to lean about the Linux kernel because I want to write a device driver for a hardware device probably composed of an Arduino that can interface with the PC. One thing that is lacking in this breadth-first approach is Electronics and the Arduino. Maybe its because I’m more familiar with software than hardware that all the software related stuff takes priority in my brain-scheduler!

But what is really interesting and perhaps where the convergence between hardware and software will happen for me is the interrupt handlers in the kernel and a basic serial device to interface with. I was looking at the USB specification which was sitting on the desk of a fellow developer and I think plain old serial(RS232) is far less complicated (and perhaps flexible and feature rich) as the USB protocol is.

What I’d like to know is how to generate an interrupt from a hardware device.

I did update the string routines in my C library the other day with the exception of a few, to utilise in-memory address to data instead of copying data. Also I removed the need for the library to hold state information when the user called into it. I realise now that that was bad design but hey life goes on and the next version moves forward one commit at a time.

Oh and today is new years eve.

 

PS: according to this, getting an interrupt to fire can be as simple as telling the CPU to call a function when the signal/voltage on a pin changes. Hmm