Programmeren is een kunst…
By · CommentsEr was eens....
een bank met vele kantoren door het land. De medewerkers in de kantoren klaagden dat de nieuwe computers te traag waren. Dit speelde in de tijd dat electronisch bankieren, pinnen en geldautomaten nog een onbeduidende rol speelden. Klanten gingen naar de bank om geld op te nemen, en door de trage computers ontstonden er lange rijen. Daarom wilde de bank af van het contract met de leverancier.
Maar de leverancier stuurde een performance analyse en tuning expert om de oorzaak van de problemen te onderzoeken. Hij zag al snel dat één specifiek programma vrijwel alle CPU capaciteit opsoupeerde. Met een profiling tool kon hij inzoomen op het programma, en vond hij de uiteindelijke oorzaak. In de source code van het programma stond:
for (i=0; i<strlen(s); ++i) {
if (... s[i] ...) ...
}
Die string s was gemiddeld vele duizenden karakters lang en iedere aanroep van strlen loopt langs alle karakters van de string op zoek naar de afsluitende null-byte. De string veranderde echter nooit in het lusje, dus hoefde de programmeur ook maar één keer de lengte vast te stellen. Daarmee zouden duizenden aanroepen van strlen bespaard kunnen worden, en dus miljoenen karaktervergelijkingen.
De code (door de bank zelf geschreven) werd snel aangepast, en de bankbedienden leefden nog lang en gelukkig:
n=strlen(s);
for (i=0; i<n; ++i) {
if (... s[i] ...) ...
}
Had de programmeur niet beter zijn best moeten doen? Hij had toch moeten weten dat door de code zo op te schrijven als hij gedaan had, de code CPU-tijd nodig heeft die kwadratisch schaalt met de lengte van de string?
Iedere programmeur kent het motto: "first make it work, then make it work fast". Hiermee worden de valkuilen van micro-optimalisatie voorkomen. Maar het bovenstaande voorbeeld zou je bijna doen geloven dat de programmeur een Machiavelliaans motto aanhing "first make it work slowly."
Deze onnadenkendheid komt regelmatig voor. En het is niet alleen maar een kwestie van "je moet niet proberen het wiel opnieuw uit te vinden". Soms tikken onwetende programmeurs zonder na te denken "in het wilde weg" en hebben ze op die manier zomaar bubble sort "uitgevonden". En dan zijn ze er misschien nog trots op ook!
Naast het kiezen van het goede algoritme, moet je ook de goede datastructuur kiezen voor het soort probleem dat je aan het oplossen bent. De keuze voor een datastructuur kan erg veel invloed hebben. Als je bijvoorbeeld een gelinkte lijst gebruikt voor de opslag van miljoenen items waar je ook nog in wilt kunnen zoeken, heb je weer een suboptimale oplossing gevonden. Een gehashte datastructuur of een binaire boom laat je in dit geval de te zoeken data veel sneller vinden.
Programmeurs moeten dus het wiel niet proberen uit te vinden, en zoveel mogelijk gebruik maken van bestaande bibliotheken. Maar om problemen zoals die van de bank hierboven te vermijden, moeten de programmeurs wel wéten wat de eigenschappen van algoritmes en datastructuren zijn. Goed programmeerwerk begint dus bij een goede opleiding. Is het alleen maar de mooie opschmück in moderne tekstverwerkers die er voor zorgt dat ze net zo traag aanvoelen als old-school programma's zoals WordStar die in de jaren 80 van de vorige eeuw op 8-bits processor's draaiden in computers met 64KB geheugen?
Velen zeggen dat hergebruik is waar het om draait. Maar bovenal moeten programmeurs weten wanneer je wat op welke manier moet hergebruiken. Ze moeten dus kennis hebben van het probleemdomein, en van algoritmes en datastructuren.
Een goede programmeur weet ook wanneer een inferieur algoritme toch betere resultaten op zal leveren. Als je bijvoorbeeld zeker weet dat je nooit meer dan vijf items wilt sorteren (denk aan de vijf dobbelstenen in een Yahtzee spel), kun je misschien wel het beste kiezen voor bubble sort, omdat dat bubble sort gegeven de beperkte probleemgrootte het snelst en simpelst is.
Dus: leer van anderen (open source helpt!) en lees goede boeken (die je dan wel ook moet snappen). En mocht je de boekenserie bij uitstek goed lezen (Donald Knuths ``The art of computer programming'') zou je nog mazzel kunnen hebben en je onsterfelijk kunnen maken ook: Don Knuth betaalt een hexadecimale dollar ($2,56) voor iedere fout die je in het boek ontdekt.
Google’s Agenda in je Gnome Clock applet
By · CommentsAls eigenaar en gebruiker van een Android toestel (HTC Magic) gebruik ik ook de agenda van Google. Dat is erg plezierig omdat Google Agenda altijd en overal is gesynchroniseerd. Ik hoef maar een afspraak te maken op b.v. mijn telefoon of die afspraak is ook te zien in Google’s Agenda op het web.
Die agenda is natuurlijk heel makkelijk in te zien vanachter je desktop computer. Dat kan vanuit de browser of vanuit b.v. de Prism versie van Google Calendar.
Er zijn echter nog meer mogelijkheden om de integratie van deze agenda te verbeteren. Elke Gnome desktop is immers standaard voorzien van de Gnome Clock Applet.
Als je op die applet klikt kan je ondermeer gebruik maken van de daarin opgenomen agenda. Helaas werkt die agenda standaard met de agenda functie van Evolution. En als gebruiker van Mozilla’s Thunderbird heb ik ervoor gekozen om die agenda functie niet te gebruiken.
Maar je kan alsnog ervoor zorgen dat e.e.a. op de juiste wijze wordt gecombineerd. Daarvoor moet je gebruik maken van een aparte voorziening uit de stal van Mozilla: Sunbird. En het werkt heel eenvoudig. Als volgt:
Voorbereiden:
In een terminal geef je de volgende twee commando’s:
sudo apt-get install python-evolution
sudo apt-get install sunbird
Vervolgens download je deze addon voor gebruik in Sunbird:
https://addons.mozilla.org/en-US/sunbird/addon/9656
Die addon sla je lokaal op je computer op.
Vervolgens start je Sunbird op. Ga met je muis naar het menu en kies voor Tools en dan voor add-ons. Zorg ervoor dat je in het Extensions tabblad staat en klik links onderaan op “Install” en blader dan naar de zojuist gedownloade en lokaal opgeslagen add-on (evolution_mirror-0.2.1-sb+tb-linux.xpi).
Integreren:
Vervolgens ga je jouw Google’s Agenda integreren in Sunbird. Neem daarvoor de volgende stappen:
- File > New Calendar
- Kies ‘On the Network’ en klik op next.
- Kies voor de CalDAV optie
- Voer de volgende URL (één regel) in the lokatie bar in:
https://www.google.com/calendar/dav/JOUWEMAILADRES@gmail.com/events
- Kies ‘Next’ en geef een willekeurige naam aan deze agenda
- Indien gewenst geef je nog een kleurtje
- Geef vervolgens je Google inlognaam en wachtwoord op
- Sunbird gaat vervolgens die agenda syncroniseren met Sunbird. Dat duurt een tijdje en het lijkt dan ook of Sunbird gaat bevriezen. Geen paniek..gewoon even wachten.
- Als dat allemaal is gedaan kan er een alarmbel rinkelen voor reeds eerder verlopen afspraken. Cancel die alarmering en sluit vervolgens Sunbird af.
- Klik vervolgens op de klok, kies voor een donkere datum en zie je afspraak daar staan.
De gebruikte add-on gebruikt de database van Evolution zodat je niet vanuit je clock applet Sunbird of Google Agenda kan starten. Je kan alleen maar kijken naar de gemaakte afspraken.
Evolution:
Uiteraard kan je ervoor kiezen om wel Evolution als agenda te gebruiken. Je moet dan wel eerst Evolution configureren als mail-client maar geef daarvoor dan b.v. je gmail account op. Zet dan niet Evolution als standaard mail client op (als je ook Thunderbird gebruikt) en start de agenda op vanuit Toepassingen, Kantoor, Evolution e-mail en agenda.
Tot slot
Je kan er ook voor zorgen om de agenda te combineren met Thunderbird. Er is namelijk een add-on beschikbaar die Sunbird laat samenwerken met Thunderbird. Het gaat om de Lightning add-on. Ik heb vooralsnog niet voor die oplossing gekozen omdat straks onder Ubuntu 10.4 de huidige versie van Thunderbird (2.0.0.23) zal worden opgevolgd door versie 3 of hoger. En ik weet nog niet of die combinatie problemen gaat opleveren.
Ubuntu installeren via Wubi
By · CommentsQgis
By · CommentsIedereen die GIS leuk en interessant vindt .. probeer Qgis. Er zijn voor de meeste linux varianten wel packages aanwezig, en voor Windows gebruikers is er op de Qgis site een 'lite' versie (zonder Grass) te downloaden.
Met informatie over Qgis kun je hier vinden.
Kwooty
By · CommentsOnder KDE 3.x was er altijd het programma Klibido, maar deze is nooit naar QT 4 omgezet. Maar gisteren was het dan zover ... was weer even aan het zoeken, en ja ... Kwooty!. Een simpel mooie 'nzb-grabber' met opties voor uitpakken en repareren. Wat wil een mens nog meer ;)
Heb nog geen kant-en-klare package gevonden, maar de source is eenvoudig zelf te compileren. Kwooty kan je hier downloaden. En ... veel download plezier.
Lubuntu alpha 3 screenshot tour
By · CommentsJavascript-widgets schrijven voor KDE Plasma
By · CommentsTot voor kort heb ik Javascript nooit echt serieus genomen. Die perceptie kwam voornamelijk door slechte programmeurs die hun beste beentje voorzetten op websites en allerlei plaatjes over het scherm lieten vliegen. Ook het inline definiëren van functies resulteert al snel in een brei ongestructureerde code. Voor mij leek het gewoon onmogelijk om enigssinds object-geörienteerd te werken met deze taal.
Toch ben ik er sinds een tijd wel wat serieuzer mee bezig en is Javascript niet zo slecht als ik dacht. Er zitten wel een aantal verschrikkingen in deze taal, waaronder de dynamische scoping, waardoor je door wat brandende hoepels moet springen om toch bij de juiste objecten te kunnen (var that = this voor de insiders). Wat ik wel goed vind aan deze taal is het feit dat functies gewoon eerste-klas objecten zijn. En dat het dus wel degelijk mogelijk is om object-geörienteerd programmeren te benaderen.
Fonts in OpenOffice.org
By · CommentsWindows 7 vs Vista vs Ubuntu
By · CommentsEr zijn al heel wat vergelijkingen gemaakt tussen Windows Vista en Ubuntu. Nu weet iedereen dat Vista niet echt een suces is geworden en dat er van Windows 7 veel meer verwacht gaat worden. OP dit moment is het marktaandeel van Windows7 al groter dan dat van Vista en de reacties zijn ook veel beter. Maar wat betekent dit voor de Linux distributie: Ubuntu?
Hier een aantal sites met vergelijkingen tussen de verschillende systemen: Oordeel zelf!!
http://www.tuxradar.com/content/benchmarked-ubuntu-vs-vista-vs-windows-7
Windows 7 vs. Ubuntu 9.10 – Strengths and weaknesses
Have fun!!!
idzme

Hackfests
By · CommentsZou het mogelijk zijn om elk jaar een GNOME usability hackfest te organizeren? De magie die uit die dingen komt is geweldig.
Meer vraag ik niet.


