Async Javascript Piwik tracking code

By default Piwik uses a very long piece of Javascript code with a lot of variables. But a lot of this code can be removed to speed things up. I came up with this code, based on the Google Analytics tracking code that works perfectly fine for the Piwik Javascript Tracking code:

<script type="text/javascript">
var _paq = [
['setSiteId', <Site ID in Piwik>],
['setDoNotTrack', 1],
['setTrackerUrl', 'http://<webhost>/piwik.php'],
['trackPageView'],
['enableLinkTracking']
];
(function()
{
var g = document.createElement('script'); g.type = 'text/javascript'; g.async = true; g.src = '//<address on which piwik.js is located>/piwik.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(g,s);
}
)
();
</script>

The code has been de-minified and a few things are important:

  • setSiteId – You have to set the SiteID correctly. You can find this ID in Piwik > Settings > Websites
  • setTrackerUrl – On which webhost is Piwik located? This URL has to refer towards that address or otherwise statistics cannot be collected!
  • setDoNotTrack – If people have configured their browser to send the DoNotTrack header, respect this and do not track those people in the statistics.
  • g.src – You can use another webhost to serve piwik.js for speed optimization. Preferably from a cookie-free domain.

The full minified tracking code:

<script type="text/javascript">
var _paq = [['setSiteId', X],['setDoNotTrack', 1],['setTrackerUrl', 'http://stat.domain.com/piwik.php'],['trackPageView'],['enableLinkTracking']];(function(){var g = document.createElement('script'); g.type = 'text/javascript'; g.async = true; g.src = '//cdn.domain.com/piwik.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(g,s); })();
</script>

Show related posts in WordPress without a plugin

There are plugins that provide you with the ability to show related posts below a post. But it’s possible to do this without using plugins.

This code uses tags attached to posts to show 5 related posts in a list.

<?php
$tags = wp_get_post_tags($post->ID);
if ($tags) {
$tag_ids = array();
foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
$args=array(
'tag__in' => $tag_ids,
'post__not_in' => array($post->ID), // do not display the current post
'showposts'=> 5, // Number of related posts that will be shown.
'no_found_rows' => true
);
$my_query = new wp_query($args);
if( $my_query->have_posts() ) {
echo '<h3>Recommended posts to read</h3><ul>';
while ($my_query->have_posts()) :
$my_query->the_post();
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark" title="Open <?php the_title_attribute(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; echo '</ul>'; }}
wp_reset_postdata();
?>

You should place it below the content in single.php.

Stroomstoring

Er heeft een stroomstoring plaatsgevonden en als gevolg daarvan zijn een aantal websites ongeveer 1.5 uur onbereikbaar geweest. Ik was namelijk aan het sporten toen het gebeurde..

De websites + email is weer opgestart en werkt naar behoren!

Registratie staticcdn.nl

Zojuist heb ik het domein staticcdn.nl geregistreerd om vanaf dit nieuwe domein enkel statische content te serveren voor maartenvandekamp.nl. Eerder werd deze content van een subdomein – s0.maartenvandekamp.nl – geserveerd maar na research op internet bleek dat een onafhankelijk domein enkele voordelen had.

MaartenvandeKamp.nl versnellen

Het dagelijkse aantal bezoekers stijgt langzaam maar zeker naar nieuwe nog-niet-eerder-verkende-hoogtes en ik wil de site zo snel mogelijk maken zonder een volledige front-end cache zoals Varnish in te zetten. Dus zoek ik het bij de back-end.

WordPress.com heeft Batcache ontwikkeld en deze cache maakt gebruik van memcached. Memcached kan 1 ding heel goed en dat is informatie opslaan in het geheugen. Het geheugen is tientallen malen sneller dan een harde schrijf en ideaal als plek om informatie op te slaan om die later weer op te vragen.

Sinds vanavond maakt MaartenvandeKamp.nl gebruik van een memcached cache voor objecten. De pagina wordt bij het eerste bezoek door PHP gegenereerd en vervolgens opgeslagen in het memcached geheugen. Als er opnieuw een pagina wordt opgevraagd, dan zal WordPress eerst aan memcached vragen of de informatie daar beschikbaar is. En als dat zo is, dan wordt het direct daaruit geserveerd. Staat het er niet in? Dan wordt de aanvraag doorgestuurd naar PHP om verwerkt te worden.

Momenteel wordt elke pagina een uur gecached om te testen wat het effect daarvan is op de gebruikerservaring. De laadtijd is voor de voorpagina, wat een vrij zware pagina is, bijna gehalveerd van 800ms naar 450ms. Daar ben ik heel tevreden over en ik hoop dat de gebruikers er ook plezier aan beleven.

Follow knop

WordPress.com heeft sinds september 2011 de Follow button, een knop rechtsonderin waarmee bezoekers zich eenvoudig kunnen abonneren op nieuwe artikelen van een blog. Dit werkt alleen op WordPress.com websites maar er is een plugin geschreven die werkt met Jetpack.

Helaas was de code een beetje verouderd en daarom heb ik de code van WordPress.com gepakt en de code van de plugin geupdate zodat de layout exact overeenkomt met die van WordPress.com. Bewonder hem nu op MaartenvandeKamp.nl!

Herken de knop

Ingeklapt zie je het volgende rechtsonderin het scherm verschijnen:
Follow button WordPress.com

En uitgeklapt:

Follow Button ExpandedAlle gegevens worden doorgegeven aan de Subscription Widget die met Jetpack meekomt zodat een registratie zonder problemen aan WordPress.com wordt doorgegeven.

Statistieken December 2012 en heel 2012

Sinds augustus 2012 worden bezoekersstatistieken geregistreerd voor verschillende websites die ik beheer. Vooral de groei van MaartenvandeKamp.nl is enorm. De maand December heeft een grotere groei gekend dan November, wat al een flinke groei was t.o.v. Oktober.

Dit zijn kort de gegevens voor oktober, november en december:

Maand Bezoeken Pageviews Percentage bezoeken Percentage pageviews
Oktober 2012 2626 6734
November 2012 3268 8170 + 24.45% + 21.32%
December 2012 3864 10 332 + 17.5% + 26%

De pageviews zijn procentueel harder gestegen en heeft zelfs de grens van 10 000 doorbroken! Het aantal bezoeken ligt 7 procent lager dan de maand daarvoor maar dat vind ik niet gek voor de maand December met de vele feestdagen.

Het hele jaar

Zoals ik eerder al zei, sinds augustus meet ik de bezoekersstatistieken en hiervoor gebruik ik Piwik, een gratis open-source alternatief voor Google Analytics.

Piwik Statistieken 2012
Piwik Statistieken 2012

Ook is uit de grafiek te lezen dat het aantal pageviews harder stijgt dan het aantal bezoekers, wat betekent dat elke bezoeker meer pagina’s bekijkt dan de maanden daarvoor. Daaruit kan ik herleiden dat de site steeds meer de moeite waard wordt om te lezen.

Op naar 2013!

Groei MaartenvandeKamp.nl

Er is weer een maand voorbij en ik wil zo af en toe gaan terugkijken op de maand. Afgelopen maand is een maand van groei geweest voor MaartenvandeKamp.nl.

Dit zijn kort de gegevens voor oktober en november:

Maand Bezoeken Pageviews Percentage bezoeken Percentage pageviews
Oktober 2012 2626 6734
November 2012 3268 8170 + 24.45% + 21.32%

Dat ziet er goed uit he? Ik ben zeer tevreden over mijn website en ik hoop dat de site blijft groeien!

Beveiliging van email in Zimbra met DKIM

Ik ben al een poosje bezig om mijn mailserver betrouwbaarder te maken door SPF-records aan de DNS toe te voegen. Tot nu toe is het nog niet helemaal geslaagd, maar vandaag heb ik wel een andere stap gezet, namelijk met DKIM.

Hoe werkt DKIM?

DKIM voegt het veld “DKIM-Signature” toe aan de header van een e-mail. Dit veld bevat een digitale handtekening van de inhoud van de e-mail (op basis van zowel headers als de body van de e-mail). Deze handtekening wordt gemaakt door middel van SHA-256-encryptie, waarbij gebruik wordt gemaakt van RSA voor het afhandelen van de encryptie van de sleutel.

De ontvangende SMTP-server gebruikt de domeinnaam van de afzender, de string “_domainkey” en een selector uit het DKIM-Signature veld om een DNS-aanvraag te doen. Als antwoord op het DNS-verzoek ontvangt de mailserver de publieke sleutel van de afzender. De ontvanger gebruikt deze om de handtekening opnieuw te berekenen en deze te vergelijken met de waarde die meegestuurd was in het bericht. Als de twee handtekeningen overeenkomen bewijst dat dat de e-mail daadwerkelijk afkomstig is van het desbetreffende domein en niet aangepast is gedurende het transport.

DKIM blokkeert een “vervalste” e-mail niet zelf. Het markeert deze enkel als ongeldig, waarna een spamfilter op basis daarvan de e-mail kan blokkeren of als verdacht kan beschouwen.

Bron: http://nl.wikipedia.org/wiki/DomainKeys_Identified_Mail

Vanaf Zimbra Collaboration Suite versie 8 is het mogelijk om emailberichten te ondertekenen met DKIM. Hier staat de handleiding die ik succesvol heb toegepast.