Using the present to create the future: How can we move South Africa from consumer to producer of web technologies. My keynote talk at the ZAWWW2011 conference, Sept 15th, 2011 in Johannesburg.
Trends in technology in South Africa (for ICT RDI Roadmap team) was delivered at the CSIR in Pretoria, South Africa yesterday, May 23, 2012. "Better by imitation syndrome" refers to my belief that in South Africa we can leap a head by imitating the past, and those who have already themselves leaped ahead. It is folly in the extreme, but much of what we do seems to implicitly follow this belief. "We are not innovating innovation" refers to the fact that in South Africa - especially in higher education and among senior manegers in higher education - that we can innovate by conventional means. There is also a belief that you can innovate without risk, and anything with risk should be hit hard with heavy cricket bat. These are contributors to the trends, but they fall outside the scope of the focus on technology trends per se.
There are a lot of asses in need of kicking in our country!
The topic that I was given when my colleague was unable to make the conference was: "How to develop localised applications to target and profit from the African market." This seemed straight-forward until I started thinking about some of the concepts contained within that simple phrase. Firstly, assuming localised applications refer to applications targeted at local markets, it is important to realise that the current device landscape in this very large continent of Africa is quite heterogeneous. Secondly, most African countries have a scarcity of developers, more so of good developers. In a recent trip to Nigeria, for example, it was reveled that there are about 2000 independent developers in the country, compared to several hundred thousand in the USA. Many thousands are unemployed, and have very limited experience. Thirdly, while there are purely exploitative opportunities to develop apps and sell into the African market, such opportunities do not lead to the generation of local idea capital - the raw material of the knowledge economy. The real opportunity is therefore to use the growing potential of the software applications market place - both open source and (shudder shudder) proprietary - to create capacity-building initiatives, and by doing so to grow idea capital, and thence to grow the size and variety of the market. I use my 8 years experience in the African Virtual Open Initiatives and Resources capacity-building initiative to discuss how this could be achieved while still creating business opportunities and growing local economies.
From Telecoms World Africa, May 22, 2012, Sandton Convention Centre, Johannesburg, South Africa
This week saw two very different sides of South Africa exposed to the world. The one was the president's penis, or at least an artistic interpretation thereof, and the other a magnificent achievement for humanity - the launch of the world's first commercial spaceflight. Both have their roots in South Africa, and both involve similarly shaped objects as Sarah Britten just pointed out with her "Freudian" comment on Twitter when someone retweeted my Tweet about this matter.
The absurd levels of energy and flaming ignorance that went into fighting over a perfectly normal piece of artwork must surely have drawn the world's attention to the utterly trivial things that occupy us in South Africa. We spend so much of our personal, public and corporate energy on matters that have little if anything to to with the achievements of our nation, and the work that needs to be done if we are to take our place in the global knowledge economy. The fact that art can have multiple interpretations was lost in the furore. I thought the painting could be a rallying cry for what needs to be done by the spear of the nation to bring Sough Africa into the global knowledge economy. But flacid minds focused on the flaccid organ instead of what it could really mean.
The other event was the launch of the first commercial space flight by Space Exploration Technologies Corporation, or SpaceX, a space transport company headquartered in Hawthorne, California. It was founded in 2002 by former PayPal entrepreneur Elon Musk.Musk was born in Pretoria in 1971 and matriculated at Pretoria Boys High School he left home in 1988 at the age of 17. He was a founder of PayPal and a number of other initiatives. He left home to escape the army, but also because the things he wanted to do could not be accomplished in South Africa. He was listed as one of Time Magazine's 100 people who most affect the world in 2010, and one of the 75 most influential people of the 21st century by Esquire magazine.
Listen to this... he was born and grew up in South Africa. How many more potential Elan Musks are out there among the general population, having their attention diverted by the trivial, the absurd, the vain, and the shallow?
Yesterday I gave a talk at the Telecoms World Africa conference at the Sandton Convention Centre. I pointed out the aweful tragedy, caused largely by poor government policy and poor implementation of good policy, that South Africa did not feature at all as a producer in the global knowledge economy. We are relegated to the role of mere consumers, and if individual South Africans want to make it in the knowledge economy, they have to go elsewhere. There are no skills here. And we don't believe in ourselves, we don't believe that we can be as good as anyone else. We are flaccid in the way we think about ourselves.
A representative of a major international company brought this home to me when she said the only place they could get skilled people to do technology implementation in Africa was China. How much sadder is that then a painting containing the president's flaccid dick? I saw in that painting a symbol of what a limp nation we have become, fighting one another, fighting over wealth, fighting over meaningless ideas, instead of erecting our collective will to fight the comon enemy - poverty, ignorance, and the loss of our idea capital by being relegated to being consumers in a backwater of the global knowledge economy.
It doesn't have to be that way. We have lost our way. We need to find it again. We need to harden our resolve, that is what the spear of the nation needs to be doing. We should not paint it over and imagine that doing so is important.
Last year I was invited to a conference to talk about “what constitutes the high road, and what the low road in the use of technology in higher education in South Africa. I ended up not going to the conference, but the I made the diagram below to use in my talk. Every day I hear from friends and colleagues in universities throughout South Africa, and there seems to be a Savonarella-like view of technology among the university leadership. It is reinforced by the box vendors, the software license rental companies, and the so-called 'solution integrators'. It is welcomed by a surplus of fossilized IT support personnel who prefer not to get out of their comfort zone of mindless adherence to the principals of the 20th Century, where their minds and hearts still dwell (click image for higher resolution version).
You know a university is on the low road, when you hear things like
I would like to cite some examples of universities that – in South Africa – are on the high road. There are tiny pockets of high road struggling for survival in many universities, but the sad truth is that there are no universities in South Africa today that are actively taking the high road.
This was a talk given to the South African Government Open Source User Group in Pretoria last week.
This is posted here because I am not sure if it is a bug in Firefox or a bug in Chisimba. I will try to keep track of it, and hopefully, one way or the other it gets fixed.
It never turned up before because Firefox must have been parsing
but with version 13, they must have started parsing border-top-right-radius:
It was neither Chisimba NOR Firefox, it was just Derek being dumb.
Today, when I upgraded to Firefox 13, I found that a lot of the stuff that I had done with rounded corners was no longer working. It seems to only be a problem where the corners are not the same top and bottom, and where there are two elements with images in the background overlaying one another using the format
and its cross browser equivalents. Effectively, this breaks almost all the skins we have in Chisimba, and I posted to Twitter 'Is Firefox the new Internet Explorer' where things that used to work suddenly stop and we have to bash out a new bunch of code to fix it. It is certainly annoying when stuff that used to work stops working, bug or no.
So here is the thing...
Here is an image of this skin with rounded corners and how they look on Firefox versions 12 and below, as well as Chrome, Chromium, and a few others. NOTE: Click image for larger view.
Here is an image of the same skin with Firefox 13 (and it does the same in Firefox Nightly).
All Chisimba skins with rounded corners do this in Firefox 13 and Firefox Nightly builds. It is not just the top of the page, but all the elements in the page that have rounded tops where two elements are on top of one another do the same thing.
I don't know whether to log this as a bug against Chisimba or against Firefox. But browsers should not change their behaviour like that, even if it means it is getting stricter as it grows older. Will try to ferrit this out and see that it is fixed one way or the other.
The following instructions place your developer code in your home directory, in a directory called 'chisimba', and does the installation into /var/www/ch. This is a good standard setup that allows you to run other scripts that make your life as a developer easier. The instructions assume you have not installed Apache or messed it up in some way, but it shouldn't matter even if you have installed it.
1. Make a chisimba directory in your home directory
2. Get the Chisimba installer
3. Install chisimba
sudo bash install-chisimba-dev
4. Follow the instructions in the browser when it opens.
That's it! Install the Module Builder module (makemodule), and create your first working module in > 1 minute. If you want to use skins from the canvases directory, type
ln -s ~/chisimba/canvases/* .
OK, off you go then. Set it up.
Today, the day that my Christian friends and family call Easter Sunday, I saw a tweet by Angelica Rocha (@angie4edtech)
which was retweeted by Audrey Watters.
This got me thinking about computer science in schools, which I suppose was its intent.
But first I had to dissect the question. Lately, I have been pondering a lot about the nature of questions that people ask, and the implicit assumptions as well as the emotions they contain. If you have read some of my blog posts answering specific questions about FOSS, you will see some of my thoughts on how questions can be used to create emotions or responses that have nothing to do with the answer.
In the 1960s, mathematician, computer scientist Seymour Papert postulated that a computer could allow learners to shape the way in which a computer was used, and to construct knowledge in ways and domains that would be impossible without it. Papert suggested that using a computer, learning math could be made natural and effective, like learning Zulu by living in KwaZulu-Natal as opposed to being taught Zulu in a classroom in an English speaking region. Papert posed the question "Does the child program the computer or does the computer program the child?" (there were no PCs then).
On the one level the question is meaningless, and on the other it's answer is axiomatic, but in between lies the true meaning of the question. Where does the power in the child-computer relationship lie? More importantly, it gives rise to the question "What are we doing today to shift the balance of power more in the direction of the child?"
For the first two instances of the question, the use of the "or" operator is entirely inappropriate. Of course, we need an operational definition of 'programming', since the word is inappropriately applied to the child as the technology does not deliberately construct algorithms and load them into the child for their execution. On this level, it is a meaningless question, and in this sense the first clause is true, and the second one false (C-PC !PC-C). But that is not what Papert was on about.
In the second instance of the question, we can adopt an operational definition that defines 'programming' as creating a sequence of instructions in the case of the child programming the computer, and altering the behaviour of the child in the case of the computer programming the child. All interactions with technology are - well interactions - and the influence runs in both directions. There is no single answer to this instance of the question, as the degree to which the relationship is skewed depends on context. A child doing some deep programming task, such as writing a module for the Linux kernel has a different kind of relationship with the computer than a child playing Angry Birds.
We first need to acknowledge that all technology works like this. If id didn't we would still be living in caves and foraging for roots and fruits. It is fundamental to our nature, we give up some power to technology and its creators for the real or perceived benefit it brings. We create the technology, and then the technology alters our behaviour. Which way the influence runs depends on the nature of the technology and our relationship with it.
But neither of these meanings was what Papert had in mind. He was asking, in an obscure and metaphorical way, where does the centre of power lie in the relationship between the child and the computer. His work led to the creation of the Logo programming language, and the kinds of things he had in mind were related to a child ACTUALLY programming a computer, something that is a rare phenomenon these days. And this is the crux of the challenge we face in building a so-called knowledge economy.
There was a time in the brief history of computing when computing was taught at school, but these days, it seems unlikely to happen very much. I have four children, two have finished school, and two are still in high school. They all took subjects that have the word computer in them (or some watered down term for computers), but not one of them have the faintest rudiments of knowledge about programming, and despite it being something I do almost every day for the pure pleasure of it, neither of them and neither of their friends have any clue about computer programming. Not even web scripting or an entry level language like logo. Not even how this text is bolded in HTML.
So, the answer, at this time in the 21st Century, using the third interpretation of the question, the answer is clearly that the power lies with the computer as a manifestation of the ideas and activities of other people who live on the other side of the asymmetric relationship. These are the people who conceived the programmes, wrote the games, designed the applications, or created the web sites and applications that are being used. There is not ONLY a relationship BETWEEN computer and child, there is a relationship AMONG computer, child, and a whole lot of other people. It is a highly skewed relationship these days for most children.
This relationship has been weakened and skewed by a combination of the technology itself (computers are easier to use because people have already programmed them) and educational policies around the world that have shifted computers from the centre to the periphery of learning. We no longer learn ABOUT computers, we learn WITH them (if we are lucky). The theoretization of computers in learning, and the creation of a pseudoscience around it has created the illusion that we still do deep stuff with computers. We mostly don't.
Of course, the phenomenon of 'backgrounding' happens with all technology. Perhaps it is a tragedy, perhaps it is natural, human. I find it unfortunate, it has happened too early with computers, and in South Africa, we seem dead intent on propagating this misfortune in our education systems. I find it sad that we are losing opportunities for more general and widespread capabilities to tell 'the computer' what to do. In South Africa, our school-level education system seems to be increasingly based on a 'for dummies' approach.
We talk about maths and science education, yet hardly anyone is saying that to have effective maths and science education, we need computer science. Teaching Maths and Science education without computer science is like trying to teach literacy without ANY means to produce written words. We have a lot to say about the so-called knowledge economy, without understanding that the knowledge economy rests entirely on the work of people who are able to exert force and do work deep down in the increasingly smaller bowels of the computers that are ubiquitous in our lives. If we don't delve that deeply into computers, all South Africa will ever be is a peripheral player and consumer in the knowledge economy. We will be colonised and exploited AT LEAST as badly as the Apartheid system was exploitative.
Eben Moglen said "software is life". A society that does not have a widespread understanding of computer science in all its forms will not understand that the implication of this is the formation of a society that is not programming the computer, but a computer that is (as a mediator) programming that society. And a programmed society is not free.
The solution? Talk about computers, not watered down phrases. Teach programming, not web browsing and Facebook posting. Take back control. Shift the balance of power in our favour. And of course, Free and Open Source Software can help make that happen.
I have just spent some time working on cleaning up code that was written by a group of developers, and it is absolutely incomprehensible how they could have gotten things so badly wrong. Chisimba provides so many tools to help developers create good code, but having tools available means nothing if they are not used. One of these tools, that could have made such a difference if it had been used, is the module builder.
Module builder is a developer module within the Chisimba application framework that allows a developer to create a basic installable module in a few seconds. It allows for the creation of modules that use JSON templates, or that use a dynamic interface built using predefined blocks. It is the best way to start a new module because it creates code that is an example of best practice, and that represents all of the Chisimba coding standards. Developers then add code to the module by following the same standards. The module is fully installable when it is created, after about 20 seconds of really hard work!
If you are developing Chisimba modules, there are other tools to help you. For example, clone-chisimba, a bash script that clones your code to create a new installation by building symlinks to one common code base. That way, you don't have to maintain multiple copies of your developer code. Another is install-chisimba, which fully sets up a developer machine from scratch provided you are running Ubuntu. You can tweak it for other distros.
I totally don't get people who who do things manually when there are scripts and other automation tools available. Even worse, is when they do things manually and create a complete and utter mess!
Your Chisimba production or enterprise site will be much faster and more reliable if you install an opcode cache or accelerator for PHP. Most PHP accelerators work by caching the compiled bytecode of PHP scripts to avoid the overhead of parsing and compiling source code on each request (some or even most of which may never be executed). To further improve performance, the cached code is stored in shared memory and directly executed from there, minimizing the amount of slow disk reads and memory copying at runtime.
We recommend APC (Alternative PHP Cache), a free, open source framework that optimizes PHP intermediate code and caches data and compiled code from the PHP bytecode compiler in shared memory. See http://en.wikipedia.org/wiki/List_of_PHP_accelerators for alternatives, including a proprietary commercial one. See http://www.php.net/manual/en/intro.apc.php for more information about APC.
To install APC, you can use PECL, which should be installed on your server already if you have installed a typical LAMP stack or followed the Chisimba installation instructions or run one of our installer scripts. PECL is a repository of PHP extensions that are made available via the PEAR packaging system. You need build-essential on your system, as well as the Perl-compatible regular expression library (PCRE). If you have not installed it, first install it with:
$ sudo apt-get install build-essential libpcre3 libpcre3-dev
$ sudo pecl install extname
downloads the extension automatically, so in this case there is no need for a separate download. You can therefore install APC by running:
$ sudo pecl channel-update pecl.php.net
$ sudo pecl install apc
You will be asked:
Enable internal debugging in APC [no] :
Enable per request file info about files used from the APC cache [no] :
Enable spin locks (EXPERIMENTAL) [no] :
Enable memory protection (EXPERIMENTAL) [no] :
Enable pthread mutexes (default) [yes] :
Enable pthread read/write locks (EXPERIMENTAL) [no] :
You can select the default for all of them. You will then get a lot of things written to the terminal window, finishing with:
Build process completed successfully
install ok: channel://pecl.php.net/APC-3.1.9
configuration option "php_ini" is not set to php.ini location
You should add "extension=apc.so" to php.ini
The important thing here is that if it finishes with errors, you need to do some debugging, perhaps you are missing some of the critical components. An important note here is "You should add "extension=apc.so" to php.ini". To do so,
$ vi /etc/php5/apache2/php.ini
In the future, if new versions of APC are released, you can easily upgrade them using
$sudo pecl upgrade apc
There are two primary decisions to be made configuring APC. First, how much memory is going to be allocated to APC; and second, whether APC will check if a file has been modified on every request. The two ini directives that control these settings are apc.shm_size and apc.stat, respectively. apc.shm_size defaults to "32M" and is changeable in PHP_INI_SYSTEM. apc.stat defaults to "1" and is also changeable in the PHP_INI_SYSTEM. I would leave them at their default values and monitor your installation.
However, James Scoble, who manages Chisimba installations at UWC, which runs http://www.uwc.ac.za as well as their eLearning server. He says
"we use APC with 300Mb shared RAM. Without APC enabled on the PHP level, the Portal server was running out of RAM and starting to disk-thrash."
-- James Scoble, UWC
UWC also runs multiple application servers, with load balancing due to the large volumes of traffic. On a system with 8Mb of RAM, it should be OK to set this to 256Mb or so, but tuning a server settings is really about watching how it behaves, and responding accordingly.
Once the server is running, the apc.php script that is bundled with the extension should be copied somewhere into the docroot and viewed with a browser as it provides a detailed analysis of the internal workings of APC.
$ cp /usr/share/php/apc.php /var/www/
Then open http://yourserver.com/apc.php. If you get
No cache info available. APC does not appear to be running
then APC is not activated, and you need to take the recommended action. Edit your php.ini file as noted above, find the section that says
; Dynamic Extensions ;
immediately after that text, write the file and restart apache using
$ service apache2 restart
Open http://yourserver.com/apc.php again and you should get some information about APC on your system, as well as some graphs. Be sure to move this file outside your web root, putting it back only when you need to use it.
Although this video misses the tens of thousands of independent developers, testers and users who also contribute to Linux, and focuses more on the Linux kernel than the whole GNU/Linux operating system. Still, it is a good watch.
Would be nice to see something like this covering packages. Without packages, the kernel has no work to do.
Filters are a powerful means to include remote and local content into any Chisimba content. This short video just demonstrates using filters in Chisimba content.