Monday, June 14, 2010


Stuff is malfunctioning enough at work that maybe it's a good time to pick this up again, eh? I mean, one could say it dropped of the edge of a cliff. Maybe it has.

Rumors of our collaboration's demise have been greatly exaggerated. In fact, my collaboration with colleagues in Guatemala is alive and well. But it has been a bit of a shocking year since this blog has been updated in any meaningful way. Every year is really a shocking year, so I suppose no excuses.

The trip to Guatemala was more successful this year. Having a better understanding of what to expect I felt more prepared and indeed I think Armin and I managed to provide much better feed back to the Masters students with whom I was invited to speak. In general, the planning was better on all sides. Even in the extra-curricular department, we met with more success. We successfully conquered the Pacaya volcano shortly before it conquered Guatemala City.

Photo of Pacaya courtesy of a beloved friend

This time I felt like I had even greater exposure to the enormous difficulties facing people's every day life in Guatemala. The least of which is the very fact that many of her most talented are very quick to move away at first opportunity. I had lunch one day with some undergraduates an of the 4 only one did not have plans to leave the country after graduation. And I got the sense that it was really that they did not YET have plans. It may be a good thing for these students to go abroad. Personally, it's very difficult to find opportunity to put ones technical knowledge to work in such an environment, but if they ever choose to return, what they can bring back from other places will be very great.

I was heartened to see one of the most talented people I've met in Guatemala is continuing, with not insignificant personal and emotional commitment to doing good tech work for good people. Not only did I get to enjoy the uniqueness of his friendship, but I was given the opportunity to have a unique experience (and I know he didn't mean to drop me on top of a pile of human bones and medical waste).

Anyway, I remiss you all.

Thursday, January 29, 2009

Finding the time for a Free Software project

I have in relatively recent history had breakfast with my upstairs neighbor, a cunning and ambitious system engineer for VM Ware. We tend to talk about various tech things, which can be interesting because we are both from rather different disciplines of the tech sector. His understanding of low level systems does put him in a somewhat higher technical category than me, while I tend more toward... well, sometimes don't feel like I tend toward anything, and yet everything at the same time. My pursuits tend to place me closer to the user. Trying to write software tools, APIs and even user interfaces. Somehow or another, like talking about the weather, we inevitably came to the topic of Free Software. You know, Free as in The Freedom, not free, like a purfume sample. My neighbor had a few interesting points about why businesses should normally choose proprietary software over free software, and how this is related to long term and reliable maintainability, which he argues should be a primary factor in choosing what software to use. It was really rather like talking to Bill Gates, all the more so because the guy actually looks a little like Bill Gates. Ok, a better looking version of Bill Gates. I'm not going speak to whether or not using proprietary software is better than free software. I do indeed have different opinions from him on the matter - mainly "It Depends", although there is are additional compelling social reasons why one should use Free Software, in addition to some mythology regarding the dependability of proprietary software.

In the end, however, this kind of conversation leaves me feeling guilty about my hypocrisy regarding Free Software. I have produced Free Software, the most important of which is the Human Rights Data Analyzer. Indendent of a funding source, I've also written a weird Scripting Inter-Operatbility Protocol that nobody uses and various other unused stuff. But I've never actually contributed to a project, which I've always felt should proceed trying to run your own project (see the hypocrisy?).

It turns out that a few of the people I work with have contributed to the Python programming language. Since these fellows are hanging around, it's probably a good idea for me to get involved with this. This is a good idea since it's something I use, something that a LOT of people use, and something that I can actually get my job to support me doing in my 20% time. Most imortantly, however, is that it's about time I did something. I've been going on inside my very noisy and echoy head that I should join a good and proper software project. Excuses mainly center around finding a perfect project to work on. This is a fairly poor excuse. There is very little perfection in the world, and whatever there is surely won't come from me.

Joining a Free Software project is not quite like trying to get a job. You don't normally have to interview to contribute, and you probably won't get fired. But you will have the opportunity to gain from the experience of others. The benefits of this are obvious, even if you are not going to partake in the blessings of Freedom. It can also be an equalizing opportunity for cultural exchange between various places on earth. Many projects have contributors from every continent on the globe, even, I'm sure, Antarctica!

