Alles wat maar vagelijk betrekking heeft tot Open Source

GUADEC 2010

Door merlijn85 op zaterdag 26 juni 2010 15:26 - Reacties (2)
Categorie: Open Source, Views: 2.543

Alweer even geleden dat ik gebruik heb gemaakt van mijn blog, maar er is weer iets leuks in aantocht. Van 24-30 Juli wordt de GNOME Users’ And Developers’ European Conference gehouden in het gebouw van de Haagse Hogeschool, oftewel voor nederlanders en belgen de ideale kans om deel te nemen aan deze conferentie.

Hoewel ik zelf niet een enorme voorkeur heb qua desktop environment (ik zit >80% van de tijd in de terminal of IDE), maak ik toch vaak gebruik van GNOME. Het is misschien een wat suffe argumentatie, maar voor mij is het belangrijk dat een desktop environment eenvoudig werkt. Het werken met wmii / awesomewm / xmonad gaat teveel tijd kosten, en dan is een complete oplossing zoals GNOME, KDE, Xfce of LXDE heel erg fijn. Nu hoor ik vaak dat mensen GNOME bloated en traag vinden, maar als je op een netbook of trage oude machine wil werken kan je ook prima voor LXDE gaan dat in mijn ogen zelfs nog sneller en lichter is dan het bekendere Xfce.

Eigenlijk ben ik dus niet een echte GNOME aanhanger, maar toch ga ik zeker even een kijkje nemen op de GUADEC aangezien die nu een keer vlakbij is. En hopelijk kan ik met deze blog nog een aantal andere tweakers overhalen om een keertje te komen kijken.

Meer info op guadec.org

A bedtime story for our little geeks en

By merlijn85 on Wednesday 26 August 2009 13:04 - Comments (4)
Category: Perl, Views: 2.839

We cannot start early enough to teach our children the most valuable skill in life: Programming. Hence I've spent a little time writing code that should be easy to relate to for kids.

So for those of us that have children, you can now share the glory of perl through a story that's been read to kids for centuries:


code:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/usr/bin/perl

package Little_Red_Riding_Hood;

sub new {
    ($class,$item,$dest,$route) = @_;
    $lrrh = {
        hooded_cape => 'red',
        name => 'Little Red Riding Hood',
        item => $item,
        destination => $dest,
        route => $route
    };
    bless $lrrh, $class;
}

sub walk_to_dest {
    $self = shift;
    print 'Little Red Riding Hood: I\'m going to deliver ' . $self->{item} . ' to my ' . $self->{destination} . ' by walking through ' . $self->{route} . ".\n";
}

sub respond_to_wolf {
    my $self = shift;
    print 'Little Red Riding Hood: Hello Mr Wolf, I\'m going to deliver ' . $self->{item} . ' to my ' . $self->{destination} . ".\n";
}

sub pick_flowers {
    print "Little Red Riding Hood: Good idea, I will do so right away!\n";
    $_[0]->{flowers} = 1;
}

sub approach_grandma {
    print "Little Red Riding Hood: Hello Grandma - My, what big teeth you have!\n";
}

sub get_eaten {
    print "Little Red Riding Hood: GULP!\n";
}

package Wolf;

sub new {
    ($class,$goal) = @_;
    $wolf = {
        goal => $goal
    };
    bless $wolf, $class;
}

sub approach_lrrh {
    $self = shift;
    print 'Wolf: I would like to ' . $self->{goal} . " but it is too public here, where are you going?\n";
}

sub suggest_flowers {
    print "Wolf: You should pick some flowers!\n";
}

sub goto_grandma {
    print "Wolf: Hello grandma, it's me - Little Red Riding Hood.\n";
}

sub eat {
    ($self,$victim) = @_;
    print 'Wolf: I\'m going to eat you now, ' . $victim->{name} . ".\n";
    $victim->get_eaten;
}

sub dress_up_as_grandma {
    print "Wolf: I'm going to dress up like grandma to trick Little Red Riding Hood!\n";
}

sub respond_lrrh {
    print "Wolf: The better to eat you with!\n";
}

package Grandma;

sub new {
    ($class,$name) = @_;
    $grandma = {
        name => $name
    };
    bless $grandma, $class;
}

sub let_wolf_in {
    print "Grandma: Come on in!\n";
}

sub get_eaten {
    print "Grandma: GULP!\n";
}

package main;

$lrrh = new Little_Red_Riding_Hood('food', 'sick grandma', 'woods');
$lrrh->walk_to_dest();

$wolf = new Wolf('eat Little Red Riding Hood');
$wolf->approach_lrrh;
$lrrh->respond_to_wolf;
$wolf->suggest_flowers;
$lrrh->pick_flowers;

$grandma = new Grandma('grandma');
$wolf->goto_grandma;
$grandma->let_wolf_in;
$wolf->eat($grandma);
$wolf->dress_up_as_grandma;

$lrrh->approach_grandma;
$wolf->respond_lrrh;
$wolf->eat($lrrh);



Download

Sleep tight and don't let the bed bugs bite!

