Mediamarkt – We zijn toch niet gek?!

Mediamarkt – We zijn toch niet gek?!

Mocht je iets bij de Mediamarkt willen kopen tegenwoordig, dan is een goede tip om eerst op www.mediamarkt.nl te kijken. Mediamarkt werkt de prijzen in de winkel namelijk niet bij en de prijzen op de website wel. Dat betekent dat als je als klant niet reclameert dat je een product voor de internet (webshop) prijs wil hebben, dan betaal je gewoon teveel! Eigenlijk schandalig, maar het kan je wel enkele tientjes opleveren door de website op je mobiele telefoon bij de hand te hebben in de winkel.

Dit heb ik zelf aan den lijve ondervonden toen ik een nieuwe externe harddisk kocht. Op de website 68,99 Euro. In de winkel 82,99 Euro. Toch een verschil van 14 Euro oftewel bijna 17% prijsverschil!

Facebook nieuwe tijdlijn gaat voor gebruiksgemak!

Facebook heeft een nieuwe timeline aangekondigd die ze in de bijgevoegde video tonen en uitleg bij geven. Het ziet er erg mooi uit. Het werd dan ook langzaam tijd dat Facebook weer eens positief in het nieuws kwam, in plaats van dat er alleen privacy wijzigingen werden doorgevoerd. De uitrol van de nieuwe tijdlijn begint binnenkort en wij zijn benieuwd wat het brengt en of fanpagina’s er ook van profiteren. Wij zitten trouwens ook op Facebook! Like onze pagina om op de hoogte te blijven

Beste flits diffuser ooit voor nog geen 4 Euro

Beste flits diffuser ooit voor nog geen 4 Euro

Maak Beste flits diffuser ooit voor nog geen 4 Euro. De materialen vind je bij een groot woonwarenhuis uit Sweden genaamd Ikea. Het betreft het volgende product: VARIERA Lademat met artikelnummer 10109491. Hier online te vinden. Het enige lastige is een bezoekje aan de Ikea overleven! Succes!

Je knipt de lademat in de afmeting 15 x 40 cm. Zorg ervoor dat je bovenin de bolling hebt, zoals op de foto’s. Vervolgens is het een kwestie van klittenband bevestigen. Één strip aan de binnenkant en 1 strip aan de buitenkant aan de tegenovergestelde kant. Je kan dan je nieuwe flitser eenvoudig bevestigen aan je flitser! Bekijk de foto’s voor meer inspiratie.

Voor een uitgebreidere Engelstalige uitleg kun je terecht bij de bedenker van dit goedkope flits accessoire hier

Beste flits diffuser ooit voor nog geen 4 Euro

Beste flits diffuser ooit voor nog geen 4 Euro

Beste flits diffuser ooit voor nog geen 4 Euro

Beste flits diffuser ooit voor nog geen 4 Euro

Een voorbeeldfoto zonder de nieuwe diffuser:

Beste flits diffuser ooit voor nog geen 4 Euro

Een voorbeeldfoto met de nieuwe diffuser (Let vooral op de schaduwen op de muur en bodem!)

Beste flits diffuser ooit voor nog geen 4 Euro

Work in Progress: TwoWay Society website

Work in Progress: TwoWay Society website

In het kader van het ‘TwoWay Society concept’ heeft Snapcat.nl de taak op zich genomen de nieuwe website van TwoWay Society te maken. Na overleg met de band over wat de website moet kunnen, zijn we aan de slag gegaan om ervoor te zorgen dat het concept achter de band nog beter benadrukt wordt. De website wordt dus behoorlijk ‘sociaal’, zodat mensen eenvoudiger kunnen doen aan ‘Join the band’. Er komt een integratie met Twitter, Facebook en het wordt zelfs mogelijk voor fans om hun foto’s en filmjes via de website in te sturen. Uiteraard kan de muziek worden beluisterd, de laatste filmpjes worden bekeken en blijf je ook nog op de hoogte van de laatste nieuwtjes. Snel en eenvoudig!

Inmiddels staat er al behoorlijk wat en worden de puntjes nog op de i gezet. Ben je al wel benieuwd? Like dan onze Facebook pagina vast zodat je niets mist of hou uiteraard de website van TwoWay Society in de gaten!

De EOS Utility installeren zonder de CD

De EOS Utility installeren zonder de CD

Hoe doe je de EOS Utility installeren zonder de CD ? Nu Canon een firmware update heeft uitgebracht voor de Canon 7D, was er de noodzaak om de EOS Utility te installeren. Omdat de CD die bij de camera geleverd werd niet geschikt is voor Windows 7 en Canon geen oplossing biedt, ontstond er een probleem. Downloaden van de software van de Canon website lukte ook niet, omdat dit alleen maar updates zijn, die niet installeren zonder dat er al een versie van de software is geïnstalleerd met de bijgeleverde cd. Omdat de updates echter wel bestaan uit volledige versies van de software, kunnen we met een trucje toch de updates gebruiken om de Canon software te installeren!

Hoe nu verder?

Door het register van Windows aan te passen, kunnen we de Canon software laten ‘denken’ dat er al een versie is geïnstalleerd. Dit is heel eenvoudig:

  1. Download het onderstaande zip bestand door het klikken op het logo en pak het zip-bestand uit.
  2. Pas de naam van het canon.txt document aan, zodat het canon.reg heet (.reg op het eind is heel belangrijk!).
  3. Dubbelklik op het bestand canon.reg en klik op het venster dat verschijnt op Ja.
  4. Download de meest recente update van de Canon website en de installatie lukt nu wel!

De EOS Utility installeren zonder de CD

Vernieuwde Boriz.nu website

Vernieuwde Boriz.nu website

Boriz.nu kwam bij ons met de vraag de website te optimaliseren en een aantal wijzigingen voor te voeren. Hiernaast zie het resultaat. Wil je de website zelf bezoeken? Check Boriz.nu

Hoe ga je handig om met de aangescherpte Facebook HTTPS regels voor Fanpagina’s

Hoe ga je handig om met de aangescherpte Facebook HTTPS regels voor Fanpagina’s

Hoe ga je handig om met de aangescherpte Facebook HTTPS regels voor Fanpagina’s ?

Sinds kort wil Facebook alleen nog maar custom tabbladen toestaan (tabs) als deze op HTTPS ( met een SSL certificaat) draaien.
Nou blijkt dat niet alle hosting partijen standaard, of helemaal geen HTTPS aanbieden aan hun klanten. Om toch gebruik te kunnen maken van de custom fanpage tabs kan je heel handig het betreffende html-bestand hosten vanaf je dropbox public folder. Dropbox host deze bestanden zowel op HTTP als HTTPS en daardoor accepteert Facebook nu wel je eigen ontworpen tabblad!

Zorg wel dat de bestanden die je wil gebruiken in de HTML, bijvoorbeeld in de image src, de publieke URL van Dropbox bevat. Anders werkt het niet! Deze URL vind je door in je Dropbox map, rechts op het bestand te klikken en dan te kiezen voor Dropbox -> Copy Public link. Deze URL plak je vervolgens bijvoorbeeld in je img src=”https://dl.dropbox.com/u/12345678/voorbeeld.png” .

Op deze manier werkt je custom gemaakte tabblad zowel in HTTP als HTTPS en hoef je relatief weinig moeite te doen om aan de nieuwe richtlijnen en regels van Facebook te voldoen.

Wil je een werkend voorbeeld zien? Check de Snapcat.nl Facebook pagina hier

Het idee om Dropbox te gebruiken kwam van @BruceJillis

Hoe maak je een WordPress RSS Feed met een of meerdere custom post types

Hoe maak je een WordPress RSS Feed met een of meerdere custom post types

Hoe maak je een WordPress RSS Feed met een of meerdere custom post types ?

Snapcat.nl was op zoek naar een manier om eenvoudig een WordPress RSS feed met custom post type op te bouwen, waarbij meerdere post_types zijn vertegenwoordigd. Naast het standaard berichttype ‘Post’ kan het zijn dat je template ook gebruik maakt van zogenaamd ‘Custom posttypes’, zoals ‘Boek’, ‘Film’, etc.

Standaard worden deze op maat gemaakte berichttypes niet in de RSS bijgevoegd, echter is er een hele eenvoudige truc om dit wel te doen!

De ‘normale’ RSS link, met de standaard berichttype ‘Post’ is bijvoorbeeld: http://www.snapcat.nl/rss/ (Bij Snapcat.nl is deze doorgelinkt naar Feedburner middels .htaccess )

Mocht je nu meerdere posttypes willen combineren in 1 feed, dan maak je een link op deze manier:

http://www.snapcat.nl/feed/?post_type=portfolio,post

Je bouwt een link op met de post_types gescheiden door een komma. Nu pakt ie alle berichten met type ‘portfolio’ en ‘post’.

Als je deze url wil laten verwijzen naar /rss/ dan doe je dit simpel in de .htaccess:

Voeg onderstaande toe  (de regel in het rood vervangen door je eigen URL) :

# redirect wordpress content feeds to custom url

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC]
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://www.snapcat.nl/feed/?post_type=portfolio,post [R=302,NC,L]
</IfModule>

Goede service van AQ4U

Goede service van AQ4U

De vraag

Afgelopen weekend merkte ik dat de camera opeens wel heel snel leeg was. Na controle bleek dat een van de accu’s niet meer oplaadde. In de camera zie je dat de accu op 0% blijft staan, terwijl de accu wel meerdere uren op de oplader heeft gelegen. Omdat de accu nog geen anderhalf jaar oud is, heb ik contact opgenomen met de leverancier AQ4U.nl met de vraag of het ‘normaal’ is dat de Phottix accu’s maar 16 maanden meegaan, zodat ik daar in het vervolg rekening mee kan houden. De goede service van AQ4U zorgde er echter voor dat ik kosteloos een vervanging opgestuurd heb gekregen!

Goede service van AQ4U

De reactie van AQ4U.nl was een sterk staatje service en aftersale support. Vanuit AQ4U.nl kwam direct een reactie dat de Phottix accu’s langer mee moeten kunnen gaan dan 16 maanden. In dezelfde reactie kwam meteen het aanbod om de accu kosteloos te vervangen, terwijl de garantietermijn maar 12 maanden is. Dat is nog eens goeie service!!

Dus mensen, als je accu’s voor je digitale camera of andere accessoires nodig hebt, kijk eens op www.aq4u.nl
Voor de uitmuntende service hoef je het niet te laten!

Vraag van Snapcat.nl

Klopt het dat Phottix accu’s maar een levensduur hebben van 1,5 jaar?
Ik heb in april 2011 een Phottix accu voor mijn 7D besteld via het EOSDigitaal forum en sinds afgelopen weekend weigert de accu nog op te laden. Ook de status in de camera blijft staan op 0%. Kan het kloppen dat de levensduur van de accu’s ongeveer 1,5 jaar is? Hoor je deze klacht vaker?

Reactie AQ4U.nl

nee hoor bij normaal / regelmatig gebruik zou dat toch wel langer moeten zijn. Garantie is officieel 12 maanden, maar ik zal je kosteloos een nieuw exemplaar sturen.

N.B. Snapcat.nl wordt niet gesponsord door AQ4U.nl
Onweerfoto’s maken

Onweerfoto’s maken

Er zijn weinig weertypen zo visueel interessant als onweer. Daarom is het vaak ook een onderwerp van fotografen. Met vrij weinig middelen kan je al snel mooie foto’s van onweer maken, ideaal voor beginnende fotografen om mooie plaatjes te maken.

Behalve een camera, het liefst met een bulb-stand (zolang je de knop vasthoudt wordt er belicht) en een lens met een aardige groothoek, een statief en eventueel een draadontspanner. Dan is het een kwestie van een mooi, maar veilig plekje opzoeken en je spullen klaar zetten en wachten maar…

In het donker kan je onweer het best fotograferen. De instellingen die je zo’n beetje aan kan houden zijn een beetje afhankelijk van het resultaat dat je zoekt. Je iso blijft uiteraard zo laag mogelijk (iso100), de sluitertijden worden zo lang mogelijk (15 sec – 3 minuten ongeveer, daarna start ik een nieuwe opname) en het diafragma (F-getal) is een beetje variabel. Wil je lang belichten (3 minuten) dan ga ik al snel richting F16. Wil je 15 sec. belichten dan is F4 al goed. Het is een beetje afhankelijk van de intensiteit van de flitsen. Flitst het snel achter elkaar, dan zou ik eerder een langere sluitertijd aanhouden om meerdere flitsen in 1 belichting te ‘vangen’, maar het blijft een kwestie van experimenteren.

Succes!

Vimeo oEmbed API is not working on shared hosting

Vimeo oEmbed API is not working on shared hosting

Problem: When you’re on shared hosting and you want to embed Vimeo video’s, but can seem to get them to work on your Autofocus+ theme.

According to different support-threads on the internet, for example on Vimeo’s own forum here. Vimeo blocks users who access the API to often from the same IP. On shared hosting this is something you could run into, altho your hostingcompany probably would never confirm this, nor would Vimeo. Solution is build because of this thread on Getsatisfaction.com/fthrwght/

