Wat updates…

Het is alweer tijdje geleden dat ik nog wat plaatste op deze blog (nietwaar John). Wie goed de blog volgde zag dat ik constant de KHL uurrooster applet pagina update. Ik dan ook met trots zeggen dat mijn eerste KDE plasmoid klaar is. Morgen wacht ik op de reactie van me lector, die het naar alle waarschijnlijkheid goed zal vinden. Wat kan ik zeggen over de ontwikkeling van die KDE plasmoid is dat het een hel is voor wie dit nog niet gedaan heeft. Er staat een inleidende tutorial en that’s it! Wie wil weten hoe de configuratie in elkaar zit of hoe je GUI componenten toevoegt aan je plasmoid, moet maar kijken naar de broncode van voorbeelden. Nogal een magere documentatie en bij Qt support kan men je ook niet helpen. Gelukkig vind je hier en daar iets kleins waarmee je weer aan de slag kan en zo blijft je bal aan het rollen. Het is veel proberen en compilen en errors doorgronden (en ja zelfs moet je de rapporten van KDE crashes lezen). Daarom ga ik wat tutorials proberen te plaatsen over KDE plasmoids ontwikkelen (al dan niet in me crappy engels :p).

Daarnaast heb ik ook mijn eerste software opdracht gekregen. Aangezien me broer onderdeel uitmaakt van een groot zwijnenbedrijf, vroegen ze aan hem of ik geen software kon schrijven voor hun organisatie. De details van het programma ken ik zelf nog niet maar het zou gaan om een programma dat de data van zeugen bijhoudt en waarvan een geschiedenis moet ingekeken kunnen worden van een zeug.

En daarnaast is er nog eens vakantie ^^.

KDE applets maken: introductie

Voor het vak Small ICT Projects moesten we een project zoeken die bijdraagt aan de mensheid en het moest opensource zijn en het moest jou iets bijleren. Na lang denken kwam ik uit op een KDE applet maken. Dat zijn van die dingen die je op desktop plaatst zoals een kalender, uurwerk, cpu informatie, … Dus ik maak een applet die de uurroosters weergeeft van de KHL. Nu dit helemaal terzijde want ik ga in deze post uitleggen hoe je begint met het bouwen van zo’n applet. Dit schrijf ik omdat ik zelf  wat gesukkeld heb de laatste twee dagen. Het is gebasseerd op de KDE tutorial. Let’s go!

Eerst en vooral maak een map waarin je je applet bestanden gaat plaatsen. Ik plaats mijn bestanden in ~/projects/tutorial1, waar tutorial1 de naam is van mijn applet.

Nu gaan we 4 bestanden maken. Je vind ze hieronder en als je op de naam klikt, ga je naar de broncode. Stop die gewoon in je project map. Wat de code allemaal betekend ga ik niet uitleggen, ik stel voor dat je de KDE tutorial hiervoor raadpleegt. Ik kan zeggen dat de .desktop file belangrijk is voor de naam en de omschrijving van de applet. Ook de regel “K_EXPORT_PLASMA_APPLET” in het .cpp bestand is belangrijk omdat die een link maakt tussen je code en je .desktop file. De CmakeLists.txt is een bestand dat het commando cmake gebruikt (zie verder).

plasma-applet-tutorial1.desktop
plasma-tutorial1.h
plasma-tutorial1.cpp
CMakeLists.txt

Nu we onze applet geschreven hebben, gaan we hem builden. Builden is twee commando’s werk. We gaan eerst een console openen en we gaan met cd naar onze project map (~/projects/tutorial1). Daarin typen we het volgende commando:

cmake -DCMAKE_INSTALL_PREFIX=`kde4-config –prefix`

Hij gaat nu een heleboel output geven en wat files in je project map plaatsen. Even een rand opmerking over die -DCMAKE_INSTALL_PREFIX. Er wordt een commando uitgevoerd, namelijk kde4-config –prefix. Dit commando zegt waar je kde4 geinstalleerd staat. Kijk eerst eens wat voor output dit commando geeft, is dit iets als /usr dan is dit goed. Geeft hij niets, probeer dan eens met kde-config –prefix. Werkt dit ook niet, ga dan de folders share/kde4/services en  lib/kde4 zoeken.

ls -R / 2> /dev/null | grep “share/kde4/services”
ls -R / 2> /dev/null | grep “lib/kde4”

Je krijgt dan output als /usr/share/kde4/services, de /usr is je prefix voor cmake.

