Free Software

Software Engineering with FOSS and Linux

Call of Cthulhu character generator for Android

I wrote an Android app, a character generator for the Call of Cthulhu role-playing game. It’s meant for internal use by our group, but I released it under an Apache 2.0 License in case anyone else is interested.  Chaosium Inc., the publisher of Call of Cthulhu, kindly provided its permission to use its copyrighted material in this application for non-commercial purposes.

The source code of the app is available at I will place the app in F-Droid, the open source Android marketplace, when it reaches a more mature version. If you want to install and try it on your mobile in the meanwhile, don’t hesitate to contact me. It requires Android 2.2 and has been tested on an HTC Desire A8181.

August 27, 2011 Posted by | android, Free Software, mobile, Programming | , , , | Leave a comment

Using JiBX with Jersey

After searching around for this for a while without much luck, I post it here hoping to save you some time. Jersey, the reference implementation of JAX-RS, typically uses JAXB to marshal and unmarshal XML. If you want to use JiBX instead, you should provide custom providers:

public class JIBXBodyReader implements MessageBodyReader<Object> {
	public boolean isReadable(Class<?> type, Type genericType,
			Annotation[] annotations, MediaType mediaType) {		
			try {
				BindingDirectory.getFactory( type );
			} catch (JiBXException e) {
				return false;
			return true;

	public Object readFrom(Class<Object> type, Type genericType,
			Annotation[] annotations, MediaType mediaType,
			MultivaluedMap<String, String> httpHeaders, InputStream entityStream)
			throws IOException, WebApplicationException {
		try {
			IBindingFactory factory = BindingDirectory.getFactory( type );
			IUnmarshallingContext context = factory.createUnmarshallingContext();
			return context.unmarshalDocument( entityStream, null );			
		} catch (Exception e) {
		return null;

public class JIBXBodyWriter implements MessageBodyWriter<Object> {
	public long getSize(Object obj, Class<?> type, Type genericType,
			Annotation[] annotations, MediaType mediaType ) {
		return -1;

	public boolean isWriteable(Class<?> type, Type genericType, 
			Annotation[] annotations, MediaType mediaType ) {		
		try {
			BindingDirectory.getFactory( type );
		} catch (JiBXException e) {
			return false;
		return true;

	public void writeTo(Object obj, Class<?> type, Type genericType,
			Annotation[] annotations, MediaType mediaType,
			MultivaluedMap<String, Object> headers, OutputStream outputStream)
			throws IOException, WebApplicationException {
				try {
					IBindingFactory factory = BindingDirectory.getFactory( type );
					IMarshallingContext context = factory.createMarshallingContext();
					context.marshalDocument( obj, "UTF-8", null, outputStream );
				catch ( Exception e ) {

November 25, 2010 Posted by | Programming, Uncategorized, web | , , , , , , , , | 1 Comment

Preventing session expiration with AJAX

Lately I have noticed an increase in issues related to session expiration in web pages. There are two cases that come to mind:

  • Traditional forms that may take the users too long to fill and submit, perhaps because they need to seek data from several sources, such as curriculum info or references.
  • Rich Internet Applications, which may delay to communicate with the server long enough for a session to expire, even though the users act under the delusion of a constant communication and a consistent state of their data.

Increasing the session timeout is only a partial solution, as it affects the server load and doesn’t fully address the problem since users may still face an unexpected session timeout if their behavior diverts from the expected scenarios. A better way is to use a simple AJAX call to periodically renew your session, as long as your web page is still open in the browser. You can do that using the setInterval() JavaScript function or its equivalent in the framework of your choice. With jQuery, you could use something like this:

    $(document).ready( function() {
        var refreshTime = 600000; // in milliseconds, so 10 minutes
        window.setInterval( function() {
            var url = 'http://mysite.mydomain/refreshSessionURL';
            $.get( url );
        }, refreshTime );

The url variable should point to a page that does nothing but refreshing a session. If your application is in PHP, a simple session_start() will do.  If you are using an MVC framework, you could use a controller that renders nothing back and let the framework handle the session renewal.

One possible caveat using this approach is AJAX caching. If it is enabled (some browsers, including IE, enable it by default), it is possible that only your first call will be sent to the server. There are two approaches. The most simple one is to disable AJAX caching completely. In jQuery, this can easily be done using a $.ajaxSetup( {cache:false} ) call. Another possible way is by attaching some random parameter to your session-refreshing URL that will be ignored by the server.

Finally, you should be aware of the security implications of never letting a session to expire. Depending on the requirements of your application, you should consider using a user inactivity test to prevent session renewal or even cause a session to expire.

June 19, 2010 Posted by | Programming, web | , , , , , , | 6 Comments

Migrating from VirtualBox to VMWare in Linux

Ok this is not really a post about free software, in fact it is quite the opposite, but after spending a long time trying to figure a way to convert a VirtualBox image to a VMWare one I figured someone may benefit from it. The reason I had to switch was that I couldn’t get DirectX and 3D Acceleration to work in VirtualBox, but it works fine in VMWare (if you have any suggestions to help me with DirectX and 3D Acceleration in VirtualBox please post here, since VirtualBox seems to be running smoother on my laptop). All the info is scattered around the web, but searching for it is tricky since many links refer to old VirtualBox versions and most of them refer to the opposite operation, i.e. migrating from VMWare to VirtualBox. So here we go:

– Locate your VirtualBox virtual drive, in my case this was /var/local/virtual/windows.vdi. For the rest of the post I assume we are in the virtual drive’s directory (i.e. /var/local/virtual)
– Convert it to raw format. In later versions of VirtualBox (I am using 3.1.2) this is done through the VBoxManage tool:

VBoxManage internalcommands converttoraw windows.dvi windows.raw

– Install qemu
– Convert the raw file to a VMWare compatible image format:

qemu-img convert -f raw -O vmdk windows.raw windows.vmdk

You can now delete the raw file to save some space.

– Launch vmware. I am using VMware Workstation 7.0.1.
– Create a new Virtual Machine. At the wizard, use the following steps (the important options are in blue):

Virtual Machine Configuration: Custom
Virtual Machine Hardware Compatibility: Workstation 6.5 – 7.0
Install operating system from: I will install the operating system later
Guest Operating System: Whatever you’re running (I’m using the vm for Windows XP Professional)
Virtual Machine Name: Whatever you want, or leave the defaults
Processors: Whatever you want, or leave the defaults. I’m using 1
Memory: As much as you like. I’m using 1GB
Network Connection: Use network address translation (NAT)
I/O Adapter Types: SCSI adapter: BusLogic.
Disk: Use an existing virtual disk. Then browse for the .vmdk file

When you start the VM, you will be asked to convert it to new format. Do so, since qemu-img may generate formats compatible with older VMWare versions. Also don’t forget to install VMWare Tools (from the VMWare menu select VM, then Install VMWare Tools…), 3D Acceleration didn’t work until I did.

February 21, 2010 Posted by | linux | , , , | 7 Comments

Fully disabling touchpad in Ubuntu 9.10 Karmic Koala

Ubuntu 9.04 used to allow you to fully disable the touchpad through the System -> Preferences -> Mouse -> Touchpad menu. In 9.10 this has been replaced with a ‘Disable touchpad while typing’ option, which I find inadequate in several cases. Here’s a way to fully disable your touchpad in 9.10:

  • First, find the HAL configuration file for your touchpad. Mine lies in /usr/share/hal/fdi/policy/20thirdparty/11-x11-synaptics.fdi, but according to some posts it might be found in /usr/share/fdi/policy/10osvendor/11-x11-synaptics.fdi
  • Either delete the HAL configuration file, or rename it to something else (without the .fdi extension). This way hald (the HAL daemon) will not reset the touchpad driver when we will disable it.
  • In a console, run xinput list to find the name of your touchpad device under X. For example, I get:

$ xinput list |grep -i touchpad

“AlpsPS/2 ALPS DualPoint TouchPad”    id=8    [XExtensionPointer]

  • To disable the  touchpad, run:

xinput set-int-prop “AlpsPS/2 ALPS DualPoint TouchPad” “Device Enabled” 8 0

Of course you should replace “AlpsPS/2 ALPS DualPoint TouchPad” with your own device name, as shown by xinput list.

To automatically disable your touchpad each time you log into X, you should add a startup script. In Gnome, use System -> Preferences -> Startup Applications, click on ‘Add’,  use a name like ‘Disable Touchpad’ and type in the xinput set-int-prop line in the Command field.

To facilitate touchpad handling (i.e. to enable/disable it at will, for example when you plug in/out a mouse), you could create the following script:

#! /bin/sh
# Provides:          touchpad
# Required-Start:    $remote_fs $syslog $all
# Required-Stop:
# Default-Start:
# Default-Stop:    2
# Short-Description: Disables the touchpad

TOUCHPAD=”AlpsPS/2 ALPS DualPoint TouchPad”

. /lib/init/
. /lib/lsb/init-functions

case “$1” in
xinput set-int-prop “$TOUCHPAD” “Device Enabled” 8 1
rmmod psmouse && modprobe psmouse
xinput set-int-prop “$TOUCHPAD” “Device Enabled” 8 0
echo “Usage: $0 start|stop” >&2
exit 3

Of course you should use your own device in the TOUCHPAD=… line. Save it in /etc/init.d/touchpad, and set it to off by default:

sudo update-rc.d touchpad stop 99 2 .

Note: The rmmode psmouse && modprobe psmouse commands in the restart option will reset your touchpad (and, incidentally, your mouse) if your driver fails due to a bug described here.

January 4, 2010 Posted by | linux | | 26 Comments

Fixing sound after upgrading to Ubuntu 9.10 Karmic Koala

I recently upgraded from Ubuntu Jaunty (9.04) to Karmic (9.10), and the sound stopped working. As a matter of fact, no sound card was detected. Searching around, it turned out that the problem lied with a wrong kernel version, which actually stems from an apparent bug in the new grub boot loader that ships with Karmic. Even though I’m using Ubuntu, this might affect other distributions that use the same boot loader. If you face a similar problem, try the following:

First, check your kernel version:

  • sudo uname -r

If you see a version below 2.6.31, do the following:

  • Delete your old /boot/grub/menu.lst file. Due to an apparent bug, grub will not overwrite it during distribution upgrade or subsequent upgrade-grub commands.
  • Run sudo update-grub. A new menu.lst will be generated, now pointing to the right kernel.
  • Install grub on your MBR. First make sure which device holds your MBR (most probably /dev/sda, but it might be /dev/hda if you have an old IDE disk), then run: sudo grub-install /dev/sda (replace with the proper device)
  • Reboot.

Hope this helps.

December 31, 2009 Posted by | linux | | 6 Comments

Dealing with mouse and touchpad freezes in Linux

Sometimes the desktop in several Linux distributions freezes for no apparent reason; active windows can still be used, and the mouse pointer can be moved around, but clicking is impossible. Furthermore, your touchpad can no longer be controlled; the ‘Touchpad’ tab disappears from the System / Preferences / Mouse menu. Even if mouse functionality eventually returns, the touchpad remains uncontrollable. This extremely annoying bug occurs randomly and may last for a couple of seconds, or until you restart your X server.

If you check your system’s log after such an event (/var/log/messages) you will notice a few entries similar to these:

Sep  9 09:38:15 umbra kernel: [ 4939.006198] psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 lost sync at byte 1
Sep  9 09:38:15 umbra kernel: [ 4939.012220] psmouse.c: DualPoint TouchPad at isa0060/serio1/input0 - driver resynched.

Basically this indicates an IRQ conflict between your mouse and your touchpad. This is a Linux kernel bug (I am currently using 2.6.28) and as such it affects most distributions. An easy way to recover both mouse and touchpad functionality without having to restart your X server is restarting the mouse driver. Run the following commands on a terminal window:

sudo rmmod psmouse
sudo modprobe psmouse

If there is no terminal window open, you can use one of the following:

  • In Gnome or KDE, press Alt + F2, type gnome-terminal and press Enter
  • Press Control + Alt + F1, login with your username and password, type the commands, then press Control + Alt + F7 to get back to X

Hopefully a future kernel release will fix this problem for good.

September 9, 2009 Posted by | linux | , , , , , , , | 36 Comments

Selecting language of multilingual web sites

Multilingual sites will usually offer a way to their users to switch between languages of the content, either through a link in their pages or through the configuration of user preferences. For first-time visitors, however, a site needs a way to determine their prefered language(s). The standard way to identify this is by inspecting the Accept-Language HTTP header sent to the site by the user’s browser.

According to the HTTP 1.1 Specification, the Accept-Language header can be used to assign a weight to each language, determining the users’ prefered order of natural languages of multilingual content. For example,

Accept-Language: el,en;q=0.5,fr;q=0.4

means that the user prefers Greek content, but if it is not available then English and French are also acceptable, with English having a higher priority.

You can parse the Accept-Language header to determine the appropriate language. Although a simple parsing can be used in most cases, addressing the gritty details of the specification can be a bit tricky. Here is an implementation of the parsing algorithm in PHP. It might be an overkill, but it gives you a pretty good idea:


function sort_descending_weights$a$b )
# Each array element is a (lang,weight) pair
if ( $a] != $b] )
        return ( 
$a] < $b] ) ? : -1;

    # If two languages have the same weight, then we might want to impose 
    # our own precedence. Put your own ordering code here. For simplicity, we
    # just assume that the default language takes priority.
if ( $a] == $default_lang ) return -1;
    else if ( 
$b] == $default_lang ) return 1;
    else return 

function is_language_available$lang )

function get_prefered_language( )
# If no Accept_Language header exists, use the site's default language
if ( !in_array'HTTP_ACCEPT_LANGUAGE'$_SERVER ) ) 

    # Parse the header. A * indicates any language not explicitly specified
$list explode","$h );
    if ( 
count$list ) == ) return $default_lang;
$prefs = array();
    foreach ( 
$list as $langs )
$tmp explode";q="$langs );
$lang $tmp];
$weight count$tmp ) == 1.0 $tmp];
array_push$prefs, array( $lang$weight ) );

    # The specification doesn't enforce weight to be in descending order.
    # Sort the parsed values.