Solution for Autofocus+ theme (Theme is created by Allan Cole, change is build by Snapcat).. This change is probably applicable for multiple themes, but the starting point here is Allan’s theme. Here we go:

Open the file: wp-contentthemesautofocusincautofocus-images.php

After line 274 add:

// CODE CHANGE
<?php

} elseif ( get_post_meta($post->ID, ‘iframe_value’, true) ) { ?>

<div class=”entry-video-container”>
<?php
$af_iframe = get_post_meta($post->ID, ‘iframe_value’, true);
$iframe_url = ‘<iframe src=’ . $af_iframe . ‘?color=e6b93e” width=”800″ height=”533″ frameborder=”0″/></iframe>’;
echo $iframe_url ; ?>
</div><!– .entry-video-container –>

<?php
// END CODE CHANGE

Scroll down and after line 429 add:

// CODE CHANGE
// Is there an iframe attached?
if ( get_post_meta($post->ID, 'iframe_value', true) ) {
$af_video_url = get_post_meta($post->ID, 'iframe_value', true);
return $af_iframe;
}
// END CODE CHANGE

Save the file and overwrite in on the webserver.

Now open the file: wp-contentthemesautofocusincautofocus-post-meta.php

After line 19 add:

// CODE CHANGE
"iframe" => array(
"name" => "iframe_value",
"title" => __("Iframe","autofocus"),
"type" => "text",
"std" => "",
"description" => __("Paste your piece of Vimeo iframe code here. Example: http://player.vimeo.com/video/36158915","autofocus")),
// END CODE CHANGE

Save the file and overwrite in on the webserver.

Now go to your video on Vimeo.com and click the Share button and copy the piece of code you see marked below:

Vimeo oEmbed API is not working on shared hosting

So in this example you’ll have the iframe code shown below:

<iframe src="http://player.vimeo.com/video/36158915?color=78c90e" width="500" height="275" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe> <p><a href="http://vimeo.com/36158915">11.11.11</a> from <a href="http://vimeo.com/erinmurphy">Erin Murphy</a> on <a href="http://vimeo.com">Vimeo</a>.</p>

and only take this piece: http://player.vimeo.com/video/36158915

Now you’ll start your new post (or edit an existing) and notice an additional field:

Vimeo oEmbed API is not working on shared hosting

In this field you paste the piece of code, you just copied.

As a result you’ll have a working Vimeo video shown on your website:

Vimeo oEmbed API is not working on shared hosting

Easy as pie! Good luck!

The two editted files are also available for download here. Upload the files to: /wp-content/themes/autofocus/inc/

Facebook verliest gezicht!

Facebook verliest gezicht!

Facebook verliest gezicht!

Waarom doet Facebook er alles aan om niet meer interessant te zijn voor (beginnende) ondernemers?

Voorheen had iedereen op Facebook gelijke kansen. Of je nu rijk of arm, beginnend ondernemer of grote multinational bent, iedereen had in den beginne dezelfde mogelijkheden. Maar ook de idealen van Facebook zijn gezwigt voor het grote geld, waarschijnlijk mede veroorzaakt door een beursgang. We proberen de wijzigingen aan te geven en geven nog een kleine tip op het eind.

Liken vs Sharen

Het begon allemaal zo’n beetje toen de “Share”-button werd afgewaardeerd en niet meer actief werd aangeboden. Deze button is vervangen door de “like”-button, maar deze “Like”-button biedt een stuk minder dan de “Share”-button voorheen deed. De eerdere button toonde een mooie toevoeging op iemand ‘timeline’, inclusief afbeelding en eventueel begeleidende tekst. Het stond allemaal prominenter op de pagina. Nu met de nieuwe “Like”-button heb je geluk als er uberhaupt een klein regeltje tekst verschijnt, want dat is zelfs niet eens meer gegarandeerd. Het sociale element is er dus steeds minder. Mits je betaald uiteraard…

Facebook pagina (Fanpage)

Daarnaast heb je vaak als bedrijf, website, band,etc. een Fanpagina op Facebook. Van Snapcat.nl is deze bijvoorbeeld hier te vinden op Facebook. Nu denk je dat alle berichten die je op deze pagina zet, ook daadwerkelijk bij je Fans in hun nieuwsoverzicht verschijnen, maar da’s zeker niet het geval. Ervaring leert dat slechts ergens tussen 15 en 30 % van de Fanbase wordt bereikt. Mits je uiteraard via Facebook gaat adverteren, dan gaan de percentages omhoog. Je betaalt dan per bericht een X bedrag om 100% van je Fans te kunnen bereiken. Bij een beetje Fanbase gaat dit al snel richting honderden Euro’s per bericht! Ook op Facebook is er nu dus sprake van een kloof tussen rijk en arm. Facebook is ook gedegradeerd tot een advertentienetwerk, waarvan de kleinere ondernemers het zich simpelweg niet kunnen veroorloven om hun boodschap bij iedereen over te brengen.

En nu?

Je kunt je Fans vragen om aan te geven dat al jouw berichten in hun ‘nieuwsoverzicht’ zichtbaar moeten zijn. Maar gezien de ‘normale’ conversiecijfers van dit soort acties, is de kans van slagen nihil. Het lijkt er op dat Facebook langzaam steeds meer uit de gratie van de starters zal raken, maar je kunt het je ook weer niet veroorloven om NIET op Facebook te zitten als bedrijf. Als bedrijf moet je immers zijn waar je klanten zijn.

Hoe zorg je voor zichtbaarheid op Facebook?

Eigenlijk heel simpel, gebruik de “Share”-button! Ondanks dat deze ‘officieel’ niet meer wordt ondersteund door Facebook, kan de button nog prima gebruikt worden. Hij werkt nog zoals het hoort en zorgt ervoor dat Facebook gebruikers jouw webpagina’s delen op hun profiel, inclusief afbeelding en eventueel eigen tekst. De kans dat deze updates hun vrienden bereikt is groter dan dat dat lukt via de Fanpagina. Mijn inziens de enige manier om je berichten enigzins ‘viral’ te krijgen. Uiteraard hou je gewoon je Fanpagina in gebruik, want ookal bereik je niet iedereen, alle beetjes zijn meegenomen lijkt me. Zeker om een klein beetje kans te maken tegen de grote reuzen met mega advertentiebudgetten.

Succes!

P.S. Vind je dit artikel leuk? Vergeet dan niet onze pagina op Facebook te liken! Dan kan het namelijk voorkomen dat je incidenteel door Facebook op de hoogte wordt gehouden van nieuwe berichten op Snapcat.nl Facebook verliest gezicht!

Canon 7D is onverwoestbaar

Canon 7D is onverwoestbaar

Canon 7D is onverwoestbaar

De mannen van DigitalRev tonen aan dat de Canon 7D onverwoestbaar is.
De camera is niet kapot te krijgen onder de meest extreme omstandigheden, met een klein vleugje humor is dit een leuk filmpje geworden. Ik weet in ieder geval dat mijn camera-body wel tegen een stootje kan!

Aaron Feinberg documentaire

Aaron Feinberg documentaire

Aaron Feinberg documentaire

Een gave korte video over de totstandkoming van Aaron’s werk

Op Kapaa, in de buurt van Hawaii, woont Aaron Feinberg. Aaron gaat met z’n Canon cameraspullen op pad om mooie foto’s te maken in combinatie met zijn Neutral-Density filters. Gedurende een periode van 3 dagen wordt Aaron gevolgd op het eiland Kauai. Een mooi kijkje achter de schermen over hoe de ‘award-winning’ fotograaf zijn  foto’s maakt. De foto’s die langkomen in deze korte documentaire getuigen van Aaron’s vakmanschap. Een aanrader!

Video shot by Brovado Weddings
Check out Aaron’s work at aFeinPhoto.com

50 Fotografietips in 12 minuten

50 Fotografietips in 12 minuten

50 Fotografietips in 12 minuten

DigitalRev heeft zichzelf weer eens overtroffen met 50 fotografietips in slechts 12 minuten. Letterlijk genomen zijn het best goeie tips, echter de toon en het uitbeelden van de tips zijn hilarisch. Zeker de moeite van het kijken waard.

Benieuwd naar meer van dit soort grappige fotografie video’s en test?
Wordt lid van het DigitalRev Youtube kanaal

WordPress sortering aanpassen voor een specifieke categorie

WordPress sortering aanpassen voor een specifieke categorie

WordPress sortering aanpassen voor een specifieke categorie

Heb je ook wel eens dat je, terwijl je een website aan het ontwikkelen bent, dat je de volgorde van je posts anders wil zien voor een specifieke categorie? Ik kan me voorstellen dat je de blogberichten op basis van datum in een aflopende volgorde wil tonen, maar wat bijvoorbeeld bij een portfolio categorie? Misschien is het dan wel handiger om het op alfabetische volgorde te sorteren. Met onderstaand stukje code snippet is het heel eenvoudig om voor 1 of meerdere specifieke categorieën de sortering aan te passen:

Je opent hiervoor archive.php in je template map te vinden in /wp-content/themes/ en voegt het volgende stukje code toe, voor ‘the_loop’, wat vaak expliciet wordt aangegeven in het bestand:

if (is_category('244')) { $posts = query_posts($query_string. '&orderby=title&order=asc' ); }

Waarbij je in bovenstaand stukje code het nummer 244 vervangt door het nummer van je eigen categorie. Dit nummer vind je door in wp-admin te gaan naar de categorieen en met je muis erop te gaan staan. Onderin het scherm zie je dan het volgende:

http://www.snapcat.nl/wp-admin/edit-tags.php?action=edit&taxonomy=category&tag_ID=244&post_type=post

Waarbij het stukje tag_ID=244 het nummer toont dat je moet invullen.

Behalve op titel in oplopende volgorde, kan je op deze manier alle mogelijke sorteringen per categorie aangeven.

WordPress Move plugin – lokaal WordPress ontwikkelen.

WordPress Move plugin – lokaal WordPress ontwikkelen.

WordPress Move plugin – lokaal WordPress ontwikkelen.

De WordPress plugin “WordPress Move” ontwikkeld door Mert Yazicioglu is de beste plugin die we hebben kunnen vinden om degelijk een WordPress website lokaal te kunnen ontwikkelen. In deze post leg ik uit hoe.

Download de plugin via je WordPress administratiepaneel

De plugin is te vinden via de WordPress Plugin directory die te vinden is vanuit je eigen WordPress installatie door te zoeken op “WordPress Move”. Op het moment van schrijven is versie 1.3.1 de meest recente versie, maar het is al bekend dat er een nieuwe versie onderweg is. (zie verderop). Het is de bedoeling dat je de plugin zowel installeert in je lokale, als in je remote, WordPress installatie.

Hoe het werkt (bij de bron, lokale WordPress)

Nadat je je WordPress website hebt ontwikkeld op je lokale machine gebruik je de ‘Migration Assistent’ die nu beschikbaar is in je WordPress administratiepaneel onder het kopje ‘Extra’ en klikt de middelste optie ‘Migrate’.  Hier vul je de gegevens van je FTP-server in (van de remote WordPress, degene die nu dus online staat) en vul je het pad in naar de back-up map van de plugin op de FTP server, vanaf de plek waarop je terechtkomt na het inloggen. ( bijvoorbeeld: /httpdocs/wp-content/plugins/wordpress-move/backup/). Na het klikken op de button onderaan wordt je gevraagd het FTP wachtwoord in te vullen. Dit wachtwoord wordt niet opgeslagen, dus moet je elke keer invullen. Grote voordelen voor de veiligheid, klein nadeel dat je het telkens opnieuw moet invoeren. Selecteer daarna de bestanden die je wil migreren (de hele website of alleen bijvoorbeeld je template) en klik op ‘Migrate’.

Onder de motorkap

Onder de motorkap doet de plugin nu een export maken van je database en zipt alle bestanden die je geselecteerd hebt. Daarnaast upload de plugin deze bestanden naar de FTP die je zojuist hebt opgegeven. Simpel maar effectief en snel!

Hoe het werkt (bij het doel, de online WordPress)

Op de online WordPress versie, klik je daarna ook op de ‘Migration Assistent’ en klikt op ‘Restore’. Hier selecteer je de backups die je zojuist hebt gemaakt. Momenteel is het zaak goed op de datum en tijd te letten. Er is een wijziging onderweg vanuit de ontwikkelaar die standaard de nieuwste bovenaan zet. Let er op dat je zowel het .zip bestand als het .sql bestand aanvinkt. Klik daarna op ‘Complete Migration’. De plugin pakt nu de zipbestanden uit en voert het SQL bestand uit op de database. Als dat klaar is zie je een bevestiging en is je website online gelijk aan de website die je lokaal gemaakt hebt!

Verbetersuggesties!

Tijdens het implementeren van deze plugin en het testen zijn er een aantal (2) bevindingen gedaan en reeds verstuurd naar de ontwikkelaar. Hij gaat deze bevindingen oplossen in de volgende versie. Wil je echter meteen aan de slag, dan vertellen we je hieronder wat we in de plugin hebben aangepast en kan je de bijgewerkte plugin downloaden.

Bestand: wordpress-move/libs/functions-file-backup.php op regel 35 moet de complete regel worden vervangen met:

return $archive->extract( PCLZIP_OPT_PATH, $destination, PCLZIP_OPT_REPLACE_NEWER );

Door het toevoegen van PCLZIP_OPT_REPLACE_NEWER wordt het mogelijk om bestanden die reeds aanwezig zijn te overschrijven, waarbij er wordt gekeken naar de datum en tijd. Als het bestand dat al op de server staat ouder is dan het bestand dat we willen plaatsen wordt het bestaande bestand overschreven. Met de huidige versie (1.3.1) is dit niet mogelijk. We verwachten dat dit in versie 1.3.2 is opgelost.

Wordpress Move plugin   lokaal Wordpress ontwikkelen.

plugin download logo

Deze oplossing en wijziging is mogelijk gemaakt door @BruceJillis
Check out his twitter! https://twitter.com/brucejillis

WordPress “Page Links To plugin” voorlopig afgeschreven

WordPress “Page Links To plugin” voorlopig afgeschreven

WordPress “Page Links To plugin” voorlopig afgeschreven

Snapcat.nl gaat voorlopig de plugin “Page Links To” niet meer gebruiken. De plugin maakt het mogelijk om berichten en pagina’s te gebruiken om door te sturen naar (externe) content / pagina’s. De plugin is hier te vinden: WordPress Plugin directory

Wat gaat er fout?

Als je een pagina op deze manier doorlinkt, dan wordt deze link opgenomen in je sitemap.xml. Google gebruikt de sitemap.xml om je website te indexeren, echter loopt Google stuk als er een ‘vreemde’ link in staat en dus loopt je indexatie gevaar en uiteindelijk je pagerank gevaar!

WordPress Gallery en de W3C validatie.

WordPress Gallery en de W3C validatie.

WordPress Gallery en de W3C validatie.

Om er voor te zorgen dat de WordPress Gallery en de W3C validatie op orde zijn is dit artikel geschreven. De gallery functionaliteit binnen WordPress heeft bij het uploaden van de afbeeldingen nogal wat velden die gevuld kunnen worden. Ondanks dat deze velden in de back-end niet verplicht zijn, heeft het niet invullen van de velden wel consequenties voor je website en het al dan niet valideren volgens de W3C standaarden.

De velden

Bij het uploaden van een afbeelding in WordPress zijn er een aantal velden beschikbaar om gegevens in te vullen, waarbij de Titel, de alternatieve tekst en het onderschrift het belangrijkst zijn. Vanuit SEO oogpunt is het trouwens verstandig om de titel en de alternatieve tekst altijd in te vullen, maar nu blijkt ook het onderschrift van belang te zijn, ondanks dat je wellicht helemaal geen onderschrift wil tonen.

Hoe zit dat dan technisch?

De gallery in WordPress maakt gebruik van een ‘Definition List’, waarbij er een bepaalde gelaagdheid vanuit W3C wordt verwacht.

<DL>
Het DL element bevat de DefinitieLijst en is een container voor de elementen DT en DD.
<DT>
Het DT element bevat de DefitinitieTerm. Dit element bevat in de gallery de thumbnail en de link naar de originele afbeelding.
<DD>
Het DD element bevat de Definitie Description. Een omtschrijving die betrekking heeft op hetgeen er staat in het DT element. In de WordPress gallery bevat dit element het onderschrift.

Als het onderschrift niet gevuld wordt in de back-end van WordPress mist de webpagina het DD element, waardoor W3C de pagina niet kan valideren.
Het is dus belangrijk om altijd een onderschrift in te vullen.

Voorkom dat het onderschrift wordt getoond.

Door middel van CSS kan er worden voorkomen dat het onderschrift wordt getoond. Dit doe je door je style.css te openen via ‘Bewerker’ onder ‘Weergave’ of via de FTP server en daarin het volgende toe te voegen:
.gallery .wp-caption-text { display:none!important; }

Op deze manier heb je een valide gallery op je WordPress website.

Verbeter je foutpagina’s!

Verbeter je foutpagina’s!

Verbeter je foutpagina’s

Waarom zou je de foutpagina’s op je website niet beter gebruiken? Bij heel veel websites zie je dat de pagina alleen maar gebruikt wordt om de zoekmachines te laten weten dat een pagina ‘Niet bestaat’, wat feitelijk al een rare constatering is aangezien je wel degelijk een webpagina ziet.

Altijd open

Op het internet is je winkel altijd open. Een 404 pagina is eigenlijk niets meer dan een gesloten deur tijdens openingstijden. Zorg dat het raam schoon is, zodat de klanten naar binnen kunnen kijken en geef ze opties om het doel te bereiken waarvoor ze kwamen.

Geen goede 404 is geld verspilling!

Zo’n pagina biedt voldoende mogelijkheid om een gebruiker te verleiden tot een ‘call to action’. Zelf vind ik het altijd wel vervelend dat als ik ergens naar op zoek ben en de website een 404-error geeft, dat ik dan geen vervolgopties heb. De klant heeft je website bereikt, daar is waarschijnlijk wel energie en/of geld ingestoken door de ontwikkelaar van de website en de enige optie die wordt getoond is om terug te gaan naar Google (met de browser backbutton). Terwijl klanten wel degelijk verleid kunnen worden om verder te kijken op je website of het doen van een zoekopdracht.

Een 404-pagina is een tussenstop en geen eindhalte.

De gedachte dat een foutpagina optreed aan het einde van een proces is ouderwets. Waarom zou je vanuit een foutsituatie niet een nieuw proces of gebruikerservaring kunnen starten? Een foutmelding is geen einde, maar een tussenstop. Ondanks dat internetten steeds sneller moet zijn, is net zo belangrijk te komen waar je wil zijn. Mensen zitten liever in de stoptrein die de goeie kant op gaat, dan een intercity die naar de foute bestemming rijdt. Een error-pagina is niets meer dan een tussenstop bij een stoptrein, waarbij de gebruiker weer kan overstappen op een intercity die juiste richting op rijdt..

Een website is niet af zonder goede foutpagina’s

Persoonlijk vind ik een website niet af als er geen goede, duidelijke en voor de gebruiker bruikbare foutpagina’s zijn. Als er geen aandacht aan een correcte foutafhandeling word besteed is de website incompleet.

Quick win!

Bedenk wat je de gebruiker wil vertellen of laten doen op het moment dat deze ‘gedesorienteerd’ op je website terecht komt. Er liggen genoeg kansen om de gebruiker een nieuw startpunt op je website aan te bieden en de gebruiker te sturen naar de pagina’s die zowel voor de gebruiker als voor de website-eigenaar belangrijk zijn. Als je bedenkt dat standaard 404 fout-pagina’s ervoor zorgen dat meer dan 90% van de mensen je website weer verlaat vanaf die pagina, hoef je er niet lang over na te denken om de gebruiker ook op deze pagina iets nuttigs te bieden.

Aantal goede en minder goede voorbeelden uit de praktijk:

Hoe include je code in WordPress

Hoe include je code in WordPress

Hoe include je code in WordPress?
Als je ooit hebt geprobeerd om code in een wordpress blog bericht te includen merk je vaak dat er een van onderstaande dingen gebeurd:

  • Je HTML code wordt gerenderd.
  • WordPress haalt je code uit het bericht
  • WordPress veranderd “straight quotes” naar “curly quotes”, wat er voor zorgt dat de code niet rechtstreeks kan worden ge-copy paste.
Onderstaand is de manier om dit te omzeilen:
  1. Plaats de code in een basic text verwerkingsprogramma (zoals Notepad), en volg de stappen in de tabel onderaan de pagina.
  2. Klik op het “Code” tabblad in the WordPress als je een bericht aanmaakt en plak de code vanuit Notepad in het tabblad.
  3. Zorg ervoor dat je geplakte code tussen de <code> en de </code> tag staat
Vind Vervang met
< &lt;
> &gt;
&quot;
Ongestructureerd testen als nieuwe testsoort

Ongestructureerd testen als nieuwe testsoort

Naast de standaard testsoorten kan ongestructureerd testen een meerwaarde hebben. Als de ongestructureerde test wordt uitgevoerd terwijl er ook gestructureerd getest wordt kan een ongestructureerde test andere bevindingen opleveren dan vooraf verwacht en gespecificeerd werd. Hieronder de uitleg:

Wat levert ad hoc testen op?

Ongestructureerd, danwel Ad hoc, testen levert een heel ander scala aan bevindingen op dat de reguliere testen. Zo worden tests niet gestuurd of gehinderd door de kwaliteit en volledigheid van de documentatie. Er worden vaak bevindingen gevonden die vanuit logisch nadenken worden gevonden. Gebruikers en klanten gebruiken de applicatie natuurlijk ook zonder een handleiding of functionele beschrijving, maar vanuit logisch nadenken. Zoals in het eerdere blogbericht ‘Wat is nu eigenlijk kwaliteit’ al duidelijk werd, is het de gebruiker die uiteindelijk bepaald wanneer de kwaliteit voldoende is. Als tester kan je daarbij een stap maken, door als gebruiker te denken en te testen, waardoor je eigenlijk al zelf van te voren weet wat de kwaliteit is, voordat de eindgebruiker je kan verrassen. Het voordeel hiervan is dat de kwaliteit kan worden verhoogd voordat de ‘echte’ gebruikers met de programmatuur aan de slag gaan. Daarnaast levert ad hoc testen ook eventuele nieuwe, gemiste testcases op voor de gestructureerde testsoorten en de (geautomatiseerde) regressietest.

Ad hoc testen heeft dan vast ook nadelen?

Ja, ad hoc testen als op zichzelf staande testsoort heeft een aantal nadelen. Ad hoc testen als enige test is dan ook onvoldoende om toch een gedegen kwaliteitsadvies te komen. Ad hoc testen is een extra testsoort en geen vervanging van het bestaande testproces. In tegenstelling tot gestructureerde testsoorten, waarbij het herleidbaar is welke requirements met welke testgevallen zijn afgedekt en hoeveel van het totaal aantal testgevallen er daadwerkelijk is uitgevoerd, is dat bij ad hoc testen duidelijk niet mogelijk. Daarnaast is het bepalen van de voortgang moeilijk in te schatten. Vaak is het best om gebruik te maken van een afgesproken ‘timebox’, waarbij een blok van een aantal uren of dagen wordt getest.

Wie zou ad hoc moeten testen?

Het ongestructureerd testen zou idealiter moeten worden uitgevoerd door de meest senior en de meest junior tester. De senior tester vindt fouten op basis van zijn ervaring, maar heeft ook oogkleppen op. Juist door zijn uitgebreide ervaring neemt de senior tester sommige fouten als vanzelfsprekend aan en verzuimd deze te loggen. De junior tester heeft deze ervaring niet en dus ook de oogkleppen niet. Beide samen vinden op deze manier het overgrote deel van de bevindingen op basis van logisch nadenken.

Wanneer heeft ad hoc testen zin?

Het is natuurlijk onlogisch als er eerst uitgebreide testscenario’s worden opgesteld om vervolgens ongestructureerd te gaan testen. Ad hoc testen vind dan ook idealiter plaats gelijktijdig met het ontwerpen van de testgevallen. Door de testgevallen te baseren op de documentatie en gelijktijdig de daadwerkelijk applicatie ad hoc te testen kunnen er in een vroegtijdig stadium al hiaten tussen documentatie en de software worden gevonden. Hierdoor kan de software nog eenvoudig worden verbeterd, de documentatie worden ge-update en de testgevallen worden bijgewerkt. Ook kan ad hoc testen er voor zorgen dat er meer begrip komt tussen ontwikkelaars, testers en de eindgebruiker. Daarnaast kan ad hoc testen bijdragen aan een reeele prioritering van de toekomstige, gestructureerde tests. Op het moment dat er tijdens ad hoc testen weinig tot geen bevindingen gevonden worden, kan de prioriteit voor het testen in toekomstige testsoorten wellicht naar beneden worden bijgesteld.

Conclusie

Om ad hoc te kunnen testen zijn een aantal zaken niet nodig: Er is geen documentatie nodig, geen planning en weinig tijd. Daarnaast zijn er een aantal zaken wel nodig, zoals testers in verschillende gradaties en opgeleverde software. Als resultaat worden er vaak belangrijke bevindingen vroeg gevonden, komen er reeele testprioriteiten en kan er een tijdsbesparing worden gerealiseerd doordat er geen voorbereidingstijd en documentatie nodig is.

Voorkom dat ongestructureerd testen ‘proberen’ wordt.

Voorkom dat ongestructureerd testen ‘proberen’ wordt.

Hoe vaak komt het niet voor dat er iemand aan het bureau staan met het verzoek om ‘hier even naar te kijken’? Wat vaak begint als een kleine wijziging die even kort bekeken kan worden eindigt vaak in een grote chaos. Ongestructureerd testen is proberen. Een ander woord voor proberen is prijsschieten. Je schiet vaker mis dan dat je raakt. Je test vrijwel nooit echt de essentie van de wijziging, maar alleen zaken die er op het eerste gezicht worden opgemerkt. ‘Toeval’ wil dan dat juist de essentie vaak voor de problemen zorgt op een productie-omgeving. Maar hoe voorkom je zoiets?

Testdoelen

Het boven water krijgen van testdoelen helpt met het testen van de essentiële zaken. De simpele vragen wat de doelstelling van de wijziging is en wanneer het ‘goed genoeg’ is om live te gaan zijn vaak al voldoende om met enige visie de test te starten. Dit kan kort gedocumenteerd worden in een checklist en worden afgetikt met de opdrachtgever. Daarnaast is het raadzaam om een kleine regressietest uit te voeren en af te stemmen met de opdrachtgever. Zo is het testen in ieder geval enigzins vooraf afgestemd en worden er de juiste tests uitgevoerd.

Reproduceerbaarheid

Het belangrijkste probleem van ongestructureerd testen is de reproduceerbaarheid. Hoe borg je dat je testgevallen nogmaals uit te voeren zijn? Op basis van de eerder genoemde checklist kan er alleen op hoofdlijnen gecontroleerd worden wat er aangetoond is, maar hoe zorg je ervoor dat je test bewaard blijft? Vaak komt ongestructureerd testen voort uit beheermeldingen die snel naar productie ‘moeten’ en wordt er geen aandacht besteed aan het vastleggen van de testgevallen. Dit kan echter prima in de bugtracker. Nadat de bug is opgelost is het testgeval niet meer noodzakelijk. De bug komt immers niet meer voor. Uiteraard moet de wijziging wel worden opgenomen in de (geautomatiseerde) regressietest.

Kwaliteit van ongestructureerd testen

De kwaliteit van ongestructureerd testen is sterk afhankelijk van het ervaringsniveau van de uitvoerend tester. Omdat er op basis van parate kennis moet worden getest is de kwaliteit van de uitgevoerde test sterk afhankelijk van de kennis van de uitvoerend tester. Het is daarom vaak in deze context raadzaam om de meest ervaren tester deze tests uit te laten voeren.

De expert wordt de tester

Nog beter dan de meest ervaren tester te laten testen is om de gebruiker mee te nemen in deze ongestructureerde adhoc tests. De gebruiker weet als geen ander wat de essentie is en welke onderdelen minimaal deuglijk moeten functioneren op een live productie-omgeving. Daarnaast is het altijd verstandig om de gebruikersgroep een kijkje in de keuken te laten nemen en te laten zien hoe snel en betrokken het test- en ontwikkelteam is. Mocht de expert geen interesse hebben om de wijziging te willen testen, dan moet er mijn inziens serieus overwogen worden of de bevinding wel kritisch genoeg is om als spoedklus op te lossen.

Voorkom ad hoc testen!

Voorkomen is beter dan genezen, dat geldt hier eens te meer. Ongestructureerd testen moet zo veel mogelijk worden voorkomen als enige testsoort.
De enige manier waarop dit kan, is door het hanteren van een degelijk releaseproces en het aanhouden van juiste prioriteringen. Het releaseproces is te aller tijden de verantwoordelijkheid van de releasemanager, hij dient er voor te zorgen dat er een gecontroleerd proces is om wijzigingen live te brengen. De testers geven alleen input of het verstandig is om een daadwerkelijke wijziging te implementeren. Om tot een goede prioritering te komen kan het testteam ondersteunen door middel van het opstellen van een productrisico-analyse (impactanalyse). Zie hiervoor ook het blog over de impactanalyse.

Ongestructureerd testen is en blijft een crisisoplossing

Mocht het releaseproces onvoldoende mogelijkheden bieden om een wijziging met een urgente prioriteit op korte termijn te installeren, dan kan het releaseproces incidenteel, in overleg, worden genegeerd. Bijkomende consequentie is dan ook dat er getest wordt met een lagere dekking in een korte testperiode (ad hoc testen) en het risico bestaat op een lagere kwaliteit omdat er geen gestructureerde test is uitgevoerd. “Ad hoc” betekent “voor hier”. Dus alleen in specifieke gevallen en mag zeker geen regel zijn. Als blijkt dat er op regelmatige basis spoedmeldingen moeten worden live gebracht, betekent dit vaak dat het releaseproces niet voldoet.

Hoe kan dat dan?

Vaak komt dit voort uit het feit dat kwaliteit niet leidend is en er teveel op tijd wordt gestuurd, waardoor er te snel over het gebrek aan kwaliteit heen wordt gestapt. Dit betekent dan weer dat er productie problemen moeten worden gepatched met een spoed-release, die weer wordt gevuld met een aantal meldingen die nog wel mee kunnen en voor je het weet doe je alleen nog maar spoedreleases met een matige kwaliteit. Het is dan ook aan de testers om te zorgen dat de ban wordt doorbroken en er niet meer hoeft te worden gedweild met de kraan open.

Conclusie

Ad hoc wijzigingen kunnen prima ook ad hoc en ongestructureerd getest worden, maar alleen indien er goede afspraken en testdoelen worden opgesteld. Daarnaast is het verstandig om deze tests uit te voeren in samenspraak met de eindgebruikers en opdrachtgevers. Op deze manier kan er zowel een Functionele Acceptatie als een Gebruikersacceptatie gelijktijdig plaatsvindden. Zoals eerder gezegd werkt deze methode alleen bij kleine, echte spoedklussen en is dit zeker geen vervanging voor een degelijk release en test-proces.

Video: Anouk in Gelredome

Video: Anouk in Gelredome

Video Anouk in Gelredome

 

 

Op 11 maart 2012 stond Anouk in een uitverkocht Gelredome in Arnhem.
Deze video is opgenomen vooraan tijdens het nummer “R U kiddin’ me?”

Gebruikers buitensluiten kost veel geld!

Gebruikers buitensluiten kost veel geld!

Gebruikers buitensluiten kost veel geld: 119 miljard per jaar!

Nooit eerder heb ik zo duidelijk een berekening gezien die aangeeft wat slecht functionerende software nu daadwerkelijk kost. Het niet luisteren naar de eindgebruiker levert daadwerkelijk onwerkbaren software op. De gedachte dat gebruikers dan meer training nodig hebben om met de software te kunnen werken, klinkt als het paard achter de spreekwoordelijke wagen spannen. Software hoeft maar een keer gebouwd te worden, het is dan ook veel goedkoper om goede, werkbare softare te ontwikkelen dan om continu (nieuwe) gebruikers op te leiden.

Organisatiefocus

Het genoemde artikel geeft allerlei oplossingen gericht om de symptomen aan te pakken. Men noemt opleidingen en trainingen, een buddy-systeem en een andere focus van de helpdesk. Terwijl het bedrijf wellicht beter zou kunnen investeren in een aantal goede requirement analisten, welke echt problemen en klantwensen helder kunnen beschrijven. Pak het probleem aan bij de oorzaak. De macht ligt bij de klant/gebruiker, maar deze beseft zich dit helemaal niet!

Projectfocus

Zoals in eerdere blogs al is besproken is het belangrijkste van een goed project opleveren, het opleveren van software waar de gebruiker om vraagt, wat aansluit bij zijn of haar wensen en software wat daadwerkelijk een probleem oplost en het leven makkelijker maakt. Het onderzoek gedaan door Ctrl Alt Delete toont aan dat de focus van software-ontwikkelaars nog te veel ligt bij de techniek en minder bij de klant. Er ligt nog een schone taak voor projectleiding en testteam om hun poging om de klantwens te borgen te verbeteren.

Power to the people!

Een nieuwe versie van software hoort idealiter zijn oorsprong te hebben bij de gebruiker. In de huidige versie zitten een aantal ongemakken die opgelost dienen te worden, zodat de gebruiker efficienter zijn of haar werk kan doen. Daarnaast kan het uiteraard ook voorkomen dat er nieuwere technieken in een versie moeten worden gestopt om bijvoorbeeld de beveiliging op niveau te houden, maar als er dan ook functionele wijzigingen aan het pakket ontstaan, dan moet dit uiteraard worden afgestemd met de gebruikersgroep. Dit gebeurd te weinig en de gebruiker krijgt het pakket in zijn of haar maag gesplitst. De acceptatiegraad van nieuwe software is vele malen hoger als de gebruikers er daadwerkelijk bij betrokken worden. Gebruikers worden te vaak verrast tijdens een gebruikersacceptatietest. Je hoort te vaak
‘ow, is dit het nu?’ Het vreemde is dat je juist zou verwachten dat een klant vooraf al weet wat ie krijgt.

Niet software-relateerd voorbeeldje

Als ik als klant bijvoorbeeld in een winkel kom, dan kom ik daar met een reden. Als mijn wasmachine aan vervanging toe is, dan ga ik naar een winkel en leg mijn klantwensen op tafel. Een wasmachine moet 7 kilo was kunnen bevatten, energiezuinig (A+ label) zijn, een witte kleur hebben en het moet een A-merk zijn. Hele concrete klantwensen die de verkoper dan voor mij gaan ‘vervullen’. Het lijkt duidelijk dat ik dan niet met een Zwarte, C-klasse wasmachine van onbekend merk X naar huis ga. Waarom gebeurd dit in de software-ontwikkelbranche dan wel en wordt dit geaccepteerd?

Verandering begint bij besef

Zoals eerder gezegd, gebruikers hebben niet in de gaten hoeveel macht ze hebben. De gebruikersgroep heeft meer sturingsmogelijkheden dan ze zelf doorhebben. Echter is het de projectleider die ook het besef moet hebben om met de eindgebruikers aan een tafel te gaan zitten om het projectidee te bespreken. Ook kan dit vanuit het testteam worden geinitieeerd, om bijvoorbeeld input voor de gebruikersacceptatietest boven water te krijgen. Daarnaast kan een functioneel ontwerper de output uit zo’n overleg direct gebruiken bij het opstellen van de functionele documentatie. Bekend is dat de gebruikersgroep dit niet uit zichzelf zal beginnen, omdat ze niet weten dat het tot de mogelijkheden behoort. Er zijn minder projectleden dan gebruikers, het is dan ook aan de projectleden om de gebruikers te mobiliseren om mee te doen!

Gebruikers bij je project betrekking vergroot de efficientie

Als je eerst 90% van al je projectactiviteiten uitvoert, alvorens de gebruikers te betrekken, kan het zomaar zo zijn dat je een gedeelte van die 90% opnieuw kan uitvoeren omdat het niet past in de gebruikersorganisatie. Dat is zonde. Waarom zou je eerst zelf het wiel uitvinden en dat daarna aan de gebruikers vol trots tonen, om er vervolgens achter te komen dat de gebruiker het wiel al lang heeft uitgevonden en je alleen de bouwtekening hoefde over te schrijven om dat wiel daadwerkelijk te maken. Hoe vaak komt het niet voor dat documentatie sterk veranderlijk is, omdat er telkens met de verkeerde mensen wordt gesproken en het wiel steeds meer vorm krijgt omdat je dichter bij de uitvinder komt (eindgebruiker).

De juiste mensen aan het woord

Hoe je de juiste mensen vind, ligt een beetje aan de organisatie, de hoeveelheid beschikbare tijd en wat je doelstelling is. Je zou kunnen controleren wie het vaakst inlogt op een systeem of een bepaalde functionaliteit vaak gebruikt. Ook kun je op zoek gaan naar een aantal senior users, maar de valkuil daarmee is dat deze vaak te veel oplossingsgericht denken. Het is juist zaak om het probleem aan de kaak te stellen. Ook kunnen medewerkers die net gestart zijn hele verfrissende ideeen hebben.

Conclusie

Als conclusie kunnen we stellen dat het onderzoek een mooi inzicht geeft in de kosten die software met zich meebrengt die niet volgens de klantspecificaties is gebouwd. Dit meegenomen lijkt het dat menig businesscase nog eens moet worden herevalueert. De aanbevelingen die worden gedaan in het artikel zijn echter alleen maar middelen om om te leren gaan met de gebrekkig software en dragen niet bij aan het voorkomen of oplossen van de problematiek.

Het artikel waar naar verwezen wordt staat hier: Nu.nl

Wat is Adobe Shadow en wat kan het?

Wat is Adobe Shadow en wat kan het?

Adobe Shadow is een nieuwe inspectie en preview tool voor front-end web developers en ontwerpers. Door je werkstation te koppelen aan een aantal mobiele apparaten kan je direct zien of het design goed is op deze devices. Dit werkt een stuk sneller, efficienter en betrouwbaarder. De weergave is de werkelijke weergave, omdat de software op het mobiele apparaat de webserver aanspreekt en dus ook de betreffende CSS en MediaQueries draait. Er komt geen emulatie aan te pas.

Door middel van een extensie wordt de pagina geforward naar het mobiele apparaat, waarbij de zowel iPad, de iPhone, iPod alsook de Android apparaten worden ondersteund. De mobiele apparaten zijn dus daadwerkelijk een schaduw-kopie van de website die getoond wordt in het betreffende tabblad van Google Chrome, maar dan op het daadwerkelijke apparaat.

Adobe geeft aan dat ze Adobe Shadow regelmatig gaan updaten met nieuwe standarden en browser-updates, zodat ze ook nieuwe apparaten blijven ondersteunen.

Hoe krijg je dit alles voor elkaar?

Download de Shadow Labs Release voor Windows of Mac.
Download de App in de Android Market of App Store.
Download de Google Chrome browser extensie

Om Adobe Shadow werkend te zien, zie het filmpje hieronder:

Lightroom 4 is uit!

Lightroom 4 is uit!

Vandaag, op 6 maart 2012, heeft Adobe officieel Photoshop Lightroom 4.0 op de markt gebracht. In het begin van 2012 kwam er al een gratis beta versie op de markt, maar vanaf vandaag is er dus een definitieve versie.

Wat is er nieuw in Photoshop Lightroom versie 4.0?

  • Verbetert herstel voor hooglicht/schaduw – Haal alles uit elk detail dat je camera vastlegt in donkere en lichte onderdelen. Uitdagende lichtsituaties vormen geen obstakel meer om fantastische afbeeldingen te creëren.
  • Uitgebreide video-ondersteuning – Organiseer, bekijk en wijzig videofragmenten. Kort fragmenten in, speel ze af, knip er stilstaande beelden uit of pas fragmenten aan met het gereedschap Snel ontwikkelen.
  • Superieure ruisreductie – Bereik verbluffende, natuurlijk ogende resultaten bij je afbeeldingen met hoge ISO-waarde dankzij de modernste ruisreductietechnologie. Pas ruisreductie toe op de volledige afbeelding of op specifieke delen.
  • Creëer prachtige fotoboeken – Lightroom biedt eenvoudige en automatische lay-outs met één klik, of je kunt kiezen uit een reeks paginalay-outs om je aangepaste boekontwerp te maken. Voeg rijke tekst toe en maak je keuze uit verschillende formaten, indelingen en omslagopties. Upload je fotoboek met enkele muisklikken om er afdrukken van te maken.
  • Ondersteuning voor geotagging – De locatie waar een foto gemaakt is wordt getoond. Daarnaast is het zoeken op locatie mogelijk gemaakt.

Is dat alles?

Verder geeft Adobe aan dat de algoritmen flink zijn geoptimaliseerd en verbeterd en zijn er meer geautomatiseerde hulpmiddelen om automatisch het contrast, de belichting, de witbalans en ruisreductie toe te passen.

Een laatste opmerkelijk nieuwtje is dat de software in prijs is gehalveerd. De software is per direct beschikbaar voor EUR 129,71. In de maand maart wordt het pakket gratis verstuurd als je hem via de Adobe site besteld.

Hieronder een filmpje met de verbeterde herstelfunctie voor hooglichten en schaduw:

De vraag of updaten de moeite loont, is persoonlijk. Echter voor minder dan 130 euro krijg je een aantal mooie opties erbij en verbetering. Echter betwijfel ik of de video-mogelijkheden de professional zullen bekoren, en geotagging moet maar net iets zijn waar je je als fotograaf mee wil bezighouden. Zoals altijd, verschillen smaken en is er eigenlijk wel voor elk wat wils.

Testen – Een brug te ver?

Testen – Een brug te ver?

Testen is meer dan alleen controleren.

De gedachte dat testen iets is wat achteraf gebeurd, is niet meer van deze tijd. De kosten om de gevonden bevindingen op te lossen stijgt naar mate de looptijd toeneemt. In tijden van steeds kleinere budgetten en crisis is het daarom meer dan noodzaak om ‘op tijd de testers aan te haken’.

“Op tijd aanhaken”, wanneer is dat?

De tester en testmanager zijn continu bezig om bij de omgeving aan te geven dat zij op tijd moeten worden aangehaakt, maar wanneer is dat dan? Vanuit de overige project-disciplines is hier een ander beeld bij dan bij de testers zelf. De projectmanager en de ontwikkelaar willen dat vaak pas juist ‘zo laat mogelijk’, om verschillende redenen. De projectmanager wil dit omdat langere inzet, meer kosten met zich meebrengt en de ontwikkelaar omdat hij geen zin heeft om tijdens de bouwfase al bevindingen te ontvangen. Maar juist vanuit de testdiscipline is het verstandig om juist zo vroeg mogelijk bij een project betrokken te worden, het liefst al na de projectinitiatie.

Waarom willen die testers dan meteen betrokken worden?

Testers zijn vaak bij uitstek de groep die direct weet welke zaken minimaal moeten worden opgeleverd om de oplossing te laten slagen. Vaak kunnen er vanuit ervaring direct concrete vragen gesteld worden bij gekozen oplossingen en wordt de oplossing getoetst. Het voordeel van toetsen is dat dit gebeurd zonder enige realisatie van de oplossing of ook maar 1 regel programmacode. Hierdoor is het mogelijk om goedkoop de grootste problemen al te ondervangen en op te lossen voordat ze daadwerkelijk ontstaan.

Maar er kan toch pas na realisatie echt getest worden?

Uiteraard wordt er na het ontwikkelen van een oplossing pas daadwerkelijk getest. Echter is testen hier ook meer dan alleen ‘kijken of iets werkt’. Vanuit het perspectief van een tester worden er testsituaties bedacht, in overleg wordt er gekozen welke tests er daadwerkelijk worden uitgevoerd en worden testscenario’s opgesteld. Er wordt gezorgd dat de juiste dingen getest worden. Dit gebeurd idealiter gelijktijdig met het bouwen van de oplossing. Tijdens het opstellen van de tests worden er dikwijls nog bevindingen op de documentatie of projectplannen gedaan, die de ontwikkelaar dan nog tijdens de bouwperiode kan meenemen in de uiteindelijke oplossing.

Wat een mooi verhaal, maar hoe zit dit dan in de praktijk?

Om het weer eens uit de IT context te halen. Rijkswaterstaat heeft een brug bij Westervoort ‘opgeknapt’, zodat de brug er weer jaren tegenaan moet kunnen. Hiervoor is in eerste instantie een vergunning aangevraagd, waarin naar alle waarschijnlijkheid ook is aangegeven hoe een en ander eruit zou moeten zien (een functioneel ontwerp) en dit is goedgekeurd door de opdrachtgever en begin maart 2011 is men begonnen met de voorbereidingen om half april te beginnen met de bouwperiode. Op vrijdag 26 augustus is de brug weer opengesteld voor het verkeer. Op dat moment kwam men er pas achter dat de brug eigenlijk niet voldeed voor de alle wegggebruikers. Toen was het inmiddels niet meer mogelijk om het probleem op te lossen, zeker niet qua kosten. De brug wordt nu in 2014 opnieuw aangepakt om de problemen op te lossen.

Hoe had testen dit dan kunnen voorkomen?

Testers zijn getrained in het vinden van fouten in ontwerpen en oplossingen. Door de documentatie (in dit geval de vergunning en de plannen) door te spitten op fouten zou dit probleem gevonden zijn. Een (functionele) tester denkt wat de brug functioneel zou moeten kunnen en indentificeert welke voertuigen eroverheen zouden moeten kunnen rijden. Gezien het gaat om een agrarische regio is het aannemelijk dat hier ook tractoren bij zitten, net zoals bussen (er gaat een buslijn over de brug) en personenauto’s. Testers zijn in staat een stapje terug te doen en gebruik te maken van hun ‘boerenverstand’ alvorens daadwerkelijk met tractoren en vrachtauto’s over de gerealiseerde brug te rijden. Op basis van de documentatie was er tijdens de ontwerp of bouwfase dan al aan tractoren gedacht, waar de projectontwikkelaar dit is vergeten.

Inzicht is priceless, voor de rest….

De tester maakt verwachte problemen inzichtelijk en zorgt er dus voor dat de projectleiding een keuze zou hebben gehad. De keuze zou hier zijn geweest dat of de tractoren bewust worden uitgesloten van gebruik van de brug of de 90 centimeter hoge metalen veiligheidsranden worden niet geplaatst, waardoor er geen inspectiepad is. Waarschijnlijk was de keuze dan niet gevallen op de veiligheidsranden, want voordat de randen geplaatst waren was de brug breed genoeg voor alle voertuigen. Het inspectiepad is dan ondergeschikt aan de mogelijkheid er met een tractor overheen te kunnen rijden.

Testen is adviseren!

“Testen is een proces dat inzicht geeft in- en adviseert over de kwaliteit en de daaraan gerelateerde risico’s”

Uiteindelijk is het de keuze van de projectleiding en de opdrachtgever om beslissingen over de oplossing te nemen, echter is het de verantwoordelijkheid van de tester en testmanager om ervoor te zorgen dat deze over de juiste informatie beschikken om een goede, gefundeerde keuze te maken. Dat is hier duidelijk niet gebeurd, bij een gebrek aan een testteam.

Conclusie.

De conclusie is eigenlijk dat testen vaak onterecht wordt onderschat en juist in het beginstadium van projecten van grote waarde kan zijn voor het uiteindelijk slagen van projecten. Juist door in de details te duiken, waar een projectleider geen tijd voor heeft, kan een tester problematiek aan de kaak stellen die anders gemist wordt.

Back to Basics – oplossingsgericht testen

Back to Basics – oplossingsgericht testen

Back to Basics – oplossingsgericht testen

Succesvolle projecten leveren het absolute minimum op van wat de klant verwacht en gevraagd heeft. Logisch? Ik denk van wel. Je merkt in projecten vaak dat er een hoop fout gaat doordat de eigenlijke klantwens niet duidelijk is. Er wordt vaak software ontwikkelt vanuit een onduidelijke probleemstelling. Ondanks het vaak een ‘software oplossing’ wordt genoemd gaan er maar zelden echt probleemstellingen aan vooraf en wordt er veelal iets ontwikkeld ‘omdat het kan’, of ‘omdat iedereen het heeft’. Veel beter zou het zijn om daadwerkelijk een probleem aan de kaak te stellen en om dat probleem projectmatig op te lossen. Vanuit de testoptiek is het project dan ook vaak al meteen een heel stuk ‘testbaarder’. Tevens is de scope dan ook voor iedereen duidelijk en is de kans dat er ‘toeters en bellen’ ontwikkeld worden een stuk kleiner.

Toeters en bellen.

Vaak zijn het juist de toeters en bellen die tijdens de looptijd van het project een molensteen worden om een project succesvol in productie te nemen. Deze ‘features’ dragen uiteindelijk helemaal niet bij aan de oplossing van een probleem en zijn vaak alleen maar ‘sierpaarden’ van het ontwikkelteam. Het aantonen van nieuwe technieken dient in een casus of pilot te gebeuren en niet in een project of software-oplossing.

Mobiele communicatie in de 20e eeuw.

Toen men vorige eeuw bedacht had dat men ook buiten de deur moest kunnen telefoneren, werd er een kleine evolutie in mobiele communicatie gestart. Toen uiteindelijk in Nederland in 1994 het GSM-net werd uitgerold kwamen er toestellen die konden bellen en later ook SMS-en. Door de explosieve groei rondom de eeuwwisseling werd het netwerk uitgebreid om aan de vraag te kunnen doen. Er werden concrete problemen opgelost (mobiel kunnen bellen en gebrek aan capaciteit). De toestellen konden bellen, smsen, hadden een lange batterij-duur en iedereen was tevreden. Mobiele telefonie werd succesvol.

Mobiele communicatie in de 21e eeuw.

Toen het fundament gelegd was in de 20e eeuw, ging men in de 21e eeuw proberen de limieten van de mobiele telefoon proberen op te rekken. Er kwamen meer fabrikanten met kleurenschermen, daarna touchscreens, daarna werden het kleine mobiele computers. Maar werden de telefoons KWALITATIEF ook beter? Ik denk het haast niet, er werd namelijk geen probleem opgelost. Niemand vroeg er daadwerkelijk om, er werd alleen een nieuwe markt gecreeerd. Het resultaat is hier dat de netwerken overbelast werden door de grotere vraag naar data-verbindingen, de kosten voor het gebruik, de productie en onderhoudskosten stijgen en per saldo is de consument (lees klant) duurder uit. Er is alleen een commerciele doelstelling behaald, maar geen probleem opgelost.

Vroeger was alles beter.

Vandaag de dag loopt dus iedereen rond met een touchscreen zakcomputer. Een Android of iPhone toestel. Een abonnement van 2 jaar afgesloten en je hebt zo’n ding in je zak. Maar hoe vaak hoor je niet dat er tegen het einde van de looptijd van het abonnement wordt teruggegrepen naar de oude vertrouwde Nokia? Die doet het namelijk nog steeds. Die toestellen zijn, mijn inziens, dan ook kwalitatief beter, dankzij (!) het feit dat er minder mogelijkheden zijn en het toestel alleen doet wat de klant ervan verwacht (bellen en smsen).

Software ontwikkeling is vooruitgang?

De enige manier waarop een software oplossing voor een vooruitgang is en kwalitatief aan de juiste normen en doelstelling voldoet is wanneer het wordt gebouwd vanuit een concreet (!) probleem. Als dat niet het geval is, blijft het een tijdelijke oplossing en wordt deze op termijn afgeschreven.

Wat betekent dit voor testen?

Het is voor een tester van uitermate groot belang om ervoor te zorgen dat de probleemstelling duidelijk is, zodat het juiste getest wordt (het probleem is opgelost) en alle ‘toeters en bellen’ vroegtijdig buitenspel kunnen worden gezet. Wat er in een requirementsessie niet wordt opgeschreven, wordt ook niet ontworpen en gebouwd en dus blijft de software oplossing puur, de basics.. De enige manier om dit voor elkaar te krijgen is om ervoor te zorgen dat het testen dan ook vroegtijdig wordt aangehaakt bij zowel de business als het ontwikkelteam.

Kijk, dat heet samenwerking!

Het meest eenvoudige is het om als tester de opdrachtgever, de klant, samen met de projectleiding en het ontwikkelteam in 1 ruimte te gaan zitten en heel simpel te vragen wat nu daadwerkelijk het probleem is wat moet worden opgelost (vanuit de business) en op welke manier we dat denken te doen (vanuit het ontwikkelteam). Aan het einde van deze sessie is het de bedoeling dat de verwachtingen van de business reeel zijn, wat bijdraagt aan het acceptatie-proces. Daarnaast weet het ontwikkelteam exact welk probleem er moet worden opgelost. De testers op hun beurt weten wat er getest moet worden en in welke techniek de meeste kwetsbaarheid zit en de ontwerper hoeft alleen nog maar de sessie op papier uit te schrijven. Kijk, dat heet samenwerking!

De eerste (paar) keren zal men nog enigzins gereserveerd reageren, maar op de langere termijn is dit een succesvolle aanpak om een (test-)project op te zetten, zonder een overschot aan documentatie op te hoeven leveren.

De software-revolutie

De software-revolutie

De software-revolutie

In de software wereld is momenteel de software-revolutie genaamd Agile gaande waarbij er minder vanuit documentatie en meer vanuit functionaliteit en de kennis van de mensen gedacht wordt.

De stugge waterval-methodiek maakt langzaam plaats voor het dynamische Agile. Maar wat betekent dit voor de testers en de testmanager? Traditioneel houdt een testmanager en tester zich bezig met zijn eigen testproject: een afgebakende set van verantwoordelijkheden, taken en rapportages over het testen. Waarbij vooraf een grote vraag naar documentatie en informatie is en er vaak achteraf door middel van rapportages kan worden geconstateerd of iets beheerst in productie kan worden genomen. Deze methode is vaak erg star en er wordt nauwelijks gecommuniceerd, anders dan via de opgestelde documentatie en rapportages en bij de geringste wijziging loopt vaak het hele projectproces spaak en dreigt er een gebrek aan controle. Het is steeds belangrijker om snel te kunnen inspringen op wijzigingen en daarom is het ook dat steeds meer bedrijven overstappen op de Agile methode.

Verandering is vooruitgang!

Als testmanager en als tester heeft het geen enkele zin om vast te houden aan het verleden. Vaak wordt verandering als iets negatiefs gezien, maar Agile biedt zeker kansen om het testen interessanter te maken. De hoofdmoot van testen is niet meer heel veel bevindingen vastleggen, maar juist om heel veel bevindingen te voorkomen. Het spreekwoord luidt immers ‘Voorkomen is beter dan genezen’. De tester krijgt hierdoor voor het eerst ‘echte’ invloed op de gekozen oplossing en wordt gedwongen om vooraf mee te denken. De consequentie is dat de testers en de testmanager niet in de oude gewoonten kunnen blijven hangen, maar op zoek moeten naar een nieuwe invulling van de werkzaamheden.

De rol van de testers en de testmanager in een Agile project.

Het belangrijkste wat een tester en een testmanager zich moet afvragen is ‘wat doe ik in een Agile project’? De testmanager komt achter de monitor vandaan en krijgt een adviserende, faciliterende en coachende rol voor het team. Hij creeert de randvoorwaarden waarbinnen de verschillende disciplines optimaal kunnen testen. Nu ook de ontwikkelaars en ontwerpers gaan meetesten, moet dit uiteraard nog wel gestructureerd gebeuren. Het ligt dus binnen de verantwoordelijkheid van de testmanager dat dit ook gebeurd. De testers kunnen hun expertise delen met de de ontwikkelaars en ontwerpers om het gebruik van testontwerptechnieken te standardiseren binnen de Agile projecten. Ook ontwikkelaars en ontwerpers hebben vaak goede ideeen over hoe testen efficienter kan, het is dan ook aan de testers en de testmananager om deze informatie boven water te krijgen en dit in de algehele testprocedure te verwerken.

De buitenwereld.. De gebruikersorganisatie.

Naast dat een testmanager en de testers op het testproces gericht zijn, is een derde belangrijke rol het (nog meer) betrekken van de gebruikersorganisatie. Juist in een dynamisch, op de functionaliteiten gericht ontwikkelproces is het van belang dat de onderdelen het correct belang mee krijgen. Daarnaast wordt er in een Agile project vaak ‘vanuit de gebruiker’ gedacht. Het is dan ook bijna vanzelfsprekend dat de gebruiker bij het gehele testproces kan worden geraadpleegd of de juiste zaken worden gebouwd en getest. Het belangrijkste woord binnen een Agile-traject is dan ook ‘Communicatie’. Binnen het traditionele watervalmodel is het acceptatiemoment helemaal aan het einde van het proces, op het punt waarbij de acceptant eigenlijk alleen nog maar kan accepteren. Door dit moment de verdelen of het gehele Agile-traject, krijgt de acceptant daadwerkelijk invloed op het te accepteren product. Dit heeft als grote voordeel dat juist de uitkomst van het acceptatiemoment geen verrassing meer is, voor zelf de opdrachtgever als het project. De kans dat de gebruiker daadwerkelijk krijgt waar in eerste instantie om werd gevraagd is dan ook vele male groter. De kans op een geslaagd project wordt daarmee dan ook impliciet vergroot.

De omgeving is al aan het veranderen, het is zaak voor het testteam om de boot niet te missen! Als dit slim wordt aangepakt is dit een grote kans om succes te behalen met het testteam en om daadwerkelijk een onderscheidend vermogen binnen het bedrijf te creëren en het testen centraler in de organisatie te plaatsen.

Wat is nu eigenlijk kwaliteit?

Wat is nu eigenlijk kwaliteit?

Wat is nu eigenlijk kwaliteit?

Testers schermen heel de dag door met het begrip kwaliteit. Een applicatie moet van ‘voldoende kwaliteit’ zijn om in productie genomen te worden. Maar wat is kwaliteit nou eigenlijk? Kwaliteit kent vele vormen en gedaantes en dit is dan ook meteen de frustratie van menig tester. Hoe maak je kwaliteit meetbaar?

Telefoons

Om eens een voorbeeld te nemen, in de telefonie industrie heeft iedereen een iPhone. Iedereen die je spreekt is erover tevreden en raadt het toestel zelfs aan, maar is de iPhone dan ook van zulke hoge kwaliteit? Qua gebruiksvriendelijkheid lijkt het alsof de iPhone uitblinkt, maar op het gebied van degelijkheid scoort de iPhone slechter. Qua functionaliteit ligt de bal vaker bij Android en ook de Samsung toestellen met Android lijkt steviger, alhoewel het besturingssysteem hier natuurlijk geen invloed op heeft.

Kwaliteitstelefoon?

Iedereen zegt een kwalitatief goede telefoon te willen, het liefst voor weinig geld. Maar als kwaliteit gemeten wordt in degelijkheid en in het aantal mogelijkheden of eigenschappen, waarom kiest de meerderheid dan voor de iPhone? Het is bekend dat Apple er vanalles aan doet om de gebruiker niet al te veel vrijheden te geven qua applicaties. Daarnaast zijn er ook voldoende verhalen en filmpjes met kapotte iPhones. Is deze vorm van kwaliteit dan eigenlijk wel relevant? Zeker als je een Android toestel met vergelijkbare specificaties voor een fractie van een iPhone kan kopen en ook nog meer mogelijkheden en vrijheden krijgt, is dit een vreemd fenomeen. Is het dan niet zo, dat juist kwaliteit tegenwoordig ondergeschikt is aan ‘gemak’? Het lijkt erop dat gebruiksvriendelijkheid hier de winnende hand heeft ten op zichte van functionaliteit en degelijkheid, gezien het algemene iPhone vs Android sentiment bij de ‘doorsnee’ consument.

Gebruiksvriendelijkheid

Verwarren we hier kwaliteit niet met ‘gebruiksvriendelijkheid’? Het antwoord lijkt steeds vaker ‘Ja’ te zijn.Als we wegstappen uit de telefonie industrie en bijvoorbeeld overstappen in de online wereld, lijkt hier hetzelfde te gelden. Een website gebouwd in kale html is veel degelijker en kan kwalitatief beter zijn dan een hele fancy HTML5.0/CSS3 website, toch is de ervaring van de gebruiker vaak anders. Als je zelf op een website van een bedrijf komt, welke eruit ziet alsof je terugstapt naar half jaren ’90, dan straalt dat rechtstreeks uit op het gevoel dat men heeft over de kwaliteit van het werk dat je levert. Het klinkt wellicht vreemd en gek, maar dat is wel hetgeen wat er gebeurd en waar ik mijzelf ook wel op betrap. Maar hoe meet je objectief gebruiksvriendelijkheid? Hoe meet je uberhaupt gebruiksvriendelijkheid? Betekend dat dan ook dat als je product tegenwoordig gebruiksvriendelijk is en functioneert, dat het dan een kwalitatief goed product is? Als dit waar is, betekent dit dat gebruikers meer invloed op de uiteindelijk kwaliteit hebben dan ze aanvankelijk dachten. En dit betekent dan ook dat niet het projectteam beslist wanneer iets van ‘voldoende kwaliteit’ is, maar dat je dit neerlegt bij de gebruikersgroep of de senior user.

Gebruikers

Het belang van het voeren van gesprekken met de gebruikers en het testen van gebruikers wordt hier eens te meer mee aangetoond. Nu is het echter wel zaak om hiervoor een goed moment te kiezen, zodat de gebruiker meteen vertrouwen krijgt in de software en niet een houtje-touwtje oplossing hoeven te testen, want dan sla je de plank weer volledig mis. Maar anderzins is het te lang wachten met deze test weer funest voor het gebruikersvertrouwen en betekent dit dat een eventuele wijziging een duurdere aangelegenheid is om te realiseren. Het blijft een beetje schipperen met het testmoment, maar het belangrijkste is dat dit structureel op de kaart staat!

Conclusie

Vanuit de gebruikers komen de meeste verbetervoorstellen, dan ben je het eigenlijk ook aan de gebruiker verplicht om te vragen of de gemaakte oplossing hetgeen is dat gebruiker bedoeld. Het is eigenlijk heel simpel, zelf wil je ook graag weten of je op de goede weg bent en aan wie kan je dat beter vragen dan aan degene die het het best weet.

Mooi zoek web-adres in WordPress

Mooi zoek web-adres in WordPress

Ondanks dat WordPress erg goed is in het maken van zoekmachine vriendelijke (SEO) adressen, ook wel URL’s genoemd, is het bij het gebruik van een zoekbox in je template niet een vanzelfsprekendheid. Om toch te zorgen dat je adresbalk gevuld wordt met een mooi zoek web-adres in WordPress, bespreek ik hieronder een mogelijkheid om toch een fatsoenlijke zoekfunctie te gebruiken.

Heb je al een zoekfunctionaliteit in je website zitten? Sla het eerst gedeelte over door meteen door te klikken om door te gaan met het optimaliseren van de zoekresultaten URL.

Eerst moeten we daarvoor een zoek formulier maken. Dat gaat heel makkelijk, door een kladblok te openen en de volgende code er in te plakken:


<form method="get" id="searchform" action="<?php bloginfo("home"); ?>"/>
<div><input type="text" size="18″ value="Uw zoektekst" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Zoek" class="btn" />
</div>
</form>

en het bestand vervolgens op te slaan als ‘searchform.php’ en te uploaden naar je template map op de FTP-server. Waarschijnlijk de map met de naam van je template in de map ‘/httpdocs/wp-content/themes’. De bovenstaande code zorgt voor een invulveld en een knop met de tekst ‘Zoek’. Daarna moeten we de zoebbox gaan toevoegen aan de daadwerkelijke website. Het meest handig is het om dit in het bestand ‘header.php’ te doen. Je doet dit door het volgende stukje code toe te voegen aan het bestand:

<div id="search">
<?php include (TEMPLATEPATH . "/searchform.php"); ?>
</div>

Eventueel kan je een en ander een beetje meer styleren, door middel van wat CSS code:


#search { float: right !important;margin-left: 6px !important;margin-right: 104px;margin-top: -130px;padding: 0 2px !important;padding-bottom: 107px!important; }
#searchsubmit { padding: 5px; }
input[type="text"], textarea { width:100px; }


Nu kunnen we dus zoeken op de website, maar krijgen we een niet zo net adres in de adresbalk te zien. Namelijk iets als “http://www.snapcat.nl/?s=testen”. Om dit op te lossen bestaat er een mooie plugin gemaakt door Mark Jaquith. Deze plugin zorgt er voor dat je een heel mooi, zoekmachine vriendelijk adres krijgt voor je zoekresultaten: “http://www.snapcat.nl/search/testen”. De plugin is te downloaden via de website van Mark Jaquith op txfx.net. Credits voor de plugin zijn uiteraard voor de ontwikkelaar Mark Jaquith.

Mooi zoek web adres in Wordpress

Log daarna in op de WordPress administratie console via /wp-admin/ en ga naar ‘Nieuwe plugin’, kies ‘uploaden’, kies het zip-bestand, klik op ‘Uploaden’ en Activeer de plugin. Klaar!

Impactanalyse software testen

Impactanalyse software testen

Om goed de risico’s te kunnen managen van nieuwe software, is het belangrijk om vooraf te weten welke risico’s er zijn. Dit doe je het beste met een Impactanalyse software testen.

Enerzijds kan je op basis van gegevens een ontwikkelaar bepalen wat de faalkans is, door bijvoorbeeld gegevens als de mate van complexiteit, mate van nieuwbouw, tijdsdruk, etc.
Hoe hoger de waarden, hoe groter de kans dat er iets fout kan gaan.
Anderszijds zijn niet alle functionele eenheden of bugs even belangrijk, of hebben fouten wellicht een kleinere impact op de bedrijfsvoering. Op basis van bijvoorbeeld gebruiksintensiteit, zichtbaarheid en gevolgschade kan er worden bepaald hoe groot de impact is van een fout in een bepaalde wijziging op de bedrijfsvoering.

Kans x impact = risico

Op basis van de uitkomst van bovenstaande formule kunnen functionele eenheden of issues worden bepaald in een van de 4 risicoklassen. Functionele eenheden in risico 1 hebben de grootste kans om fout te gaan, daarnaast hebben ze de grootste impact op de normale gang van zaken. Deze functionele eenheden worden vaak apart of gecontroleerd opgeleverd. Eenheden in risicoklasse 4 hebben weinig impact en zijn ook eenvoudig te realiseren en kunnen vaak in grotere aantallen opgeleverd worden, of gelden als opvulling voor de releases met een aantal hogere risicoklassen.
Te veel eenheden in risicoklasse 1 zorgt voor een te groot risico bij een livegang. Daarnaast hebben de eenheden in klasse 1 behoefte aan meer test inspanning, om voldoende kwaliteit aan te tonen. Het is daarom vaak ook qua capaciteit niet haalbaar te veel hoge risico wijzigingen bij elkaar te stoppen.

Het is zaak om binnen de organisatie hiervoor goede afspraken te maken. Hoeveel klasse 1 issues mogen er bij elkaar, hoeveel klasse 2 issues, etc.
Daarna is het vanuit test oogpunt goed om een bepaalde dekking van de testscripts aan te houden bij de verschillende risicoklassen.

Hierover in een latere blog meer..

Om alvast een begin te maken met het opstellen van risicoklassen heb ik wel alvast een template beschikbaar gesteld om te downloaden:

Impactanalyse software testen

Toon een complete Flickr photoset in je WordPress bericht met de TanTan Flickr plugin

Toon een complete Flickr photoset in je WordPress bericht met de TanTan Flickr plugin

Toon een complete Flickr photoset in je WordPress bericht met de TanTan Flickr plugin. Hoe? Joe Tan heeft een plugin voor WordPress geschreven om je Flickr photoset te tonen. Deze plugin is noodzakelijk voor onderstaande handleiding en kan worden gedownload vanaf zijn website. De credits voor de plugin gaan uiteraard naar Joe Tan.

Toon een complete Flickr photoset in je Wordpress bericht met de TanTan Flickr plugin

Nadat je de plugin geinstalleerd hebt in je WordPress administratie paneel, kunnen we aan de slag. Met deze handleiding maken we het mogelijk om in een blog bericht op WordPress alle foto’s uit een Flickr ‘Photoset’ op te halen en in een blogpost te zetten. Het mag duidelijk zijn dat het handig is om vooraf je website goed te back-uppen.

De Flickr API staat het toe om maximaal 30 foto’s aan te bieden, dit kan echter mettertijd wijzigen. Mocht je maar 30 foto’s in een bericht kunnen plaatsen, dan ligt dat aan de API.

Je kan de gewijzigde bestanden ook downloaden via de onderstaande button, waarna ze kunnen worden geplaatst op de correcte plek. Zie hieronder voor het bestandspad.

Toon een complete Flickr photoset in je Wordpress bericht met de TanTan Flickr plugin

Mocht je zelf al aanpassingen hebben gedaan aan de plugin dan stel ik voor dat je de wijzigingen handmatig uitvoert. Hieronder daarom ook de uitleg. Hier heb je ongeveer 10-20 minuten voor nodig, afhankelijk van je programmeer ervaring.

In totaal moeten we 4 bestanden aanpassen en kunnen we optioneel de CSS nog aanpassen.

httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-resources.php
httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-shortcode.html
httpdocs/wp-content/plugins/tantan-flickr/flickr.php
httpdocs/wp-content/plugins/tantan-flickr/flickr/class-public.php

en optioneel:
httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-styles.css

In het bestand httpdocs/wp-content/plugins/tantan-flickr/flickr/class-public.php doe je het onderstaande aanpassen:

Rond regel 191 vervang je de volgende code:

$key = "flickr-$album-$tag-$num-$size-$video-$photo";

met onderstaande stukje code:

$albumID = $album;
$key = "flickr-$albumID-$tag-$num-$size-$video-$photo";
if ($html = get_post_meta($post->ID, $key, true)) {
return $html;
} else {

Zoek het onderstaande stukje code rond regel 197 tot 203:

}
// grab the flickr photos
$photos = array();

$auth_token = get_option("silas_flickr_token");
$baseurl = get_option("silas_flickr_baseurl");
$baseurl_pre = get_option("silas_flickr_baseurl_pre");
$linkoptions = get_option("silas_flickr_linkoptions");

Direct daarachter plaats je de volgende code:

$album = array();
$photos = array();
if ($auth_token) {
require_once(dirname(__FILE__)."/lib.flickr.php");

Daarna zoek je de onderstaande code rond regel 222 tot 225:

} elseif ($album) {
$albumData = $flickr->getAlbum($album);
$photos = $flickr->getPhotos($album);

en vervangt dit met onderstaande code:

} elseif ($albumID) {
$album = $flickr->getAlbum($albumID);
$photos = $flickr->getPhotos($albumID);
} elseif ($tag) {
$photos = $flickr->getPhotosByTags($tag);
}

Daarna zoek je de volgende code ergens rond regel 241:

foreach (array_slice($photos, 0, $num) as $photo) {
$html .= TanTanFlickrDisplay::photo($photo, array(
"size" => $size,
"album" => $albumData,
"scale" => $scale,
"prefix" => $prefix,
"linkoptions" => $linkoptions
));
}

En vervangt die code met onderstaande code:

if (isset($photos[$album["primary"]])) {
$primary = $photos[$album["primary"]];
} else {
$primary = $flickr->getPhoto($album["primary"]);
$primary["sizes"] = $flickr->getPhotoSizes($album["primary"]);
}

ob_start();
include( $this->getDisplayTemplate("photoalbum-shortcode.html"));
$html = ob_get_contents();
ob_end_clean();
} // if count photos

