Fedora 7 is now available for download. One of the biggest improvements is the merging of core and extras into one repository open to all community members. In the next month or sooner I plan to start merging the OLPC changes and rebasing off of Fedora 7. Right now we base off of Fedora Core 6 with some code forks and new packages.
The idea is to merge the new packages, drop some of the packages we forked from extras and use the ones in 7. We still need to keep some of the forked packages, for instance gnome-vfs which picks up ORBit dependencies even if we use the GConf-dbus package. Those packages will be looked at for Fedora 8 to see if we can get runtime dependencies working or simply replace the offending code (in this case GConf).
What this means for OLPC developer is I can now give access to our packages so that they can add and hack on base system components such as TUBES or pyabiword without myself being a blocker for builds. Right now we stick these things in external repositories or someone has to ask someone else to kick off a package build. It also means others can help out on packaging , say if someone is on vacation or just busy, and keep things rolling. And the great thing is this is not all tied to OLPC as anything we get into Fedora can be used and tested for other purposes. For instance the AbiCollab stuff based on TUBES is something I want on my desktop. This will allow developers outside of OLPC to get premade packages to run and play around with and hopefully accelerate adoption of some of the cool technologies being pushed by OLPC.
My twin sister was recently featured on the eyewitness news heath section. She appears in a session about keeping your back straight. Pretty cool stuff and sage advice for those of us who hunch over computers all day.
I am in the middle of re-factoring the Block Party codebase to be more object oriented so I can easily scale the graphics and add multiplayer support. In the process I changed some algorithms around to make them clearer and more streamlined. I got the code to working fairly well but there was one weird bug that was stumping me. When the blocks got stacked to a certain height they started drawing trails from the top of the screen to where they ended up resting. I couldn’t figure out what was going on because all of my printouts showed that I was only writing into the game grid at the proper x, y coordinates. . I then decided to print out the whole game grid every time I placed a block. Here is what I came up with:
As it turns out my optimizations of the line dropping code was the culprit. I was doing pretty much the same thing as the old code except the old code worked by deep copying the game grid every time it did a change. My problem came down to one simple line in the algorithms:
for ii in range(clearlines[i] - 1, nextclearline, -1):
self.grid[ii + i + 1] = self.grid[ii]
Changing it to this fixed the issue
for ii in range(clearlines[i] - 1, nextclearline, -1):
self.grid[ii + i + 1] = list(self.grid[ii])
Notice before I was copying the address of the row into its dropped position. In the old code we were copying between two different grids so this didn’t matter. I’ve changed it to use the same grid when dropping lines. What would happen is every time a line was dropped the top row’s address would be copied to the next row but the top row would not get a list. In essence the top two rows would be the same list. Every time after that a line was dropped the next row would get the same list until your blocks stacked high enough and wrote into one of those rows. After that it is sort of like crossing the streams in Ghost Busters, bad mojo would happen, except this time I don’t think you would save the world from Zuul.
The solution, and I should have known better, was to make sure the row is copied instead of assigned. A further optimized solution would have been to special case the top row and just create a new list for that and do the assignments for the rest of the rows. Something like this should do just fine:
for ii in range(clearlines[i] - 1, nextclearline, -1):
self.grid[ii + i + 1] = self.grid[ii]
#row 0 is just there for padding so we can copy ourself
self.grid[0] = list(self.grid[0])
If you notice at the bottom of my posts you will now see links which will automatically use translate.google.com to translate that post. Go ahead, try it. I’ll wait.
In the global community which is the web I recognize that not everyone will know English. While not perfect, automatic translation is the most efficient way to bridge that gap. It would be nice if I could get all the languages listed on the olpc website translation page. Sadly even a working free Thai translator is hard to come by. If you know of a reliable free translation service for a language I do not support please comment on this post.
This was all done via the WordPress plugin system which is quite nice. Version 0.1 of the Translate This plugin is available under the GPL license. To install simply untar the files contents in your WordPress plugins directory and enable it through the plugin tab on the admin console.
Our latest Sugar builds now have Collabora’s excellent work on TUBES!!! I just got off an Internet video chat between myself and demo Walter Bender is doing down in Argentina. Sound was amazing. We also have a Connect 4 activity, and shared PDF activity going. Eric Blankinship is on the verge of tubafying his excellent Capture activity so kids can share photos and videos over TUBES and we have some guys tubafying a drum circle activity. I should be getting to Block Party soon and releasing a bunch of tutorials in the process.
So we belatedly proved the Senator correct. The Internet is now made up of a bunch of Tubes. There is still one thing he got wrong though. I hereby state that D-Tubes, which is D-Bus messages over Tubes, can also be called Big Truck. So now the Internet can be a Big Truck which drives over TUBES!!!!
I was reading an article on the making of Ghostbusters the game for the Commodore 64. I used to play a port on the Apple IIe. What struck me is I am distantly attached to the game through a one Dan Kitchen who was the CEO of the company I worked for doing the Casper: The Interactive Adventure kids game. He was part of a team which did the Ghostbusters intro sequences.
Ghostbusters was fun, even on the limited hardware it was running on. We need game developers to reach back and remember what fun is without having all the glitz of modern hardware. Nintendo does that well and Sony has a few games which are just pure fun but relies too much on glitzy graphics.
I can imagine simple games of the past coming back on the OLPC with the added element of the mesh network. We have a couple of game jams coming up and it will be interesting to see what they come up with. The XO definitely bring old school type games back in vogue with its limited graphics capabilities.
Why games on the XO? Because that is what gets children involved and learning. You don’t think you played hopscotch, jacks, hide and seek, candyland, snakes n ladders, and monopoly* just so you were out of your parents hair, did you? They all teach different skills which stick better when you are just having fun. Life isn’t all fun and games but when you are a kid it is a big part.
* These were selections from my own cultural upbringing. Other cultures will have a different set of games they played.
After a day of recharging my car battery in my kitchen and pushing out builds I finally made it to NY at 3:00AM this morning, safe and sound. Chris Ball figured out the fontconfig issue we were having at around 10:30 last night. It turns out the clocks were set to something like December 1999 on the test LX board and it triggered a bug in fontconfig which makes it take up 100% of the CPU. This would be unlikely to happen on the assembled units coming from Quanta but at least we tracked it down and can file a bug against fontconfig. For once we are way ahead of our deadline (2 days) with a build we are comfortable with. I should be building a unicode fix and then I think we are good. After Tuesday I can start getting all the interesting bits in like TUBES!!! and video chat into the build. Watch out for some breakage in the builds as a lot of work has been going on in the git repos while we stabilize the LX. Hopefully we can get it out there, break some things and quickly stabilize again with some really awesome features.
Long Island User Group’s 100th Anniversary Meeting
I will be at LILUG tomorrow, Tuesday, May 8th to give a talk on developing for the OLPC Sugar environment. Though I didn’t plan to be at the 100th meeting, it just happened that was when I was free, it is pretty appropriate since I was once upon a time the Vice President of LILUG. I’m looking forward to it. If you are in the area feel free to drop by as it is open to everyone and includes free donuts and coffee. If you don’t come for me, come for the Krispy Kremes.
Umm, I don’t know about you but I don’t use the same interfaces I used ten years ago and since then technology acceleration has been exponential. Of course there are always those who would rather the next generation learn only what the current generation understands. That way the future isn’t so scary and unknown. Personally I would rather teach the ability to deal with any new situation a person may encounter in their lifetime and the ability to adapt.
What can I say? I’m a short guy. Standing on the shoulder of giants is much more pleasant than standing toe to toe, or face to toe as the case might be, even if the height gets scary at times. Giving children the courage to climb those giants instead of just learning about them - now that is teaching.
James. funny you bring up device-mapper at this point. I am looking into using it for an unbrick my laptop option on the OLPC laptops. One of the things we want to enable is allowing kids to explore and find out how the laptop works. Playing around with the base system is a good way to do that, however a child would run the risk of bricking their machine. Using device mapper we could redirect all of the user’s changes so if they end up making a mistake we can rollback to a known working state.
This also will help with updates as in the model being discussed requires diffs of the base system which would fail if there were any modifications that collided with the update changes. Not to mention we are doing updates via wireless which could prove unreliable at points. Being able to write updates to another layer and then merge that layer with the base system if successful, would be the bee’s knees.