usort$prefssort_descending_weights );    

    # Pick an available language. is_language_available() is a stub.
foreach ( $prefs as $pref )
$lang$weight ) = $pref;
        if ( 
is_language_available$lang ) ) return $lang;

echo get_prefered_language();

In Firefox 3.0, users may specify their prefered content languages in the Preferences / Content / Languages Menu:

prefs lang

For ease of use, exact weights don’t need to be specified. When users change the order of the languages in the list, the browser will calculate and send the appropriate weights in the HTTP request.

September 3, 2009 Posted by | Programming | , , , , , | 4 Comments

4 + 1 ways to celebrate the Software Freedom Day

With the Software Freedom Day fast approaching, the Free Software Foundation and communities across the world are planning their activities and are preparing to celebrate and promote Free Software in their region. Joining your local community and partaking to its activities is strongly suggested; however, here are some ideas for individual promotion of Free Software:

  • Spread the word. Mention it to your family, your friends, your colleagues, your classmates. You may be surprised by how many people may begin to care after they actually hear about a new idea. You will find that the “people don’t care about this kind of stuff” is a common misconception; many people do care and will often seek ways to help.
  • Make a T-shirt. Select a logo of your favorite Free Software application or organization and print it on a T-shirt. Wear it in public. Some will see. Some will be curious. Some will care.
  • Promote it in your virtual community. Blog it, digg it, twit it, post it on Facebook. If you play a game, talk about it in the game. If you run a game, announce it to your players. For example, here is the announcement planned for an online game I’m currently coding for:
    Today we celebrate the Software Freedom Day; we celebrate the freedom in our
    virtual world, a world made possible by Free Software. Our code is built on
    Free Software and has been powered by and running on Free Software for 17 years
    now. Our thanks to those who allowed us to revive and enjoy Dragonlance for
    all this time.
  • Use it as a chance to get involved in activities related to software freedom. You don’t need to be a programmer to help; you can help with translations, bug reports, or even activities not related to software at all: map your neighborhood using OpenStreetMap, upload your art to the Open Clip Art Library, publish your digital content under an appropriate Creative Commons License.

