<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Aptivate &#124; A Blog for ICT4D &#187; Internet</title>
	<atom:link href="http://blog.aptivate.org/category/internet/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.aptivate.org</link>
	<description>International I.T. Development</description>
	<lastBuildDate>Wed, 01 Feb 2012 14:09:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.6</generator>
		<item>
		<title>Rough Guide to rural data collection with ODK</title>
		<link>http://blog.aptivate.org/2011/12/05/rough-guide-to-rural-data-collection-with-odk/</link>
		<comments>http://blog.aptivate.org/2011/12/05/rough-guide-to-rural-data-collection-with-odk/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 17:58:43 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Appropriate Technology]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Engineer's Log]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mobiles]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[data collection]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=986</guid>
		<description><![CDATA[This post has three purposes, which I think overlap sufficiently to combine them: A User Guide for the system that we developed for UNICEF, IDS and RuralNet Zambia A Developers&#8217; Guide for anyone wishing to build something similar Notes on lessons learned that may assist future implementers Project goals Automate the data entry part of [...]]]></description>
			<content:encoded><![CDATA[<p>This post has three purposes, which I think overlap sufficiently to combine them:</p>
<ul>
<li>A User Guide for the system that we developed for UNICEF, IDS and RuralNet Zambia</li>
<li>A Developers&#8217; Guide for anyone wishing to build something similar</li>
<li>Notes on lessons learned that may assist future implementers</li>
</ul>
<h3>Project goals</h3>
<p>Automate the data entry part of a long paper-based survey, by replacing the paper forms with electronic devices.</p>
<h3>Hardware and application selection</h3>
<p>The survey has several long and complex questions, and long sets of multiple-choice answers. The data collection needs to be done in dusty rural Zambia, and the devices might need to be used for a full day without power. Collected data should be sent wirelessly to a secure data repository at some time after collection.</p>
<p>Text entry is required for many fields. That means either a real keyboard with keys, or a sufficiently large touch screen to type comfortably on. Use of the device camera, and presentation of reports and graphs on the same device, might be required in future.</p>
<p>Two possible hardware platforms were identified:</p>
<ul>
<li>Tablet laptops with touch screens</li>
<li>Tablet mobile devices (iPad or Android tablet)</li>
</ul>
<p>We selected the latter for this project due to lower cost, lighter weight, better usability and longer battery life.</p>
<p>The available software options that we identified were:</p>
<ul>
<li>EpiSurveyor (Java J2ME, partly closed source, we have used before and fixed bugs)</li>
<li>OpenXdata (Java J2ME, open source, developed and supported by an Aptivate alumnus among others)</li>
<li>Open Data Kit (ODK) (Android, open source, active community)</li>
<li>Bespoke online/offline survey in HTML5</li>
</ul>
<p>Of these, we eliminated EpiSurveyor and OpenXdata due to lack of compatibility with the hardware platform(s) we had chosen.</p>
<p>We chose ODK over a bespoke system due to limited time available for development, and ability to easily take photos and record GPS coordinates using the device&#8217;s hardware.</p>
<p>Of the available Android tablet devices, we chose the Samsung Galaxy Tab for the pilot project, due to its high quality construction. For future projects we would probably use a lower cost device; see the lessons learned for details.</p>
<h3>Form creation</h3>
<p>Since the survey is quite long (about 230 questions) we wanted an easy way to enter the questions. The ODK application requires the form to be in XForms format. We identified the following tools for creating XForms:</p>
<ul>
<li><a href="http://opendatakit.org/use/build">ODK Build</a></li>
<li><a href="http://code.google.com/p/purcforms/">PurcForms</a></li>
<li><a href="https://sites.google.com/site/kobodesk/kobo-form-builder">Kobo Form Builder</a></li>
<li><a href="http://opendatakit.org/use/xls2xform">XLS2XForm</a> (actually the <a href="https://github.com/jbeorse/pyxform">pyxform</a> fork)</li>
</ul>
<p>We decided to use XLS2XForm, which enabled us to enter the large number of questions easily in Excel. The others all have graphical builders, which have advantages and disadvantages for less technical users:</p>
<ul>
<li>More visually appealing</li>
<li>All available options presented visually (types of controls, groups, etc.)</li>
<li>Less likely to make a mistake and produce an invalid form</li>
<li>Cumbersome user interface slows down data entry</li>
</ul>
<p>Unfortunately, none of these designers were able to import an existing form in XForms format, which means that the modifiable &#8220;source code&#8221; of the form must be maintained in a &#8220;proprietary&#8221; format in each case, and it&#8217;s difficult to switch between tools.</p>
<p>You can download the conversion tools, and the Excel spreadsheet with the completed questionnaire as we delivered it to RuralNet, <a href="https://github.com/aptivate/idspartimob">here</a>. RuralNet staff, please use the latest version of the spreadsheet that you can find locally. To use the tools, you will need to download and install <a href="http://www.python.org/getit/">Python 2.7</a> and <a href="http://www.oracle.com/technetwork/java/javase/downloads/jre-7u1-download-513652.html">Java</a> (JRE). Then download the tools <a title="ZIP download" href="https://github.com/aptivate/idspartimob/zipball/master">as a ZIP file</a> and extract it somewhere. I recommend that you keep the master copy of the spreadsheet in <a href="https://www.dropbox.com/home">Dropbox</a> to ensure that it&#8217;s backed up, and it&#8217;s always clear what the latest version is.</p>
<p>For help in building surveys using XLS2XForm, please see the <a href="http://opendatakit.org/help/form-design/xls2xform/">documentation</a>. In addition to the question types listed there, we have used the following shortcuts, which also work in this customised version of XLS2XForm:</p>
<ul>
<li><code>text</code> is short for <code>add text prompt</code> (a text field, such as a person&#8217;s name)</li>
<li><code>note</code> is short for <code>add note prompt</code> (a read-only field, providing additional information for the user)</li>
<li><code>time</code> is a time field without a date (for example, survey start and end times)</li>
</ul>
<p>To compile the spreadsheet into an XForms form, run the <code>build_and_validate.py</code> script by double-clicking on it. If it works, it will show the message &#8220;Success!&#8221;, otherwise it will show an error message, usually caused by a mistake in the Excel spreadsheet. If it works, it will create (replace) the file called <code>zambia-ranq-round3.xml</code> in the same directory. If your spreadsheet has a different name, you can create a shortcut to call <code>build_and_validate_custom.py</code> with the name of the spreadsheet on the command line.</p>
<h3>Software components</h3>
<p><a href="http://opendatakit.org/use/aggregate/">ODK Aggregate</a> is the software that powers the Internet server. It is a repository for blank forms (designs) and completed forms (data). Our server is located at <a href="http://partimob.appspot.com/">http://partimob.appspot.com/</a>. This server is currently paid for by us, and will need to transfer to RuralNet at some point.</p>
<p><a href="http://opendatakit.org/use/collect/">ODK Collect</a> is the application runs on the device, and users interact with it to complete the survey. It&#8217;s essentially a user interface for XForms. It can download blank forms (designs) from an ODK Aggregate server, and upload completed forms (data) to the Aggregate server as well.</p>
<p><a href="http://code.google.com/p/opendatakit/wiki/ODKBriefcase">ODK Briefcase</a> is the software that downloads completed forms (data) from the Aggregate server and convert them into CSV (spreadsheet) format, which can be loaded into</p>
<h3>Customised ODK Collect</h3>
<p>We are using a custom version of ODK Collect. You can download the source code for it <a href="http://code.google.com/r/chris-collect/">here</a>, or the compiled application <a href="https://github.com/aptivate/idspartimob/blob/master/ODK-Collect-trunk-111119-custom.apk">here</a>. You can also find it in the ZIP file download. If you prefer, you can use the <a href="http://opendatakit.org/use/collect/">latest official version of ODK Collect</a>. The two are compatible, but our version adds the following useful features:</p>
<ul>
<li>Use supplied login and password by default to save a round trip and a prompt.</li>
<li>Add keyboard navigation, useful for form filling on android-x86 because the mouse interface is pretty clunky.</li>
<li>Restore ability to modify completed and submitted forms on the device, which was removed from the official version in 1.1.7.</li>
<li>Improved error messages and progress indication during form uploads.</li>
<li>Allow setting the instance name on the first page of the survey.</li>
<li>Allow saving incomplete surveys on required questions (in case a survey is interrupted; almost all of our questions are required).</li>
</ul>
<p>There are several ways to install ODK Collect on a device:</p>
<ul>
<li>Download it from the Android Market (official version only, not our customised version)</li>
<li>Copy the APK file onto a microSD card, insert the card into the device, and use the <em>My Files</em> application find and open it from the SD card.</li>
<li>Attach the USB cable from the device to a computer, enable mass storage mode on the device, and on the computer, drag and drop the APK file onto the device&#8217;s internal memory, then use the <em>My Files</em> application to find and open it.</li>
<li>Attach the USB cable from the device to a computer, and use <a href="http://developer.android.com/guide/developing/tools/adb.html">ADB</a>&#8216;s <code>install</code> command to install the APK file.</li>
</ul>
<p>It&#8217;s useful to put the application onto the device&#8217;s desktop. To do that, open the Applications list, find ODK Collect, and press and hold it with your finger for a few seconds. The background will change to the desktop; release your finger to drop the application there.</p>
<p>It&#8217;s also useful to remove all the other junk from the desktop. For each icon and widget on the desktop, press and hold it with your finger for a few seconds, until the trashcan icon appears, then drag your finger to the trashcan and release it there.</p>
<h3><span>Form management on the device</span></h3>
<p><span style="font-weight: normal;">There are several ways to put blank forms (designs) onto the tablets:</span></p>
<ul>
<li>Download them from the ODK Aggregate server using ODK Collect.</li>
<li>Copy them onto a microSD card, insert the card into the device, and use the <em>My Files</em> application to copy them from the SD card to the /sdcard/odk/forms directory.</li>
<li>Attach the USB cable from the device to a computer, enable mass storage mode on the device, and on the computer, drag and drop the form into the /sdcard/odk/forms directory.</li>
<li>Attach the USB cable from the device to a computer, and use <a href="http://developer.android.com/guide/developing/tools/adb.html">ADB</a> or <a href="http://developer.android.com/guide/developing/debugging/ddms.html">DDMS</a> to push the file onto the device, into the /sdcard/odk/forms directory.</li>
</ul>
<p>Of these methods, ADB or DDMS is recommended for rapid development, and using the Aggregate server is recommended for production use, since the form must be installed on the Aggregate server for it to be able to accept submissions.</p>
<p>Similarly there are several ways to copy completed forms (data) off the device:</p>
<ul>
<li>Upload them to the ODK Aggregate server using ODK Collect.</li>
<li>Use the <em>My Files</em> application to copy them from /sdcard/odk/instances to a microSD card, then remove the card and connect it to the computer, and drop the files into the ODK Briefcase data directory.</li>
<li>Attach the USB cable from the device to a computer, enable mass storage mode on the device, and on the computer, drag and drop the files from the /sdcard/odk/instances directory to the ODK Briefcase data directory.</li>
<li>Attach the USB cable from the device to a computer, and use <a href="http://developer.android.com/guide/developing/tools/adb.html">ADB</a> or <a href="http://developer.android.com/guide/developing/debugging/ddms.html">DDMS</a> to pull the file from the device&#8217;s /sdcard/odk/instances directory to the ODK Briefcase data directory.</li>
</ul>
<p>Of these methods, using ODK Aggregate is recommended for development and production use.</p>
<p>Since the Aggregate server is on the Internet, this method requires that the device have Internet access. So it either needs a valid SIM card installed with credit and a data bundle, or a WiFi network connected. We had many problems with using SIM cards for data, so WiFi is preferred if possible.</p>
<p>The directories mentioned above will not exist until ODK Collect is installed on the device and run for the first time. Forms downloaded from the Aggregate server will also be placed in the /sdcard/odk/forms directory. Forms completed on the device will be placed in the /sdcard/odk/instances directory.</p>
<h3>Configuring ODK Collect</h3>
<p>Collect needs to know the details of the ODK Aggregate server to log into it, download blank forms and upload completed forms.</p>
<p>Open the ODK Collect application, press the Settings button and click on <em>Change Settings</em>. Click on <em>URL</em> and enter <em>https://partimob.appspot.com</em>. Similarly, complete the Username and Password using the details that you&#8217;ve been given by the Aggregate server operator, or the account that you&#8217;ve created on the Aggregate server. This account should only have <em>Data Collector</em> permissions, no more. Press the Back key to get back to the main menu of ODK Collect.</p>
<h3>Downloading forms using ODK Collect</h3>
<p>Open ODK Collect on the device, and click on the <em>Get Blank Form</em> button. Collect will try to log into the Aggregate server using the details that you&#8217;ve provided, and get a list of forms on the server that have the <em>Downloadable</em> box ticked. This is on by default for newly uploaded forms.</p>
<p>Tick the box next to all the forms that you want to download, and click on the <em>Get Selected</em> button.</p>
<h3>Filling forms on the device</h3>
<p>Open ODK Collect on the device, and click on the <em>Fill Blank Form</em> button. All the forms in the device&#8217;s <em>/sdcard/odk/forms</em> directory should be listed. Choose the form that you want to complete.</p>
<p>You will see an introductory screen showing how to move between questions by swiping your finger across the screen, from right to left or left to right. This screen has a text box at the bottom, which you can use to name the form that you&#8217;re completing. Naming forms is useful if your data collection is interrupted and you need to resume it later. It&#8217;s much easier to identify the form using its name, rather than opening it and flicking through to find some identifying information. You might name the form based on the household code that you&#8217;re surveying.</p>
<p>Depending on your answers to some questions, others may be hidden, or their text might change.</p>
<p>At the end of the form there is another chance to <em>Name this form</em>, and a tickbox to <em>Mark form as finalized</em>. Before you can upload the form to the Aggregate server, this box must be ticked, and you must press the <em>Save Form and Exit</em> button. Otherwise Collect will consider that the form is incomplete.</p>
<h3>Sending completed forms to Aggregate</h3>
<p>Open ODK Collect on the device, and click on the <em>Send Finalized Form</em> button on the main menu. Tick the box next to all the forms that you want to upload to Aggregate, and click on <em>Send Selected</em>. After the upload is complete, you should see the <em>Upload Results</em> message. Every form should have &#8220;Success&#8221; next to it, otherwise it was not sent successfully.</p>
<h3>Downloading forms using Briefcase</h3>
<p>We are using a customised version of ODK Briefcase with the following changes:</p>
<ul>
<li>Fix the export of repeated groups, which before only worked for the first row (<a href="http://code.google.com/p/opendatakit/issues/detail?id=461">issue 461</a>).</li>
<li>Shorten exported column names, to allow the CSV file to be imported into Access.</li>
<li>Allow the server name, username and password to be provided on the command line (or via a shortcut).</li>
</ul>
<p>You can find the source code <a href="http://code.google.com/r/chris-briefcase/source/checkout">here</a> and the pre-compiled version <a href="https://github.com/aptivate/idspartimob/blob/master/briefcase-1.0-jar-with-dependencies.jar?raw=true">here</a>, as an executable JAR file. You can also find it in the ZIP file download. If you make changes to the source and want to build the executable JAR again, install Maven and use the <code>mvn package</code> command.</p>
<p>To download the completed forms, open Briefcase by double-clicking on the <code>briefcase-1.0-jar-with-dependencies.jar</code> file. On the Transfer tab, click on the Connect button. For the URL, enter <code>https://partimob.appspot.com</code>, and for the user name and password, give the details of an ODK Aggregate account with <em>Data Viewer</em> permissions.</p>
<p>Then you should see a list of forms appear under the heading <em>Forms to Transfer</em>. Tick the box next to the one that your users have been completing, and then click on the Transfer button. If you do this after all the completed forms (data) have been submitted to the ODK Aggregate server, you will not need to do it again for that form template (design).</p>
<p>Now switch to the <em>Transform</em> tab and see if the form appears in the <em>Form</em> list. If it doesn&#8217;t, then exit and restart the Briefcase application (<a href="http://code.google.com/p/opendatakit/issues/detail?id=464">issue 464</a>).</p>
<p>For <em>Output Type</em>, choose <em>.csv and media files</em>. For <em>Output Directory</em>, choose the directory where you&#8217;d like to save the CSV files. Note that any previous files exported to that directory from the same form will be overwritten without warning, even if they have been modified (cleaned). Click on the <em>Output</em> button to write the CSV files.</p>
<h3><strong>Cleaning data in Excel</strong></h3>
<p>You can find the Excel spreadsheet that we use for data storage and cleaning here. Note that Excel is a long way from the best way to store and manipulate data like this. Microsoft Access would be far more appropriate. Yet again I wish there was a sufficiently powerful open source alternative.</p>
<p>Because the spreadsheet contains cleaned data, which is &#8220;better&#8221; than the raw data which is included in the CSV export, we don&#8217;t want to overwrite existing rows. For the main section of the questionnaire (the so-called Single Responses) you can include only the new data like this:</p>
<ul>
<li>Open the main spreadsheet and switch to the <em>Single Responses</em> tab</li>
<li>Highlight all rows from 3 down to the bottom, and <em>Sort</em> them by the <em>SubmissionDate</em> column.</li>
<li>Note the last submission date on this spreadsheet.</li>
<li>Open the newly exported CSV file for the single responses (something like <em>RANQ-2011-Round-4-v5.csv</em>).</li>
<li>Sort this file by the <em>SubmissionDate</em> column as well.</li>
<li>Highlight and copy all the rows whose submission date is later (more recent) than the last one in the main spreadsheet.</li>
<li>Paste them at the bottom of the Single Responses tab of the main spreadsheet, below the other data.</li>
</ul>
<p>For the other tables, this process needs to be done completely manually at present.</p>
<p>You can then check and clean the data by viewing and modifying it in Excel. Note that each sheet has one or two columns at the end, which are filled by formulae that look up values from the Single Responses sheet, such as the <em>Household Code</em>.</p>
<h3>Using the Android x86 Emulator</h3>
<p>To be written.</p>
<h3>Lessons learned</h3>
<p>To be written.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2011/12/05/rough-guide-to-rural-data-collection-with-odk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How can a $35 tablet computer change the world?</title>
		<link>http://blog.aptivate.org/2011/10/21/how-can-a-35-tablet-computer-change-the-world/</link>
		<comments>http://blog.aptivate.org/2011/10/21/how-can-a-35-tablet-computer-change-the-world/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 22:38:51 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Africa]]></category>
		<category><![CDATA[Appropriate Technology]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[India]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Mobiles]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=966</guid>
		<description><![CDATA[Osama Manzar poses some very interesting questions about India&#8217;s new $35 tablet computer &#8220;for the poor&#8221;. However he doesn&#8217;t attempt to answer these questions, leaving the reader in no doubt that he thinks the answer is No! in all cases. I must admit to being skeptical about any such innovation, and I&#8217;ve been listening to [...]]]></description>
			<content:encoded><![CDATA[<p>Osama Manzar poses some <a href="http://www.livemint.com/Articles/2011/10/17000845/Aakash-may-not-help-bridge-the.html">very interesting questions</a> about India&#8217;s new $35 tablet computer &#8220;for the poor&#8221;. However he doesn&#8217;t attempt to answer these questions, leaving the reader in no doubt that he thinks the answer is <strong>No!</strong> in all cases.</p>
<p>I must admit to being skeptical about any such innovation, and I&#8217;ve been listening to <a href="http://tech.groups.yahoo.com/group/bytesforall_readers/message/14910">both</a> <a href="http://tech.groups.yahoo.com/group/bytesforall_readers/message/14921">sides</a> of the <a href="http://tech.groups.yahoo.com/group/bytesforall_readers/message/14929">debate</a> on the <a href="http://tech.groups.yahoo.com/group/bytesforall_readers/">BytesForAll</a> mailing list. Despite my skepticism, Osama&#8217;s questions have some answers, and I&#8217;d like to present them for comment.</p>
<blockquote>
<ul>
<li>India has one of the lowest ratio of teachers—just 456 teachers per million people.</li>
<li>Seventy-two percent of our primary schools have only three teachers or less.</li>
<li>25% of teachers were absent from school, and only about half were teaching, during unannounced visits to a nationally representative sample of government primary schools.</li>
</ul>
<p>How is the $35 tablet going to solve any of these problems?
</p></blockquote>
<p>Of course technology on its own is not going to solve these problems. It is just a valuable weapon in the armoury of those who would launch an all-out war on poverty (and other abstract nouns).</p>
<p>Kentaro Toyama, an ex-Microsoft guru turned ICT4D researcher, <a href="https://plus.google.com/113254845719530983612/posts/gtju48L8bYq">says</a> that &#8220;technology is [just] an amplifier of human intent and capacity.&#8221; And when faced with a task that&#8217;s possible but simply too large, an amplifier is exactly what we need. It doesn&#8217;t need to be high tech. Tanzania did just fine with radio, one of the oldest, simplest and most inclusive ICTs:</p>
<blockquote><p>
About ten years after independence, Tanzania decided to move towards universal primary education, almost doubling the number of children in school. The government estimated that it needed an extra 40,000 teachers. As the existing training colleges were producing only 5,000 new teachers a year, it was decided to recruit secondary school leavers and train them on an apprenticeship model, partly on the job and partly through distance education. Over a period of three years, they were posted in schools where they had a reduced teaching load. They then followed correspondence courses backed by radio programmes; they were supervised and tested on their classroom practices, and passed their examinations. Two evaluations found that they ended up reasonably competent in the classroom (Chale, 1993; quoted by Perranton, 2000; retrieved from <a href="http://archive.unu.edu/africa/files/UNU_RevitalizingHigherEducation.pdf">UNU</a>)
</p></blockquote>
<p>If India were to launch a massive teacher education programme, they would find it cheaper to implement that programme using technology. For example, they might distribute radios, TVs, portable audio players or even (heaven forbid!) computers to trainee teachers. It might take longer for those teachers to reach high standards, and more might drop out, without the personal connection and feedback of face-to-face training. Even so, one could train more teachers for more time and achieve a similar number of fully trained teachers at a lower cost.</p>
<blockquote><p>
In the business sector, more than 70% micro, small and medium enterprises (MSMEs) are not connected to information society to leverage opportunities of business and efficiency. How will the $35 tablet help in the financial inclusion of MSMEs, which are largely situated in small towns and remote areas?
</p></blockquote>
<p>It&#8217;s unfortunate that the tablet doesn&#8217;t include a long-range wireless network (such as GPRS), which must surely cover most of India as it does Africa. Even without an Internet connection, it can still provide useful services such as record keeping, business accounting and stock tracking to small enterprises. The tablet is based on Android, but the marketplace has been disabled, and this is a serious limitation. I think it&#8217;s likely to be overcome soon. When that happens, India&#8217;s many skilled software developers will be free to create localised applications for a potentially huge local market.</p>
<blockquote><p>Most of India’s 3.3 million non-governmental organisations (NGOs) are also located in remote areas—70% of them lack any sort of information and communication technology (ICT) infrastructure or connectivity, and have no websites.</p>
<p>How can the $35 tablet help these NGOs’ global outreach efforts or aid the millions of people working with them in rural areas?</p></blockquote>
<p>You probably know the answer to this question as well as I do: <em>The same way as computer and phones can, only more so.</em> Helping people to communicate and to do their work is exactly what ICTs do. All of them. With the possible exception of Angry Birds. A computer can help us to make leaflets, track visits to patients and beneficiaries, diagnose illnesses, improve farming techniques, or learn about anything we wish to know in the whole world of knowledge. </p>
<blockquote><p>Can it bring transparency in governance at this level?</p></blockquote>
<p>Good question. Not by itself, sure. Transparency comes from open data. The people might get together to publish what the government would rather hide, or pressure the government to release the data, but a $35 tablet won&#8217;t help them much.</p>
<p>When they do release that data, however, the usual problem is how to make use of it. Government data tends to be massive and unwieldy, and answering difficult questions takes much time and significant skill even with the best of data. I think that free, open, widecast media provide the biggest opportunity to make real use of transparency, and our use of the Internet as an enabler of democracy is the best example of that.  Potentially, a simple but powerful Internet device could help bring people together to investigate and answer those difficult questions. But by the sound of it, this tablet is not quite there yet. Hopefully it will be soon.</p>
<blockquote><p>
Since a large population of our country communicate verbally, and cannot read and write with ease, their preferred medium of content consumption and content production is audio-visual&#8230; But to make use of good multimedia content, you need powerful machines, not cheap and underperforming ones.
</p></blockquote>
<p>I disagree with that. I grew up with &#8220;multimedia content&#8221; on BBC Micros: simple games, moving blocks around a screen, simple word processors and spreadsheets and databases and graphics. A picture is worth a thousand words, and a simple, clear diagram can be worth far more than a complex, confusing one. Advanced graphics are no substitute for a visual designer&#8217;s ingenuity and skill. Wikipedia is &#8220;multimedia content&#8221; that is perfectly suited to a $35 tablet.</p>
<blockquote><p>
If the $35 tablet can do anything good to education in India, the only way is by handing them to each and every teacher and school management staff to monitor the workings and functioning of the school and its teachers&#8230;
</p></blockquote>
<p>Monitoring is an interesting application, and a double-edged sword. <a href="http://www.ids.ac.uk/go/idsperson/professor-robert-chambers">Robert Chambers</a>, the inventor of <a href="http://en.wikipedia.org/wiki/Participatory_rural_appraisal">participatory rural appraisal</a>, told us a story at the recent <a href="http://ict4d-finale.eventbrite.com/">ICT4D Finale</a> event in Cambridge of a hospital in India where the nurses were given mobile phones &#8220;to collect data at the source.&#8221; But the director of the hospital used it to monitor what they were doing, effectively spying on them. The nurses went on strike and eventually the director was fired. I think that for monitoring to have a positive benefit, it must be done with consent and a shared vision to use the data to improve performance, not to criticise and control.</p>
<blockquote><p>rather than assuming that each student will buy Aakash and India will become digitally literate overnight.</p></blockquote>
<p>I have to agree with that sentiment, although I&#8217;m not sure who raised it. Kapil Sibal, who takes the credit for inventing the $35 tablet, merely <a href="http://www.telegraphindia.com/1111016/jsp/7days/story_14628545.jsp">said</a>:</p>
<blockquote><p>This low cost device is part of our national mission on education through information and communication technology (NME-ICT) which will connect over 1,000 institutions across the country, enabling tonnes of web-based course content for free.</p></blockquote>
<p>Now that doesn&#8217;t sound so far-fetched, does it?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2011/10/21/how-can-a-35-tablet-computer-change-the-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traffic shaping with PF, ALTQ and HFSC</title>
		<link>http://blog.aptivate.org/2011/08/05/traffic-shaping-with-pf-altq-and-hfsc/</link>
		<comments>http://blog.aptivate.org/2011/08/05/traffic-shaping-with-pf-altq-and-hfsc/#comments</comments>
		<pubDate>Fri, 05 Aug 2011 11:00:32 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Engineer's Log]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[System Administration]]></category>
		<category><![CDATA[bandwidth]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=911</guid>
		<description><![CDATA[We usually use Linux firewalls for traffic shaping, because the power of the traffic control (tc) system exceeds FreeBSD&#8217;s dummynet in most ways. Dummynet can be used to create arbitrary delays and packet loss, which is very useful for simulating poor connections, but not for sharing bandwidth and prioritising packets between different traffic classes on [...]]]></description>
			<content:encoded><![CDATA[<p>We usually use Linux firewalls for traffic shaping, because the power of the traffic control (tc) system exceeds FreeBSD&#8217;s dummynet in most ways.</p>
<p>Dummynet can be used to create arbitrary delays and packet loss, which is very useful for <a href="http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/">simulating poor connections</a>, but not for sharing bandwidth and prioritising packets between different traffic classes on a real traffic shaper.</p>
<p>However, I&#8217;ve just been testing PF (the new standard packet filter) and ALTQ (the alternative queueing system) on FreeBSD, and I&#8217;m impressed by the capabilities. I prefer this combination (PF+ALTQ) over Linux TC because:</p>
<ul>
<li>PF and ALTQ are fully integrated and configured using the same file, whereas TC has its own (very hard to use) classifier. I normally use the iptables CLASSIFY target to classify traffic instead, but this is not integrated.</li>
<li>TC is very hard to use generally. The authors seem more concerned with functionality than usability.</li>
<li>ALTQ has named queues which helps usability enormously compared to TC&#8217;s hex numbered classes.</li>
<li>ALTQ gives very low delay when the interface is not 100% saturated, which seems impossible to achieve with TC.</li>
</ul>
<p>It does annoy me that ALTQ is not enabled in the default kernel, so you have to <a href="http://www.freebsd.org/doc/en/books/handbook/kernelconfig-building.html">compile your own kernel</a>. I used the following commands to copy the default GENERIC configuration to a custom one, which I called ALTQ:</p>
<pre>
cd /boot
cp -p kernel GENERIC # backup the current kernel
cd /usr/src/sys/i386/conf
cp GENERIC ~/ALTQ
ln -s ~/ALTQ .
vi ALTQ
</pre>
<p>and added the following lines to the new kernel configuration file, ALTQ:</p>
<pre>
options ALTQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_PRIQ
</pre>
<p>and then compiled and installed the new kernel:</p>
<pre>
cd /usr/src
make buildkernel KERNCONF=ALTQ
make installkernel KERNCONF=ALTQ
</pre>
<p>and then reboot to load the new kernel. After that, we need to create a pf configuration. Some example configurations use CBQ queues, but I prefer HFSC because:</p>
<ul>
<li>HFSC is guaranteed accurate, whereas CBQ is approximate</li>
<li>CBQ requires you to guess the average packet size and its accuracy depends entirely on this</li>
<li>HFSC has service curves which allow you to deliver small files quickly <strong>and</strong> drop the priority of large connections (e.g. file downloads) with great ease.</li>
</ul>
<p>Here is a sample configuration of PF+ALTQ+HFSC that I used for testing on a transparent bridging firewall (bridge0 connecting em0 and em1):</p>
<pre style="border:1px dashed #bbf;background-color:#ddf;padding:.5em;">
altq on em1 hfsc bandwidth 1Mb queue { ftp, ssh, icmp, other }
queue ftp bandwidth 30% priority 0 hfsc (upperlimit 99%)
queue ssh bandwidth 30% priority 2 hfsc (upperlimit 99%)
queue icmp bandwidth 10% priority 2 hfsc (upperlimit 99%)
queue other bandwidth 30% priority 1 hfsc (default upperlimit 99%)
pass out quick on bridge0 inet proto tcp from any port 21 to any queue ftp
pass out quick on bridge0 inet proto tcp from any port 22 to any queue ssh
pass out quick on bridge0 inet proto icmp from any to any queue icmp
pass out quick on bridge0 all
</pre>
<p>We are only queueing on em1 here, which is the downstream, so we are only limiting downloads. We deliberately limit them to 1 Mbps for testing. The limit should always be lower than your actual download bandwidth, to ensure that the queue is on the FreeBSD firewall and not any other device.</p>
<p>We create four named queues under the root, which is implicitly named <code>root_em1</code>. We reserve 30% of bandwidth each for FTP, SSH and other traffic, and 10% for ICMP. However, any class can exceed its reserved bandwidth, up to the <code>upperlimit</code>, which defaults to 100%, which means that one class can potentially cause delays to traffic in other classes, so we override this to 99%.</p>
<p>Note that even though we create the queues on the em1 device, we must filter packets on bridge0, as otherwise our traffic does not match our pf rules.</p>
<p>Update: I found some more information about <a href="http://doc.pfsense.org/index.php/Traffic_Shaping_Guide">traffic shaping</a> and <a href="http://devwiki.pfsense.org/HFSCBandwidthShapingNotes">advanced usage of HFSC</a>, including realtime guaranteed classes for VoIP.</p>
<p>Update 2: For a simpler setup with ALTQ, try <a href="http://microsux.dk/?p=321">this guide</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2011/08/05/traffic-shaping-with-pf-altq-and-hfsc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>AfNOG 2011, Part 1</title>
		<link>http://blog.aptivate.org/2011/05/28/afnog-2011-part-1/</link>
		<comments>http://blog.aptivate.org/2011/05/28/afnog-2011-part-1/#comments</comments>
		<pubDate>Sat, 28 May 2011 20:57:06 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Engineer's Log]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[System Administration]]></category>
		<category><![CDATA[Training]]></category>
		<category><![CDATA[AfNOG]]></category>
		<category><![CDATA[afnog2011]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[ghost]]></category>
		<category><![CDATA[imaging]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[tanzania]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=791</guid>
		<description><![CDATA[I&#8217;m in Dar es Salaam, Tanzania for AfNOG 2011. I arrived on Wednesday morning at 7am (on the red-eye flight from London Heathrow) and I&#8217;m here until Tuesday 7th June. Until now we&#8217;ve been setting up the venue. We&#8217;ve been super busy, working until midnight every night so far. We had to run our own [...]]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 170px"><a href="http://www.flickr.com/photos/chris_wilson/5768083663/in/photostream"><img alt="Alan Barrett laying cable" src="http://farm3.static.flickr.com/2472/5768083663_6c02262a48_m.jpg" title="Alan Barrett laying cable" width="160" height="240" /></a><p class="wp-caption-text">Alan Barrett laying cable</p></div>
<p>I&#8217;m in <strong>Dar es Salaam, Tanzania</strong> for <a href="http://www.afnog.org/afnog2011/">AfNOG 2011</a>. I arrived on Wednesday morning at 7am (on the red-eye flight from London Heathrow) and I&#8217;m here until Tuesday 7th June.</p>
<p>Until now we&#8217;ve been setting up the venue. We&#8217;ve been super busy, working until midnight every night so far. We had to run our own cables, quite a lot of them (over 600 metres).</p>
<p>Running them through the windows was tricky, since we needed to be able to close them for security, and to allow the air conditioning to work. Someone (Alan?) came up with the genius idea of using tough palm leaves wrapped around them to protect them as they pass through the narrow gap between window panes. Bio-degradable trunking!</p>
<p>To cope with the power failures, Geert Jan built a monster Power-over-Ethernet injector to power the wireless access points in each room and keep the wireless network running.</p>
<p>The training workshops start tomorrow, Sunday 29th May, with the Unix Boot Camp, an introduction to Unix and the command line. We expect that many of the participants will have little experience with Unix, as has been the case in previous years. These free tools have immense benefits, both for us running the workshops and for the participants when they return home. But they are very different to the Windows environments that the participants are most familiar with. Without basic skills, they would struggle and hold back the group during the rest of the workshops.</p>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/chris_wilson/5768609278/in/photostream"><img alt="Feeding the cable monster" src="http://farm3.static.flickr.com/2088/5768609278_e4921feb42_m.jpg" title="Feeding the cable monster" width="240" height="160" /></a><p class="wp-caption-text">Feeding the cable monster</p></div>
<p>I&#8217;m not involved in the boot camp, but after it finishes, we move straight into the main tracks, which last for five days. This year we have some new tracks: Network Monitoring &#038; Management, Advanced Routing Techniques and Computer Emergency Response Team training.</p>
<p>We have also cancelled the basic Unix System Administration track (SA-E) this year, as it has finally been localised to most African countries, and therefore people have the opportunity to attend it locally at lower cost and build local communities. However, this leaves us with nowhere to cover more advanced systems administration techniques, which are some of my favourite topics, including:</p>
<div class="wp-caption alignright" style="width: 170px"><a href="http://www.flickr.com/photos/chris_wilson/5768063791/in/photostream"><img alt="Geert Jan with his 8-way Power over Ethernet injector" src="http://farm4.static.flickr.com/3212/5768063791_fbfc2f5f1e_m.jpg" width="160" height="240" /></a><p class="wp-caption-text">Geert Jan and the Monster Injector</p></div>
<ul>
<li>virtualisation (desktops, servers and thin clients, VirtualBox, Xen, KVM, jails, lxc)</li>
<li>system imaging (ghost, snapshots)</li>
<li>backups (snapshots, Rsync, Rdiff-backup, Duplicity)</li>
<li>file servers (NFS, Samba, sshfs, AFS, ZFS)</li>
<li>virtualised storage (iSCSI, ATAoE, Fibre Channel, DRBD)</li>
<li>cloud computing (Amazon and Linode virtual servers, scripting and APIs)</li>
<li>cluster computing (Mosix, virtual machine host clusters)</li>
<li>DHCP (for network management and booting)</li>
<li>network security (firewalls, port locking, 802.1x)</li>
<li>wireless networks (planning, monitoring, troubleshooting, WEP and WPA, 802.1x authentication)</li>
<li>Windows domains and security (including Samba 4)</li>
</ul>
<p>If participants show enough interest in these topics, they could be added in future. I think it&#8217;s unfortunate that the course is arranged into week-long tracks rather than half-day or one-day sessions from which people could pick and choose, Bar Camp style. That would make it much easier for people to run sessions on many new topics.</p>
<div class="wp-caption alignright" style="width: 170px"><a href="http://www.flickr.com/photos/chris_wilson/5768568162/in/photostream"><img alt="Stacked up computers" src="http://farm4.static.flickr.com/3560/5768568162_e46ef5dd97_m.jpg" title="Stacked up computers" width="160" height="240" /></a><p class="wp-caption-text">Some of our 80 desktop computers</p></div>
<p>In the past this would have been difficult, because we provided desktop computers for participants. It used to take us 3-4 days to set up 80-odd desktop PCs with customised FreeBSD installations. We&#8217;ve noticed that more and more people are coming to the workshops with their laptops, and this time we&#8217;ve made a big effort to shift from dedicated to virtual platforms, to reduce setup time and costs in future.</p>
<p>The hardest track to do this for, in my opinion, was <a href="http://www.ws.afnog.org/afnog2011/sse/index.html">Scalable Services English</a> (SS-E), the one I&#8217;m working on. We were all pretty much agreed to stay with desktop PCs this year, making us the only track to do so. But when we arrived, we discovered that the mains power situation here is pretty awful. On Wednesday we had four power failures. We only have five UPS, not nearly enough to protect every desktop.</p>
<p>For participants with laptops, they effectively have their own built-in UPS. If we give them virtual machines to work with, then we only have to protect the hosts. We can keep those in the NOC (Network Operations Centre), where the UPS are, so they&#8217;ll be protected for around 15 minutes of any power outage, which we have to hope will be enough for the hotel to start their generator.</p>
<div class="wp-caption alignright" style="width: 170px"><a href="http://www.flickr.com/photos/chris_wilson/5768062067/in/photostream"><img alt="Cannibalising RAM" src="http://farm6.static.flickr.com/5145/5768062067_366b9f17e4_m.jpg" title="Cannibalising RAM" width="160" height="240" /></a><p class="wp-caption-text">Cannibalising RAM</p></div>
<p>Some participants will probably forget their laptops, so we&#8217;ll provide them with desktops, but we have no way to UPS them. These desktops will be set up with FreeBSD, <a href="http://blog.aptivate.org/2010/07/22/free-system-imaging-using-g4l/">as in previous years</a>.</p>
<p>We rented 80 machines from a local company. Some had Windows, in varying states of repair, some had no operating system installed. We decided to use some of these desktops as hosts for the participants&#8217; virtual machines.They only had 2 GB of RAM each, but since we had plenty, we cannibalised eight others for their RAM to upgrade our machines to 4 GB each.</p>
<p>We decided to use VirtualBox for the virtual machines. It&#8217;s free, open source, can host on all major platforms (Windows, Mac, Linux and even <a href="http://wiki.freebsd.org/VirtualBox">FreeBSD</a>), has a nice GUI and a command-line automation tool, supports bridged networking easily, and is relatively fast and efficient.</p>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/chris_wilson/5768060603/in/photostream"><img alt="Backs of systems being imaged" src="http://farm3.static.flickr.com/2701/5768060603_c87a822c98_m.jpg" width="240" height="160" /></a><p class="wp-caption-text">Imaging backend</p></div>
<p>We configured the master (that we&#8217;ll copy onto the other machines) starting with the <a href="http://blog.aptivate.org/2010/07/22/free-system-imaging-using-g4l/">setup from last year</a>. We then had to install VirtualBox and build our first virtual machine inside it. Then we discovered that the virtual machine was unable to access the network in bridged mode. Packets sent by the virtual machine we simply never sent by the host. We needed to use bridged mode so that participants could run services on their machines simply by installing them. without requiring extra configuration on the host.</p>
<p>We had no Internet access for most of that day, because all three of our redundant providers were down for different reasons. Eventually we managed to use Geert Jan&#8217;s 3G dongle to get online and research the problem. We found that <a href="http://forums.freebsd.org/showthread.php?t=22773">bridged networking doesn&#8217;t work</a> in the binary package of VirtualBox 3.2.12 that comes with FreeBSD 8.2, so we had to wait until Internet access was fixed to download 120 MB of software (ports updates and VirtualBox 4.0.8) like this:</p>
<div class="wp-caption alignright" style="width: 170px"><a href="http://www.flickr.com/photos/chris_wilson/5768058967/in/photostream"><img alt="Michuki Mwangi configuring a PC for imaging" src="http://farm4.static.flickr.com/3281/5768058967_76c5ded76f_m.jpg" width="160" height="240" /></a><p class="wp-caption-text">Imaging frontend</p></div>
<pre>
pkg_add -r portupgrade
portsnap fetch extract update
portupgrade virtualbox-ose virtualbox-ose-kmod
</pre>
<p>This took a long time, as VirtualBox is a large piece of software which also required us to download and build a new version of QT, but eventually it succeeded and the problem was solved.</p>
<p>We decided to put only five virtual machines on each host. Sometimes we would have the whole class compiling software from ports, which would slow down all of them significantly. We will use six or seven servers to host 30-35 virtual machines. On the master host, we created five copies of our master virtual machine by copying its hard disk like this:</p>
<pre>
cd .VirtualBox/HardDisks
for i in 1 2 3 4 5; do
	cp AfNOG\ SSE\ Master.vdi vm0$i.vdi
	VBoxManage internalcommands sethduuid vm0$i.vdi
done
</pre>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/chris_wilson/5768051191/in/photostream"><img alt="Moving the systems to the NOC" src="http://farm3.static.flickr.com/2727/5768051191_85e48a532a_m.jpg" width="240" height="160" /></a><p class="wp-caption-text">Relocation</p></div>
<p>Then we created the virtual machines in the VirtualBox GUI and attached them to these new images. We needed to generate a new UUID for each disk image copy, using the undocumented <code>sethduuid</code> command above, otherwise VirtualBox would refuse to add the copies because it had a disk image already registered with the same UUID.</p>
<p>We could have created the virtual machines using the <code>VBoxManage</code> command as well, but it would have taken longer to work out how to use it than simply to create the five machines by hand. I later worked out the commands that we could have used:</p>
<pre>
cd ~/"VirtualBox VMs"
for i in {1..5}; do
	echo $i
	vmname=VM0$i
	diskimage="$vmname/FreeBSD.vdi"
	VBoxManage createvm --name "$vmname" --ostype FreeBSD
	VBoxManage modifyvm "$vmname" --memory 256 \
		--nic1 bridged --bridgeadapter1 bge0.219 \
		--nic2 bridged --bridgeadapter2 bge0.$[50+$i] \
		--vram 4 --pae off --audio none --usb on \
		--uart1 0x3f8 4 --uartmode1 server /home/chris/"$vmname"-console.pipe
	VBoxManage storagectl "$vmname" --name "IDE Controller" --add ide
	cp VM01/FreeBSD.vdi "$diskimage"
	VBoxManage internalcommands sethduuid "$diskimage"
	VBoxManage storageattach "$vmname" --storagectl "IDE Controller" \
		--port 0 --device 0 --type hdd --medium "$diskimage"
done
</pre>
<p>We named the images VM01 to VM05, which was important for running automated scripts on them. Then we configured VirtualBox to start them automatically at boot time, in headless mode, by adding the following lines to <code>/etc/rc.conf</code>:</p>
<pre>
vboxheadless_enable="YES"
vboxheadless_machines="VM01 VM02 VM03 VM04 VM05"
vboxheadless_user="inst"
</pre>
<p>We wrote a short script to help us apply the same command to all five virtual machines:</p>
<pre>
#!/bin/sh
# script to control all five virtual machines

command=$1
shift

for i in 1 2 3 4 5; do
	VBoxManage $command VM0$i "$@"
done
</pre>
<p>This allows us to log into a machine and do things like:</p>
<ul>
<li><code>./manage acpipowerbutton</code> to initiate a controlled shutdown of all five virtual machines</li>
<li><code>./manage modifyvm --macaddress1 auto</code> to generate new, random MAC addresses after cloning the host</li>
<li><code>./manage startvm --type headless</code> to get the virtual machines running again (headlessly, independent of the GUI)</li>
</ul>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/chris_wilson/5768037931/in/photostream"><img alt="Room with desks around the edge, covered in computers and equipment" src="http://farm6.static.flickr.com/5101/5768037931_50ec9e4a70_m.jpg" width="240" height="160" /></a><p class="wp-caption-text">The NOC</p></div>
<p>We knew that we wouldn&#8217;t have space to attach monitors and keyboards to all the hosts, and we&#8217;d have to fiddle about with cables in the hot NOC room (without working aircon) if we needed access to their consoles, so we added the ability to log into them remotely using VNC and GDM. To do this, we had to install the VNC server:</p>
<pre>
pkg_add -r vnc
</pre>
<p>Which unfortunately doesn&#8217;t come with the nice <code>xorg</code> loadable module that adds a built-in VNC server to the X server, making a fast and stateless remote control session possible. So we had to hack about with <code>inetd</code>, first by adding a service name with a port number to <code>/etc/services</code>:</p>
<pre>
vnc		5900/tcp
</pre>
<p>And then a service line in <code>/etc/inetd.conf</code>:</p>
<pre>
vnc	stream	tcp	nowait		root	/usr/local/bin/Xvnc Xvnc -inetd :1 -query localhost -geometry 1024x768 -depth 24 -once -fp /usr/local/lib/X11/fonts/misc/ -securitytypes=none
</pre>
<p>This requires us to enable the XDMCP protocol in GDM, in order for VNC to communicate with it to present a GDM login screen. So we replaced the contents of <code>/usr/local/etc/gdm/custom.conf</code> with the following:</p>
<pre>
[xdmcp]
Enable=true

[security]
DisallowTCP=false
</pre>
<p>And then restarted GDM:</p>
<pre>
sudo /usr/local/etc/rc.d/gdm restart
</pre>
<p>And checked that we could connect from another machine and got a login prompt:</p>
<pre>
vncviewer 196.200.217.128
</pre>
<p>Which did indeed give us a working login screen:</p>
<div id="attachment_794" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.aptivate.org/?attachment_id=794"><img src="http://blog.aptivate.org/wp-content/uploads/2011/05/afnog-vnc-freebsd-gdm-screenshot-500x312.png" alt="VNC graphical login on a FreeBSD virtual machine host" title="VNC graphical login on a FreeBSD virtual machine host" width="500" height="312" class="size-large wp-image-794" /></a><p class="wp-caption-text">VNC graphical login on a FreeBSD virtual machine host</p></div>
<p>This method is very slow. I wanted to find a better way to access the guests, especially if their network configuration was broken. I tried to connect a host serial port to a pipe and then access that pipe from a shell command, eventually over ssh, in a similar way to the text-only console offered by Xen (<code>xm console</code>). The above <code>VBoxManage</code> commands set up a pipe in my home directory, and I wrote the following short script to access it:</p>
<pre>
#!/bin/sh
set -x
echo "Console for $USER"
nc -U /home/chris/$USER-console.pipe
</pre>
<p>I created user accounts for each virtual machine, with the same name, and set their shells to this script, so that when they log in, they would automatically be connected to the pipe. However I was unable to make it work well. In particular, because of incompatible terminal emulations, I was unable to run <code>vi</code> to edit configuration files in the guest. If you find a way around this, please let me know. I haven&#8217;t tried it yet, but <a href="http://code.google.com/p/conman/">conman</a> looks like it might be a good bet.</p>
<p>I spent a long time searching for the hidden VNC support in VirtualBox 4. It&#8217;s undocumented (the manual only talks about RDP) and people on the IRC channel say that it doesn&#8217;t exist, but it does, at least when starting the guests in headless mode. I added the following lines to <code>/etc/rc.conf</code>:</p>
<pre>
vboxheadless_VM01_flags="-n -m 5901"
vboxheadless_VM02_flags="-n -m 5902"
vboxheadless_VM03_flags="-n -m 5903"
vboxheadless_VM04_flags="-n -m 5904"
vboxheadless_VM05_flags="-n -m 5905"
</pre>
<p>And then, after starting the guests in headless mode, I could connect to these ports and access the virtual displays, much more conveniently and much faster than by shutting down the guests using <code>VBoxManage</code> and starting them again using the <code>VirtualBox</code> GUI.</p>
<p>We <a href="http://blog.aptivate.org/2010/07/22/free-system-imaging-using-g4l/">used multicast</a> to image the six virtual machine hosts from the master. This took about three hours, so we left it running overnight.</p>
<p>In the morning we checked that the hosts had been imaged successfully by booting them with their newly installed images, and gave them unique hostnames  (<code>host1.sse.ws.afnog.org</code> etc.) and IP addresses. </p>
<p>We used the <code>manage</code> script to reset the MAC addresses of the network cards of each virtual machine on each host:</p>
<pre>
for i in 128 129 130 131 132 133 134; do ssh 196.200.217.$i ./manage acpipowerbutton; done
for i in 128 129 130 131 132 133 134; do ssh 196.200.217.$i ./manage modifyvm --macaddress1 auto; done
for i in 128 129 130 131 132 133 134; do ssh 196.200.217.$i ./manage startvm; done
</pre>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/chris_wilson/5768032569/in/photostream"><img alt="Michuki Mwangi setting up a projector" src="http://farm4.static.flickr.com/3542/5768032569_8128df0ca6_m.jpg" width="240" height="160" /></a><p class="wp-caption-text">Astral projection</p></div>
<p>Since they were all configured for DHCP, we could have got their IP addresses from the DHCP server, but we wanted to give them a nice naming scheme, so we logged in to each one (using the console and the VirtualBox GUI) and assigned it a unique hostname and a static IP address.</p>
<p>We checked that we could log into each virtual machine remotely using the SSH keys that we&#8217;d installed, and then we shut down the hosts and moved them to the NOC.</p>
<p>Boot camp starts tomorrow, next door, but we still have to arrange our room.</p>
<div class="wp-caption alignright" style="width: 250px"><a href="http://www.flickr.com/photos/chris_wilson/5768794328/in/photostream"><img alt="Michuki Mwangi surrounded by rows of desks covered with computers" src="http://farm3.static.flickr.com/2128/5768794328_ece07d9c17_m.jpg" width="240" height="160" /></a><p class="wp-caption-text">Classroom</p></div>
<p>We may have up to 37 people, our biggest class ever, in a room that&#8217;s about eight metres on a side, so layout of the room is a real challenge.</p>
<p>I wanted to do something to facilitate working in groups, such as each table having four places (two each side) and with its long axis front-to-back. This was vetoed because participants would have to turn their heads to see the projected screen, and it might be hard for them to take notes as a result. </p>
<p>So we&#8217;re going to have long, cramped benches instead. I think this is unfortunate, and I hope I can persuade people to try something more imaginative in future.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2011/05/28/afnog-2011-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Offline Websites and Low Bandwidth Simulator in Go</title>
		<link>http://blog.aptivate.org/2011/02/16/offline-websites-and-low-bandwidth-simulator-in-go/</link>
		<comments>http://blog.aptivate.org/2011/02/16/offline-websites-and-low-bandwidth-simulator-in-go/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 11:29:38 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Appropriate Technology]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Digital Resilience]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Offline]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bandwidth]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=768</guid>
		<description><![CDATA[Jon Thompson writes about Jeff Allen's interesting new work on tools for working with low bandwidth:

<ul><li>A web proxy that simulates low bandwidth connections, and</li>
<li>one that can be fed prepackaged content repositories to serve up when offline, or on the wrong end of a slow Internet connection.</li>
</ul>

Content management systems could be extended to integrate better with these tools and make sites automatically offlineable.]]></description>
			<content:encoded><![CDATA[<p>Jon Thompson writes about <a href="http://aidworkerdaily.com/2011/02/09/jeff-go-and-some-chicken-and-biscuits/">Jeff Allen&#8217;s interesting new work on tools for working with low bandwidth</a>:</p>
<blockquote><p>Jeff continues to try and solve the low bandwidth/high latency problems that aid workers face in the field every day and that we encountered in Indonesia. We all know the joy of VSAT networks that slow to a crawl because either some folks on the team are downloading stuff they shouldn’t be downloading or all the computers are infected with bandwidth sucking viruses. It appears Jeff has moved one step closer to sorting out some of the problems surrounding bandwidth optimization by utilizing the Go programming language.</p>
<p>Rather than try and explain to you what Jeff has done I’ll let you read ‘A rate-limiting HTTP proxy in Go‘ and ‘How to control your HTTP transactions in Go‘ and sort out what he is talking about. Hopefully, this post will bait Jeff into leaving a lengthy comment that explains exactly what the hell he is up to.</p></blockquote>
<p>My understanding is that Jeff is developing two useful tools:</p>
<ul>
<li><a href="http://blog.nella.org/?p=833">A web proxy that simulates low bandwidth connections</a>, similar to the <a href="loband.org/loband/simulator.jsp">Loband Simulator</a>. Jeff&#8217;s version is probably more accurate than ours because it doesn&#8217;t need to modify the web page, but ours might be easier for non-developers to try out, because you don&#8217;t have to install any software.</li>
<li>A web proxy that can be fed <a href="http://aidworkerdaily.com/2011/02/09/jeff-go-and-some-chicken-and-biscuits/#comment-49355">prepackaged content repositories to serve up</a>, so that you can take pre-prepared content (offline websites) with you into the field, and browse them through the proxy as though you were online.</li>
</ul>
<p>People have been trying to make offlineable websites for a long time. Some of the best examples so far are using entirely client-side (in-browser) technology, such as the <a href="http://www.logcluster.org/tools/log">Logistics Operational Guide</a>, developed by the World Food Programme for the Logistics Cluster, which can <a href="http://log.logcluster.org/portable.html">run entirely offline</a> using Google Gears.</p>
<p>Gears had a lot of potential for developers to create offlineable websites, but Google has abandoned its future development in favour of the open standard HTML5, which is not ready yet. So there&#8217;s no obvious and future-proof way to develop offlineable websites at the moment. Jeff&#8217;s proxy, combined with a spidering system, could be one way to download an entire site, even if it wasn&#8217;t designed to be downloaded by the developers.</p>
<p>Another important potential comes from content management systems (CMS) such as <a href="http://wordpress.com">WordPress</a>, <a href="http://drupal.org">Drupal</a> and <a href="http://joomla.org">Joomla</a>. More and more websites are developed using such systems, rather than coded from scratch. The systems know all of the pages on the site, and the links between them, and could easily build an offlineable version of the site for download into Gears, HTML5 or Jeff&#8217;s proxy. And one plugin could potentially enable thousands of sites to be offlineable, especially if it was included in the CMS distribution and enabled by default.</p>
<p>A few wikis such as MediaWiki, MoinMoin, DocuWiki and JSPWiki have a <a href="http://www.mediawiki.org/wiki/Talk:WikiText_Transfer_Protocol">programming interface</a> (XML-RPC or WebDAV) that allows a smart client to download pages in their original text format, which could make them more efficient to store offline and also potentially editable offline. Jeff&#8217;s proxy could be extended to support sites built in such wikis automatically. There are still some limitations to this approach:</p>
<ul>
<li>The pages would not look the same as the online versions, since the styling wouldn&#8217;t be downloaded and the effects of CMS plugins would not be visible;</li>
<li>It would probably still be quite slow to download an entire site this way, by spidering, without server-side support for downloading multiple pages at once;</li>
<li>Few websites are built out of Wikis, so the potential maximum reach is limited compared to better support for WordPress, Drupal or Joomla.
</li>
</ul>
<p>Anyway, I wish I knew Go, and had time to hack on Jeff&#8217;s proxy tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2011/02/16/offline-websites-and-low-bandwidth-simulator-in-go/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Rise of Digital Resilience</title>
		<link>http://blog.aptivate.org/2011/01/29/the-rise-of-digital-resilience/</link>
		<comments>http://blog.aptivate.org/2011/01/29/the-rise-of-digital-resilience/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 13:55:31 +0000</pubDate>
		<dc:creator>alan</dc:creator>
				<category><![CDATA[Appropriate Technology]]></category>
		<category><![CDATA[Digital Resilience]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[participation]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[resilience]]></category>
		<category><![CDATA[skype]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=752</guid>
		<description><![CDATA[We regularly allow ourselves to rely on information and communication technologies but these tools can be  fragile and have many modes of failure.]]></description>
			<content:encoded><![CDATA[<p><em>What I really mean is &#8220;ICT Resilience&#8221; but that doesn&#8217;t sound as memorable. </em></p>
<p>I&#8217;ve been wanting to write some thoughts about <strong>Digital Resilience</strong> for a while and reading Janet Gunter&#8217;s <a href="http://cafodpolicy.wordpress.com/2011/01/28/mobile-blackouts-and-the-poor/">blog post about Mobile Blackouts and the Poor</a> has prompted me into finally doing it.</p>
<p>I think we&#8217;re going to see the subject of <strong>Digital Resilience</strong> rising in our consciousness over the coming years&#8230; at least we should. What do I mean by it? We regularly allow ourselves to rely on information and communication technologies but these tools can be  fragile and have many modes of failure. Often this fragility is not taken into account. I see this all the time.</p>
<p>Here&#8217;s a typically example. I&#8217;m on the phone to a friend organising an evening out. How many times have I heard the phrase <em><strong>&#8220;I&#8217;ll call you when I get to town&#8221;</strong></em>? This relies on us both having signal, on our batteries not running out and on our phones not breaking, being lost or stolen. Modern &#8220;smart&#8221; phones eat through their batteries at a tremendous rate and sometimes crash or reboot so these failure scenarios are not that unusual. If any of the things that our phones rely upon fail what is our <strong>back-up plan</strong>? Are we going to wander around the city, aimlessly, hoping to bump in to each other? Or go home?</p>
<p>A failed night out is not the end of the world. The point I&#8217;m wanting to make is that most of the time people seem oblivious to the failure modes of the technology they use or the need for back-up plans. And yet when you&#8217;re in the habit of considering technological risks it becomes second nature, like finishing a sentence with a full-stop<br />
.</p>
<p>So when I hear <em><strong>&#8220;I&#8217;ll call you when I get to town&#8221;</strong></em> I usually can&#8217;t help myself say <em><strong>&#8220;And if I don&#8217;t hear from you, I&#8217;ll meet you at the station&#8230;&#8221;</strong></em></p>
<p>The situation gets a little more serious in a business context. Take the example of a conference call. Scheduling a call between several people can take a lot of planning trying to find a time when everyone is free. If this time-slot is missed it can represent a significant <strong>opportunity cost</strong> to the organisations involved. The duration of the call itself represents a cost when you consider the time of the people involved. There is growing use of <strong>Skype</strong> for conference calls in the professional community. Sometimes <strong>Skype</strong> works very well but in my experience it frequently doesn&#8217;t work at all. Many times I have been asked to participate in a <strong>Skype conference call</strong> with <strong>no back-up</strong> even when many of the participants are in developing countries. When the Skype call fails much time is wasted, sometimes several participants are excluded and sometimes the call is abandoned all together. My automatic response to a Skype invitation is usually to <strong>send round the number of a phone conference service</strong> just in case.</p>
<p>OK, failed conference calls are still not the end of the world. For someone poor or vulnerable a technology failure could be much worse. At the recent ICTD2010 conference I was very interested to hear for the first time a few people talking about <strong>vulnerabilities to the poor caused by reliance on ICTs</strong>. For years the ICT4D community has been promoting the use of ICTs in poverty reduction. There has been a fair amount of work in adapting technologies for harsh environments. However these technologies still have failure modes and it was very encouraging to hear the resulting vulnerabilities being discussed.</p>
<p>Digital resilience is less about building robust technologies and more about building an <strong>understanding of its failure</strong>&#8230; and the habit of back-up plans.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2011/01/29/the-rise-of-digital-resilience/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Svelte Web Design with SVG</title>
		<link>http://blog.aptivate.org/2010/10/06/svelte-web-design-with-svg/</link>
		<comments>http://blog.aptivate.org/2010/10/06/svelte-web-design-with-svg/#comments</comments>
		<pubDate>Wed, 06 Oct 2010 07:37:50 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Appropriate Technology]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Design and Usability]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[svg]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=707</guid>
		<description><![CDATA[Web designers who care about efficiency and speed might like to have a look at Sam Ruby&#8217;s Blog. All images are embedded SVG in the XHMTL. No bitmaps at all. Notice how fluid it is, how it scales with the browser&#8217;s zoom in and zoom out controls (Control + and Control &#8211; in Firefox) and [...]]]></description>
			<content:encoded><![CDATA[<p>Web designers who care about efficiency and speed might like to have a look at <a href="http://intertwingly.net/blog/">Sam Ruby&#8217;s Blog</a>.</p>
<p>All images are embedded <a href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">SVG</a> in the XHMTL. No bitmaps at all. Notice how fluid it is, how it scales with the browser&#8217;s zoom in and zoom out controls (Control + and Control &#8211; in Firefox) and as you resize the browser window.</p>
<div id="attachment_714" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.aptivate.org/2010/10/06/svelte-web-design-with-svg/intertwingly-screenshot/" rel="attachment wp-att-714"><img src="http://blog.aptivate.org/wp-content/uploads/2010/10/intertwingly-screenshot-500x232.png" alt="Screenshot of Sam Ruby&#039;s Blog" title="Screenshot of Sam Ruby&#039;s Blog" width="500" height="232" class="size-large wp-image-714" /></a><p class="wp-caption-text">Screenshot of Sam Ruby's Blog</p></div>
<p>The page is small, just 14.5k of HTML plus 6.6k of CSS. There&#8217;s 21k of JavaScript that isn&#8217;t required for the design. Even the drop-down menu at the top works with Javascript disabled. Finally there a WOFF web font that adds 40k (another nice technique). It would be nice to have web fonts <a href="http://en.wikipedia.org/wiki/Content_delivery_network">hosted</a> for cross-site caching.</p>
<p>One disadvantage of designing sites this way is that the page must be valid XHTML for inline SVG to work. This makes it difficult to support older browsers properly, because the server must send the content-type as <code>text/xhtml+xml</code>, not <code>text/html</code>. This will cause older browsers to download the page instead of rendering it. You could work around that with user agent sniffing. I think that <a href="http://wiki.habariproject.org/en/XHTML_vs_HTML">Internet Explorer might need that</a> in any case.</p>
<p>Another disadvantage is that very few <a href="http://en.wikipedia.org/wiki/Content_management_system">CMS</a>s currently support generating valid XHTML, so it&#8217;s difficult to know what tool we could recommend to help you to build and manage a website with inline SVG. Massimiliano of the Habari Project <a href="http://wiki.habariproject.org/en/XHTML_vs_HTML">says</a>:</p>
<blockquote><p>I don&#8217;t have any examples of blog software constructed this way&#8230; the only way to find out how many people would like having SVG on their blog is to provide a blogging tool which allows them to do it.</p></blockquote>
<p>Both issues could be worked around by using external SVG (in separate files) instead of inline (embedded in XHTML). External SVG files are more cacheable but require additional HTTP requests to fetch from the server the first time.</p>
<p>Most older browsers do not support SVG images, so although the site degrades gracefully, it looks very plain without any graphics. You could work around this with a server-side renderer that converts the SVG to PNG for older browsers.</p>
<p>I think this is an excellent example of a great technique that we could be using for many more sites.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2010/10/06/svelte-web-design-with-svg/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Simple Cisco VPN How-To</title>
		<link>http://blog.aptivate.org/2010/08/03/simple-cisco-vpn-how-to/</link>
		<comments>http://blog.aptivate.org/2010/08/03/simple-cisco-vpn-how-to/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 21:24:42 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Engineer's Log]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[System Administration]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[cisco]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[sysadmin]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=605</guid>
		<description><![CDATA[One of our fellow Humanitarian Centre organisations, Engineers Without Borders UK (EWB), asked for our help in setting up a virtual private network (VPN), so that their remote workers can access their file server. This is something that ought to be really simple. It&#8217;s probably the most common use case of VPNs, Windows has a [...]]]></description>
			<content:encoded><![CDATA[<p>One of our fellow <a href="http://www.humcentre.org">Humanitarian Centre</a> organisations, <a href="http://www.ewb-uk.org">Engineers Without Borders UK</a> (EWB), asked for our help in setting up a virtual private network (VPN), so that their remote workers can access their file server.</p>
<p>This is something that ought to be really simple. It&#8217;s probably the most common use case of VPNs, Windows has a built-in VPN client, and Cisco routers can be used as VPN servers. EWB want it to be simple, because they have non-technical remote workers. It turned out to be much harder and take much longer than I expected.</p>
<h3>Information Overload</h3>
<p>One of the biggest problems was the lack of useful information, and the profusion of useless. The information fell mainly into four categories:</p>
<ul>
<li>Cisco marketing materials touting the benefits of VPNs and their expensive Concentrator and WebVPN products;</li>
<li>Cisco knowledge base articles describing the setup of complex VPN scenarios;</li>
<li>Cisco command references with little or no details on what each command actually does, or how to use them together;</li>
<li>Cisco exam study sites with inaccurate, out-of-date or cookie-cutter command sequences, with even less explanation of what the commands actually do.</li>
</ul>
<p>Because I couldn&#8217;t find what I was looking for, and had to work it out the hard way, I&#8217;ve written it up in the hope that it will help others.</p>
<p>I would recommend any organisations that simply want to share files to seriously consider a file-sharing service like <a href="http://dropbox.com">DropBox</a> or raw <a href="http://s3.amazonaws.com">Amazon S3</a> instead of a local file server and VPN. In many cases the low upload bandwidth of ADSL connections, combined with internal office use of the connection. will make a VPN impractically slow, especially compared to Amazon&#8217;s unlimited upload and download bandwidth. But EWB already had the file server and they just wanted to access it remotely, not to change how they work.</p>
<p>Our scenario is simple: an internal office network with private IP addresses, a Cisco 1800 router providing ADSL connectivity for the office, and remote field workers running Windows desktops.</p>
<h3>Getting the Client</h3>
<p>For simplicity, we and EWB had hoped to use the built-in VPN client on Windows, which would remove the need to download and install software on the remote workers&#8217; machines. But unfortunately the Cisco 1800 does not support this. Windows uses L2TP over IPSEC for modern, secure VPNs, as a replacement for the old insecure PPTP protocol. But Cisco has crippled the L2TP support in this router, and it only supports raw IPSEC. Only their more expensive routers support serving L2TP over IPSEC, allowing simple direct connections from Windows.</p>
<p>Raw IPSEC is the only remaining option on this router, but it&#8217;s difficult to configure due to its complexity, and the number of choices that need to be made. The standard requires both sides to have the same settings configured, but provides no way to do this automatically. Manual configuration would make life very hard for the remote workers. To solve this problem, Cisco has a non-standard protocol for auto-configuration of the clients:</p>
<blockquote><p>
Establishing a VPN connection between two routers can be complicated, and it typically requires tedious coordination between network administrators to configure the two routers&#8217; VPN parameters.</p>
<p>The Cisco Easy VPN Client feature eliminates much of this tedious work by implementing Cisco&#8217;s Unity Client protocol, which allows most VPN parameters to be defined at [the] IPSec server. </p>
<p><a href="http://www.cisco.com/en/US/products/hw/routers/ps221/prod_configuration_guide09186a008007cfa7.html#wp101952">Cisco Easy VPN Client for the Cisco 1700 Series Routers</a>
</p></blockquote>
<p>So we needed to find a replacement client that was easy to use and could talk to the Cisco. Preferably a free one.</p>
<p>Then we discovered that although Cisco&#8217;s own VPN client is technically free, you can&#8217;t actually download it without a support contract, which neither we nor EWB have.</p>
<p>In the end we found that if you go to Cisco&#8217;s <a href="http://tools.cisco.com/support/downloads/pub/ImageList.x?relVer=5.0.07.0290&#038;mdfid=281940730&#038;sftType=VPN+Client+Software&#038;optPlat=Windows&#038;nodecount=2&#038;edesignator=null&#038;modelName=Cisco+VPN+Client+v5.x&#038;treeMdfId=268438162&#038;treeName=Security&#038;modifmdfid=&#038;imname=&#038;hybrid=&#038;imst=&#038;lr=Y">VPN client software page</a>, find the filename of the latest version of the client, and Google it, you&#8217;ll find that <a href="http://www.google.co.uk/search?q=vpnclient-win-msi-5.0.07.0290-k9.exe&#038;ie=utf-8&#038;oe=utf-8&#038;aq=t&#038;rls=com.ubuntu:en-GB:unofficial&#038;client=firefox-a">several people</a> have had enough of this nonsense and posted the client online, so it can be downloaded.</p>
<p>Of course it&#8217;s important to be aware of the potential for viruses in copies that you download from random sites on the Internet, as well as fake download sites that lead you around in circles of free registrations, credit card details and pop-up porn adverts. <a href="http://samsten.net/work/cvpnc/">This site</a> worked fine for me, but it may have been taken down by Cisco&#8217;s attack dogs by the time you read this.</p>
<h3>Security with Obscurity</h3>
<p>We decided to choose a configuration that trades some security for ease of use. So instead of authenticating with certificates, we used pre-shared keys. The VPN server has its own login system anyway, which provides an additional layer of security once the remote user is connected to the VPN.</p>
<h3>Names and Addresses</h3>
<p>Connecting clients need to be allocated an IP address to use over the VPN. We could have used public IPs, or private IPs in the same subnet (with <a href="http://www.ciscocatalyst.info/en/US/docs/ios/ipaddr/command/reference/iad_arp.html#wp1013235">proxy ARP</a>), but we chose to use private IPs in a different subnet. This makes the routing easier, as clients and local network servers will know that they have to route the traffic via the router anyway, and it allows EWB to implement stricter network access policies for VPN clients, if they wish. </p>
<p>We needed to create a local pool (not a DHCP pool) to draw these addresses from:</p>
<pre>
ip local pool vpnpool 192.168.2.100 192.168.2.200
</pre>
<h3>Keys to the Kingdom</h3>
<p>We created an ISAKMP (IKE) policy to specify the authentication method and the level of encryption to be used for negotiation of IPSEC Security Associations (SAs). We chose to make this the first, highest priority policy, and to use AES-256 encryption (strong and fast), Group 2 (1024-bit) Diffie-Hellman key exchange, and pre-shared keys for client authentication as noted above:</p>
<pre>
crypto isakmp policy 1
 encr aes 256
 authentication pre-share
 group 2
</pre>
<p>Then we specified the pre-shared key itself. This is the only thing that stops random clients on the Internet from connecting to your local network, so it&#8217;s even more important than a strong wireless network key. Of course this is not the real key:</p>
<pre>
crypto isakmp key ThisKeyMustBeKeptSecret address 0.0.0.0 0.0.0.0
</pre>
<p> We specify that any IP address can use it by using the wildcard address, <code>0.0.0.0 0.0.0.0</code>.</p>
<h3>At the End of the Tunnel</h3>
<p>It seems to be common in corporate environments that, when a user is connected to a VPN, all of their Internet traffic is routed through the VPN. It certainly makes it easier for the network administrators, as they don&#8217;t have to define specific routes for the tunnel, but it wastes their bandwidth and makes Internet access much slower for the remote workers, so we decided not to do this.</p>
<p>Just routing a single subnet through a tunnel is called a <em>split tunnel</em>. I couldn&#8217;t find simple documentation on setting it up, so I used the <a href="http://www.cisco.com/en/US/docs/ios/sec_secure_connectivity/configuration/guide/sec_easy_vpn_rem.html#wp1060585">Cisco Easy VPN Remote example</a>, extracting just the bits we needed to route only the 192.168.1.0/24 subnet through the tunnel.</p>
<p>First we have to create an access control list (ACL) that defines, on the local (source address) side, what traffic clients should route into the tunnel:</p>
<pre>
ip access-list extended ewb_office_split_tunnel
 remark Defines which local (office) networks a remote VPN client will route to
 permit ip 192.168.1.0 0.0.0.255 192.168.2.0 0.0.0.255
</pre>
<p>I&#8217;m not sure if the second half of the ACL is actually necessary. It doesn&#8217;t appear to make any difference if I specify <code>any</code> instead of <code>192.168.2.0 0.0.0.255</code>.</p>
<h3>Client Configuration</h3>
<p>We use Cisco&#8217;s EzVPN (Unity) protocol, as described earlier, to configure connecting clients automatically. To do this, we have to tell the server what configuration should be sent to clients when they connect:</p>
<pre>
crypto isakmp client configuration group EWB
 key ThisKeyMustBeKeptSecret
 dns 192.168.1.1
 wins 192.168.1.2
 pool vpnpool
 acl ewb_office_split_tunnel
 netmask 255.255.255.0
</pre>
<p>A little explanation about what these options do:</p>
<dl>
<dt>crypto isakmp client configuration group [name]</dt>
<dd>The <em>name</em> must match the <strong>group name</strong> that the client uses when it connects. This is how the server decides which configuration to send to the client.</dd>
<dt>key</dt>
<dd>For some reason the client needs to be told what key to use, even though it&#8217;s already been entered by the user, and the client knows it because it wouldn&#8217;t be able to get this far in the negotiation without it!
</dd>
<dt>dns</dt>
<dd>Tells the client which DNS server to use, for resolving local (private) hostnames, or resolving inside the split horizon. You can specify a second DNS server after the primary one. You probably only need this if you&#8217;re running a Windows domain, in which case it should point to the domain controller, or if you have split horizon DNS.</dd>
<dt>wins</dt>
<dd>Tells the client which WINS server to use, for resolving local SMB server names. Again, you probably only need this if you&#8217;re running a Windows domain, in which case it should also point to the domain controller.</dd>
<dt>pool</dt>
<dd>Tells the server which local pool (not DHCP pool) to assign the client&#8217;s address from. You can specify any name here, even a pool that doesn&#8217;t exist, but clients won&#8217;t be able to connect unless the pool name is a valid local pool.</dd>
<dt>acl</dt>
<dd>This ACL, which we defined earlier, is used to tell the clients which subnets are reachable through the connection (split tunnel mode). If no <strong>acl</strong> statement is used, the tunnel is not split, and a default route is set through the VPN tunnel instead.</dd>
<dt>netmask</dt>
<dd>Defines the network mask that the client will apply to its client interface, in combination with the IP address assigned from the pool.</dd>
</dl>
<h3>Profiling</h3>
<p>Next, we create an ISAKMP profile on the server which tells the server to assign IP addresses automatically, and which <a href="http://www.cisco.com/en/US/docs/ios/12_2/dial/configuration/guide/dafvrtmp.html#wp1000958">virtual template</a> to use when creating the virtual-access interfaces for the server side of the tunnel. We haven&#8217;t defined the virtual template yet, but we will in a second.</p>
<pre>
crypto isakmp profile ewb_isakmp_profile
   match identity group EWB
   isakmp authorization list sdm_vpn_group_ml_4
   client configuration address respond
   virtual-template 1
</pre>
<p>When a client connects using the group name <code>EWB</code>, it will check for network authorization using the AAA list name <code>sdm_vpn_group_ml_4</code> (or <code>default</code> if that list doesn&#8217;t exist), respond to IP address requests from the client (using the pool defined in the client configuration above), and create a local virtual-access interface based on virtual template number 1.</p>
<p>You should use the same group name that you used for the <strong>client configuration</strong> above, instead of EWB, unless you&#8217;re EWB of course.</p>
<h3>Strong Encryption</h3>
<p>Now we define the level of encryption used for data communications with hosts on the internal network, as opposed to securing the negotiation process. We start by defining a <em>transform set</em> which uses 256-bit AES encryption, the SHA hash algorithm and LZS compression for data packets:</p>
<pre>
crypto ipsec transform-set ewb_encryption esp-aes 256 esp-sha-hmac comp-lzs
</pre>
<p>Then we create an IPsec profile that links these settings to the ISAKMP profile that we defined above:</p>
<pre>
crypto ipsec profile ewb_ipsec_profile
 set transform-set ewb_encryption
 set isakmp-profile ewb_isakmp_profile
</pre>
<h3>Virtual Template</h3>
<p>Now we define the template for the virtual interfaces, that we referenced above in the ISAKMP policy:</p>
<pre>
interface Virtual-Template1 type tunnel
 ip unnumbered Vlan1
 zone-member security in-zone
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile ewb_ipsec_profile
</pre>
<p>We use <code>ip unnumbered Vlan1</code> to set the IP address of the virtual-access interfaces to the address of the router on the local LAN (in this case it&#8217;s a VLAN bridge), which allows you to ping the router using its internal IP address (192.168.1.1 in our case) when you&#8217;re connected to the VPN, which is a useful connectivity test.</p>
<p>We place the virtual interfaces into the <code>in-zone</code> (internal zone) which means that they have full access to the local network, which is not very secure, but simplifies things. We also specify that this interface accepts only traffic encrypted with IPsec and bound to the profile that we created earlier. I&#8217;m not sure why it needs to be bound in both directions, as the IPsec profile is connected to the ISAKMP profile which is connected to this virtual interface already.</p>
<h3>Client Setup</h3>
<p>That should be it for the server-side setup. To configure a client, install the VPN software you downloaded earlier, start it, create a new IPsec configuration, and enter the following details:</p>
<dl>
<dt>Server</dt>
<dd>The public IP address of the VPN server</dd>
<dt>Group Name</dt>
<dd>The same group name that you used on the server earlier</dd>
<dt>Pre-Shared Key</dt>
<dd>The same key that you entered on the server earlier</dd>
</dl>
<p>Now click on the <strong>Connect</strong> button, and after a few seconds the window should minimize to the system tray, and you should be connected to the VPN. You can check this by pinging the internal IP address of the router (e.g. 192.168.1.1) and if that works, the IP addresses of whatever internal servers you want to connect to.</p>
<p>If it doesn&#8217;t work, use the Log menu to enable logging, try to connect again, and check the results on the Logging tab. You can also try enabling IPsec debugging on the router, in run mode (not configuration mode):</p>
<pre>
debug crypto engine packet
debug crypto ipsec error
debug crypto isakmp error
debug crypto verbose
terminal monitor
</pre>
<p>When the configuration works, write it to the router&#8217;s non-volatile memory to ensure that you don&#8217;t lose it when you next reboot the router:</p>
<pre>
write
</pre>
<p>And that&#8217;s it!</p>
<h3>References</h3>
<p>Here are some random unsorted links to pages that I found useful while figuring out how to do this:</p>
<ul>
<li><a href="http://www.ciskoblog.com/2006/12/configuring-a-c.html">Configuring a Cisco Router to Accept VPN Connections</a> (even simpler example, without split tunnels)</li>
<li><a href="http://www.cisco.com/en/US/docs/ios/sec_secure_connectivity/configuration/guide/sec_key_exch_ipsec.html">Configuring Internet Key Exchange for IPsec VPNs</a> (good general overview of how Cisco&#8217;s IPsec works)</li>
<li><a href="http://www.cisco.com/en/US/docs/ios/sec_secure_connectivity/configuration/guide/sec_easy_vpn_rem.html#wp1060585">Cisco Easy VPN Remote</a> configuration guide</li>
<li><a href="http://samsten.net/work/cvpnc/">Cisco VPN client downloads</a></li>
<li><a href="http://www.ciscocatalyst.info/en/US/docs/ios/ipaddr/command/reference/iad_arp.html#wp1013235">Cisco ARP Commands</a></li>
<li><a href="http://www.cisco.com/en/US/products/ps6017/products_command_reference_chapter09186a00808ab59a.html#wp1016030">Cisco ISAKMP command reference</a></li>
<li><a href="http://www.cisco.com/en/US/docs/routers/access/cisco_router_and_security_device_manager/24/software/user/guide/ZPF.html#wp1020392">Configuring Zone Policy Firewalls</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2010/08/03/simple-cisco-vpn-how-to/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simulating low bandwidth: Publishers for Development</title>
		<link>http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/</link>
		<comments>http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 16:09:55 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Design and Usability]]></category>
		<category><![CDATA[Engineer's Log]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[academia]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=472</guid>
		<description><![CDATA[We think that academic publishing is an area that's both critically important to development, and simultaneously becoming more and more inaccessible to the people who need it most. The average size of web pages has been growing much faster than the average speed of connections in developing countries. We built a low bandwidth simulator ourselves, and took it to INASP and the ACU's Publishers for Development conference in Oxford to persuade the journal publishers to optimize their sites to make them accessible to everyone.]]></description>
			<content:encoded><![CDATA[<p>We think that academic publishing is an area that&#8217;s both critically important to development, and simultaneously becoming more and more inaccessible to the people who need it most.</p>
<p>The average size of web pages has been growing much faster than the average speed of connections in developing countries, and journal websites are no exception, as you can see in <a href="http://blog.aptivate.org/2009/07/09/when-it-comes-to-websites-small-is-beautiful/">Alan&#8217;s blog post</a>:</p>
<div id="attachment_488" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/graph-2/" rel="attachment wp-att-488"><img src="http://blog.aptivate.org/wp-content/uploads/2010/06/graph-500x381.png" alt="Average page size has grown much faster than available bandwidth" title="Average Page Size vs Bandwidth" width="500" height="381" class="size-large wp-image-488" /></a><p class="wp-caption-text">Average Page Size vs Bandwidth</p></div>
<p>As Alan points out, the average journal&#8217;s home page in his sample would take over <strong>90 seconds</strong> to load on average, for researchers at universities in developing countries. Usability research has shown that people expect a computer to respond within 30 seconds. Making them wait longer interrupts their concentration, causes dissatisfaction and annoyance, and they <strong>often abandon the process</strong>. The biggest factor in user satisfaction is speed of response.</p>
<p>While this research probably did not include users who are accustomed to slow and unreliable computers, I think it&#8217;s safe to say that most people would find it annoying and difficult to use the Internet on a dial-up modem. And even a modem would have been preferable to some of the Internet connections that I&#8217;ve experienced (and paid for) in some countries in the last few years.</p>
<p>Academics have little ability to persuade their universities to upgrade their internet connections, at a cost of several peoples&#8217; salaries (several thousand dollars a month). The only people who can change this are the publishers of the journals, by optimising their journals&#8217; websites for users with slower connections.</p>
<p>But how to persuade the publishers that this is important? We built a low bandwidth simulator ourselves, and took it to Oxford, to <a href="http://www.inasp.info">INASP</a> and the <a href="http://www.acu.ac.uk/">ACU</a>&#8216;s <a href="http://www.inasp.info/file/f5c039878f09a104df806301113361a5/publishers-for-development-pfd.html">Publishers for Development</a> conference.</p>
<h3>What We Did</h3>
<p>We set up spare machine as a <a href="http://bwmo.net">bandwidth management</a> box, and used it as a network filter for the participants. They could come and plug their laptops into the box, and browse the Internet and their own websites at a simulated slow speed.</p>
<div id="attachment_504" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/table-layout/" rel="attachment wp-att-504"><img src="http://blog.aptivate.org/wp-content/uploads/2010/06/table-layout-500x302.jpg" alt="Table with server, router and laptops with exercise cards stuck on top" title="Exercise Table" width="500" height="302" class="size-large wp-image-504" /></a><p class="wp-caption-text">Exercise Table</p></div>
<p>We configured the box for transparent bridging. This allowed us to insert and remove it from the network easily, just by switching over a network cable, to demonstrate the difference between fast and slow loading of pages.</p>
<p>We gave the participants at the meeting tasks to perform on various publishers&#8217; websites, for example finding and downloading an academic paper by topic or researcher.</p>
<div id="attachment_502" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/publishers-testing/" rel="attachment wp-att-502"><img src="http://blog.aptivate.org/wp-content/uploads/2010/06/publishers-testing-500x408.jpg" alt="Participants watching and using the throttled laptops" title="Playing the Game" width="500" height="408" class="size-large wp-image-502" /></a><p class="wp-caption-text">Playing the Game</p></div>
<p>I think they found the activities enlightening, because we had some very good comments from some of the participants:</p>
<ul>
<li>&#8220;<em>We&#8217;re so pleased that Alan was able to work his magic at the recent PfD session &#8211; his delivery is innovative, dynamic and fact-packed so it really sparks enthusiasm from the audience&#8230; [which] is demonstrably channelled into action once people return to their places of work.</em>&#8220;<br />Publishers for Development Team</li>
<li>&#8220;<em>It was really useful to try the low bandwidth! [Our site] is already considered fast but it made us think even more around this issue, what else can we do etc.</em>&#8220;<br />Anonymous Participant
</li>
<li>&#8220;<em>Alan Jackson&#8217;s information about bandwidth was kind of shocking even if I knew it before, but to really experience it was very valuable. We are going to redesign DOAJ&#8217;s home page and this must be the starting point.</em>&#8220;<br />Sonja Brage, DOAJ
</li>
<li>&#8220;<em>Site speed is a major consideration for us, and I really enjoyed Alan/Aptivate&#8217;s session, experiencing the exasperation of trying (and failing) to connect via low-bandwidth&#8230; I have a feeling that there is &#8216;excess baggage&#8217; on a number of the pages&#8230;</em>&#8220;<br />James Kitchen, OECD
</li>
</ul>
<h3>How We Did It</h3>
<p>We used FreeBSD as the operating system for the software bridge, because its <em>dummynet</em> traffic shaper is relatively easy to use, and very good at simulating slow connections.</p>
<p>We wanted to use a laptop instead of a desktop machine, so that we could carry it to the conference easily, but we had hardware compatibility issues with FreeBSD on all the laptops we had available to us (mostly IBM Thinkpads). We ended up using a compact Fujitsu desktop box.</p>
<p>We installed FreeBSD 8 on it, and configured it to transparently bridge between two interfaces. Our internet access at the conference would be wireless, but we had issues with bridging wired and wireless interfaces together. So instead we used a <a href="http://en.wikipedia.org/wiki/Linksys_WRT54G_series">Linksys WRT-54GL</a> router with the <a href="http://www.polarcloud.com/tomato">Tomato</a> firmware, which enables wireless client mode, to connect to the network:</p>
<div id="attachment_493" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/throttler/" rel="attachment wp-att-493"><img src="http://blog.aptivate.org/wp-content/uploads/2010/06/throttler-500x328.png" alt="WRT-54GL connected to FreeBSD throttler connected to network switch connected to client laptops" title="Throttler Network Diagram" width="500" height="328" class="size-large wp-image-493" /></a><p class="wp-caption-text">Throttler Network Diagram</p></div>
<p>And this is what it looked like in the room. Notice the essential coffee and cupcake, without which the system mysteriously failed to work:</p>
<div id="attachment_503" class="wp-caption aligncenter" style="width: 509px"><a href="http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/server-closeup/" rel="attachment wp-att-503"><img src="http://blog.aptivate.org/wp-content/uploads/2010/06/server-closeup-499x408.jpg" alt="FreeBSD server, wireless router and a laptop" title="Network Close Up" width="499" height="408" class="size-large wp-image-503" /></a><p class="wp-caption-text">Network Close Up</p></div>
<p>We configured the FreeBSD box to bring up the bridge automatically at boot time, and to load a set of <em>ipfw</em> firewall rules to enable <em>dummynet</em>, the traffic shaper. On this box, the ethernet interfaces are called <em>em0</em> and <em>rl0</em>, so we added the following lines to <em>/etc/rc.conf</em>:</p>
<pre>
ifconfig_em0="up"
ifconfig_rl0="up"
cloned_interfaces="bridge0"
ifconfig_bridge0="addm em0 addm rl0 up dhcp"

firewall_enable="YES"
firewall_type="/etc/ipfw.rules"
dummynet_enable="YES"
</pre>
<p>Then we created <em>/etc/ipfw.rules</em> with the following contents:</p>
<pre>
# with bridge mode, two nics. em0 is wan
add pipe 1 all from any to any out recv em0
add pipe 2 all from any to any out xmit em0
add allow all from any to any
pipe 1 config delay 700ms bw 40Kbit/s mask dst-ip 0x000000ff
pipe 2 config delay 700ms bw 40Kbit/s mask src-ip 0x000000ff
</pre>
<p>This configuration creates two <em>dummynet pipes</em>. Pipe 1 is for traffic received on the external interface (downloads), and pipe 2 is for traffic being sent out of the external interface (uploads). We have to follow this by a rule which allows all other traffic, otherwise local traffic (on the box itself) is denied by default when the firewall is enabled, which breaks local DNS and inbound SSH and makes the box pretty unusable on the console.</p>
<p>Then we configure both pipes to allocate 40 Kbps (kilobits per second) for each individual IP address in the private subnet (allocated by the DHCP server on the Tomato router) and a 700 ms delay in each direction, which gives a 1400 ms round trip time. This is somewhat higher than the expected 600 ms round trip for a connection by geostationary satellite.</p>
<p>The end result is that each user connects a laptop to the switch behind the box, gets an IP address from the DHCP server on the router, is NATted by the router onto the public network, and is able to browse the Internet with a connection of 40 kbps upload and download. If you remove the FreeBSD box, by connecting the switch directly to the router, you can access the public network at full speed.</p>
<p>One issue was that the public network used a captive portal, which we had to log into. We didn&#8217;t want each client on our network to have to log in separately, so we enabled NAT on the router, and in wireless client mode, all the NATted clients get the MAC address of the router, so the public network thinks that they&#8217;re all the same PC and doesn&#8217;t ask them to log in again.</p>
<h3>Why We Did it</h3>
<p>We think that members of universities and research institutions need to be able to join and participate in the global research community as equals, in order to play their part in assisting development in their home countries.</p>
<p>Programmes such as <a href="http://www.inasp.info/file/5f65fc9017860338882881402dc594e4/perii.html">PERii</a>, <a href="http://www.who.int/hinari/">HINARI</a> and <a href="http://www.aginternetwork.org/">AGORA</a> negotiate free or discounted online access to these journals for universities in developing countries. But the users still need to get online and access the content.</p>
<p>Online publishing for Western markets is usually designed for users with fast Internet connections, which Western universities have. But in other regions, universities often can&#8217;t afford fast connections, and this makes it very difficult for them to access these journals online.</p>
<p>Publishers for Development is bringing international publishers together who are interested in finding out how they might contribute to discourse and action around developing country access, encourage publication from developing country researchers and understand the diversity within research cultures/communities and the challenges these present.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2010/06/08/simulating-low-bandwidth-publishers-for-development/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Censorship Arms Race</title>
		<link>http://blog.aptivate.org/2010/04/07/the-censorship-arms-race/</link>
		<comments>http://blog.aptivate.org/2010/04/07/the-censorship-arms-race/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 13:00:57 +0000</pubDate>
		<dc:creator>Chris Wilson</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Infrastructure]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[Censorship]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[network]]></category>
		<category><![CDATA[policy]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blog.aptivate.org/?p=423</guid>
		<description><![CDATA[No security is perfect. There will always be ways around any security measure that we implement. However, no workaround is perfect either. Once we understand how it works, e.g. what the requests that it makes look like, we can block it. This quickly turns into an arms race between the user and the administrator.]]></description>
			<content:encoded><![CDATA[<p>Preface: This post discusses censorship. I want to be clear that I represent only my own personal views here, and I don&#8217;t personally support censorship in most cases. I think that freedom of access to information has a benefit and a cost, and the tradeoff depends on circumstances.</p>
<p>I think that censorship is useful when it serves a higher purpose, for example to save lives, or to save vital money for underfunded universities in countries where bandwidth is expensive and there are alternative ways for students to access the uncensored Internet for private browsing purposes. I&#8217;m opposed to censorship that requires leaving the country or changing your ISP to get around it.</p>
<p>Walubengo wrote on the BMO Training mailing list:</p>
<blockquote><p>Am just from the student labs and came across this sneaky little [software]:</p>
<p><a href="http://www.ninjacloak.com/">http://www.ninjacloak.com/</a></p>
<p>It basically allows my students to get behind the good old<br />
dansguardian/squid proxy_firewall; essentially allowing them to visit<br />
and download all and sundry (read porn, warez, torrents et al)</p>
<p>[H]ave been wondering why the clamour to &#8220;open-up&#8221; the internet &#8220;for<br />
research&#8221; had gone down (now I know).</p>
<p>Any quick counters? (beyond just blocking ninjacloak.com, since they are likely to get an equivalent sooner rather than later)</p></blockquote>
<p>I have never used ninjacloak and I don&#8217;t intend to, but I&#8217;m sure that if you post some logs of its use from your proxy server, we can figure out how to block it.</p>
<p>However, no security is perfect. There will always be ways around any security measure that we implement. However, no workaround is perfect either. Once we understand how it works, e.g. what the requests that it makes look like, we can block it.</p>
<p>This quickly turns into an arms race between the user and the administrator. The winner is usually the one with the most time, patience and determination. This may be a fight that you don&#8217;t want to take on.</p>
<p>In my view, if users really really want to access some blocked content, they will find a way. However, a good security system will make it possible to at least trace that they did so, if not exactly what they accessed. So my approach would be two-fold:</p>
<ol>
<li>Tackle the biggest problems first, and when they make sense. If someone uses ninjacloak to view a porn site once, it is hardly going to bring down your network, so you don&#8217;t need to care. If all your students are using TOR, AND it is bringing down your network, THEN it&#8217;s time to do something about it. If you don&#8217;t know what the biggest problem is, <a href="http://www.bwmo.net/pdf/chapter3.pdf">find out</a>.</li>
<li>Don&#8217;t forget that social measures are far more effective than technical ones. If students know that they are being watched, they are much less likely to try things like this. Make REALLY sure that everyone knows and understands your <a href="http://www.bwmo.net/pdf/chapter2.pdf">policy</a>. When you find students bypassing your security, <a href="http://www.bwmo.net/pdf/chapter7.pdf">go and talk to them</a>. If necessary, consider the use of formal sanctions, which are likely to have a stronger deterrent effect.</li>
</ol>
<p>If users think they are being treated unfairly or harshly, it can increase their determination to fight the system. If you have a good reason for censoring, because you can show them how much damage their actions are causing to legitimate or intended uses (such as academic research), they are much more likely to understand and comply with your requests, hopefully avoiding the need for sanctions.</p>
<blockquote><p>nb: but again, someone may ask, why not just open up the internet any way?</p></blockquote>
<p>Because (and only when) it wastes your precious bandwidth that&#8217;s better used for your core purpose (e.g. academic research), which is why you pay for the connection in the first place.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.aptivate.org/2010/04/07/the-censorship-arms-race/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