Zoek rond regel 251 de volgende code:

$html = "<div class="flickr-photos">".($error ? ("<p class="error">".$error."</p>") : "").$html."</div>";

En vervang dat met de onderstaande code:

$html = "<div class="flickr-photos">".($error ? ("<p class="error">".$error."</p>") : "").$html."</div>";
if (!update_post_meta($post->ID, $key, $html)) add_post_meta($post->ID, $key, $html);
return $html;
}

Sla het bestand op en upload het bestand naar de webserver.

In het bestand httpdocs/wp-content/plugins/tantan-flickr/flickr.php hoort het volgende te worden aangepast:

Zoek naar het onderstaande rond regel 90:

// clear flickr cache
add_action("tantan_flickr_clear_cache_event", create_function("", "require_once(dirname(__FILE__)."/flickr/lib.flickr.php");$flickr = new TanTanFlickr();@$flickr->clearCacheStale();"));

En vervang die regel met onderstaand:

add_action("wp_head", create_function("$attribs=false, $content=false", "require_once(dirname(__FILE__)."/flickr/class-public.php";); if (!is_object($GLOBALS[TanTanFlickrPlugin])) $GLOBALS[TanTanFlickrPlugin] => new TanTanFlickrPlugin(); return $GLOBALS[TanTanFlickrPlugin]->header();"), 9990);

