Van digitale naar analoge spam

Door merlijn85 op donderdag 10 september 2009 11:13 - Reacties (15)
CategorieŽn: Niet-technisch, Rants, Views: 3.216

Regelmatig krijg ik (en vele medelanders met mij) reclame in de brievenbus van bedrijven waar ik nooit iets heb gekocht of uberhaupt ooit van gehoord heb. Er rijst dan bij mij de vraag 'Hoe komen deze mensen aan mijn gegevens?' en 'Wat geeft hen het idee dat ik spullen bij hun af zou willen nemen?'.

In het prille begin van email werd er ook al spam willekeurig verstuurd, over het algemeen om een legitiem product of bedrijf aan te prijzen. Van alle kanten werd er furieus gereageerd, maar aangezien de kosten van spam vrijwel nihil waren - was er slechts een hele lage success rate nodig om het rendabel te maken. Toen email steeds populairder werd sprong iedereen er bovenop om maar meer spam te versturen, tot op het punt van vandaag waar de digitale spam veelal bestaat uit malafide bedrijfjes die nephorlorges, penisvergroters, vervalste opleidingscertificaten en Russische vrouwen aanbieden.

Snailmail is altijd een relatief dure manier van reclame maken geweest, waardoor er door bedrijven vaak gebruik werd gemaakt van een opt-in systeem. Hierbij kwam een klant uit eigen beweging bij het bedrijf aan, en werd dan als klant geregistreerd en kon dan zo nu en dan een reclame folder ontvangen met nieuwe producten of aanbiedingen. Internet en de grote hoeveelheid publieke informatie heeft dit drastisch veranderd, bedrijven sporen actief naar mensen die mogelijk geinteresseerd zijn en sturen op goed geluk maar reclame toe. Blijkbaar zijn vanwege de concurrentie de kosten zo verlaagd dat ook hier weer een lage success rate genoeg is om het rendabel te maken, begint het patroon te dagen?

Mijn huis staat al eventjes te koop op funda, en ik heb nu al een stuk of 4 brieven gehad van verhuisbedrijven gericht aan "De bewoners van". Ook krijg ik ieder jaar zo ongeveer een maand voor de APK post van verschillende autobedrijven die ik voor geen millimeter vertrouw, deze zelfs geadresseerd aan mij. Blijkbaar kunnen ze met genoeg bruteforce op de RDW site hier ook informatie uit halen en mij vervolgens voorzien van gerichte spam. En ook zijn er al de malafide mailings gesignaleerd.

Bij deze wil ik dan ook graag de oproep plaatsen aan mijn lieve medelanders: Doe nooit iets met die spam, haal die success rate zo ver omlaag dat wij niet meer gestoord worden door deze nutteloze papierverspilling. Sterker nog, blijf bewust bij deze bedrijven weg - ook al bent u vroeger wel een klant van ze geweest. Het geld dat u naar deze bedrijven toe brengt wordt gebruikt om bossen te kappen en ontschuldige mensen van hun kostbare tijd te beroven met reclame.

En kunnen we dan ook een "bel-me-niet" register krijgen, maar dan voor deze analoge spam - alstublieft overheid?

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!

Wat kost de crisis nou echt?

Door merlijn85 op donderdag 18 juni 2009 14:46 - Reacties (8)
Categorie: Niet-technisch, Views: 2.394

In het nieuws worden we overspoelt met berichten over de crisis, waarin de meest absurde bedragen worden genoemd die de overheid injecteerd om de economie 'gezond' te houden. Er wordt gesproken over miljarden, zo niet biljoenen en de amerikaanse regering heeft inmiddels zo'n 15 biljoen 'geinvesteerd' in een jaar tijd. Omdat deze bedragen ver van ons bed zijn heeft het bedrijf Wallstats een grafische weergave gemaakt om het enigzins inzichtelijk te maken.

De bailouts van het afgelopen jaar worden hier vergeleken met een aantal grote geld verslindende projecten van de afgelopen 206 jaar, namelijk: de tweede wereld oorlog, de eerste reis naar de maan, 'the New Deal', Irak, Vietnam en de oorlogen in Korea. De crisis heeft afgelopen jaar meer gekost dan al deze zaken BIJ ELKAAR.

http://www.ritholtz.com/blog/wp-content/uploads/2009/06/bailoutnationchart-912x1024.jpg

En wat hebben we nu helemaal terug gekregen voor die 15 biljoen?

Bron

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.