Live muziek in FPS games

Door merlijn85 op dinsdag 9 juni 2009 11:49 - Reacties (4)
Categorie: Nexuiz, Views: 2.083

Zo nu en dan komt er eens iets voorbij dat je op een apart idee brengt. Zo kwam iemand in de community aanzetten met het vrij oude filmpje:



Zo rond 0:30 wordt er gesproken over 'Melee weapons' en zijn we met een aantal Nexuiz developers tot de conclusie gekomen dat we eigenlijk idd wel een '@!#%'n Tuba' missen. Zo gezegd, zo gedaan en na een paar dagen hadden we in SVN een ware Tuba model en kon deze bespeeld worden door middel van movement key combinaties.

Als added feature hebben we ook de bots ermee overweg leren gaan, dus met gepaste trots presenteren wij het Nexuiz Bot Orkest:



Het aparte bewegen is de manier waarop het instrument moet worden bespeeld, en daarbij komt er bloed uit hun oren vanwege het geluid (het is dus ook als echt wapen te gebruiken). Kudo's voor wie als eerste raad wat de bots naspelen :-).

nb. Voor wie Nexuiz nog niet kent. Nexuiz is een Open Source FPS die crossplatform (Linux/Mac/Windows) te spelen is, er bestaan vele mods voor en er wordt actief aan de ontwikkeling gewerkt. Meer info op nexuiz.com.

Firefox en performance

Door merlijn85 op donderdag 4 juni 2009 15:04 - Reacties (15)
Categorie: Open Source, Views: 6.060

Aan alle kanten is er gewerkt aan de performance van FF, en sinds versie 3 is er ook ontzettend veel verbeterd. JavaScript loopt stukken vlotter, er wordt minder CPU gebruikt en ook de memory footprint is flink omlaag gebracht. Ondanks al deze geweldige verbeteringen voelt het vaak een beetje traag aan, terwijl ik toch niet de minste hardware heb. Misschien komt het omdat ik een poweruser ben, en gemiddeld zo'n 80 tabs open heb staan op verschillende workspaces - maar ergens zat er toch iets niet lekker. Na lange frustratie heb ik besloten wat tijd te investeren om te gaan zoeken naar oplossingen. En jawel, ik heb ze gevonden!

De ervaring van traagheid kwam bij mij vooral voor bij het openen/sluiten van tabs, typen van een url en bij het opstarten van FF. Het blijkt dat juist op deze kritieke momenten er een hoop data wordt gelezen/geschreven naar de harde schijf, waardoor het proces ineens I/O-bound wordt. Ook is er met FF3 overgestapt naar SQLite databases om de data op te slaan. SQLite is erop gericht om zeer robuuste databases te onderhouden en goed om te gaan met cross-platform, dit doet het allebei zeer succesvol - maar het heeft wel de nodige negatieve effecten op de performance. Met het groeien van de hoeveelheid pagina's die bekeken worden, groeit ook het volume van de databases die op de harde schijf staan en zal de performance steeds verder inzakken.

Allereerst zullen we de hoeveelheid data wat in gaan perken, ga daarom naar about:config waar we een aantal dingen kunnen veranderen.

We zullen beginnen met de diskcache: browser.cache.disk.capacity, ik raad hier een waarde van ongeveer 20000 (20MB) aan. Dit is meer dan genoeg voor de data die je hierin echt wilt opslaan. Het compleet uitzetten van de cache is geen goed idee, FF heeft ruimte nodig om bestanden tijdelijk op te slaan anders gaat de performance alleen maar achteruit.

In FF zitten ook een aantal beveiligingen die proberen te controleren of er geen foute scripts op websites aanwezig zijn. Voor mensen die weten wat ze doen is het veilig om deze uit te zetten, hoewel het er voor zorgt dat het systeem mogelijk gevoelig wordt voor bepaalde attacks. De betreffende keys hiervoor zijn browser.safebrowsing.enabled en browser.safebrowsing.malware.enabled, zet deze beide op false. Dit zorgt ervoor dat de urlclassifier*.sqlite files niet meer wordt gebruikt, en deze kunnen dan ook veilig verwijderd worden. Op mijn systeem namen deze in totaal 80MB in beslag, waardoor dit zorgt voor een flinke boost in performance. Clear allereerst de cache (Tools -> Clear Private Data), sluit FF af en verwijder deze bestanden, bij het opstarten zal FF ze weer aanmaken, maar blijven ze slechts 32kb in grootte.

Intussen heb ik mijn profiel dus weten te krimpen naar een respectabele 60MB (incl. extentions en andere zooi), voor de *nix gebruikers kunnen we echter nog een stap verder gaan door dit profiel in ram te laden - waardoor we helemaal niet meer op de harde schijf hoeven te wachten bij veel acties. Let wel dat dit ervoor zorgt dat er data verloren kan gaan in het geval van een crash, aangezien dan de contents van het RAM geheugen geleegd worden.

Voor de rest van deze blog ga ik ervan uit dat de profilename abcd1234.default is, vervang dit dus met jou eigen profilename!