Genoeg over die cmake en zijn prefix, normaal werkt dit zonder problemen. Nu we cmake uitgevoerd hebben, gaan we het commando make uitvoeren.

make

Dit gaat een shared object (.so) versie van onze tutorial1.cpp plaatsen in lib/ (plasma_applet_tutorial1.so). Als je dat hebt, dan mag je het gaan installeren.

Het installeren is makkelijk. Je kopieert die .so naar /usr/lib/kde4 en je kopieert de .desktop naar /usr/share/kde4/services. De /usr is de kde4 prefix, zie hogerop als die niet /usr is.

sudo cp lib/plasma_applet_tutorial1.so /usr/lib/kde4/
sudo cp plasma-applet-tutorial1.desktop /usr/share/kde4/services/

Nu is het geinstalleerd en kunnen we het runnen. Dankzij plasmoidviewer kunnen we hem in preview zien.

plasmoidviewer -c desktop tutorial1

tutorial1 is de naam van je applet. Je applet staat ook in de lijst van applets wanneer je uitlogt en terug inlogt in KDE, of gewoon eens je plasma herstarten.

Vragen, suggesties en opmerkingen mogen altijd geplaatst worden in de reacties.

ps: ik gebruik opensuse 11.3

Axioma van Leenknegt

Enkele jaren terug maakte ik een eindwerk over priemgetallen. Daarin beschreef ik het vermoeden van Goldbach:

Elk even getal groter dan 2 kan geschreven worden als de som van twee priemgetallen (een priemgetal mag hierbij twee keer gebruikt worden).

Dit is een stelling dat op de dag van vandaag nog niet bewezen is. Ik probeerde ook een bewijs te zoeken en met succes. Wat ik heb gevonden is geen bewijs want ik kan het niet aantonen in het oneindige aangezien computers niet zo krachtig zijn. Daarom noem ik het ook de axioma van Leenknegt en het gaat als volgt.

Ik ga ervan uit dat er maar 10 natuurlijke getallen zijn (n = 10). Vervolgens zoek ik alle priemgetallen tussen 1 en n, dit zijn 2,3,5 en 7. Daarna zoek ik het aantal even getallen tussen 1 en n (inbegrepen), dat zijn er 4 (10/2 -1 = 4 even getallen groter dan 2). We weten dat alle priemgetallen oneven zijn met als uitzondering 2. We negeren eventjes 2 als priemgetal en houden 3, 5 en 7 over als priemgetallen tussen 1 en n. We hebben dus nog drie priemgetallen over. We weten dat de som van twee priemgetallen uit die set een even getal vormen. Dus we maken combinaties van die drie priemgetallen:

3+5 = 8

3+7 = 10

5+7 = 12

Nu kunnen we twee even getallen tussen 0 en 10 schrijven als de som van twee priemgetallen. Je zou zeggen dat het hier afgelopen is maar de stelling zegt ook dat je een priemgetal twee keer mag gebruiken. Dus onze combinaties worden uitgebreid.

2+2 = 4

3+3 = 6

5+5 = 10

7+7 = 14

Ik kan nu elk even getal groter dan 2 en kleiner dan n = 10 schrijven als de som van twee priemgetallen. Er moet enkel gelden dat het aantal combinaties van de priemgetallen tussen 0 en n groter is dan het aantal even getallen tussen 0 en n. Hier eventjes een tabel dat dit bewijst tot n = 100 000.

n aantal priemen aantal even
(2 niet meegeteld)
combinaties overschot
10 4 4 7 3
20 8 9 29 20
50 15 24 106 82
100 25 49 301 252
1 000 168 499 14 029 13 530
10 000 1229 4 999 754 607 749 608
100 000 9592 49 999 45 998 437 45 948 438

De combinatie forumule is: COMBIN(#priemen-1;2)+(#priemen) –> dit geeft het aantal combinaties van priemgetallen tussen 0 en n. Het overschot is het verschil met #combinaties – #even –> is dit groter of gelijk aan 0 dan wil dit zeggen dat de stelling van Goldbach juist is.

Waarom ik denk dat dit juist is? Kijk eens bij n = 100 000. Ik kan met de priemgetallen tussen 0 en 100 000 nog 45 948 438 even getallen vinden boven 100 000 en het overschot lijkt enorm te groeien als n groter wordt. Misschien dat die groei afneemt  naarmate n groter en groter wordt omdat hele grote priemgetallen zoeken heel moeilijk is.

Waarom ik dit nu publiceer? Omdat ik mij verveel en ik niet wil dat mijn werk niet verloren geraakt.