Analyseren van webverkeer

An article, posted 5 days ago filed in , , , , , , , & .

Vaak is het belangrijk om te weten hoe een website wordt gebruikt. Dit informeert discussies en voorkomt daarmee dat er kostbare tijd van ontwikkelaars wordt gestoken in zaken die wellicht nauwelijks gebruikt worden. Het is daarom verstandig om meer te gaan analyseren. Soms hoef je er niet eens meer voor te meten(!)

Zonder meer meten toch meer inzicht

Zonder meer te meten kun je vaak toch al analyses maken. Een webserver registreert standaard alle pagina aanvragen, en wat basis gegevens over iedere bezoeker. Ook houdt een applicatie zelf vaak nog een logboek bij. Met een simpele scriptingtaal zoals python of ruby is het vaak niet moeilijk om hier statistieken uit te halen. Voordeel is dat er geen nieuwe informatie vastgelegd hoeft te worden én dat de eindgebruiker het ook niet kan blokkeren (al kan een gebruiker zich relatief gemakkelijk voordoen als b.v. een 'zoekmachine'). Het nadeel is wel dat je veel dingen zelf moet doen zoals het we…

Continue reading...

Op de hoogte blijven?

Maandelijks maak ik een selectie artikelen en zorg ik voor wat extra context bij de meer technische stukken. Schrijf je hieronder in:

Mailfrequentie = 1x per maand. Je privacy wordt serieus genomen: de mailinglijst bestaat alleen op onze servers.

On assertiveness

An article, posted 7 days ago filed in & .

Some notes I made at a meetup around on assertiveness. I don't regularly attend such meetups but it is good to reflect upon how you communicate and how you look at others communicating.

We need clarity, clarity comes from knowledge.

What is non-assertive? Non-assertive can be passive, but also aggressive or passive aggressive … emotional behaviour.

> “A form of behavior characterized by a confident declaration or affirmation of a statement without need of proof. To assert oneself is to affirm one's rights or position without either aggressively transgressing the rights of another (assuming a position of dominance) or submissively permitting another to ignore or deny one's rights or rightful position.” – assertiveness. (n.d.) Miller-Keane Encyclopedia and Dictionary of Medicine, Nursing, and Allied Health, Seventh Edition. (2003).

Some are…

Continue reading...

Bereik meer met toegankelijkheid: inclusive design

An article, posted 11 days ago filed in , , , , & .

Meer mensen bereiken, waarom dan niet alle mensen? Een paar weken geleden volgde ik een cursus van Peter van Grieken van Frozen Rockets. Hij wees ons er op dat 300.000 mensen in Nederland slechtziend of volledig blind zijn. Daarnaast zijn er bijna 700.000 mensen die kleurenblind zijn en dan hebben we 825.000 dyslectici en 1,5 miljoen laaggeletterden nog niet geteld. Doe je veel met video of geluid dan is het belangrijk om te weten dat er ook nog eens 1,3 miljoen mensen slechthorend of doof zijn. En dat naast 1,5 miljoen lichamelijk beperkten. Dat zijn 4 miljoen mensen met enige vorm van beperking (bron).

Screenshot van het project "Wayfinding for the blind", een onderzoek dat ik tijdens mijn studie (2006) mede had opgezet op de TU/e.

Het was eigenlijk best wel schokkend om te zien dat zelfs grote sites als die…

Continue reading...

Privacy & Google gaan samen

An article, posted 18 days ago filed in , , , , , , , & .

Op de blog van bits of freedom, een respectabele organisatie die ik ook steun, stond onlangs een artikel over tracking. Ik hou zelf ook niet zo van trackers, en bezoek bijna geen site zonder uBlock origin en Privacy Badger, maar van het onnodig zaaien van angst hou ik evenmin. Ik heb indertijd op de post gereageerd, maar wel zo handig om het hier nog eventjes dunnetjes over te doen :)

"Gratis" Lettertypen

Google biedt "gratis" lettertypen aan via Google Fonts. Traditioneel kosten lettertypen geld, en het zomaar meeleveren van lettertypen online komt met veel bijkomende complexiteit. De lettertypen "van Google" (over het algemeen opensource-lettertypen) mag je zelf hosten op je eigen server, maar de meeste mensen maken gebruik van de hosting die Google aanbiedt, zodat je ze zelf…

Continue reading...

Automatische tests

An article, posted 25 days ago filed in , , , , , , , , & .

