![]() |
| ||||||||||||||||||||||||
| Websites Eerste website in 1998 gemaakt voor Troll BV. Sindsdien van eenvoudige "wie wat waar" tot "full featured" websites gemaakt. |
www.nieuws.nl![]() |
www.onderdelenzoeker.nl![]() |
www.planettv.nl![]() |
| Desktop software |
Laco Crumbs: beheer proces data![]() |
dr.Oetker: planning onderhoud![]() |
LUBO: bedrijfs automatisering![]() |
| AutoCAD Van AutoCAD ken ik alle in en outs, ik heb er enkele jaren dagelijks mee gewerkt: 2D/3D tekenenen, configureren en programmeren (LISP / VBA / extern: Delphi). automatisering met AutoCAD
|
| Solid Edge automatisering Solid Edge is een 3D CAD pakket, en werkt met modellen en samenstellingen, de 2D tekeningen zijn tekeningen die het model volgen. Voor koppeling van de 2D tekeningen aan 2D tekeningbeheer heb ik de volgende applicatie gemaakt in Delphi. |
Overzicht: 'Assembly Model' met onderliggende 'Parts', hun 'properties' en preview.![]() |
Koppelscherm: 'Part Model' met 'properties' en 'custom-propties'.![]() |
| Visual Basic for Applications |
| VBA in AutoCAD |
![]() |
| ervaring met AutoCAD - tekenroutines in VBA / LISP - uitbreiden met ActiveX Forms - stuklijsten exporteren - parametrisch tekenen - koppelen aan andere software |
| PHP Na enkele webapplicaties in Perl te hebben uitgewerkt ben ik in 2001 'overgestapt' naar PHP. De programmeerstijl is altijd OOP geweest, vanuit Delphi was daar ik daar al mee bekend, wel gaf versie PHP 5 pas alle mogelijkheden hiervoor. De focus bij het programmeren van webapplicaties is altijd geweest: hoe de code overzichtelijk houden? De laatste 2 jaar is de focus vooral komen te liggen op:
Ook diverse 'frameworks' gemaakt en opensource oplossingen gebruikt. Mijn mening is nu dat een 'framework' niet meer dan een snelle start moet zijn en gezien moet worden als deel van de applicatie code. Generieke frameworks kunnen een te omvangrijke dwingende API / configuratie hebben of de code is niet optimaal uit te bouwen. |
| Delphi In 1997 van gestart met Delphi. Indertijd gekozen voor Delphi ipv alternatief MS Visual Basic omdat ik al een aantal jaren ervaring met de taal Pascal had en ook de IDE beter vond. Voor het (snel) maken van robuuste desktop applicaties vind ik Delphi nog steeds de beste keus, het staat ook al jaren in de top meest gebruikte programmeertalen. Een applicatie zal in de meeste gevallen bestaan uit een enkel gecompileerd (*.exe) bestand. Een distributie setup is niet noodzakelijk. De applicatie is gecompileerd dus eventueele versie problemen met een framework (.NET) of engine (JAVA) kunnen niet voorkomen. Met Delphi onder andere:
|
| MySQL MySQL gebruikt in combinatie met PHP en met Delphi, zowel op webserver als geinstalleerd in bedrijfsnetwerken. Ik heb ervaring met grote databases en het optimaliseren van SQL. Enkele opdrachten bestonden grotendeels uit knelpunten zoeken in database gebruik. |
MySQL beheer voor eigen gebruik - applicatie in Delphi - dataverbinding direct of via XML (PHP script op server)![]() |
| LISP Voor het eerst met LISP gepro-grammeerd in 1993 in de editor EMACS, bij stage als FORTRAN programmeur, script gemaakt om de 'include' structuur van FORTRAN applicaties weer te geven. Daarna LISP veel gebruikt in AutoCAD als handige tekentools, zoals bijvoorbeeld een block editor, en om tekeningen te genereren / converteren. Laatste opdracht met LISP was in 2009 en betrof een bulk conversie van duizenden AutoCAD tekeningen. |
| Intranet en extranet app's Een intranet en extranet applicatie's zijn niets meer dan volledig of deels afgeschermde webapplicaties, waarbij 'intranet' doelt op gebruik binnen de organisatie en 'extranet' doelt op afsgeschermde toegang tot de organisatie. Een voorbeeld van een 'intranet' toepassing die ik heb gemaakt voor een bedrijf is een web-archiverings- pakket in PHP dat op netwerk van organisaties wordt geinstalleerd. (draait bij diverse grote gemeentes) Als 'extranet' toepassing heb ik een applicatie gemaakt waar per project gebruikers documenten en informatie konden uitwisselen. Toepassingen waarvan ik vind dat die zich goed lenen voor een intranet applicatie, en die zich ook in een eenvoudige opzet snel terugverdienen.
|
| Webshops Ik heb diverse uiteenlopende webshops gemaakt. |
Onderdelendirect![]() |
Pro Elektro![]() |
Bruil & van de Staaij![]() |
| HTML en CSS Gestart met HTML en CSS in 1998. Naast websites ook gebruikt voor documentatie en helpdocumenten. De werkwijze bij websites is dat de layout aangeleverd in vorm van afbeeldingen, waarna ik dit omzet naar HTML en CSS. De HTML / CSS probeer ik altijd zo eenvoudig mogelijk te houden. Waar een TABLE op zijn plaats is een TABLE gebruiken, ingewik- kelde selectieregels in CSS zoveel mogelijk vermijden. (dat ook strafpunten krijgt in Googles Page Speed). |
eigen test programma voor HTTP GET, POST en TRACE requests![]() |
| XML XML gebruikt voor data uitwisseling tussen:
XML gebruikt als data opslag formaat voor:
XML als RSS / Atom:
|
eigen RSS reader![]() |
| XLST XLST gebruikt voor print documenten bij desktop applicaties. De layout configuratie komt zo buiten het progamma te liggen. Een tijd geexperimenteerd met client-side en server-side XLST. Leek aanvankelijk een oplossing om met logische componenten te werken en vervolgens via de XLST stylesheet de layout te maken. Uiteindelijk nooit voor een website gebruikt, makkelijker was het om een eigen "tag" parser (in PHP) te maken. |
eigen test programma XML / XLS ( gebruik makend van MSXML2 )![]() |
| Javascript Gestart met javascript (in combi- natie met HTML document) in 1998 bij eerste website. In eerste jaren een eigen 'wrapper' class gebruikt: Netscape en MS Explorer hadden een zeer verschillende API. Nu gebruik ik zowel directe W3C DOM API alswel diverse Javascript bibliotheken, waarbij jQuery favoriet is. Ook ruime ervaring met Extjs |
| Berekeningen |
| Ik heb diverse (technische) rekenenprogrammaas gemaakt. enkele voorbeelden: Doorrekenen baan en animatie van een beweging van geselecteerd 'model'. achtervork van motorfiets. ![]() |
Berekening in Javascript![]() |
![]() |
Content Management Systeem Ik heb diverse CMS app's gemaakt. Van vrijwel altijd project specifiek tot een enkele configureerbaar. |
1e CMS (1999) in Delphi![]() |
Beheer Webshop![]() |
Beheer nieuwsbrief![]() |
Beheer bedrijven![]() |
Beheer nieuws berichten![]() |
| Flash Gestart met Flash toen versie 4 uitkwam. Een tijd enthousiast geweest over Flash, geprogram- meerd in actionscript, in websites gebruikt, geexperimenteerd met object params, webshop opzetjes, formulieren en grids, laden data. Maar na enige tijd mee gestopt: echte applicatie interfaces waren niet te maken. [Flex mischien wel?] Maar goed; het is een veelvoor- komend onderdeel van een website, en ik wou hier aangeven dat mijn kennis van Flash gaat verder dan een 'swf-je' in een OBJECT tag plaatsen. |
demo van CMS uit 2002![]() |
Website in Flash![]() |
| Web optimalisatie Bij een webapplicatie is er een scala van bottlenecks en optimalisaties mogelijk: setup webserver, code webapplicatie, database setup en SQL, HTTP headers, gebruik server-side / client-side caching, hardware, intern netwerk, opmaak webdocument enz. Ik heb hier al veel ervaring mee opgedaan, meerdere opdrachten zijn gestart met het oplossen van performance problemen. HTTP Respons De aanpak is om eerst naar de tijden van de applicatie output te kijken. Per onderdeel weergeven hoeveel tijd neemt dit neemt. Database Vaak is het een database probleem; te zware queries, verkeerde indexes en te vaak eenzelfde aanroep. SQL herschrijven, zoeken met EXPLAIN, indexes maken / wijzigen, tabel/veld types controleren. Soms ook snelheidwinst door deel data selectie en filtering naar PHP te verhuizen. Caching Caching toevoegen, dit kan makkelijk toegevoegd worden in bestaande code levert vaak veel snelheid winst op. dit kan op heel veel manieren en niveau's: cache op SQL database, model of view niveau. cachen complete output per url, cronjobs cache laten opbouwen, enz. Embedded content De levering van 'embedded content' zoals afbeeldingen, CSS / JS bestanden nalopen. Ook hier is veel te optimaliseren. (gzip, minify, HTTP headers, browser caching, meerdere domeinen) Webdocument Als alle data snel laad, maar de browser lijkt nog niet snel dan opmaak HTML / CSS nalopen. Benchmark Om te testen wat een webapplicatie aankan kan er een benchmark op worden losgelaten. Hiervoor zijn dure pakketten voorhanden maar zelf gebruik ik AB van apache en een eigen PHP benchmark. ![]() Overig Dan kan het nog zo zijn dat het systeem aan zijn limiet zit. Splitsen applicatie /database en meerdere servers met loadbalacing zijn dan de oplossing. |
| Web Client Een webapplicatie is een applicatie die via het HTTP protocol communiceert met een client applicatie. Er zijn twee client types: een die alleen data nodig heeft (bv. RSS reader) en een die naast data ook de interface moet laden (webbrowser). Het meest gebruikt is natuurlijk de webbrowser, maar hier ontbreken nog vaak de 'usability' mogelijkheden en in te bouwen extra's die een windows applicatie wel heeft. Wat ik dan zelf een interesante mogelijkheid vind is een eigen client te maken. Dat kan zijn een volledige windows GUI of een browser applicatie op basis van een browser COM instantie. Hier getoond browser voor beheerders lokaal nieuws.nl, met extra functionaliteit via javascript window.external aanroep, oa een directory upload ![]() |
| Koppelingen tussen applicaties Vaak is het gewenst om data uit te wisselen tussen bestaande en of nieuwe applicaties (bijv. artikelgegevens uit een boekhoudpakket gebruiken in een webshop). De mogelijkheden worden bepaald door de mogelijkheden van de bestaande applicaties. Dit kan zijn van eenvoudige export mogelijkheden tot volledige toegang via een API. Ik heb diverse 'koppelingen' gemaakt oa.
|
| Service applicaties Service applicaties zijn applicaties die werken in de achtergrond en met een bepaald tijdsinterval een of meer taken uitvoeren. De service kan worden uitgevoerd als 'NT service' of simpelweg als desktop applicatie. Ik heb al diverse service applicaties gemaakt:
FTP-Update ![]() |
| Functionaliteit toevoegen Voor bijna alle toepassingen zijn er kant en klare software pakketten te koop. Alleen is het vaak zo dat er nog wensen bestaan die niet standaard in pakket zitten. Dan kan, afhankelijk van mogelijkheden software pakket, door een van de volgende mogelijkheden functionaliteit worden toegevoegd. COM koppeling Bij een COM koppeling wordt het software pakket de "server" en een te maken applicatie wordt een "client" die verbinding maakt maakt met de server. De gewenste functionaliteit komt in een te maken externe applicatie. ActiveX formulieren ActiveX formulieren worden geintegreerd in de bestaande applicatie en kunnen zo onbeperkte functionaliteit toevoegen. Het ActiveX formulier is een enkel ocx bestand dat geregistreerd moet worden in de windows 'registry'. Na registratie kan het worden toegevoegd in bv. VBA formulieren (of in een HTML document via de object tag). Database toegang Als er geen directe verbinding met het pakket mogelijk is dan kan directe toegang tot de database uitkomst bieden. Vaak is bij grotere financiele pakketten een 'readonly' koppeling via ODBC aanwezig Direct schrijven naar de database, als het al mogelijk is, is niet aan te bevelen omdat de validatie regels van het pakket omzeild worden. |
Opleiding: HTS WTB (1994) Freelance vanaf 2000 |