Maybe the most important thing you can do that day is learn more about Software Freedom and reflect on how it applies to you and your community. Checkout The Free Software Definition, learn Why Schools Should Use Exclusively Free Software and understand why Your Freedom Needs Free Software. Don’t take these at face value; think about them, and form your own opinion. Then act.

September 2, 2009 Posted by | Free Software | , , | 17 Comments

OLPC Deployment in the Greek village of Sminthi

The last two days I’ve been attending the Software Freedom Kosova Conference 2009, which was really interesting and had quite an impressive turnout. In the conference I presented our work for the deployment of some XO-1 laptops, part of the One Laptop Per Child project, to some students of the High School of the Greek village of Sminthi. You can checkout the project’s Wiki for some ongoing work; here I will present the paper we submitted to the Conference.

OLPC Deployment in Sminthi

Xenofon Papadopoulos, Athanasios Priftis, Pavlos Hatzopoulos, Theodoros Karounos

Re-public Online Magazine, Greek Free/Open Source Software Community, TEI of Athens,,,

Abstract. From September 2009 students in the Greek high school of Sminthi will use OLPC XO-1 laptops inside and outside the classroom. In this paper we present our methodology for the OLPC deployment, ranging from the creation of a human network of teachers, members of the local community, social researchers and IT specialists, to the acquisition of the laptops, the development of applications and educational content, and the technical support of the project. We describe the holistic approach used to implement the project, and highlight the role of communities as the means to bring together and mobilize end users and technical experts. We present the use of Free Software as a fundamental component of such an approach, and demonstrate how it can be used to address both technical and non-technical aspects of the implementation. Finally, we present our plans for further development and future OLPC deployments.