Sla het bestand op en upload het bestand naar de webserver.

Maak een nieuw bestand aan genaamd httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-shortcode.html en zet de volgende code hierin:


<?php
/*
Copy this file into your current active theme"s directory to customize this template

This template displays one Flickr photo set
*/
global $TanTanFlickrPlugin;
?>

<div id="highlight">

</div>

<div id="photos" class="photos">
<?php foreach ($photos as $photo)
echo TanTanFlickrDisplay::photo($photo, array("size" => "Square","album" => $album));
?>
</div>

<div class="flickr-meta-links">
<a href="http://www.flickr.com/photos/<?php echo $album["owner"];?>/sets/<?php echo $album["id"];?>/" target="_blank"><?php _e("View this album on Flickr", "tantan-flickr");?></a>
</div>

Sla het bestand op en upload het bestand naar de webserver.

Zo, bijna klaar… In het bestand httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-resources.php doe je de volgende wijziging:

Zoek naar de code rond regel 66:

return $prefix.'photo/'.$photo['id'].'/'.($album ? ($album['pagename2'].'-') : '').$photo['pagename'];

en vervang deze met:

return '../../photo/album/'.$album['id'].'/photo/'.$photo['id'].'/'.($album ? ($album['pagename2'].'-') : '').$photo['pagename'];