It might be interesting to try to conduct a survey to see what the national make up and level of contributions are to Free Software projects. Undoubtably, there are significant gaps between contributions from developed countries and the less developed ones. But it might also be interesting to see if there is a correlation between contributions and the relative tech levels of a country, or if there are some other cultural factors at play (I'm thinking of YOU India, how much do your increasingly tech savvy developers do the Free Software Samba?). If there is a gap, how does it relate to other gaps?

I should write a paper.

Sunday, January 25, 2009

Teaching for the clouds

I've recently learned from my colleague at the University of San Carlos in Guatemala City that they are endeavoring involve my favorite project in three of their courses. In the interest of disclosure, this is not a coincidence. When I visited the University in November, I committed the dubious act of mixing a little business in with my pleasure, and trumped up the benefits of using this lovely project of mine. This should not surprise anyone seeing as I am one of its core engineers.

In all honesty, members of my team reject the term "Clould Computing" which I'm sure has become center piece in many-a recent games of buzzword bingo. Whatever you want to call it, there is less and less doubt every day that there are advantages to moving your software to someone else's infrastructure and making the day to day maintenance, operation and even scalability the other persons willing problem.

A lot of places in the world are riding the Information Service-road (as opposed to the Superhighway, get it? - another chip for your bingo card), and being able to put your web application up on one of the most efficient parts of the Internet for free (to get started) could be a real boon. It's not like hosting it in country is necessarily going to make things better for users as depending on what ISP is being used in a given place, the actual internet packets could be traveling half way across the world and back anyway.

The thorny bits to look out for are that "Could Computing" platforms are an evolving standard. So they're not necessarily "Shovel Ready" in todays parlance. That doesnt mean they don't work, but most perspective users are worried about problems of lock-in. These problems will probably smooth themselves out, because I'm sure most cloud computing players (and I know that Google is one of them) is looking to define standards that avoid the main danger. Smart cloud-service providers will recognize that lock in is a barrier to adoption.

What about using these kinds of new, cutting edge, non-standard platforms for teching to IT/CS students? Personally, I'm a believer that teaching strictly to standards could create an inflexible developer force, so I would not be afraid of a lack of standards, just as long as there is good learnings to be found in there. When I was a student at Victoria University of Manachester, the primary language they had early students work with was one called SML (Standard Meta Language). I didn't even like SML as a functional language. I liked Gofer better. Neither language has any sort of practicle industrial use, indeed, I can't even find a useful reference to Gofer on the Internet. Again, if one focuses on ideas rather than standards, the student will be cross-standard ready.

A big issue popping up around the cloud computing stuff is the fact that all the data and programs for a given application necessarily resides on someone elses server. That's probably not a new issue, as I think people have been doing that ever since the creation of the first time sharing computers. But it does mean you must have some level of trust in the folks who are holding all of your eggs. This problem is most vocally highlighted by Richard Stallman, who thinks that this whole "Cloud on the Computer" thing is a sure way to proprietary software surfdom. It's possible that Stallman's vision is somewhat extreme on the subject. But they're definitely worth paying attention to because they do define the boundaries of a worst case scenario of a particular technology outcome.

Ultimately, I always find it interesting to be in on the early rise of a technology or standard. You get to see its evolution and understand some of its reasoning. The end result, for example, is that you take on the manner of an old-timer reminiscing about the bad old days and how when Java was introduced, the lack of operator overloading was considered a big feature. It also may ensure that the next generation of nerds have seen the process for themselves and come to see standards and platforms as an ultimate given.

Like many buzzwords before it, like eXtreme Programming, Virtual Reality and Push Technology, the term Cloud Computing may mercifully dissipate to the vaporous winds from which they came, but the core concepts and basis for the next evolutionary step will have been laid.

Saturday, January 10, 2009

An example of what I like to do

On my last post I talked a bit about how important it is to find things that you like to do in order to drive learning. I have recently been sort of swept up in this thing, and when it happens to me, you can be sure that I'm going to be absorbed for days.

First let's talk a little about some of the kinds of things that I've seen from people when they get swept up in a learning rapture. The one that comes most prominently to mind was a kid I met on my recent trip to Guatemala, a favorite recent topic of conversation to be sure.

This youngster was an undergraduate who wanted to show me the project he was working on. I could tell that whatever it was would be cool, given his enthusiasm. I was not denied. And I think I even had a few surprises in store for him. I might have been the first person he'd ever met that he didn't have to describe what a Theremin was. This fellows project was to build his very own. I think that's bloody awesome! When I was a youngster myself I was quite interested in early electronic musical instruments. In high school I was fortunate enough to be able to save up to buy myself a decent digital keyboard. It sort of what a let down, because what I really wanted was a Moog or even better an Oberheim, I mean when I dared to dream. It's pretty clear to me, however, this kid is a better musician than me, and certainly a better electronics engineer. It was really cool talking to him. We got talking about early electronic music, like Robert Moog (who went to my high school - if I may name drop) and Wendy Carlos.
What needs to be underscored as that this fellows passion for music was driving an enormous amount of learning on his part. Even if he never ends up working in music, he will have developed enough knowledge to propel him in to a wide variety of useful, interesting and rewarding fields.

The fellow I used to work for when I was doing Human Rights work is another good example of someone who allows his interests to drive his learning. He's a Sociologist by education and degree, but at some point he began to become intensely interested in this computer stuff. He was particularly able to combine his unrelenting passion for social issues with technology which drove him in to the loving clutches of the Free Software movement. This is sort of double dipping of learning potential. For fellows like Patrick, the niftiness of technology is enough motivation by itself, in some ways, even more so for him than myself. But if you combine this with the Free Software movement, you now have a motivated person exposed to an unprecedentedly large body of technical knowledge. Arguments over the merits of free software vs. proprietary software (I am mainly an advocate of Free Software, but my latest exploits have awed me with what is under the hood of some proprietary stuff), there is some very high quality and professionally robust projects out there. Anything you want to learn about is essentially out there.

This sort of brings me to my latest obsession. As I mentioned before my original primary motivator for pursuing technology are video games. It's really kind of sad, but there you have it. When I was a kid I was pretty in to them, and of course in those days, there were no video games of note worth playing in the home. They were all in the "arcades". When thinking back, there was some pretty nutty stuff out there, but what holds my attention were the old cathode ray vector games where instead of rendering pictures using familiar TV scan lines, the shapes were drawn on the screen directly using the electron gun. The result was something that resembled an analog game more than the earlier clunky jaggy raster games. This more analog look and feel lent itself to interesting games that were closer to modeling physics than some of the others. One strange one that always caught my attention but was never very popular was one called Gravitar. It's a successor to the popular Lunar Lander game, except that it throws in a few more elements than just landing on the surface of a planet to make it more interesting. Someone recently came up with a retro take on the game which naturally I had to check out.

Well, when I was a kid I always had the delusional thought I could do even better than those games, and even though I am unlikely to succeed, I decided now was the time to try to do something simple. When I was at University one of my roomates started experimenting with
SDL and wrote a simple 2-D particle simulator. Well, it turns out SDL is still around, and since my language d'jour is Python, I went in for SDL based PyGame. Did I mention that this decision making process happened at 5am (this is prime mind activity time, I'm telling you)? Laptops, especially Macs, make it very easy to start writing projects in bed at this kind of our. By sunrise, I had a rudimentary 2-D particle system where you could introduce object oriented elements which would encapsulate their own behavior and each phase have the opportunity to interact with other particles (like inter-planet gravity vs. single directional gravity).