1. Introduction

Modern educational approaches promote blended learning, collaboration and multiple educational resources. The Greek Pedagogical Institute, designing and overseeing the educational process in the Greek public schools of Primary and Secondary education, advocates the creation of “an open and attractive educational environment, through the application of alternative pedagogical approaches and the development of teaching practices based on communication (student-centered approach, collaborative teaching)”[1]. Furthermore, the Pedagogical Institute distinguishes the notion of educational concepts to that of the book’s content, requiring teaches to deliver the first by any means necessary, using the official book as a reference. However in many Greek schools a traditional approach – use of only the official book, recited by the teacher – is still prevalent. The special conditions at the high school of Sminthi expose the shortcomings of that approach, and offer a fertile ground for the adoption of the new teaching methods.

Located on the remote, mountainous region of Xanthi, in Greece, the high school of Sminthi has approximately 140 students enrolled, but attendance varies each year. The lessons are exclusively in Greek. Students, however, are all members of the Muslim minority living in Greece, with their mother tongue being either Pomak or Turkish (or a mix of both), and have graduated from elementary schools where lessons are given in Turkish and Greek. Thus their grasp of the Greek language is weak. The language barrier alone imposes great obstacles to the education of the students.

In 2008, two high school teachers, Dionysia Psychoyos and Vasilis Rigas, explored alternative teaching approaches that would help them transcend the language barrier. Their subjects, Mathematics and Computer Programming respectively, seemed promising since they are based on concepts, abstractions and symbolisms that depend less on a firm grip of the spoken or written language. They had already ventured in collaborative learning approaches when they encountered Thanasis Priftis and Pavlos Hatzopoulos, editors of the Re-public on-line magazine, who suggested exploring the possibilities offered by the One Laptop Per Child (OLPC) initiative.

