PHP and Redis

I’m on an old Ubuntu version, and just needed something to dump a Redis value as JSON.
sudo -s
git clone https://github.com/nicolasff/phpredis
cd phpredis
aptitude install php5-dev -y
phpize
./configure && make && make test && make install
echo "extension=redis.so" > /etc/php5/conf.d/20-redis.ini
service apache2 restart

And then
<?php
#
# Serves the JSON clob from Redis
#
header('Content-Type: application/json');
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$data = $redis->get('movie_database');
echo $data;
?>

apache, svn, mysql för prov

Idag skriver ett par elever omprov i kursen Avancerade Webbteknologier 1 i Agile Web Developer-programmet på kyh.se (yrkeshögskola). Deras prov består av två delar: en pappersdel och en “praktisk” del.

Den praktiska delen presenterar ett antal handritade skisser över en webbplats. I det första provet skulle de göra en enkel version av twitter. I detta prov ett enkelt forum. All hjälpmedel är tillåtna och poängen är att det skall vara likt en riktig arbetssituation. Studenten kan då visa vad han eller hon faktiskt kan åstadkomma på en viss tid, visa upp på kod han/hon väljer att checka in och visa prov på färdighet. Pappersdelen visar mest på nivå av kunskap – inte den hantverksmässiga färdighet man som utvecklare faktiskt bygger upp.

Hur funkar det då?

Förra gången uppstod konstiga fel för en del av de som satt på Windows och körde Eclipse med Subclipse. Problemet visade sig vara att de som inte köra “pure Java”-versionen, aka SVNKit, utan istället köra native-bryggan inte alls kunde interagera med svn-repot. Detta hade tidigare inte varit något problem under kursen, men då var alla läsoperationer tillåtna för hela världen (anonymous access) och endast skrivning krävde inloggningsuppgifter.

“Svn-repot” är egentligen flera repon – ett repo per student. De är skyddade så att bara ett konto kan komma åt just det repot, både vad gäller läs och skriv (och alla andra operationer). Repot accessas via HTTP och Apache via mod_authz_svn / mod_dav_svn (man får akta sig så att dav_svn.conf som medföljer vid installation inte används med default-inställningar).

Så, jag satte ihop ett par skript (bash och python) som

  • skapar svn-repo med branches, tags och trunk-kataloger (om det inte redan fanns),
  • skapar htpasswd-fil,
  • skapar apache-config-fil, samt
  • skapar MySQL-databas (en per person) och populerar med lite grunddata.

Konfiguration av Apache

Hela webbplatsen kör på en egen virtual host och konfigurationen för detta ligger i en enda fil. För varje student genereras följande:

<Location /live/carw949>
 AuthType Basic
 AuthName "Live - carw949"
 AuthUserFile /srv/prov/live/carw949.htpasswd
 Require valid-user
 Order allow,deny
 Allow from all
</Location>
<Location /svn/carw949>
 DAV svn
 SVNPath /srv/prov/svn/carw949
 AuthType Basic
 AuthName "AD10Gbg carw949"
 AuthUserFile /srv/prov/live/carw949.htpasswd
 Require valid-user
</Location>

Utöver det kör jag också ett cronjobb som checkar ut deras kod var tredje minut och lägger upp “live”. (Även denna “live”-katalog är skyddad och access ges bara till ett enda konto.)

Konfiguration av Subclipse och Eclipse

Idag fungerar det fint utan problem  för alla. Det gäller dock att man i Eclipse (med Subclipse-plugin) väljer att använda SVNKit istället för JavaHL (JNA). Installeras enklast via Help » Install New Software och med arkivet som finns på http://subclipse.tigris.org/update_1.6.x. För att kontrollera vilket SVN-lib (eller backend) som används så är vägen denna:

Window » Preferences
Team » Svn
Svn Interface » Client: SVNKit (Pure Java)

Alla skript ligger under http://wendt.se/software/education/kyh.se/awt1/ och do-it-all.sh gör “allt”. Filen elever.txt innehöll alla elever och var på det format som jag fick rått från SCAS (administrativt system).