This was a lot of fun, even though I had not yet written a video game. But it got crazier. Ok, so I wrote my own particle system, but after browsing some of the projects on the PyGame web page I had discovered that there were (of course) already existing open source 2D physics simulation libraries including Python bindings. But these were not just simple silly particle systems like what I wrote... These are full fledged physics systems complete with shape collision detection! Here's a game written using Box2D. Is that not the coolest thing you've ever seen!? It's even better than Falling Sands!

And here is where the real insanity begins. See, if I am going to make a game, I need to make an editor. And if I am going to make an editor, I am going to need a GUI. My GUI of choice is wxWidgets, for a number of reasons. That means I now have to integrate wxPython with PyGame, which is possible... But I also want to do some neat rendering, like automatic scaling/zooming and even rotating the whole screen. I actually prepared to do that stuff in the particle system I wrote myself, but I knew that I could not have as well or efficiently than something like OpenGL. So that meant I had to use OpenGL. Besides, wxWidget/PyGame integration doesn't work on the Mac, so I needed another way to draw polygons in to a window. But I still need PyGame to handle the time scaling, so computers with different speeds and drawing abilities can run the simulation accurately, and sound in case I wanted to ever add that.

This ends up being a lot to learn, but fortunately, all three things I needed to work with are relatively easy to install and even repackage in case I want to distribute this monstrosity.

