• Oooooh wijs

    Ik wou dat ik een PS3 had en dat we al een paar maand verder waren, dan zou ik meteen Pixeljunk Shooter kopen:

    Een mengeling van al die zandspelletjes en één van mijn favoriete dingen op Atari ST in den tijd, Oids.

    Geef nu toe:

    Inachtgenomen dat dit 22 jaar geleden was, uiteraard.

  • Del.icio.us op 28 mei 2009

  • Het is zo waar dat het pijnlijk wordt:

    Klanten zijn akelige mensen, soms. Gelukkig de onze niet! De onze niet! Haast ik me te zeggen!

    [via]

  • Trots op mezelf

    Ik ben na mijn uren aan het proberen kijken hoe Gentblogt in Drupal zou kunnen gesmeierd worden.

    Uiteindelijk heb ik ervoor gekozen om auteurs in CCK-velden te steken bij een content type “artikels”, en dat dan via een view te ontsluiten.

    Ik heb alles van Gentblogt geïmporteerd gekregen in Drupal, dat lukte zonder noemenswaardige problemen — er zal wel veel conversiewerk zijn omdat er nu eenmaal in WordPress maar één auteur- en één fotograaf-veld was, maar dat er veel artikels zijn met meer dan één auteur en/of fotograaf.

    Maar bon, par for the course.

    Zo ver was ik gekomen toen ik de auteurs per artikel toonde in mijn, ahem, proof of concept-ding.

    En toen kreeg ik zo’n ongemakkelijk wee gevoel in mijn maag. Er stond bijvoorbeeld

    Auteur: Jan
    Fotograaf: Pieter

    Tot zover geen probleem. Maar er stonden ook dingen als

    Auteur: Jan
    Fotograaf: Myriam
    Fotograaf: Pieter

    Okay, ik kan velden groeperen en multiples collapsen, dan krijg ik dingen als

    Auteur: Jan
    Fotograaf: Myriam Pieter

    Beter, maar toch nog niet naar mijn goesting.

    …en dus, lang verhaal kort, heb ik even bezig gezeten om een minofmeer propere oplossing te programmeren, die de volgende variaties aankan:

    Enkel tekst-auteur of enkel fotograaf:

    Jan
    Jan en Pieter
    Jan, Pieter en Schmurzwinkle
    Jan, Pieter, Schmurzwinkle en Zonkmayer

    Zowel tekst-auteur als fotograaf:

    Murgkopf (tekst) | Parzok (beeld)
    Murgkops en Parzok (tekst) | Argnov (beeld)
    Murgkops, Parzok en Argnov (tekst) | Smunklap (beeld)
    Murgkops, Parzok en Argnov (tekst) | Smunklap en Yrnoald (beeld)
    Murgkops, Parzok en Argnov (tekst) | Smunklap, Yrnoald en Treppengeländer (beeld)
    [etc.]

    Met telkens links naar een profielpagina waar alle artikels van die auteur staan, uiteraard.

    Het klinkt voor de hand liggend, en nu ik weet waar gezocht, is het allemaal ook wel wat voor de hand liggend. Maar zo voor een eerste duik in het Drupal-themen… hoera voor mezelf!

  • ’t Is een raadseltje

    Gegeven: een oude familiefoto, maar niet zeker wie, of wanneer, of waar.

    In CSI zouden ze dat met de computer doen, zo van bliedie-bliedie-bliep Enhance 17,46 to 51,59 bliedie-bliedie-bliep en het is allemaal zonneklaar, maar in ‘t echt is er korrel op foto’s en kan men niet verder inzoomen tot in het oneindige.

    Oude_foto

    Ten eerste: wie? Staat het onomstootbaar vast dat de man links dezelfde is als de twee portretten rechts? Dan is het de grootvader van mijn grootvader, Arthur Vuylsteke. Argumenten vóór: haarlijn, wenkbrauwen, neus, snor en baard zijn praktisch gelijk, gegeven dat er tussen de drie beelden vijftien à twintig jaar zou kunnen liggen. Argument tegen: de oorlel in het linkse beeld is groter dan op schilderij en rechtse foto. Maar dat zou kunnen zijn omdat er een stijve boord tegen drukt, misschien, want de rest van het oor is praktisch gelijk.

    Portret

    Ten tweede: wanneer? Als het Arthur Vuylsteke is, dan is hij geboren in 1858. Hij is gestorven in 1953, dus het kan zijn dat hij er jong uitziet voor zijn leeftijd. Of niet, natuurlijk. En de rechtse foto hierboven is genomen in de jaren 1920–30.

    Er staat een telefoon op de foto, van een model dat vanaf eind negentiende euw gemaakt werd—vergelijk met een Zweedse telefoon uit 1896:

    Oude_telefoon

    ‘t Is dus wellicht ergens in de jaren 1900. Er hangt een electrische lamp aan het plafond:

    Oude_lamp

    …en er zitten stopcontacten in de muur (en een raar soort meter, geen idee waar die voor zou kunnen dienen):

    Oude_stopcontacten

    Er staat geen computer op zijn bureau, dus het is zeker van vóór de tweede wereldoorlog (ahem).

    Zou het in de eerste wereldoorlog kunnen zijn? Zegt het uniform iemand iets? Is die stoel geen bekend model stoel?

    Uniform

    Vervolgens: waar? Een bureau ergens, zoveel is zeker. Koffiekan, één koffietas, en naast de koffietas iets dat ofwel een mes is (of twee), ofwel een nietjesmachine, ofwel iets helemaal anders:

    Koffie

    Op het bureau: schrijfgerief, papier, latten, stempels, en een vreemd instrument (een uurwerk? chronometer?):

    Bureau

    Bovenop een kastje voor dossiers: links iets dat lijkt op landkaarten, een inktdroogmaakding en een bakje met papieren (boekjes? paspoorten?) erin:

    Bovenop

    Aan de muur hangt een reliefkaart, maar de foto is te klein en de korrel te grof om te zien van waar de kaart zou kunnen zijn. Iemand een idee?

    Kaart

    …of is dat een dwaalspoor, en is het misschien een vakantieherinnering of zo?

    Arthur Vuylsteke werkte tussen 1901 en 1925 als boekhouder in de gevangenis in Gent: zijn er daar van die vensters ergens? In de Nieuwe Wandeling vóór ze afbrandde? Of was het toen nog een andere gevangenis? Leopoldskazerne? Of zo?

    Vensters

    Hulp!

  • Politiek

    Ha! De mannen van de reclameregie en bbdo hebben een ding gemaakt met politiek en flash en vanalles.

    Wijs.

  • Del.icio.us op 27 mei 2009

  • Luid spreken

    Er is iemand beneden in de keuken, die aan het uitleggen is aan Sandra hoe ze een Tupperware-avond moet aanpakken.

    Ik moei mij daar niet mee, dat zijn mijn zaken niet.

    Maar waar ik wél de griebels van krijg, is dat dat mens zó luid spreekt dat zeker twee verdiepingen hogen en ongetwijfeld een huis verder ook nog te horen is.

    Ik weet dat ik vaak te stil en compleet onverstaanbaar spreek, maar ik heb een hekel aan mensen die voortdurend met schellende en luide stem spreken. Hekel.

    Hoe is dat mogelijk, in ‘s hemelsnaam? WIJ STAAN NIET AAN DE ANDERE KANT VAN DE STRAAT HE MADAM!

    Een conversationele toon, dat is een conversationele toon. In een situatie dat er minder dan pakweg vijf man aan het spreken zijn in een kamer waar verder geen lawaai is, dan ROEPT MEN NIET VERDJU!

    (Hetzelfde geldt a fortiori trouwens voor mensen die aan de telefoon spreken alsof ze moeten roepen tot in Canada.)

  • Del.icio.us op 26 mei 2009

    • Epic Games, founded by Tim Sweeney in 1991, has a much bigger gaming footprint than most people realize. When I hear "Epic," I think back to a time in the early 1990s when I was deeply involved in my local computer bulletin board system (BBS) scene. BBSes were early dial-up online services that provided message boards, primitive online games, and numerous free files to download.

  • Ha!

    kat

  • Jam ftw

    Leve Jam.

    Mr Lizard, ha!

  • Het is nog altijd allemaal academisch, maar ik vind dat ik dringend wat meer Drupal moet leren (zoals ik om de zes maand zeg, ik weet het).

    Zegt Jensen in een reactie alhier:

    Je kan altijd meerdere auteurs aan 1 content type linken met de user_reference module die standaard bij CCK zit.

    Hm. Dat is ook een mogelijkheid, natuurlijk. CCK laat me toe om een onbeperkt aantal auteurs toe te voegen, en heeft propere autocomplete.

    Dan moet ik wel 844 auteurs aanmaken bij het overzetten (geen probleem, vermoed ik), maar moeten er bij het schrijven van artikels ook users aangemaakt worden — geen idee hoe gemakkelijk dat is.

    Ik kijk dat tweede eerst na, want daar staat of valt het mee.

    *
    *   *

    Eerst een “auteur”-veld toevoegen aan mijn “artikel”-content type: label is “Auteur”, field_name is “field_author” (vraag mij niet waarom ik dat in het Engels zet, maar zo is het nu eenmaal), type of data is “User reference” en form element is “Autocomplete text field”. Save.

    Ik krijg een tweede scherm, waar ik settings voor het auteur-veld moet kiezen: autocomplete matching is “contains”, ik voeg een reverse link naar de referenciërende node toe op het user record (geen idee wat dat doet, met wat geluk een automatische lijst van artikels geschreven), een korte help tekst, en dan zit ik aan mijn eerste dilemma.

    Moet het veld required zijn of niet? Met andere woorden: zorg ik ervoor dat de user die een artikel in Drupal ingeeft meteen ook de “primaire” auteur is (met het “risico” dat het een fotograaf kan zijn bijvoorbeeld en dat er dan moet gefiedeld worden), of verplicht ik iedereen om expliciet een auteur te kiezen?

    Ik denk dat ik voor dat laatste ga.

    …oh, hang on: ik bedenk net iets. Als ik het veld niet verplicht maak, dan kan ik voorzien dat bijvoorbeeld actua, die op Gentblogt een soort press review vaak zonder eigen tekst is, géén auteur heeft.

    …of nee, dan kan ik voorzien dat een actua-bericht als “auteur” de naam van de bron heeft. Yep: dan is “De Gentenaar” en “De Standaard” een auteur als een andere. Ha! Goed plan. Het veld blijft dus verplicht.

    Default value zet ik op “Redactie”, en number of values “unlimited”. User roles en user status that can be referenced? Aargh, nu heb ik alleen “authenticated user”. Wat doe ik daarmee? Een nieuwe user class aanmaken dan maar?

    Eerst eens kijken hoe gemakkelijk users toe te voegen zijn.

    Ik ga eerst een user role “redactie” toevoegen: dat worden mensen die artikels kunnen schrijven (en beelden uploaden, en dergelijke) en die in dit model dus ook nieuwe users moeten kunnen aanmaken.

    Administer › User management › Roles › Add role, tot zover tot zo gemakkelijk. Edit permissions: redactieleden mogen alles doen op alle nodes, en alles doen in de user module. Eens zien wat dat geeft.

    Hm. Als ik inlog met een gebruiker die enkel “redactie” is, dan heb ik default blijkbaar enkel My account, Create content en Log out als menu-opties, en geen “add user” of zo. Eens kijken hoe het daarmee zit. Er is ook een menu_per_role module, maar zou dat geen overkill zijn? Ik kan natuurlijk altijd manueel naar /drupal/admin/user gaan… euh, nee. Tiens. Ik heb geen toegang tot die pagina, zelfs al dacht ik dat ik er mij toegang toe gegeven had.

    Ah, disregard previous: ik was uit het oog verloren dat ik “access administration pages” moet aanzetten voor de redactie-rol. Ahem.

    …en dat ziet er eigenlijk allemaal uitstekend uit: artikels kunnen meer dan één auteur hebben (die gemakkelijk aan te maken is door redactieleden), en per auteur heb ik dan meteen een profielpagina en een lijst van hun artikels. Uitstekende tip, heel erg bedankt.

    (Jammer dat Profiles en User settings blijven staan in het menu en op de User Management-pagina. Ik zou dat graag nog weg krijgen, eigenlijk.)

    *
    *   *

    Dan dus nu kijken hoe ik de bestaande WordPress-auteurs (die in een custom field zitten) eerst in Drupal kan krijgen als min of meer dummy users, en dan hoe ik ze in een CCK-veld kan krijgen dat gekoppeld is aan het juiste artikel. Oh, en hoe ik de auteurs zoals ze er nu in zitten kan migreren naar “CCK-auteurs”.

    …en ‘t is allemaal gemakkelijker dan ik dacht: “bestaande WordPress-auteurs in Drupal krijgen”, dat is niet meer nodig. Ze zitten er namelijk al in na de import. Hoezee!

    En ze koppelen, dat is gewoon een zaak van in content_field_author de juiste uid van de auteur te steken. Ha! Ha!

  • Ver van huis

    Het regent dat het kraakt, het bliksemt en het onweert.

    Gezellig, vind ik.

    En dan moet ik plots denken aan Zelie, die op zeeklas zit. In een vreemd bed aan het slapen, niet dat het de eerste keer is natuurlijk, ze gaat al jaren op kampen en zo, maar toch: alleen in een vreemd bed met storm op zee.

    Brrr.

  • WP > Drupal

     

    Hrm. Ik ben wat aan het prutselen om te kijken hoe WordPress naar Drupal om te zetten. Zuiver theoretisch voor het moment, om te kijken of Gentblogt in Drupal zou te wurmen zijn.

    Er is een zeer goeie WordPress-import-module voor Drupal, zeer toepasselijk WordPress Import genoemd: die importeert artikels, commentaren, auteurs, en zorgt ervoor dat alle oude permallinks blijven kloppen door URL aliases aan te maken.

    Maar: custom fields worden niet overgenomen. En op Gentblogt steken we auteurs die geen redactie zijn, en fotografen, en nog wat andere dingen, in custom fields.

    Eens kijken of het manueel kan.

    Een lijstje van alle auteurs uit WordPress halen, is simpel:

    select post_id, meta_value from wp_postmeta where meta_key='auteur' order by meta_value

    Ik krijg 844 verschillende auteurs, gekoppeld aan 2367 artikels, maar bij de import naar Drupal is de WordPress-post_id helaas wel verloren gegaan. Helemaal vanzelfsprekend te koppelen zijn die dingen niet, maar de permalink zit er wél in, dankzij die importmodule. En het geluk wil dat die permalink redelijk simpel in mekaar zit: /jaar/maand/dag/post-slug.

    Dus hoppa, één minuskuul stapje meer:

    select concat(date_format(post_date,'/%Y/%m/%d/'), post_name) permalink, meta_value auteur from wp_postmeta, wp_posts where wp_posts.id=post_id and meta_key='auteur' order by post_date

    En dat geeft propertjes, voor de laatste tien dagen bijvoorbeeld:

    /2009/05/16/een-beetje-natjes Karine De Smet
    /2009/05/17/team-william-the-team-work Bert Moerman
    /2009/05/18/multatuliteater-brengt-schitterende-pterodactylus Suzanne Vanderveken
    /2009/05/19/reflectie-3 Erwin Lemmens
    /2009/05/20/poort Marc Careel
    /2009/05/21/amai Monique Callens
    /2009/05/22/open-en-dicht Jan Van Brakel
    /2009/05/23/hollandse-ouwe Jan Vens
    /2009/05/24/25643 Ignace Van der Kelen
    /2009/05/25/woerdwolken Erwin Lemmens
    /2009/05/25/eentje-mee-hiel-veel-toepee Els Heyde
    /2009/05/26/coupure Ignace Van der Kelen

    Mha. WordPress-kant min of meer in orde, dus.

    Nu aan de andere kant kijken wat en hoe. Ik zou kunnen auteurs in een CCK-veld steken, maar zou ik dat wel doen? Er kunnen meer auteurs per artikel zijn, en auteurs kunnen terugkomen. Ik denk dat ik ze in een taxonomie steek.

    Eens kijken hoe dat databasegewijs in mekaar zit. Een “auteurs”-taxonomie bijgemaakt, en blijkbaar komt die terecht in een vocabulary-tabel, met per taxonomie-term een record in een term_data-tabel (taxonomy ID, term name), een bijkomend record in een term_hierarchy-tabel (term ID, parent ID — hier allemaal met parent=0, gemakkelijk).

    Terms worden aan nodes gekoppeld in (surprise!) de term_node-tabel. Daar zit telkens een nid, vid en tid in: raar!

    Want blijkt dat tid wel degelijk de term ID is, maar dat die nid (node ID) eigenlijk helemaal afhankelijk is van vid (revision ID, primary key van node_revisions), en dus dat die term_node niet 2NF is, ha.

    …euh, maar bon. We kunnen dus de auteur koppelen aan een node. Ervan uitgaand dat het om een maagdelijk lege Drupal zal gaan, zal nid en vid altijd hetzelfde zijn net na die import, dat maakt het gemakkelijker.

    En nu nog van een permalink naar een node geraken. De permalinks in Drupal zitten in de URL aliases, en URL aliases zitten in de (verrassing!) url_alias-tabel: de “WordPress-permalink” staat doodsimpelgaweg in url_alias.dst, en de Drupal-node ID staat als “node/####” in url_alias.src.

    Bingo! Ik heb alles dat ik nodig heb!

    *
    *   *

    Actieplan, bijzonder low tech want het gaat maar één keer gebeuren en ik heb geen zin om ook maar een letter te programmeren:

    1. Export van WordPress naar XML.
    2. Import in verse Drupal met WordPress Import.
    3. Lijst van auteurs uit WordPress halen: select distinct meta_value from wp_postmeta where meta_key='auteur' order by meta_value;
    4. Auteurs in Drupal in term_data steken: insert into term_data (vid, name) values (1,[auteur]); [auteur-vocabulary is 1 namelijk]
    5. Lijstje A: Drupal-auteurs met hun tid krijgen: select tid, name from term_data where vid=1;
    6. Lijstje B: Drupal-permalinks met node ID: select replace(src,'node/','') nid, dst permalink from url_alias where dst like '200%'; [alleen artikel-permalinks beginnen met 2004, 2005, etc.]
    7. Lijstje C: WordPress-permalinks met auteurs: select concat(date_format(post_date,'/%Y/%m/%d/'), post_name) permalink, meta_value auteur from wp_postmeta, wp_posts where wp_posts.id=post_id and meta_key='auteur' order by post_date;
    8. Lijstje B en lijstje C naast elkaar plakken, elke instantie van auteur in lijstje C vervangen door de overeenkomstige tid uit lijstje A. Misschien doe ik dat in Excel, misschien in MySQL, ik weet het nog niet. In ieder geval heb ik op het einde een lijstje D, met een nid (node ID in Drupal) en een tid (“auteur ID”, ttz. term ID voor die auteur in Drupal).
    9. Link tussen post en auteur leggen: insert into term_node (nid, vid, tid) values ([nid],[nid],[tid]);

    Hey presto! Sounds like a plan!

    En, euh, dat was dus stukken eenvoudiger dan dat ik dacht dat het zou zijn.

    *
    *   *

    Nog te bekijken:

    • threaded comments
    • paginatemplates en content types, met onder meer foto van de dag, kalender, nieuws, uwged8

  • Del.icio.us op 25 mei 2009

    • Teller is one of the greatest magicians living in the world today. Teller is a guy who is constantly thinking, constantly reevaluating what he is doing. He keeps working on his material with really no care as to how long it takes. It might take a month or it might a year or it might be 10 years before it goes on.
    • Alexei Sayle began as a ground-breaking stand-up comedian in a tight suit and brought his act to rich fruition in a unique television series with his name in the title. Meanwhile he had also established himself as an actor in the movies and laid the foundations for his later career as one of our most adventurous writers. His particular gift in all fields is to bring his radical background into the foreground. Here he talks about growing up as a Marxist in modern Britain, about honesty in comedy, and about squaring his rebel status with the glow of celebrity. An enemy of the old order but no friend of New Labour, he draws a resonant connection between the Millennium Dome and the interior of Tony Blair’s brain.
    • Using two or more monitors can bring a number of significant advantages to designers.

      In this article we’ll present some basic pros and cons of using multiple monitors, general instructions for setting them up, as well as a showcase of workstations that feature multiple monitors.

      (tags: work)
    • Leutig.
    • Most of the jobs I get are basically very unwholesome people. There's always something wrong with the guy, and sometimes something deeply wrong. I'm tired of that. I tell my agent I want a Fred MacMurray part. I want a part where I have a wife and kids and a dog and a house, and my kids say to me, "What do you think I should do, Dad?" and I say, "Be careful."
      (tags: films)
    • At the end of the 19th century, many towns and cities were lit up by powerful electrical lamps placed on towers up to 300 feet (90 metres) high.