Sla het bestand op en upload het bestand naar de webserver.

Optioneel kan je de nieuwe functionaliteit nog stylen met CSS in het bestand In httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-styles.css

Bijvoorbeeld met:

div.flickr-photos h2
{
font-weight:bold;
font-size: 150%;
color: #AD2600;
text-align: left;
}

Als het goed is moet je nu bij het maken van een nieuw bericht ook een complete photoset kunnen toevoegen aan het bericht.

De WordPress TanTan Flickr plugin icm Oypo.nl

De WordPress TanTan Flickr plugin icm Oypo.nl

De WordPress TanTan Flickr plugin icm Oypo.nl zorgt ervoor dat je met je WordPress website je foto’s te verkopen in je eigen design. Het doel van Oypo is om je werk uit handen te nemen bij het verkopen van je fotos. Naar eigen zeggen maakt Oypo het u gemakkelijk. U plaatst de foto’s op internet en Oypo verzorgt op professionele wijze de volledige afhandeling van nabestellingen. Zo houdt u uw handen vrij om te doen waar u goed in bent: fotograferen! Echter is het wel zonde om op teveel plaatsen je foto’s te moeten plaatsen, zowel high als low-resolution. Je upload je foto’s al snel naar Flickr, Oypo, je eigen site, etc. Daarnaast vind ik het belangrijk om klanten een eenduidige look & feel aan te bieden. Vandaar dat het idee is ontstaan om een en andere te vereenvoudigen met een aanpassing van een plugin.