2. The One Laptop Per Child initiative
2.1 General

The mission of the One Laptop Per Child organization is “to create educational opportunities for the world’s poorest children by providing each child with a rugged, low-cost, low-power, connected laptop with content and software designed for collaborative, joyful, self-empowered learning”[2]. Its current focus is on the development, construction and deployment of the XO-1 laptop, an inexpensive notebook computer initially intended to be distributed to children in developing countries around the world, to provide them with access to knowledge, and opportunities to “explore, experiment and express themselves”[2]. It is shipped with a stripped-down version of the Fedora GNU/Linux operating system and a GUI and set of applications called Sugar, that is intended to help young children collaborate.

The OLPC project involves several organizational and technological decisions. We could, very broadly, sum them up as follows:

  • Innovative, worldwide compatible, children friendly, hardware.

  • Free / Open Source educational operating system and applications influenced from the constructionists movement and other learning theories.

  • A deployment plan focused on decisions and funding of the centralized government.

  • A third-world development theory based on education as an answer to poverty.

There has been a well documented critique[3] on all of these issues and several more. Again, a brief layout:

  • Developing countries have different kind of basic priorities (clean water, better nutrition, infrastructures, need for teachers, schools and so on). The OLPC project exploits their resources without taking under consideration local needs, networks, and practices.

  • Although around 800.000 XO1 have been shifted to different developing countries, there is a wider consensus that smaller orders are very difficult to be placed and they were definitely not encouraged or planned.

  • Local teachers’ participation during the projects deployment has been low, campaigning on the wider educational changes needed in order to apply the learning and technological innovations of OLPC in schools has been insignificant.

  • The OLPC project has fallen short on the Free / Open Source tool promise by, among other things, inviting Microsoft to install a trimmed-down Windows XP version on the laptop.