Eerder schreef ik al wat over technische schuld. Het niet hebben van automatische tests wordt vaak beschouwd als een technische schuld.

Wat zijn automatische tests?

Testen doe je om er zeker van te zijn dat iets werkt dat het goed werkt. Automatische testen maak je (of laat je maken) omdat zeker weten dat het goed werkt veel tijd kost. Wanneer je applicatie vaak nog wordt veranderd wil je er immers ook zeker van zijn dat het ook blijft werken. Automatische tests zijn kleine programmaatjes die testen of onderdelen onafhankelijk (unit-tests) of in samenhang (integratie-tests) goed werken.

Integratie- en unittesten

Bij unit-testen worden kleine onderdelen afzonderlijk bekeken of ze nog werken. Zo kan bijvoorbeeld steeds worden gecontroleerd of de bedragen in een offerte wel nog steeds netjes worden opgeteld, en een andere of er nog wel het verwachtte btw bedrag uit blijft komen.

Bij integratie-toetsen, of syst…

Continue reading...

Resizing images before upload

An article, posted about 2 months ago filed in , , , & .

The resolution of photo's increases every year. And while some of that information may be worthy of retaining, not all is. High resolution images come at a price. Not only storage, but, especially in a mobile context, also data transfer. In this post I explain how you could create an uploader that fixes this.

The old form

Traditionally your form would look something like this:

`
  Upload image:
  
  
`

If you want to be forgiving to your end users (and not requiring them to manually resize the images themselves) you could configure your server to accept files > 20MB and resize the images server side.

However, to save bandwidth you you might want to resize the images just before uploading.

Enter canvas

To manipulate pixels we need a canvas. So we need a canvas element.

Note: Canvas support is barely an issue, but if things don’t work we’ll write to code as such that the traditional form submit will continue to work

...

Continue reading...

A developer’s status update: Test driven deadlock

An article, posted 3 months ago filed in , , , , , , , , , & .

No worries, I do value testing. But test driven? It depends.