Na een paar uurtjes sleutelen is de volgende handleiding goed bruikbaar om dit ook in je eigen website in te bouwen. Als je de handleiding volgt zou je niet meer dan 30 minuten kwijt moeten zijn om dit te implementeren.

De plugin van Joe Tan is noodzakelijk voor onderstaande handleiding en kan worden gedownload vanaf zijn website. De credits voor de plugin gaan uiteraard naar Joe Tan.

De Wordpress TanTan Flickr plugin icm Oypo.nl

Nadat je de plugin geinstalleerd hebt in je WordPress administratie paneel, kunnen we aan de slag.

In totaal moeten we 1 bestand van de plugin wijzigen, 2 pagina’s en een sidebar aanmaken in WordPress. Verder moeten we een opslag voor de originele foto’s verzorgen. Laten we beginnen met het bestand aanpassen.

Open het bestand /httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-photo.html en pas het onderstaande aan:

zoek het volgende stukje code rondom regel 30:

<p><?php echo apply_filters('the_content', $photo['description']);?></p>

Hierachter plaats je het volgende:

<h2> Foto bestellen</h2><p> Als de knop 'toevoegen' hieronder wordt getoond, dan kunt u op deze website de foto bestellen. Klik op de button om de foto aan uw winkelwagen toe te voegen.</p><script language="JavaScript" src="http://www.oypo.nl/pixxer/api/orderbutton.asp?<span style="white-space: pre;"> </span> foto=<?php echo $photo['title']?>.jpg&<span style="white-space: pre;"> </span> thumb=http://LINK NAAR THUMBS DIR>?php echo $photo['title']?>.jpg& profielid=xxxxxxxxxxxxxxxxxxxxxxxxxx"></script><p>