2.2 The case of Greece

In Greece, as well as elsewhere, a group of school teachers, academics and open source developers formed an initiative to promote the adoption of OLPC in the Greek primary and secondary education. The initiative promoted the use of the OLPC tools and created tutorials for the development of educational applications on the platform. Furthermore, it proceeded to develop educational content based on concepts included in the school books, including material on astronomy, physics and mathematics[4].

The original model of deployment as conceived by the OLPC was based on large scale orders by the central government and distribution to the students by the Ministry of Education. As the original model failed to deliver, our team attempted to exploit what it perceived as the legacy of the OLPC project:

  • A fresh, better documented, initiative-based discussion on new educational practices, stemming from a reinforced need to look upon new paradigms of learning.

  • A better, more affordable, technology built on F/OSS principles and tools, creating a new market of educational applications.

  • A concept focused on motivating local actors, one worth building local communities upon.

Based on the above, the Re-public team sought an alternative model that would not depend on the central government, but on local communities facing their own, specialized needs. As part of these efforts, the team in cooperation with the Union of African Women has in the past organized an evening of “play and experiments” with the OLPC, aiming to support the free distribution of XO-1 laptops to the children of immigrants, and has issued an open call to the community for cooperation in projects related to the OLPC. The case of the OLPC deployment in the high school of Sminthi emerged as a result of these actions.

3. The OLPC Deployment in Sminthi

The project aims to provide XO-1 laptops to the third grade students of the high school of Sminthi, along with a set of applications (“activities” is the term used by the OLPC to highlight their interactive and educational nature) fully translated in Greek. The laptops will belong to the school, however the students will keep them for an entire year, both inside and outside the classroom, at the end of which they will be returned to the school.

The project does not plan to use the laptops as a means to deliver the official educational material already distributed in the classroom, i.e. it does not plan to employ it as an e-book reader of the official school books or as a platform for the existing educational software. Although both are possible, the main goal of the project is to give the teachers and students a platform to develop their own activities, as they see fit. Also the project aims to aid the teachers to develop new content, based on the exclusive needs of the class, and deliver it to the students in any way they deem proper. We should note that, regardless of the need to translate all the applications in Greek, according to the Sugar HCI guidelines the interface of most activities is based on icons and interactive graphical elements, reducing the effects of the language barrier.

The project is based on the creation of a human network with a broad and mixed background, centered around the local school community. Participants of the network deliver their own special skills to the project; communication, coordination and cooperation among the team members are essential. Furthermore, a major goal of the project is communicating and delivering its results to a broader circle of researchers, teachers and IT practitioners not involved with the Sminthi case, thus attempting to expand its human network, discover synergies and form links with other communities.

3.1 Roadmap

The following roadmap outlines the history of the project so far and highlights the creation and growth of the human network as the core factor of the project:

Figure 1 - Roadmap of the OLPC Deployment in Sminthi