Working with OpenGL automatically ran in to problems because I discovered a bug where PyOpenGL won't run properly on a Mac with a case insensitive file system. That meant I had to go figure out the problem and even submit a patch to PyOpenGL. After I got all that fixed it turned out to be easy enough for me to translate between the shapes being modeled in the 2D physics system and GL. I'm quite familiar with the kinds of matrix mathematics required to do 2D and 3D graphics and physics, so none of that stuff that is introduced by using GL is a problem. In fact, I know that using matrix transformation this way is flexible and powerful!

I don't know if you followed any of that, but it illustrates how many different things that you get pulled in to an how easy it is when it's something that you think is fun.

Thursday, December 25, 2008

Merry Christmas with the emphasis on Merry

Today is Christmas Day, the second most holy holiday on the Christian calendar after Easter. It turns out that I am not a Christian, and this year I have the unique opportunity to do a little extra work so that the gentiles on my team can feel a little more at ease as they go and celebrate with their family. In practice, this means that I get one of the pagers and am saving up my day off time for a more personally relevant holiday. I won't discuss what I am working on, but needless to say it's going to be a tasty treat of App Engine goodness.

For most people who celebrate Christmas, it's meant to be a "Merry" day, hence the constant flow of good tidings and well wishes. In the spirit of merriness, I'm going to talk a little bit about it, and how it's important for the production of good technology.

When I was a little rug-rat just starting out at College I had a really interesting Assembly teacher. This fellow by the name of Robert Doggett looked more like he should have been in front of the Army of Northern Virginia than a classroom. This guy was full of grit and tobacco and an unfathomable love for assembly languages, especially 8088 assembly. He was an adjunct professor from IBM Poughkeepsie and he seemed to also enjoy teaching dopes like myself. One of the many catchphrases he had that I can remember was "Don't tell my employer but I would be willing to work for a lot less money than they're paying me." He once came up to the campus to teach me, just me, the ins and out of FAT based file IO under DOS. Well, actually, under DOS us not really accurate because he was more about bypassing DOS and going directly to BIOS than anything else. But by the end of the session, which was not more than an hour or so, I understood what was meant by a "File System". Why did he do these things? Why be willing to work for less money than someone will pay you? Why spend your time with dorky undergrads on your time off?

The answer is that he enjoyed these things. He enjoyed technology... well not all of them, but the ones that were central to his interests. I can't underscore this enough. If you could look past the fellow who must have been the model for the Half-Life G-Man, you see a very merry man.

What does this have to do with technology? Lots. Most of the technologists I work with are not doing it because it is currently a lucrative line of work. They do it because they enjoy it. The best technologists got in to it because it was something they enjoyed doing or led to something they enjoyed.

For example, and for those who know me this won't be much of a surprise, my primary motivation for getting in to computers was my interest in video games. While it must have seen a perverse and unhealthy obsession for a kid, and one can often see why, it ultimately led me to the career I am in and the person I am now. I wanted to write programs because I wanted to write video games. As soon as I had the smallest inkling of how to program, I went right for the jugular. Tried to figure out how the graphics systems worked, maybe even sound (back then it was a crude endeavor) and put it together in to something crude and entertaining. My best game ever was an elaborate and enhanced version of the Tron Light Cycles game.

