Checking visitor IPs with apachetop
We have one customer’s site that’s running on a, well, let’s call it a not-so-very-good platform. If it gets too many hits, the database tends to get slow very quickly, which results in a severe congestion. I was looking for a way to easily check if a certain IP has been hitting the same site a lot, since that’s usually the cause (someone who wants to download the entire site or something). Thanks to a tip on IRC, I finally found the tool for that and it turns out it was installed already!
The solution: apachetop. I tend to start it as follows: apachetop -H 5000 -d 2 and when it has started, I press ‘d’ once, which will make it show me the source ip addresses. Nice!
PS. Another solution: tail -10000 access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr | head -n 10
[FunkLoad] Random tests for benchmarking
I’ve recently started using FunkLoad to do benchmarking of websites. It works quite okay and I love the fact that it’s Python, since that’s my language of choice.
One thing that kept bugging me was that since FunkLoad is more a unittester, it can by default only run a single run multiple times against a site. That won’t do. You want several different kinds of users visiting your website when you’re benchmarking. But since everything is Python, I was able to solve that like this:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # -*- coding: iso-8859-15 -*- """loadtest FunkLoad test $Id: $ """ import unittest, random, sys from funkload.FunkLoadTestCase import FunkLoadTestCase from webunit.utility import Upload from funkload.utils import Data #from funkload.utils import xmlrpc_get_credential class LoadTest(FunkLoadTestCase): """ Loadtest for website. This test use a configuration file LoadTest.conf. """ def setUp(self): """Setting up test.""" self.logd("setUp") self.server_url = self.conf_get('main', 'url') def doTest(self): # Picks a test at random tests = ["8081","8082","8083","8084","8085","8086"] rnd = random.choice(tests) return getattr(self, "test_"+str(rnd))() def test_8081(self): # The description should be set in the configuration file server_url = self.server_url # begin of test --------------------------------------------- # end of test--------------------------------------------- def test_8082(self): # The description should be set in the configuration file server_url = self.server_url # begin of test --------------------------------------------- # end of test--------------------------------------------- |
(I left out the test themselves, but I’m sure you can find where to place them.)
The recorded tests are in the same class, and they’re called test_8081, test_8082, etc. up to test_8086. These corresponded to the proxy ports on which fl-record was listening when the session was recorded. Line 27 makes sure that the test that was chosen gets run.
You can of course expand this as much as you like, for example adding weights for certain tests. Kinda neat, python.
Timezone in Java
A customer just called asking why his ColdFusion sees the time as being UTC, while the rest of the system and his own tests seem to indicate that the system is properly set for Europe/Amsterdam. Apparantly, java (or at least Sun’s JVM 1.4.2_09-b05, which is bundled with ColdFusion MX 7) only checks the system variable TZ to see which timezone it’s in. Since ColdFusion is started from initscript, this variable is not set yet. It’s in nearly the last of the init scripts.
So we had to add the following line to the initscript, somewhere near the beginning, to make sure ColdFusion uses the correct timezone:
export TZ="Europe/Amsterdam"
Thanks Geoff Mottram for pointing it out to me.
Resumé
Bart’s put his resumé online and it looks great, frankly. If anyone would apply to us with a resumé like that, he or she would score high marks based on that alone! Just look at it!
Darcs failed: problem gzwriting file
I got this error from a darcs installed on Etch:
tim@machine:/etc$ darcs record -am 'Initial checkin'
darcs failed: problem gzwriting file: _darcs/patches/20090406120803-59231-78a2a82198e9134e0cf5600d03958044b779cc47.gz-0
tim@machine:/etc$
Google didn’t turn up anything, so I used strace as a last resort. That quickly pointed out the problem, darcs couldn’t read one of the files I tried to add. If you use strace, scroll up a bit and look for something like this:
open("/etc/postgresql/8.1/main/pg_ident.conf", O_RDONLY|O_NONBLOCK|O_NOCTTY) = -1 EACCES (Permission denied)
That’s the file I either needed to remove from the record or add to boring (and remove it from the pending file). Or make readable.
Hope this helps someone.
Security is hard
Just got an email form one of our customers asking if it was possible to use an encrypted password in PHP for connecting to MySQL. So that instead of doing something like:
$connection = mysql_connect(host,user,pass);
He wanted to do something like:
$connection = mysql_connect(host,user,encrypted_pass);
Which is of course not very useful (since you could use the encrypted string just like any other normal password, so there’s no added security). We come across these kinds of notions quite often, people want to use encryption for security, but the way they use it makes it kind of useless.
A few years ago we had a customer who wanted a fully secured machine, from boot onwards. This so he could sell appliances without giving his customers easy access to the operation system and application. He wanted an encrypted hard disk. But if you use standard x86 based hardware, you have no way to store an initial secret. Even if you’d embed the password somewhere in the bootloader, it’s still somewhere on that machine.
Security is hard to do well. I wish people would start by simply applying best practises, like setting safe file permissions. Encryption is often not very useful if you want parts of an application to actually access the data without the user entering the password of that encrypted data.
Customer satisfaction
It’s the small things that show you how satisfied and happy a customer is with the work you do for them. Like when they come online on IRC just to wish us a merry christmas and a happy newyear. Such small things make me glow.
MacPorts, Qt4 and PyQT
This is simply written down for references. If you want to use PyQt with the qt4-mac port from macports, you need to do several things, because (a) there are no PyQt bindings in Macports yet for qt4 and (b) py-sip is version 4.6 while you need 4.7 for the PyQt bindings:
- Execute the following commands:
sudo port install python24 python_select sudo python_select python24 cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/python/py-sip
- Edit the Portfile and change the following things:
- Change the following lines:
version 4.7.1
checksums md5 083a4241ce63f9d44fbadc8f3c6d6f42 - Remove the other two lines with the checksums or comment them out
- Change the following lines:
- Execute the following commands:
port install py-sip
port install qt4-mac - You can do this while qt4-mac is building:
- Download the PyQt bindings for Mac from here.
- Unzip it and go to that directory.
- Execute the following commands:
python configure.pymakesudo make install
Done!
Edit: This will work, mostly, but pyuic seems to be broken
Edit 20-3-2008: You can find more info in my latest post about this.
httperf and visitor click replay
We’re using httperf to test some load on the webserver. To make it more “lifelike”, we had a user browse the site and read the parts he was interested in. From that, we needed to create a list of urls and waiting times that correctly reflect the actual behaviour of the visitor.
For this, I created a small python script. You feed it a log that contains lines like:
[17/Jul/2007:17:37:34 /mytest/page.html
As you can see, I simply parsed the Apache log of the visit through an "awk '{print $4, $7}'", directed to a file. I then read that file with the following python app to create a file that matches httperfs directions. Keep in mind that:
- Each request made within one second of the previous request is considered part of one request (like, you get the html and the jpegs in one request).
- Anything longer is considered "think time" of the visitor.
The program is kinda sloppy, but it works, which is all I really care about ![]()
import sys
from datetime import *
lasttime = datetime(2007,07,17,0,0,0)
set = []
file = open(sys.argv[1])
newfile = open("new-test","w")
for line in file:
newtime = datetime(2007,07,17,int(line[13:15]),int(line[16:18]),int(line[19:21]))
delta = newtime - lasttime
if delta.seconds > 1:
if len(set) > 0:
set[0] = set[0] + " think=" + str(delta.seconds) + "\n"
for writeline in set:
newfile.write(str(writeline))
set = []
set.append(line[22:-4])
else:
set.append("\t"+line[22:-4]+"\n")
lasttime = newtime
set[0] = set[0] + "\n"
for writeline in set:
newfile.write(str(writeline))
file.close()
newfile.close()
Ja, het is even stil geweest
Inderdaad, behalve wat technische snippets is het stil geweest op mijn blog. Voor de gemiddelde lezer kan dat twee dingen betekenen: Ofwel er gebeurt zo weinig dat ik niks te bloggen heb ofwel ik ben gestopt met bloggen. Beide zijn niet waar, ik heb het gewoon te druk gehad. Er is een boel aan het veranderen hier.
Als eerste hebben Monique en ik eindelijk een huisje gevonden. Deze keer, om onszelf niet te enthousiast te maken zoals de vorige twee keren, hebben we het enigszins stil gehouden. Maar nu is er niks meer dat het kan tegenhouden (hoop ik), komende dinsdag gaan we tekenen bij de notaris en dan krijgen we direct de sleutel. En dan kunnen we eindelijk gaan samenwonen! Tegen die tijd zal ik er wel meer over vertellen, deze post is enkel bedoeld als samenvatting van de afgelopen maanden
(Ik hou jullie in spanning, ja
)
Als tweede zijn we bezig om ons bedrijf stop te zetten. De drukte van de afgelopen maanden heeft ons eens te meer laten inzien dat we het gewoon niet met twee personen kunnen redden. Met name toen Kees belde dat hij eigenlijk ook handen tekort kwam, was het duidelijk. Ons bedrijf heeft zo weinig toekomst. We gaan dus een nieuw bedrijf opstarten
Samen met Kees, deze keer. Ik weet niet meer of ik er toen over geblogd had, maar toen we met Cidev begonnen, hebben we Kees ook gevraagd of hij mee wilde doen. Die vond dat toen zo’n goed idee, dat hij voor zichzelf begonnen is. Inmiddels hebben we twee volwassen bedrijven en is er veel werk in de markt (IT merkt het het eerst als de economie begint aan te trekken). Tijd voor een nieuw bedrijf, samen.
Toen we begonnen waren we blij met al het werk dat we kregen, inmiddels zitten we in de luxe positie dat we alleen nog maar die opdrachten hoeven aan te nemen die we echt leuk vinden en waar we echt goed in zijn. Het nieuwe bedrijf zal zich dan ook veel meer specialiseren op het server onderhoud in, met name, situaties waarin de eisen hoog zijn. We zijn de laatste tijd steeds meer bezig met High Availability, redundancy en fail-over, maar ook het onderhouden van grotere serverparken. Dat vinden we leuk, dat kunnen we erg goed (zeggen onze klanten) en daar is een goeie toekomst in. Ook internationaal, want onze grootste klant momenteel zit in Engeland en onze laatste klant is een Zweeds/Noors bedrijf.
Nu zitten we dus alleen nog met het probleem dat we al twee maanden aan het nadenken zijn over een goeie naam. Iets dat op ons slaat, eventueel met een beetje humor, maar een naam die ook in het Engels meteen duidelijk is. Onze huidige naam (Cidev, uitgesproken als [sie-def]) leent zich niet echt voor een Engelse uitspraak (daar maken ze dan [sai-def] van en dat vinden we nogal raar klinken). Bovendien is Cidev een afkorting van een naam die totaal niet meer op ons slaat. Tijd voor iets nieuws… Suggesties?
Doing something well
You know you’re doing something well when an employee of your customer sends you an email with:
Hi Guys
Off home now, thanks for all the help, and have a good weekend!
Cheers
VMware Server 1.0.2 on Debian Etch
If you want to install VMware Server on Debian Etch, you need the following packages installed:
apt-get install linux-headers-2.6.18-4-amd64 psmisc libx11-6 libxtst6 libxt6 libxext6 libsm6 libxrender1 libxi6 ia32-libs make gcc libc-dev
Virtualisation becoming the norm
A lot of work is being done on virtualisation, especially in the Open Source Community. Which is probably kind of ironical, since the first implementations I’ve seen that were very viable were stuff like VMware and Virtual PC. Another application, developed more recently I believe, is Qemu. Not really virtualisation, but emulation is done by Bochs. Qemu is Open Source and became quite widely used.
That and the way servers are getting more and more powerful, it made virtualisation not only desirable, but also better feasible. We use Xen a lot, which suits our needs. Other people we know use Linux VServer, OpenVZ or it’s commercial counterpart Virtuozzo.
Virtualisation is what we use to create virtual machines on one server. Ten years ago, this would be wierd, since you needed all the computing power and memory that you could get for just running the stuff you wanted to run. But ten years before that, when Mainframes were still being used heavily, this was common place! Not that any user would notice, mind you, and there probably wasn’t any virtualisation as we know it today, but the fact that one machine with relatively large performance and capacity was used for doing several tasks in parallel (it was called time-sharing back then) can’t be denied. And that’s the essence of virtualisation, doing lots of stuff at the same time, on one machine.
Nowadays, when you buy a modern server, you’ll get an insanely fast dual-core processor and more bits of memory than the age of the Universe in years… Okay, maybe not that much memory (which would be 14+GB, for those interested), but 2G is standard these days. And we prefer 4G, honestly. What on earth would we, being a non-space-agency, non-mathematical-institution, non-financial-institution, do with so much capacity? Well, divide it into serveral servers of course! And for that, we use virtualisation.
Having several virtual machines gives a lot of benefits. Security-wise, but also practical. For instance, one of our customers uses a production environment (which is critical to their business) and a staging environment (which is non-critical). We gave them two virtual machines, so they could upgrade and test their code in one, while not disturbing anything in the production environment. All in one single hardware box. We can ‘reboot’ or reinstall the staging area, without having to take down their production server, so it really feels like there are two machines.
When thinking about security, there are several benefits. First of all, you don’t have to run all the stuff you need in one environment, which makes it more difficult to hack into a specific service. Think for example about the Apache website defacement from the 3th of May, 2000. As you can read in their whitepaper, the hackers used flaws in (the configuration of) other services running on the Apache.org server to hack into the webserver. This just goes to show that even when you think your own program is very secure, the environment in which it runs needs to be secure too! And one relatively easy way to make your machine more secure, is making sure you run only the most necessary services needed. In other words, if there are less services running on your server, the chances of a break-in are reduced too! So if we can spread out the services on multiple machines, the chances of one of those machines getting hacked might be the same, but the hackers are far better contained. Getting from one virtual machine to another is (about) as difficult as breaking into the other machine directly! Great news!
So even though there are alternatives to all the things I’ve described here (chroot or FreeBSD‘s jail, for instance), virtualisation is a really nice and clean solution. Great stuff, really interesting.
No idea why I wrote this post, though.
Licenties en hun gevaren
(Dit artikeltje staat al een tijdje in de wacht, dus het artikel waar ik heen link zal inmiddels wel wat oud nieuws zijn. Mijn punt blijft echter gewoon geldig.)
Een gemeente heeft ruzie met een softwareleverancier, uiteraard gaat het over geld. De gemeente heeft een grote parkeergarage die ze optimaal gebruiken doordat een robot de auto’s parkeert. Op zich wel stoer natuurlijk. De garage is van de gemeente en ik neem aan alle hardware die erin staat ook. Alleen de software die de robot aanstuurt is niet van de gemeente. Dus toen de twee partijen ruzie kregen, stopte de robot gewoon met werken. Dus zit de gemeente opgezadeld met een dure parkeergarage waar tientallen auto’s in opgeslagen zijn, omdat de softwareleverancier geld wilt zien. Typisch geval van gijzeling, dus.
Een goeie reden om voor Open Source Software te kiezen. Als je ruzie krijgt met een leverancier, stap je gewoon naar de volgende leverancier. De meeste softwarehuizen durven daar niet aan, voor ons is het een bedrijfsmodel. Immers, de software, hoe belangrijk ook, is niet hetgene wat je verkoopt. Punt is namelijk dat geen enkel bedrijf op zoek is naar software, ze hebben het niet nodig. Software is een middel, geen doel. Wat deze gemeente wilde, was dat die robot zijn werk deed, door efficient die auto’s te parkeren. Andere bedrijven willen dat hun programma’s blijven lopen en dat de gegevens die ze op servers hebben staan goed veilig staan. Of ze zoeken een oplossing om intern makkelijk bestanden te delen, zodat ze beter kunnen samenwerken. Of hun agenda delen, wat soms zelfs belangrijker is dan het delen van die bestanden.
En voor al deze dingen wil je niet afhankelijk zijn van de nukken van een softwareleverancier. Je hebt geld neergelegd voor die software en je verwacht dat het goed blijft werken en er geen fouten in zitten. En als er fouten in zitten, verwacht je dat ze snel opgelost worden. Sommige bedrijven proberen al dat werk te betalen door licenties af te sluiten. Licenties waar de gebruiker alleen maar nadelen van heeft, geen enkel voordeel. Wat dat betreft ben ik het roerig met Bruce Schneier eens: Het wordt tijd dat softwarebedrijven verantwoording moeten gaan afleggen voor de software die ze maken. Niet zodat je een partij heb om aan te klagen als je 2 miljoen verliest doordat je server er twee dagen uit ligt, maar zodat ze gemotiveerd worden om betere software te schrijven.
Dat vind ik juist zo mooi aan Debian en Open Source in het algemeen: Ze willen iets goeds neerzetten. En als het me niet bevalt, kan ik het zelf aanpassen en verbeteren. En als de persoon die de boel onderhoudt me niet bevalt, loop ik naar een andere toe. Ons bedrijf vindt die mogelijkheid belangrijk. We willen mensen niet aan ons vastbinden, omdat wij de enigen zijn die die robot aan kunnen sturen, we willen mensen aan ons binden omdat wij ons werk goed doen en omdat ze ons waarderen. Daarom gebruiken wij Open Source Software en maken we altijd goeie documentatie van de systemen die ons toevertrouwd zijn. Doen wij ons werk niet goed? Stap over naar een ander! Dat houdt ons scherp en gemotiveerd om voor onze klanten de beste ervaring te creëren.
Hm, dit is wel een heel erg verkoopspraatje geworden, zeg. Maar het komt uit het hart.
Wel of niet?
(Geschreven in de trein, na het overleg met de klant.)
Vandaag zitten we op een punt waarop we moeten besluiten of we links of rechts willen. Cidev heeft zicht op een grote opdracht op basis van Plone, maar tevens een redelijk ingewikkelde opdracht. Als het doorgaat, zou het iets zijn waar Bart zeker een maand of drie mee bezig zal zijn. (Ik “bewaak dan het fort”, als in, ik bedien het grootste gedeelte van onze andere klanten, zodat Bart de gelegenheid heeft om zich aan die nieuwe opdracht te wijden.)
Maar we zitten een beetje in dubio, of we het wel of niet moeten doen. Van de ene kant is het een erg interessante opdracht, die voorbij de grenzen van het kunnen van Plone gaat. Dat betekent zoveel als dat Bart zelf onderdelen zal moeten maken om alles te laten werken zoals gewenst. Een belangrijk onderdeel is een aparte koppeling met een database die de klant al jaren intern gebruikt. Een tijdelijke koppeling bovendien, aangezien deze over een jaar wordt omgezet naar een nieuw systeem. Maar ook zullen er dingen gemaakt worden om een groot aantal sites makkelijk en centraal te kunnen beheren, op basis van die database.
Van de andere kant vragen we ons af of we wel voldoende kwaliteit kunnen bieden binnen een acceptabel budget. Kwaliteit is voor ons van levensbelang. De hele filosofie van Cidev draait om het feit dat Bart en ik enkel kwaliteit willen leveren. En niet alleen kwaliteit vanuit het oogpunt van een eindgebruiker, ook kwaliteit uit het oogpunt van een persoon met technisch inzicht. Door het bieden van deze kwaliteit, kun je veel beter gebruik maken van alle mogelijkheden die een specifiek systeem biedt en de mogelijkheden die de ontwikkelaars van Plone er achteraf nog inbouwen. Plone is immers Open Source en constant in ontwikkeling. En alhoewel Bart al ongeveer vier jaar ervaring heeft met het pakket, heeft hij nog niet het idee dat hij alle ins en outs goed beheerst. Bovendien komen er steeds nieuwe dingen bij. Bedrijven die zich specialiseren in Plone zijn hier in het voordeel, die doen niks anders.
Een ander probleem is dat website ontwikkeling niet echt een core-business van ons is. Wij zijn de partij die graag facilitairt, die servers opzet en onderhoud zodat klanten er goed gebruik van kunnen maken. Software beheren en op interessante manieren aan elkaar koppelen is waar we goed in zijn, denk bijvoorbeeld aan load-balancing van een app, virtualisatie via Xen of een Beowulf cluster. Dat zijn de zaken waar wij in geïnteresseerd zijn en waar we gewoon goed in zijn. Dat zijn dingen waar we mee begonnen zijn bij Interlink en waarmee we denken dat we iets kunnen toevoegen aan andere bedrijven of instellingen. Servers zijn onze core-business.
Maar Bart vindt Plone ook interessant en ik ben ervan overtuigd dat hij prima resultaat zal opleveren (hijzelf is daar niet zo zeker van, maar ik vind dat hij zichzelf nog wel eens onderschat). Hij weet niet zeker of hij het aandurft en de prijs en tijd die nodig zal zijn binnen de perken kan houden. Ik laat de beslissing aan hem over. Wat hij ook besluit, ik zal het begrijpen. Van de ene kant een interessante opdracht, van de andere kant niet zeker of dit wel is wat we willen en kunnen doen. Nee zeggen is een optie, simpelweg omdat de argumenten valide zijn en daar kunnen we niks aan veranderen. Maar het is toch ook wel weer een erg leuke opdracht…
Vakantie!
Eindelijk is het dan zo ver. Nog een paar uurtjes slapen en dan vertrekken we naar ons huisje in Gees om lekker een week lang niks te doen. De afgelopen dagen was een beetje stressen in de hoop dat ik alles nog op tijd af zou krijgen (wat overigens niet is gelukt), gisteren tot laat gewerkt, vandaag vroeg begonnen en tot laat gewerkt en nog steeds twee steekjes laten vallen. Het ene ding voor een bestaande klant was niet helemaal mijn schuld, er waren andere zaken bij hun die mijn aandacht vereisten en die prioriteit hadden. Bovendien had ik van te voren niet gedacht dat het programma wat ik zou gaan ontwikkelen zo ingewikkeld was. Nou ja, het principe is niet ingewikkeld, maar het moet aansluiten op een ander programma en dat programma is nogal complex.
Het andere is een belofte over een desktopmachine van een kennis. Mag ik ook “uurtjes voor rekenen” (verschrikkelijk klinkt dat, maar goed), maar ik had gehoopt dat ik hem vandaag een vervanging kon aanbieden. Helaas, zijn netwerk ging afgelopen dinsdag naar de haaien en zonder dat netwerk kon hij niet werken. Dus afgelopen dinsdag daar 6 uur mee bezig geweest om het weer een beetje werkend te krijgen. Kwam een stukje hardware tekort en dat is vandaag afgeleverd, waardoor ik het goed hebben kunnen maken.
Een goeie vriendin komt binnenkort ook weer terug naar Nederland, waardoor ik ook daar weer een dagje vrij moet houden. We hebben naar alle waarschijnlijkheid een nieuwe, leuke, uitdagende opdracht erbij, waar ik erg veel zin in heb. Bart is aan het overwegen of hij zijn laatste project in een uitgebreidere versie durft aan te pakken. Kortom, allemaal spannende dingen voor als ik weer terug ben.
Maar voor nu, vakantie!
Bazaar vs. Cathedral (or something like it)
I just started to read a blog post about Windows Vista development politics and once again I’m glad I’m in the *nix-camp. Microsoft is trying to create a big leviathan, software-wise, which controls every and all aspects of your computer. A good *nix environment (like Linux or a *BSD or even MacOSX) works the other way around: Create lots of little controls that control one teeny-weeny aspect of your computer. But be sure they control it very, very well.
The same should be applied to many business-aspects. Don’t create a major management that tries to control everything. Have each employee be responsible for their own work and make sure they’re the right people at the right place (like, don’t have a marketeer decide how your program should look, have an interface designer do that!). I know that idea is an utopia, you never have all the people around that actually have all the specialist knowledge that you need. But you can make intelligent decisions here.
I mean, when I look at my own company, I’m the one who takes financial decisions. Of course I consult my business partner when I’m about to refurnish our office, but he knows I’ll make the right decisions. Just like he makes any technical decisions. Of course he talks them over with me, but I trust him about those things, so the actual decision is taken by him. I really, really hope we can grow this way, too. The right people at the right place.
IT Conversations: Thomas W. Malone – The Future of Work
IT Conversations: Thomas W. Malone – The Future of Work
Being a company owner, these talks are becoming more and more interesting to me. Especially when I notice more and more the potential Cidev has to really grow. The only reason why we’re holding back is that we think we need more assurances that things will really work out. This talk isn’t about that.
This talk from Thomas Malone is about the structure you can use to set up your (big) company in a way that follows the current trends. He thinks that company hierarchies are passé and we’re moving more towards a democracy within companies. Not because people want to elect their boss, but because employees care about their work and want to influence major decisions. This way, you can harnass most of the potential of your employees.
Food for thought.
Weekendje weg en lekker druk daarna
Het lijkt alweer lang geleden. In het weekend van 3 maart zijn we met zijn drietjes (Monique, Aagje en ik) naar een bungalowpark in Gees, Drenthe geweest. Lekker een weekendje weg, helemaal niks doen. Zijn lekker tot rust gekomen, ook al hebben we over de terugweg iets langer gedaan dan gepland (met mijn kop vol rust ben ik richting Utrecht gereden in plaats van richting Nijmegen), maar zelfs dat was lekker rustig.
Daarna meteen begonnen met een grote, nieuwe opdracht, die voor ons erg interessant kan zijn. Maar zoals je misschien al van me gewend bent, ga ik er niks verder over uitleggen. Mag ook niet, want we hebben een NDA getekend (en daar staat stiekum helemaal niks in over het wel over niet over de klant of de opdracht mogen hebben op mijn blog, maar is wel een goed excuus om het niet te doen). Het leuke aan deze opdracht is wel dat het precies een opdracht is die wij als ideaal beschouwen: Uitdagend, nieuwe technologie, interessant, Open Source. En hij duurt ook nog wel even.
Daarnaast komen bestaande klanten ook met steeds meer opdrachten, waardoor we het werkelijk erg druk gaan krijgen. Eindelijk, want het heeft veel te lang geduurd. Eindelijk is het punt in zicht, het punt waarop we kunnen zeggen dat we ervan kunnen leven. Hard aan het werk, dus.
Allerlei
Alhoewel ik zeker weet dat ik ook mijn studententijd erg productief en gezellig heb doorgebracht, word ik toch wel een beetje jaloers als ik lees wat Elise allemaal meemaakt daar in San Francisco. Dan denk ik terug aan mijn eigen bijna-avontuur, het half jaartje Ghana wat niet doorgegaan is. En dan baal ik wel een beetje. Natuurlijk, ik ben nog jong en nog genoeg tijd en zo, maar rond je twintigste is alles toch net even anders dan wanneer je dichter bij de 30 zit dan de 20.
Daarnaast heb ik nog niet gemeld dat ik Frummel en Guinny twee weken geleden verkocht heb aan de dierenspeciaalzaak. Het zat eraan te komen, natuurlijk. Ja, inderdaad, alleen Frummel en Guinny. Muuz was op het einde zo aanhankelijk dat zelfs Monique in de auto onderweg naar de dierenspeciaalzaak wel een beetje voor haar viel. In de dierenzaak hebben ze meteen even een geslachtsanalyse gedaan. Muuz en Frummel zijn vrouwtjes en Guinny was een mannetje. En Muuz leeft nu dus lekker samen met Fluffy.
Bart en ik hebben het erg druk met Cidev, momenteel. Een paar opdrachten die naast elkaar lopen en binnenkort alweer af moeten zijn. En we zijn natuurlijk hard aan het werk om nog meer nieuwe klanten te krijgen. Zo zijn we begonnen met een Small Business Academy (Teamvenlo) en zijn we aan het kijken wat we nog meer kunnen doen.
Genoeg te doen, dus