Als toelichting op het bovenstaande geldt dat de ProfielID te vinden na in te loggen binnen Oypo en te gaan naar ‘Beheer fotoprofielen’ en daarna het fotoprofiel te selecteren en te gaan naar tabblad ‘Extra functies’.
Tevens kan er binnen dit tabblad worden aangegeven waar de originele bestanden voor Oypo.nl beschikbaar zijn, indien er een bestelling wordt geplaatst. Dit kan een eigen webserver zijn thuis. Ikzelf gebruik hiervoor de webserver op mijn NAS (Network Attached Storage). Vanuit Lightroom kan hierop direct exporteren, wat de workflow ten goede komt. Via DDNS (http://www.dyndns.com) kan hiervoor een domeinnaam worden aangemaakt, waarbij het IP adres van de webserver niet persé gelijk hoeft te blijven. Zorg er wel voor dat je een poort in je router open zet.
De link achter thumb= hoort te beginnen met http:// en verwijst naar een map met kleinere afbeeldingen van de foto’s die te koop staan. Het verdient, om performance te behouden, de voorkeur dit gewoon op de webserver te plaatsen waarop ook de website draait. De thumbs dienen minimaal 400px groot te zijn.
Bovenstaande zorgt ervoor dat Oypo.nl kijkt naar de Titel van de foto op Flickr, in plaats van de bestandsnaam. Dit omdat Flickr de bestandsnamen behoorlijk aanpast. Let erop de dat de thumbs en de highres originele dezelfde naam hebben als de titel op Flickr. Flickr haalt deze titel uit de bestandsnaam, dus waarschijnlijk gaat dit vrijwel automatisch.

Met bovenstaande kunnen we nu foto’s in een winkelwagen plaatsen, maar het is minstens net zo belangrijk dat klanten ook kunnen betalen. Hiervoor moeten we in het administratie gedeelte van WordPress een nieuwe pagina aanmaken waarin de winkelwagen kan worden ingeframed binnen de lay-out van de WordPress website.
Dit doe je door een nieuwe pagina te maken, het tabblad HTML te activeren en daarin de volgende code te plaatsen:


<iframe src="http://www.oypo.nl/pixxer/api/winkelwageniframe.asp?&cart=C053744FB4C813FA&css=LINK NAAR EIGEN CSS&wl=xxxx&retourlink=http://LINK NAAR DE TANTAN FLICKR FOTOPAGINA&nonav=0&opties=fotomail," name="pixxerframe" id="pixxerframe" width="900px" height="4000" marginwidth="0" marginheight="0" frameborder="0" scrolling="yes"></iframe>

Om bovenstaand goed te gebruiken is een korte toelichting noodzakelijk:

Binnen LINK NAAR EIGEN CSS kan de CSS van de winkelwagen worden aangepast en geupload worden naar de webserver waarop de WordPress website draait. De link naar dit bestand kan in de link worden toegevoegd. Het originele CSS bestand kan gevonden worden op de volgende locatie ( http://www.oypo.nl/pixxer/api/css/0801.css ), kopieer de inhoud in een nieuw css-bestand en daarna kan de stijl van de winkelwagen naar eigen inzicht worden aangepast, zodat de winkelwagen qua stijl mooi past in het design van WordPress. Zorg ervoor dat je je eigen CSS ‘opdringt’ door !important te gebruiken.
Binnen LINK NAAR DE TANTAN FLICKR FOTOPAGINA wordt de link geplaatst naar de TanTan Flickr plugin, bijvoorbeeld http://www.jouwsite.nl/foto/ . Dit heb je ingesteld in de TanTan Flickr plugin.

Betalen kan uiteraard alleen maar vanuit een winkelwagen, maar dan moeten we de winkelwagen natuurlijk wel aan de klanten kunnen tonen. Dat doen we met onderstaand stukje code. Het handigste werkt dit in de sidebar van je template binnen WordPress. Je kan dit doen door een widget te gebruiken genaamd ‘tekstblok’ en daar onderstaande code in te plaatsen:


<center><h3>De bestellingen worden verzorgd door:</h3><script language="JavaScript" src="http://www.oypo.nl/pixxer/api/pixxerinit.asp?"></script><h3>Aantal foto's in winkelwagen:</h3> <span id="PixxerSelectionCount"></span><div id="PixxerSelection"></div><br clear=all><p id="PixxerBestelknop"><span style="white-space: pre;"> </span> <a href="javascript:document.location='/WORDPRESS PAGINA/?cart='+winkelwagen+'&;retourlink=http://www.jouwsite.nl/foto/'">Bestellen</a><span style="white-space: pre;"> </span></p></center>

Binnen dit stukje code moet de tekst “WORDPRESS PAGINA” vervangen worden met de link naar de pagina die is aangemaakt binnen WordPress met de winkelwagen.

Als je dit op deze manier uitvoert, zal er na een bestelling de betreffende foto van bijvoorbeeld de NAS worden gehaald en zorgt Oypo.nl voor de rest.
Hierdoor hoeven klanten niet jouw website te verlaten om foto’s bij Oypo te bestellen en blijven de klanten gewoon op je website, wat over het algemeen conversieverhogend werkt.

Succes met de uitvoering en bij vragen hoor ik het graag, via de opmerkingen hieronder.

Think different

Think different

“Because the people who are crazy enough to think they can change the world, are the ones who do”

© Apple inc.

Facebook vriendenlijst maken

Facebook vriendenlijst maken

Sinds kort is het mogelijk om op Facebook een vriendenlijst te gebruiken om selectiever updates en berichten te versturen. Dit is denk ik een van de betere updates die Facebook heeft gerealiseerd. Om je een idee te geven hoe je dat doet, zo’n facebook vriendenlijst maken, geef ik hier kort een voorbeeld:

  • Goede vrienden: Dit is de meest beperkte groep met vrienden die ‘alles’ van je mogen weten.
  • Goede kennissen: Dit zijn de mensen die je persoonlijk kent, maar die niet tot de elite van je vriendengroep behoren. Hierin staan ook de mensen in de ‘Goede vrienden’ groep, want zij mogen ‘alles’ van je weten.
  • (On)Bekenden: Mensen waarvan jij graag op de hoogte blijft wat ze doen, maar die op hun beurt niet al jouw ins & outs hoeven te weten. In deze groep zitten uiteraard ook de mensen uit de ‘Goede kennissen’ en de ‘Goede vrienden’ lijsten, want zij mogen uiteraard ook weten wat de (On)bekenden mogen weten.

Als je nu een update op Facebook plaatst die heel persoonlijk is, dan deel je die met je ‘goede vrienden’. Wil je iets aan een groter netwerk laten weten, dan kies je voor de ‘Goede kennissen’ en mag iedereen van je contacten het horen dan stuur je het naar de groep ‘(On)bekenden’.

Simpel en doeltreffende privacy!

Wat is jouw motivatie?

Wat is jouw motivatie?

Wat is jouw motivatie?

Shoot for the moon. Even if you miss, you’ll land among the stars.

© Brian Littrell

TanTan Flickr plugin: Show all images from a Flickr album in a blogpost

TanTan Flickr plugin: Show all images from a Flickr album in a blogpost

The TanTan Flickr plugin made by Joe Tan grabs your Flickr sets into your wordpress website. However it is possible to also show all the images grabbed by the plugin in a single blogpost. This post explains how.

You can grab the plugin at Joe Tans website. http://tantannoodles.com

In order to load all images from a set or album in a blogpost you need to
edit some files of the Tantan Flickr Plugin.

Below is a manual which should guide you through it.

Remarks:

Backup your files prior to editing them. I can’t be held responsible for
crashed websites or otherwise any damage. Backups prevent a lot of trouble.

By default, the Flickr API will only show 30 images at once. If you need more
then 30 images, please try it yourself to see how much images will work.

You need to edit 4 files (1 optional):


httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-resources.php

httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-shortcode.html

httpdocs/wp-content/plugins/tantan-flickr/flickr.php

httpdocs/wp-content/plugins/tantan-flickr/flickr/class-public.php

Optional:

httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-styles.css

———————————————————————-
In httpdocs/wp-content/plugins/tantan-flickr/flickr/class-public.php
———————————————————————-

Find:

$error = "Unknown size: $size.";
$size = 'Square';
}

Replace:

$key = "flickr-$album-$tag-$num-$size-$video-$photo";

With:

$albumID = $album;
$key = "flickr-$albumID-$tag-$num-$size-$video-$photo";
if ($html = get_post_meta($post->ID, $key, true)) {
return $html;
} else {

Find:

}
// grab the flickr photos
$photos = array();

$auth_token = get_option('silas_flickr_token');
$baseurl = get_option('silas_flickr_baseurl');
$baseurl_pre = get_option('silas_flickr_baseurl_pre');
$linkoptions = get_option('silas_flickr_linkoptions');
$albumData = array();

Add after:

$album = array();

Find:

$photoInfo = $flickr->getPhoto($photo);
$photoInfo['sizes'] = $flickr->getPhotoSizes($photo);
$html .= TanTanFlickrDisplay::image($photoInfo, $size);

Replace:

} elseif ($album) {
$albumData = $flickr->getAlbum($album);
$photos = $flickr->getPhotos($album);

With:

} elseif ($albumID) {
$album = $flickr->getAlbum($albumID);
$photos = $flickr->getPhotos($albumID);
} elseif ($tag) {
$photos = $flickr->getPhotosByTags($tag);
}