Doing something you either like to do or that leads to something you like to do is an important motivator. Something that is missing from most classwork that I had to do in school didn't have any more motivating appeal to me other than that I could be through with it and possibly get an abstract grade for it. In other words, I was never motivated. Unless it was something where I could end up with something that I liked personally in the end.

Most of the work people do in the world fits in to the category of "do it or else something bad happens to you". You can not get paid, lose your job, not eat, or a whole host of other calamities. People usually work because of fear of negative reinforcement. Few people work for some kind of positive reinforcement.

I think the technologists are the lucky ones. Most of the time I find what I am doing interesting and compelling. There are always the painfully dull tasks that one has to do, in fact a given job might be mostly these sorts of tasks, but as long as there is something for at least some of the time that can keep you going on your own steam, it's all worth while.

When I recently went down to Guatemala, I was expecting to find students motivated by the same principles that motivated me. I figured most the student projects would somehow be related to Football ("Soccer" for the American speaking countries) or music, or any number of potential regional interests (choose whatever Latin American stereotype you wish). Most people were focused on trying to find projects that were intended to be relevant and profitable. While it's true that money is an important motivation for pursuing a career, and it's enough for some people, I can't help but wonder if it's yet again an example of negative reinforcement at work.

The pressure to graduate and find a way to make a living is always very high. Opportunities even in technology can be rather scarce in a place like Guatemala City. The consequences of investing time and money in to education and not having something substantial to show for it are dear. Most people are worried about focusing on the business side of things, because that's where the money is and ultimately is what a successful enterprise has to be about. But there is no technology business without good underlying technology. If your good at technology, you can worry about how to turn it in to business later (unless you are living in Silicon Valley during the Dot Com years - tee hee). I'm not saying the business side is not important (learned that lesson, thank you very much), but I am saying that business is not going to get you anywhere if you don't know what you're doing.

Let's say you are an athlete, training for a Football match. It would be a tremendous help and advantage to study various Football tactics and techniques, how to work play as a team, and how to out think your opponents. You can become the most knowledgeable team in of Football history, but if when it comes time to play and you go out on the field you are too out of shape to run up and down the pitch, then you're going to lose the game. You need to be in shape and know how to run.

Technology is the same way. As the technologist, your the person running up and down the pitch. You need to exercise your skills, build them up, become stronger and faster. As a nerd, to me the idea of strenuous exercise can be a daunting proposition. It means eating the right bland foods and running until it hurts, and all sort of other potentially unpleasant things, depending on your mood. The good news is that Technology is full of things to do that are fun. It's like you get to eat chocolate in preparation for a work out and can drink Coca-Cola to refresh yourself. More to the point, though, one of the best ways (I presume) to get fit for a Football match is to just play a whole bunch of Football with your friends just for fun.

So find a way to do it just for fun. And be merry.

Wednesday, December 10, 2008

A Collaboration

It's been well over a year since I left my old organization (The Human Rights Data Analysis Group - HRDAG) to rejoin The Private Sector, but a large part of my heart has been left behind. Working for HRDAG has never been easy. While one can't complain about engineering salaries in principle, I was working at times for less than 1/2 what I could have made elsewhere. Organizational funding was naturally a chronic problem which for a technology organization makes it sort of a double whammy - tech is expensive! There were very large and often rocky personalities to contend with on a day to day basis, most likely including myself. There had to be, because honestly who else would choose to do that sort of work. Such work is little appreciated, especially by authority, often its focus. I used to say we weren't a non-profit, we were the exact opposite, an un-profit, because you know, there is much profit to be had in violating human rights. Our partners were unreasonable, not because of any necessary personal failings, but because they faced the same issues I just mentioned. We would go to the most difficult places where people have endured the worst suffering that can been meted out by their fellow man-kind. Places where it was even harder to work.