Laten we eerst een tgz maken als backup:

code:
1
2
3
$ cd
$ cd .mozilla/firefox
$ tar zcpf packed.tgz abcd1234.default



Dan maken we een entry aan in /etc/fstab:

code:
1
firefox /home/merlijn/.mozilla/firefox/abcd1234.default tmpfs size=128M,noauto,user,exec,uid=1000,gid=100 0 0



Omdat alle data verliezen bij eens crash nou niet zo fijn is heb ik een klein backup/restore scriptje:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash

# Change this to match your correct profile
PROFILE="abcd1234.default"

cd "${HOME}/.mozilla/firefox"

if test -z "$(mount | grep -F "${HOME}/.mozilla/firefox/${PROFILE}" )"
then
    mount "${HOME}/.mozilla/firefox/${PROFILE}"
fi

if test -f "${PROFILE}/.unpacked"
then
    tar --exclude '.unpacked' -zcpf packed.tmp.tgz "$PROFILE"
    mv packed.tgz packed.tgz.old
    mv packed.tmp.tgz packed.tgz
else
    tar zxpf packed.tgz &&\
    touch "${PROFILE}/.unpacked"
fi


Dit script zorgt ervoor dat het profiel geladen wordt wanneer het niet aanwezig is, of zorgt ervoor dat het opgeslagen wordt waarbij een extra backup wordt bewaard. Voor de volgende stap is het nodig om Firefox af te sluiten en het profiel te verwijderen, sla daarom de instructies even op in een testbestand oid.

Sluit nu firefox af en ga naar de profile directory, verwijder daar de bestanden of mv de folder - er is nog altijd een backup in packed.tgz. Zorg ervoor dat de lege profile directory nog bestaat voordat we tmpfs er overheen mounten. Run nu het script van hierboven, en controleer of alles is gelukt. Als het goed is moet er nu een tmpfs gemount zijn met daarin alle profile bestanden, en een folder .unpacked in het profiel.

Draai nu nogmaals het script, zodat een extra backup wordt gemaakt - hierna moet ~/.mozilla/firefox/packed.tgz.old ook aanwezig zijn.

Het is verstandig om nu regelmatig backups te maken van het profile, voor het geval van een crash. De meest eenvoudige manier is via een crontab:

code:
1
$ crontab -e


Waar we dan een regel toe kunnen voegen voor het bovenstaande script:

code:
1
*/5 * * * * $HOME/.mozilla/firefox/pack_ffox.sh



Controleer nu of elke 5 minuten de packed.tgz wordt vernieuwd en zo zal in het geval van een crash alleen de data van de laatste 5 minuten (maximaal) verloren gaan.

In mijn geval heeft dit voor een enorme verbetering in performance gezorgt, terwijl ik minimale functionaliteit inlever. RAM heb ik meer dan genoeg, dus 128mb lig ik niet wakker van. Safebrowsing dat lukt me ook wel zonder hulp van firefox dat gericht is op de wat minder ervaren computer gebruikers en wat minder history van surfgedrag stoor ik me ook niet aan. Ik hoop dat dit voor jullie ook functioneel is.

Nexuiz - Cross-platform gamen is geen mythe

Door merlijn85 op zondag 5 april 2009 11:17 - Reacties (4)
Categorie: Nexuiz, Views: 2.606

Na lang wachten is de nieuwe release van Nexuiz een feit! In versie 2.5 zijn een hoop nieuwe features toegevoegd en is veel gedaan om het geheel visueel aantrekkelijker te maken. Voor wie er nog niet mee bekend is, Nexuiz is een First Person Shooter die zich vooral richt op online multiplayer. Het spel onderscheid zich van andere games in dit genre door een ontzettend snelle gameplay en veel gamemodes waarin allemaal verschillende trucs beschikbaar zijn. Verder is het geheel multiplatform en draait op zowel Linux als MacOSX en Windows - en alle code inclusief modellen zijn beschikbaar onder GPLv2.

http://alientrap.org/nexuiz/screenshots/nexuiz_screenshot_10_thumb.jpg
http://alientrap.org/nexuiz/screenshots/nexuiz_screenshot_4_thumb.jpg
Meer screenshots

De systeemeisen voor het spel zijn zeer verschillend en hangen erg af van het OS, de laagste settings zal voor oudere systemen best te spelen zijn en de hoogste settings zullen nog best zwaar zijn voor de nieuwere gamesystemen.

Er is een mooie review te vinden op phoronix, en het spel kan HIER worden gedownload (636MB), en kan na het unzippen direct gestart worden.

Overigens is Nexuiz nog steeds hard op zoek naar developers, dus voor programmeurs / grafische artiesten / audio artiesten zijn er een hoop leuke dingen te doen. Alle tools waarmee ontwikkeld wordt zijn ook beschikbaar onder GPLv2, en het programmeren gebeurt in C / QuakeC. Voor meer info kijk eens op het forum of kom eens langs in #nexuiz op Quakenet of #alientrap op Anynet.