———————————————————————-

Find:

}
$prefix = get_bloginfo('siteurl').'/'.substr($baseurl, strlen($baseurl_pre));
$linkoptions = get_option('silas_flickr_linkoptions');

Replace:

foreach (array_slice($photos, 0, $num) as $photo) {
$html .= TanTanFlickrDisplay::photo($photo, array(
'size' => $size,
'album' => $albumData,
'scale' => $scale,
'prefix' => $prefix,
'linkoptions' => $linkoptions
));
}

With:

if (isset($photos[$album['primary']])) {
$primary = $photos[$album['primary']];
} else {
$primary = $flickr->getPhoto($album['primary']);
$primary['sizes'] = $flickr->getPhotoSizes($album['primary']);
}

ob_start();
include( $this->getDisplayTemplate('photoalbum-shortcode.html'));
$html = ob_get_contents();
ob_end_clean();
} // if count photos

Find and remove:

$html = '<div class="flickr-photos">'.($error ? ('<p class="error">'.$error.'</p>') : '').$html.'</div>';

Add:

$html = '<div class="flickr-photos">'.($error ? ('<p class="error">'.$error.'</p>') : '').$html.'</div>';
if (!update_post_meta($post->ID, $key, $html)) add_post_meta($post->ID, $key, $html);
return $html;
}

———————————————————————-
In httpdocs/wp-content/plugins/tantan-flickr/flickr.php
———————————————————————-

Find:

// clear flickr cache
add_action('tantan_flickr_clear_cache_event', create_function('', 'require_once(dirname(__FILE__)."/flickr/lib.flickr.php");$flickr = new TanTanFlickr();@$flickr->clearCacheStale();'));

Replace with:

add_action('wp_head', create_function('$attribs=false, $content=false', 'require_once(dirname(__FILE__)."/flickr/class-public.php"); if (!is_object($GLOBALS[TanTanFlickrPlugin])) $GLOBALS[TanTanFlickrPlugin] =& new TanTanFlickrPlugin(); return $GLOBALS[TanTanFlickrPlugin]->header();'), 9990);

———————————————————————-
Create httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-shortcode.html
———————————————————————-

Add:

<?php
/*
Copy this file into your current active theme's directory to customize this template

This template displays one Flickr photo set
*/
global $TanTanFlickrPlugin;
?>

<div id="highlight">

</div>

<div id="photos" class="photos">
<?php foreach ($photos as $photo)
echo TanTanFlickrDisplay::photo($photo, array('size' => 'Square' ,'album' => $album));
?>
</div>

<div class="flickr-meta-links">
<a href="http://www.flickr.com/photos/<?php echo $album['owner' ];?>/sets/<?php echo $album['id' ];?>/" target="_blank"><?php _e('View this album on Flickr' , 'tantan-flickr' );?></a>
</div>

———————————————————————-
In httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-resources.php
———————————————————————-

Find:

// return the link to where the photo should go
function href($photo, $album=null, $prefix='') {

return $prefix.'photo/'.$photo['id'].'/'.($album ? ($album['pagename2'].'-') : '').$photo['pagename'];

Replace:

return $prefix.'photo/'.$photo['id'].'/'.($album ? ($album['pagename2'].'-') : '').$photo['pagename'];

With:

return '../../foto/album/'.$album['id'].'/photo/'.$photo['id'].'/'.($album ? ($album['pagename2'].'-') : '').$photo['pagename'];

———————————————————————-
Optional:
———————————————————————-
In httpdocs/wp-content/plugins/tantan-flickr/templates/photoalbum-styles.css
———————————————————————-

Find:

div.meta img {
margin-right:5px;
}

Add after:

div.flickr-photos h2
{
font-weight:bold;
font-size: 150%;
color: #AD2600;
text-align: left;
}