Figure 1 - Roadmap of the OLPC Deployment in Sminthi

  • The local teachers met the Re-public team, and discuss the conditions in the classroom of the Sminthi high school. The Re-public team suggests using OLPC as an experiment.

  • Theodoros Karounos, coordinator of the Greek OLPC initiative and member of the Re-public Board of Directors works with the team to publicize its idea and seeks links with communities and experts from several disciplines to realize the project. Furthermore, funding is aquired to purchase 30 XO-1 laptops, part of which will be given to the high school of Sminthi.

  • The Re-public team contacts members of the Greek Free/Open Source Software (F/OSS) Community (ELLAK) to handle the technical aspects of the project, which involve the configuration of the XO-1 laptops, the translation of selected activities into Greek and the development of new applications.

  • The project is presented at a workshop of the F/OSS Conference ( at the National Technical University of Athens. In the workshop several activities around the OLPC in Greece are presented. Apart from the core team members, participants in the workshop include high school teaches and independent open source programmers. During the workshop, an elementary school teacher requests additional XO-1 laptops for use in his own school.

  • The local teachers, having explored the capabilities of the XO-1 laptops and the Sugar platform running on them, request the development of two new applications that will help introduce the students to the concepts of 1st and 2nd degree polynomials and the properties of simple geometrical shapes. Xenofon Papadopoulos, a member of the Greek F/OSS community working for the Technical Educational Institute of Athens, agrees to develop the polynomials activity for the Sugar platform.

  • Αrlen Dilsizian, a researcher in social anthropology, gets involved with the project and decides to live in Sminthi for one year and study the impact of the OLPC deployment to the classroom, the broader educational process, and the students’ life in general on behalf of the Re-public team.

  • The Re-public team, in cooperation with the Greek Research and Technology Network (GR-Net), organizes an event where the 30 laptops are tested. In the same event, a prototype of the new polynomials activity is presented for public trial and comments, and a roadmap for further action is laid out.

  • The Greek F/OSS community finalizes the translation Sugar, Etoys and selected activities into Greek. A wiki, describing the entire project and on the development of the new activity, is created at After several iterations of improvements, the activity is uploaded to the central repository of Sugar and announced to the community, which offers suggestions to improve it and better integrate it with the entire Sugar ecosystem.

  • The Re-public team organizes the integration of the various components (laptops, configuration, network connectivity, translated and newly developed activities) and lays out the plans for the deployment.

As Figure 1 demonstrates, the entire project is revolving around the local school. It begins with the students’ needs, as perceived and understood by the local teachers. It is co-ordinated by the Re-public team, its technical aspects are implemented by the Greek F/OSS Community, and it is evaluated by an independent researcher of social anthropology, who will live and work with the children for the duration of the project. Subsequently, the results will be processed by the teachers and delivered to the rest of the team, which will provide feedback and technical support in a cyclic, iterative process.

3.2 The Role of Free / Open Source Software

Open source software has been a core ingredient of the project in every step from its conception to its implementation. An important pedagogical goal of the project is to encourage the high school children – and other IT practitioners, such as university students and teachers – to explore the platform and its applications and possibly develop their own content. The open nature of the platform and all its tools makes it possible to look at the current code, learn from it, modify it and use it as the basis for further development, unencumbered of both technical obstacles and licensing issues. Furthermore, the community-based development and support model practiced by the open source movement makes it possible to realize the project by drawing upon the resources of local and remote communities such as the Greek F/OSS and the Sugar Development communities.

4. Conclusion

The project of the OLPC deployment in Sminthi does not attempt to introduce IT technologies or alter the educational approach in the Greek Primary and Secondary education. Nor does it care about the digital representation of existing material. It is a project revolving around the students and the local teachers, their exclusive needs as they, themselves, understand them. It advocates and supports the creation of ad-hoc applications and content, and monitors the projects’ impact on the teachers’ and students’ both inside and outside the classroom. It is based on a new model of action: a model of small, low-cost deployments, supported by unofficial communities forming a human network with a broad and mixed multidisciplinary background, centered around local representatives and end-users to address real, local needs.

5. Future plans

Future plans of the project include the actual deployment, that will take place at the beginning of September 2009. Of particular interest to the project is the evaluation of the deployment’s effects, both inside and outside the classroom, which will take place during the entire year. Finally, the project aims to create links that will result to an active community which will advocate and promote the use of free software in education.

6. References

[1] Sotirios Glavas, Quality of Education and Pedagogical Institute,, 2009

[2] One Laptop Per Child Association, One Laptop per Child (OLPC), a low-cost, connected laptop for the world’s children’s education,, 2008

[3] Lee Felsenstein, Problems with the OLPC approach,, 2005

[4] Theodoros Karounos, Web Site of the OLPC at the University of Patras / CTI,, 2007

August 30, 2009 Posted by | Free Software | , , , , | 68 Comments