The last few weeks I’ve been working off and on building a crawler. The thing triggers a series of scheduled tasks that could run in parallel, generating (possibly) tasks (that are consequently scheduled again in their own task-specific queue) on its own and so on. The end goal is structured copies of external resources (read: webpages). But I’ve been stuck close to the start for quite a while, setting up the base architecture using the test driven development approach. And I’m failing, it’s going too slow :(

Small victories

Like many developers, this is not my first parser/crawler. But this time I wanted to make a GoodParser™. Make it more extensible, and flexible and foremost robust, building in fault-tolerance from start. But I’m not getting near the end result and it is frustrating.

The TDD-school says make small victories, and oh yes, I had my sheer number of victories already. But the end is nowher…

Continue reading...

Eat your own dogfood

An article, posted 3 months ago filed in , , , & .

Just a small note that I've made some improvements to my SocialLinker-gem lately and while I've been using it on a few sites already, I wasn't using it on my very own blog. Today I found some time to change exactly that: you've got to eat your own dog food. If you want to have a taste of it: murb/social_linker (if you're a ruby-dev) or just click the share icons below :)

Image CC-licensed BY: Sh4rp_i

Continue reading...

Should I use React or Angular?

An article, posted 3 months ago filed in , , , , , & .

To put it in some context: these days recruiters call you whether you know this or that framework. Well not really, really well. But it is just JavaScript. Or ECMAScript (or a flavour of it by Microsoft called TypeScript). But above all it is just a tool to get stuff done. Not every job needs a bulldozer. And besides the bulldozers React and Angular there is Vue.js and plenty more. Choose your tools wisely.

Continue reading...

Twitter launches a new web app

An article, posted 4 months ago filed in , , , , , , , , , & .

Targeted at those with low spec phones, Twitter today launched Twitter Lite, a product build on a modern suite of technologies that should be ring a bell with most front-enders today.

The new Twitter frontend is built using React (nb. made by Facebook), Redux, Normalizr, Globalize, Babel, Webpack, Jest, WebdriverIO, and Yarn (they have written about how they built it.

It is a good thing to see a large company not giving up on the open web. I’ve added the new Twitter Lite app to my phone (running iOS) and see if it can replace the native app (as I did with Facebook before). My first impression is pretty good. Most importantly, as promised: it loads faster, even without support for ServiceWorkers (while iOS 1.0 only allowed for web apps, its level of support is kind of bleak when compared to the efforts made by Google and Firefox). It could use some animation …

Continue reading...

Internet Explorer End Of Life

An article, posted 4 months ago filed in , & .

A short note (to myself), because the information is shattered:

Internet Explorer 11 is the only version of Internet Explorer to be supported after April 11th this year. Until then IE9 might still be running supported on machines on Microsoft Extended Support program.

The facts:

Should we worry?

According to the Wikipedia usage stats, IE11 (the latest version) is actually the most used version of Internet Explorer (repr…

Continue reading...

Schatten in een Agile wereld

An article, posted 4 months ago filed in , , & .

Inschatten wat de kosten moeten zijn is lastig. Vaak wijzen mensen in een agile omgeving op de driehoek Scope, Resources en Schedule. Je kunt niet Scope (wat je bouwt), Resources (wat je ervoor nodig hebt) én Schedule (de planning) vastzetten. Wanneer je Scope en Schedule vastzet kun je er wellicht extra geld tegenaan gooien. Op eenzelfde manier kan er ook voor gekozen worden om juist de planning los te laten en/of de scope. Alle drie zaken zeker en vast gaat niet. Maar toch, we willen een idee: wat gaat het kosten en wanneer is ‘het’ (het geplande) af?

Planningspoker

Scrummers doen hun schattingen met het spelen van planningspoker. Deelnemers aan een planningssessie werpen kaarten op tafel waarmee ze uitdrukking geven aan hoe zwaar ze een taak achtten t.o.v. een referentietaak met kaarten die genummerd zijn volgens de Fibonacci(-achtige) reeks. De grotere getallen liggen verder uit elkaar en geven daarbij ook uitdrukking aan een grotere mate van onzekerheid.

Je ku…

Continue reading...

PostgreSQL CSV import

An article, posted 5 months ago filed in , , & .

Since I always forget (database management isn't my day-job): a short guide on how to quickly import large datasets in TXT or CSV into PostgreSQL. For smaller sets I still use ruby and FasterCSV to import the set, but nothing beats native DB imports in terms of speed. And speed doesn't matter when importing a few megabytes of data, but it certainly matters when it gets more than that.

In this example I'll use my current use-case, importing a large Drive-Time Matrix table, with drive times and distances between two postal codes. The head of the TXT file is formatted as such:

"Frompc4","Topc4","Time","Distance"
"1011","1011",0,0
"1011","1012",6,1737
"1011","1013",9,3378
"1011","1014",13,6056
"1011","1015",10,3198
"1011","1016",10,3112
"1011","1017",6,1706
"1011","1018",5,1791
"1011","1019",7,3146

Now let's assume we want to import this in a table 'DTM' with the following columns: from_pc (integer), to_pc (integer), time (in…

Continue reading...

Technische schuld

An article, posted 6 months ago filed in , , , , , , , & .

De software wereld zit vol met Engelse begrippen. “Technical Debt” is ook zo’n begrip. Maar wat is het?

Een dag geleden zag ik dit bericht waarin Technical Debt werd vergeleken met een continue slecht gestapeld Tetris spel. Een rake vergelijking: als je niet oppast wordt de technische structuur van een applicatie een stapeling op zichzelf oplosbare problemen, maar vormt het in z’n geheel een nagenoeg niet te redden constructie.

Maar waar hebben we het dan over?

Technische schuld wijkt af van financiële schuld. Om financiële schuld te maken moet je geld lenen van een ander. Technische schuld ontstaat doordat er geen tijd wordt gestoken in het goed op orde maken van de techniek. Zo is het een goede gewoonte om kritische zaken en/of zaken die erg foutgevoelig zijn in de applicatie te voorzien van automatische tests (“kan die rol wel/niet bij die gegevens?”, “gaat het ook goed als hier een negatief getal …

Continue reading...

Phoenix’ Channels

An article, posted 6 months ago filed in , , , , , , , , , , & .

I started exploring Phoenix for one thing only: Channels (or actually fast real time communication over websockets). In this post I explore how to use them (yes this is a follow up of My first Phoenix-app-post).

Preparing for the authentication problem

Websockets don’t pass session cookies. Because we don't have access to these we need to transfer the user's identity in a different way. One of the recommendations I found was passing a user_token using a ``-tag (adjusting templates/layout/app.html.eex):

We can access this with a simple query selector in javascript:

document.querySelector("meta[name=user_token]").content

But that’s for later. Let’s move to the server side, since we need something to connect to, a Socket.

Socket

In our default project there is alrea…

Continue reading...

murb blog