Deze website, de concurrent van nu.nl, beheer ik vanaf begin 2005; er zijn 3 secties 'nieuws.nl':
Het programmeren aan nieuws.nl heeft mij de kennis en ervaring gebracht met omgaan met grote getallen; van de tienduizenden regels PHP code, de erorme berichten tabellen tot de web- en database-server belastingen. Pieken van meer dan 400.000 pageviews per dag (met daarnaast ook nog RSS/Gadget/Searchbot verkeer) zijn geen uitzondering. Grote getallen die standaard oplossingen buitenspel zetten, bijvoorbeeld zoeken in tabellen naar woorden, hier moest een eigen zoek 'engine' buiten MySQL voor geschreven worden. Grote getallen die alle instellingen relevant maken, bijvoorbeeld een verkeerde HTTP header bij afbeeldingen kan de load van de frontend servers op laten lopen. Grote getallen die maken dat een verkeerd cache formaat het interne netwerk overbelast. Enzovoort... Nieuws.nl is schaalbaar opgedeeld in een cluster frontend servers en meerdere taakspecifieke backend servers. Op de backends draait een taakmanager die verschillende taken start, monitoort, rapporten bijhoudt en eventueele fouten doormaild. Doordat er veel taken draaien die zelf weer veel acties hebben is het hier de kunst geweest om alles overzichtelijk te loggen zodat bij een storing snel info over het probleem kan worden opgehaald. ![]() ![]() |
| LUBO, een bedrijf dat klantspecifieke afvalreiniginginstalaties maakt, waren eind 2004 bezig met een nieuwe 'workflow' qua verkoop, engineering en werkvoorbereiding. Er werd toen gewerkt met een 'bak' CAD tekeningen en diverse 'losse' documenten. De omgeving om AutoCAD heen was een verouderd pakket dat als eerste vervangen moest worden. Mij werd gevraagd dit uit te werken en hier software voor te maken. De uitwerking was een serie applicaties, de eerste - nog basic zijnde - versies moest in januarie 2005 draaien. De omschakeling was een spannend moment, bij eventueele problemen zouden 20 personeelsleden van verkoop, engineering en werkvoorbereiding niet aan het werk kunnen. Hierna is er in 2006 en in mindere mate in 2007 nog intensief geschaafd aan het systeem waarna er af en toe nog incidentele updates volgenden. De belangrijkste applicaties zijn hier opgesomd:
Daarnaast draaiden er diverse service applicaties en word er gebruik gemaakt van een slim caching systeem per PC om netwerkbelasting te voorkomen. Voor alle programmaas is een login nodig, om veelvuldig inloggen te voorkomen worden de programmas van een eigen menu gestart, waarop maar eenmaal ingelogd hoeft te worden. Elke actie in het systeem wordt gelogd, wie maakte een project aan? wie gaf versie B van deze tekening vrij? | ![]() ![]() ![]() |
| de Webshop van Pro Elektro heb ik beheerd van 2000 tot 2007, en kende meerdere versies. Webshop 2000 - 2003 Het boekhoudpakket met de artikel data was Exact voor DOS.De webshop moest op zowel internet als CD komen, de shop moest snel zijn (toen nog geen breedband) , de bestellijst moest onhouden worden, alleen ingelogde klanten konden bestellen. De uitwerking van de webshop was volledig in javascript op de PERL scripts voor inloggen en plaatsen order na. Er kon geselecteerd worden per groep en kon gezocht worden op naam en trefwoord. Een progamma gemaakt in Delphi importeerde de Exact dump, waarna groepen, trefwoorden en afbeeldingen aan artikel werden gekoppeld en klant accounts werden beheerd. Dit programma exporteerde de data als javascript js bestanden, verschaalde de afbeeldingen en zet het met FTP naar website over. Het geheel, 5000 artikelen, was nog geen 150kB en was na download zeer snel want alle data lokaal. |
| Webshop 2004 - 2007 In 2004 werd Exact vervangen door het boekhoudpakket Unit4. De javascript / PERL opzet werd vervangen door een aantal PHP applicaties Waar veel puzzelwerk inzat was het nabouwen van de Unit4 prijsberekening in PHP, er waren diverse kortingen mogelijk voor de combinaties: debiteur - artikel, prijslijst - artikel, debiteur - kortinggroep, prijslijst - kortinggroep, enz. Omdat het relatief 'zware' berekeningen waren voor elke debiteur een eigen artikelprijs cache gemaakt door de update service. Op het netwerk kwamen een aantal, in Delphi gemaakte, services te draaien die enerzijds via de "business-connector" met Unit4 communiceerden en anderzijds, via een webservice, met de webshop. De taken waren: de data van de webshop updaten en orders ophalen en importeren. |
| Onderdelendirect verkoopt auto-onderdelen. Het autotype kan geselecteerd worden via merk-model-type selectie of via kenteken (via webservice RDW). Met de navigatie door de website is steeds rekening gehouden met SEO optimalisatie. De produkten worden afgerekend met iDeal. De online versie De webshop is gebouwd om het produkt assortiment van een enkele groothandel. De produkten worden getoond per autotype. De produktgegevens worden via webservice opgevraagd bij de leverancier en voor bepaalde tijd gecached. De autodata wordt door een andere partij geleverd en wordt door de applicatie periodiek geimporteerd. Nieuwe versie 2010 Deze versie is functioneel werkend opgeleverd maar nog niet online. De nieuwe webshop is helemaal opnieuw opgezet, de belangrijkste eis was nu leverancier onafhankelijk. Daarvoor leverancier-specifieke 'handlers' gemaakt voor import produktgegevens, aanmelden order en annuleren order. Een geplaatste klant-order wordt gesplitst in 1 of meerdere leverancier-orders met eigen status en nummer. Een leverancier kan via een webservice doorgeven wat de status van de order is (en daarmee wijzigd de status klant-order). Overige wetenswaardigheden:
De business logica in een (framework onafhankelijk) "Domain Model" opzet gebouwd met entity / value objecten, repositories, mappers en object database. |
| Bruil & van de Staaij is gespecialiseerd in internationale tijdschrift abonnementen en losse nummers van tijdschriften. De bestellingen komen van over de hele wereld. Deze webshop beheer ik vanaf 2001 en heeft al meerdere versie gekend. De produkten bestaan uit abonnementen, tijdschriften, boeken, dvd's en gadgets. Elk artikel kan in meerdere categorieeen geplaatst worden. Bij een abonnement kunnen eerder verschenen uitgaves worden toegevoegd als los te bestellen tijdschriften. Overige wetenswaardigheden:
wijzigingen 2010:
|
| website Bij onderdelenzoeker kunnen er gratis zoekopdrachten voor gebruikte auto- truck- of motorfiets- geplaatst worden. Een zoekopdracht of aanvraag kan uit een of meerdere onderdelen bestaan voor een enkel voertuig. Een voertuig wordt geselecteerd via een model-type of bij auto via kenkteken. Vervolgens wordt in 3 stappen de aanvraag doorlopen en na plaatsen gaat de aanvraag naar 158 demontagebedrijven. De 'zoeker' heeft na plaatsen van een aanvraag de mogelijkheid in te loggen op de website en al zijn aanvragen te bekijken. Een aanvraag kan door de 'zoeker' geannuleerd worden of na een week opnieuw geplaatst worden. De autodata wordt periodiek door de website opgehaald via een webservice en gecached. De kenteken data wordt ophaald via webservice RDW. Veel puzzelwerk is gaan zitten in het combineren van de data achter deze schermen en mogelijke acties en het, om SEO redenen, rekening houden met de url navigatie structuur. aanvraagbeheer voor bedrijven Onderdelenzoeker bestaat naast de publieke website ook uit een aanvraagbeheer voor de aangesloten bedrijven. Een bedrijf kan op een aanvraag reageren door een offerte te sturen. Omdat er per maand meer dan 20.000 aanvragen geplaatst worden en elke actie als status bewaard wordt is er veel tijd besteed aan het optimaliseren van de gebruikssnelheid van dit aanvraagbeheer. beheer voor admin In dit beheer kan de admin de error en mail logs bekijken, statitiek opvragen, abonnee facturen beheren. |
| CMS uitgevoerd als desktop applicatie met lokale (BDE) database. Dit CMS beheerde een botenverhuur website in 3 talen. De hele website werd door CMS gegenereerd als statische HTML paginaas. De paginaas werden samen met de afbeeldingen via ingebouwde FTP naar de website overgezet. |
| Voor een commercieel pakket voor scholen, waarvan ik een groot deel herschreven had ivm performance problemen, kwam de vraag een benchmark met rapportage in te bouwen. Voor een benchmark-test wordt een module gekozen, worden de module-params ingevoerd met het aantal te simuleren gebruikers en aantal hits per gebruiker, na de run levert dit een grafiek met per gebruiker de start en eindtijd en de "proces-hits". Aanklikken van een "proces-hit" geeft de opgeslagen uitvoer voor dat proces. De PHP benchmark is op basis van curl_multi_exec waarmee aantal paralelle processen wordt gestart. Voor de CPU meting op Linux werd 'ps' commando door PHP aangeroepen. Voor de configuratie draaiend op windows heb ik hier een 'ps' variant in Delphi voor geschreven. |