I was very lucky to have had a chance to work there. I do not regret, nor shall I ever, that I participated. A lot of people in the US want to become involved with such good work. But most Yanks, like everyone else, still have to eat, and that means that they need a part of the scarce funding that is out there. I got lucky. Working for the NGO gave me a chance to go places that most of the people from my country would refuse to go, and never will. Whenever I thought I'd had enough, I would go somewhere and meet the people for whom I was really working. There are some good people out there. And it is a big world. And not everyone is as good.

So, needless to say, I was overwhelmed with gratitude when a year and a half after leaving the NGO a friend of mine hooked me up with someone at the University of San Carlos who wanted me to visit. He just to talk with his Masters students and discuss their projects with them. So I did. I didn't realize at what level the Masters program was operating at. It was just starting up! The professors are still trying to seek out information about how to teach their students and build a modern, relevant curriculum. This is a very big challenge.

Guatemala is a country that has emerged from a civil war not much more than a decade ago. While that seems like a long time ago, the legacy of these kinds of conflicts can take a while to fade to the background. The civil war was unusually long, more than 35 year, and took the lives of at least 200,000 people. Like many places in a similar situation, a whole host of problems popped up after the civil war to add to the ones they already had. An estimated 30 percent of the population, mostly in the rural areas, are illiterate. The economy is small and for foreign exchange the country is dependent on exporting commodities, which on its own is a losing game. Basically, Guatemala is a developing country.

And your country might be too. Actually all of them are developing, except for maybe places like Sweden, and everyone has room for improvement. I guess it's more like a journey than a destination. But let's be self conscious about it. No two countries situation is the same and it's wrong to over generalize. However, there are things we can learn.

I met Professor Mazariegos when I arrived in Guatemala, whom I had come to visit without anything more than an introduction over email and a clumsy phone conversation. He is the mastermind behind my visit and efforts to build the USAC information systems curriculum. This fellow is energetic and ambitious. A very dangerous combination. He harbors some pretty amazing fantasies in which Guatemala becomes a technology outsourcing country. And that got me thinking... What does it take?

One thing that strikes me living in Silicon Valley is that so many people are interested in solving the problems of the developing world. Everyone likes to go on about this thing called "The Digital Divide" and act like that's the most important issue facing the planet Earth. This inevitably leads to trying to fix things with high-tech ideas like the One Laptop Per Child project. The theory, I guess, is that African children lack for nothing but a computer. Some people look at this idea and think "aren't there all sorts of problems with giving computers to people in places that don't have regular electrical current? And who will fix it for them when it breaks?" The geeks behind this idea have taken these questions head on and have tried solving these kinds of issues, like providing a crank so the child can power the computer themselves or making it so simple that the child can fix it themselves. But the real question sitting in the middle of the room is "will a computer really give people what they need?" What do you do about the problems around the computer that can't be solved by the computer? High crime, government censorship, dysfunctional economy, local corruption, environmental degradation, etc.

Developed country solutions don't simply work in developing countries (notice I didn't say they simply don't work). US companies get to do things like benefit from computers, networks, software development and the Internet because they exist in a context and infrastructure that makes them beneficial. Electronic data storage is only useful when there is a whole bunch of people who at a moments notice can replace your hard drive, fix your network and provide you with routine maintenance at the drop of a hat. In the past, most organizations we've worked with didn't see technology as something to help with work but something that creates more work. It was another set of chores to look after it, and when it breaks, it's broken for two months.

In order for technology solutions to work, there needs to be a technology industry. It's not enough to give people technology, people have to make it. That's not to say that everyone needs to reinvent the wheel. In fact, only a handful of societies have done it on their own, and civilizations of the Americas never did! Technology innovations do spread around the world, but I think that people will serve the masters of those technologies until they learn to master it for themselves.

That's what needs to be done. There needs to be a collaboration. Technologists of the world unite! Something bigger than just sending gadgets around or trying out the new glittering tech word. If you are in a developed country, listen. If you are in a developing country, learn.

And vice versa.

Now go and enjoy being human. Today is your day!