Image via WikipediaThis semester, I’m taking a great, gothy stab at concurrency. My boss has been suggesting that I look into it so that he can re-evaluate some of our systems at work and how well they can and how well they could make the most of multi-core computers.
I can’t read an article, a blogpost or a web page about concurrency without seeing the main reason it is now such a hot topic. Processors are becoming seriously multi-core, and I don’t just mean dual or quad core. This article was posted to Slashdot yesterday and hints at the massively concurrent processors (how ‘bout 200,000) to come.
In computer science, concurrency is a property of systems in which several computational processes are executing at the same time, and potentially interacting with each other.The study of concurrency encompasses a broad range of systems, from tightly-coupled, largely synchronous parallel computing systems, to loosely-coupled, largely asynchronous distributed systems... Because the processes in a concurrent system can interact with each other while they are executing, the number of possible execution paths in the system can be extremely large, and the resulting behavior can be very complex. (referenced from Roscoe, A. W. (1997). The Theory and Practice of Concurrency. Prentice Hall. ISBN 0-13-674409-5).
Absolutely not to be missed is the 10 minute retro classic Erlang: The Movie It has 80's hair, 80's computers and the BIG 80's glasses.
I'll look at some of the concurrency videos and see if there are any that I really think are great.
Over the summer, I did a lot of thrashing on my naive Bayesian Classifier because I was taking an algorithm in python and re-coding it in java. Erlang, although different from Python shares the characteristic of allowing the user to accomplish a lot with one line of code. I'm now thinking of taking a different application I wrote in java and re-coding it in Erlang to see what falls out in terms of design differences.
All of this reading and testing has pointed out some weaknesses in unit testing experience.
1. A developer sitting down to write code is less likely to unit test if they don't already have some idea of unit tests they are to write. If you're not working in an Agile shop, (let's face it, there are lots of us that don't) this can be intimidating. What if you don't write enough tests or test the right way? How should this thing you're supposed to write be unit tested anyway?
2. Code coverage tools, such as this post. So what are they really telling us about tests anyway?
3. How many tests should developers be writing? This question, above all, seems the least answerable. Google had a post that addressed this very question, and even their answer was a very murky, "it depends." They qualify their "it depends," by saying, "it depends on how much confidence the tests can provide in the face of changes made by others." Um...sure. Thanks for the really practical answer (not, really).
Now that unit testing frameworks are more fleshed out, I'd like to see more tools surrounding the tests that address these issues. Have interesting tools or war stories? Please leave a comment.
The Bayessian Classifier is working...now I'm onto the Decision Tree classifier. What I noticed immediately is that these two classifiers don't really appear to be useful for the same types of data. Dr. Hung gave me several sets of data and I think that they would all be classified more accurately with the Bayesian Classifier.
Before I started this project, I hadn't really thought about how different data categorizes in different ways. The book I've been using for my algorithms is the excellent book by Toby Seagaran, Programming Collective Intelligence. In the chapter where he compares these classifiers, he points out how data can masquerade as meaningful data, but if it's being manipulated in the wrong way, will be meaningless. It's very important to pick the right type of classifier for the right type of data.
My challenge for coding the decision tree, is to code it so that I can use the iris measurement data AND the data in the Collective Intelligence book. My time is starting to run very short, but so far, the DTC's logic is much easier to code and test.
The categories for both of these have been pretty simple. I'm wondering what would happen if my categories got more complex.
Games class is over which is why I haven't reviewed any games in the past few weeks. This does not, however, mean that I haven't been busy.
The end of a semester means that the focus of this blog will be changing again. I had fun blogging about games. I never seem to have problems criticizing anything, as my husband will be the first to tell you, so reviewing games came pretty easily.
For the next semester, I am expecting to be blogging more about test automation, semantic web and other topics that cross my path during my year of research.
Although my blog changes focus from semester to semester, I will say that I absolutely love using Zemanta. Ok, just let me go viral for a minute or two. Zemanta is a firefox plugin that pulls up pictures and links that can be added to a blog post with a click. I've been in touch from time to time with the guys who develop this app, and they really are a class act. I emailed them during my independent study in the Spring to ask about how Zemanta uses the Semantic Web. Their CTO sent me such a great letter about their technology and was encouraging to me about my studies. This Summer when I had to blog on Ning, I noticed that Zemanta wasn't available so I emailed and asked if there were plans. They had support for Ning available a few weeks later, and they emailed to tell let me know. Very cool.
I've gotten notes from a few people working on apps that I've discovered over the past few months. I wrote about Zemanta, above. There's also the emails I got from Pandora's team when I was searching for the band !!!...really, it's called !!! so you can see how this could cause problems. They were very interested when I told them I wrote a paper about their app. Lastly, one of the developers from Zon posted a comment to my somewhat lackluster review of his game. It just goes to show how badly developers want their applications to be useful for their intended audience, and how some of them are really starting to hit the mark.
Over the past year, I've worked on some very complicated projects. In the Fall, I finished up my distributed querying application and right now, I'm finishing up the epic saga that has been my artificial intelligence project. At this point, I can honestly say how deeply one can feel invested in a development project. Even though the projects that I do are just for a grade, I get so emotionally attached to them. I can only imagine the attachment felt by those who are involved in the apps that I've written about, and these apps are someone's livelihood. It's very inspiring to me to see people taking such risks and such care with what they do.
It's unbelievable just how happy Popcap Games makes me. I've blogged one or two of their games before, but I'm not sure I talked about just how much I like Popcap in general. Their games are so unabashedly casual. If I want to play one of their games, I pick one, read through rules that don't even take 30 seconds to learn and click play. They always work, they are always fun and there is never a gun or semi-naked girl in sight. Thanks PopCap!
Onto their game that I played this week:
Bookworm is a word game involving a grid of letters. You look at the grid and click on letters that make a word going in any direction. Once you've selected letters and hit the "submit" button to submit the word, the letters disappear, rearranging the grid. Words have to be at least 3 letters in length, and you score points based on how long the word is. My longest word was Foxtrot. Every so often, a flaming letter will appear. If you can't use that letter by the time it gets to the bottom of the screen, the game is over.
I enjoyed this game because I had to be creative with the words I was thinking of, but it was still easier than scrabble because you're not having to fit your words in with other words. It was also fun to be able to connect letters that were adjacent in any direction. Some words were letters I connected that were in a circle, others were backwards and some where diagonal.
There was no timer in this game. I enjoy games with times, it always gives a game more of an action element, but not having the timer in this game allowed me to really ponder the letters in the grid. This game not only stimulated my creativity but was also a nice game for de-stressing.